亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? f32x_bulktransferfunctions.cpp

?? 一個(gè)非常全面usb例子
?? CPP
字號(hào):

#include "stdafx.h" 
#include "F32x_BulkFileTransferFunctions.h"

//------------------------------------------------------------------------
// F32x_GetNumDevices()
//
// Determine number of Silabs devices connected to the system from the
// registry.
//------------------------------------------------------------------------
F32x_STATUS 
F32x_GetNumDevices(LPDWORD lpdwNumDevices)
{
	F32x_STATUS	status = F32x_DEVICE_NOT_FOUND;

	// Validate parameter
	if (!ValidParam(lpdwNumDevices))
	{
		return F32x_INVALID_PARAMETER;
	}

	// Must set the GUID for functions that access the registry.
	sgCUsbIF.SetGUID(GUID_INTERFACE_SILABS_BULK);
	*lpdwNumDevices = sgCUsbIF.GetNumDevices();

	if (*lpdwNumDevices > 0)
	{
		status = F32x_SUCCESS;
	}

	return status;
}


//------------------------------------------------------------------------
// F32x_GetProductString()
//
// Find the product string of a device by index in the registry.
//------------------------------------------------------------------------
F32x_STATUS 
F32x_GetProductString(DWORD dwDeviceNum, LPVOID lpvDeviceString, DWORD dwFlags)
{
	F32x_STATUS			status	= F32x_DEVICE_NOT_FOUND;
	CDeviceListEntry	dev;

	// Validate parameter
	if (!ValidParam(lpvDeviceString))
	{
		return F32x_INVALID_PARAMETER;
	}

	// Must set the GUID for functions that access the registry.
	sgCUsbIF.SetGUID(GUID_INTERFACE_SILABS_BULK);
	sgCUsbIF.GetDeviceStrings(dwDeviceNum, dev);

	switch (dwFlags)
	{
		case F32x_RETURN_SERIAL_NUMBER:
				if (dev.m_serialnumber.length() > 0)
				{
					strcpy((char*)lpvDeviceString, dev.m_serialnumber.c_str());
					status = F32x_SUCCESS;
				}
				break;
		case F32x_RETURN_DESCRIPTION:
				if (dev.m_friendlyname.length() > 0)
				{
					strcpy((char*)lpvDeviceString, dev.m_friendlyname.c_str());
					status = F32x_SUCCESS;
				}
				break;
		default:
				break;
    }

	return status;
}


//------------------------------------------------------------------------
// F32x_Open()
//
// Open a file handle to access a Silabs device by index number.  The open
// routine determines the device's full name and uses it to open the handle.
//------------------------------------------------------------------------
F32x_STATUS 
F32x_Open(DWORD dwDevice, HANDLE* cyHandle)
{
	F32x_STATUS	status = F32x_DEVICE_NOT_FOUND;

	// Validate parameter
	if (!ValidParam(cyHandle))
	{
		return F32x_INVALID_PARAMETER;
	}

	// Must set the GUID for functions that access the registry.
	sgCUsbIF.SetGUID(GUID_INTERFACE_SILABS_BULK);

	if (cyHandle)
	{
		*cyHandle = sgCUsbIF.Open(dwDevice);

		if (*cyHandle != INVALID_HANDLE_VALUE)
		{
			status = F32x_SUCCESS;
		}
	}
	else
	{
		status = F32x_INVALID_HANDLE;
	}

	return status;
}


//------------------------------------------------------------------------
// F32x_Close()
//
// Close file handle used to access a Silabs device.
//------------------------------------------------------------------------
F32x_STATUS
F32x_Close(HANDLE cyHandle)
{
	F32x_STATUS	status = F32x_INVALID_HANDLE;

	if ((cyHandle != NULL) && (cyHandle != INVALID_HANDLE_VALUE))
	{
		::CloseHandle(cyHandle);
		status = F32x_SUCCESS;
	}

	return status;
}


//------------------------------------------------------------------------
// F32x_Read()
//
// Read data from USB device.
// If read timeout value has been set, check RX queue until F32x_RX_COMPLETE
// flag bit is set.  If timeout the occurs before F32x_RX_COMPLETE, return
// error.  If no timeout has been set attempt read immediately. 
//------------------------------------------------------------------------
F32x_STATUS
F32x_Read(HANDLE cyHandle, LPVOID lpBuffer, DWORD dwBytesToRead, LPDWORD lpdwBytesReturned)
{
	F32x_STATUS	status = F32x_INVALID_HANDLE;

	// Validate parameters
	if (!ValidParam(lpBuffer, lpdwBytesReturned))
	{
		return F32x_INVALID_PARAMETER;
	}

	// Check for a valid Handle value
	if (cyHandle != INVALID_HANDLE_VALUE)
	{
		// Check that the read length is within range
		if ((dwBytesToRead > 0) && (dwBytesToRead <= F32x_MAX_READ_SIZE))
		{
			//DWORD	dwNumBytesInQueue	= 0;
			//DWORD	dwQueueStatus		= F32x_RX_NO_OVERRUN;

			// Init. for no timeout case.
			/*status = F32x_SUCCESS;

			// If timeout set, wait n milliseconds for RX queue to fill.
			// If it does not fill before the timeout, return failure.
			if (sgdwReadTimeout > 0)
			{
				DWORD	dwStart	= GetTickCount();
				DWORD	dwEnd	= GetTickCount();

				status = F32x_CheckRXQueue(cyHandle, &dwNumBytesInQueue, &dwQueueStatus);

				while(((dwEnd - dwStart) < sgdwReadTimeout) && (!(dwQueueStatus & F32x_RX_READY)) && (status == F32x_SUCCESS))
				{
					status = F32x_CheckRXQueue(cyHandle, &dwNumBytesInQueue, &dwQueueStatus);
					dwEnd = GetTickCount();
				}

				if ((status == F32x_SUCCESS) && (!(dwQueueStatus & F32x_RX_READY)))
				{
					status = F32x_RX_QUEUE_NOT_READY;
				}
			}*/

			if (status == F32x_SUCCESS)
			{
				// Read transfer packet
				if(!ReadFile(cyHandle, lpBuffer, dwBytesToRead, lpdwBytesReturned, NULL))
				{	// Device IO failed.
					status = F32x_READ_ERROR;
				}
			}
		}
		else
			status = F32x_INVALID_REQUEST_LENGTH;
	}

	return status;
}


//------------------------------------------------------------------------
// F32x_Write()
//
// Write data to USB device.
// If write timeout value has been set, continue write attempts until
// successful or timeout occurs.
//------------------------------------------------------------------------
F32x_STATUS
F32x_Write(HANDLE cyHandle, LPVOID lpBuffer, DWORD dwBytesToWrite, LPDWORD lpdwBytesWritten)
{
	F32x_STATUS	status = F32x_INVALID_HANDLE;

	// Validate parameters
	if (!ValidParam(lpBuffer, lpdwBytesWritten))
	{
		return F32x_INVALID_PARAMETER;
	}

	if (cyHandle != INVALID_HANDLE_VALUE)
	{
		if ((dwBytesToWrite > 0) && (dwBytesToWrite <= F32x_MAX_WRITE_SIZE))
		{
			if (!WriteFile(cyHandle, lpBuffer, dwBytesToWrite, lpdwBytesWritten, NULL))
			{
				status = F32x_WRITE_ERROR;

				if (sgdwWriteTimeout > 0)
				{
					DWORD	dwStart	= GetTickCount();
					DWORD	dwEnd	= GetTickCount();

					// Keep trying to write until success or timeout
					while((dwEnd - dwStart) < sgdwWriteTimeout && status != F32x_SUCCESS)
					{
						if (WriteFile(cyHandle, lpBuffer, dwBytesToWrite, lpdwBytesWritten, NULL))
						{
							status = F32x_SUCCESS;	// Write succeeded after > 1 attempts.
						}

						dwEnd = GetTickCount();
					}
				}
			}
			else
				status = F32x_SUCCESS;				// Write succeeded on first attempt.
		}
		else
			status = F32x_INVALID_REQUEST_LENGTH;
	}

	return status;
}

//------------------------------------------------------------------------
// ValidParam(LPDWORD)
//
// Checks validity of an LPDWORD pointer value.
//------------------------------------------------------------------------
static BOOL ValidParam(LPDWORD lpdwPointer)
{
	DWORD temp = 0;

	try 
	{
		temp = *lpdwPointer;
	}
	catch(...)
	{
		return FALSE;
	}
	return TRUE;
}


//------------------------------------------------------------------------
// ValidParam(LPVOID)
//
// Checks validity of an LPVOID pointer value.
//------------------------------------------------------------------------
static BOOL ValidParam(LPVOID lpVoidPointer)
{
	BYTE temp = 0;

	try 
	{
		temp = *((BYTE*)lpVoidPointer);
	}
	catch(...)
	{
		return FALSE;
	}
	return TRUE;
}


//------------------------------------------------------------------------
// ValidParam(HANDLE*)
//
// Checks validity of an HANDLE* pointer value.
//------------------------------------------------------------------------
static BOOL ValidParam(HANDLE* lpHandle)
{
	HANDLE temp = 0;

	try 
	{
		temp = *lpHandle;
	}
	catch(...)
	{
		return FALSE;
	}
	return TRUE;
}


//------------------------------------------------------------------------
// ValidParam(LPVOID, LPDWORD)
//
// Checks validity of LPVOID, LPDWORD pair of pointer values.
//------------------------------------------------------------------------
static BOOL ValidParam(LPVOID lpVoidPointer, LPDWORD lpdwPointer)
{
	if (ValidParam(lpVoidPointer))
		if (ValidParam(lpdwPointer))
			return TRUE;

	return FALSE;
}


//------------------------------------------------------------------------
// ValidParam(LPDWORD, LPDWORD)
//
// Checks validity of LPDWORD, LPDWORD pair of pointer values.
//------------------------------------------------------------------------
static BOOL ValidParam(LPDWORD lpdwPointer1, LPDWORD lpdwPointer2)
{
	if (ValidParam(lpdwPointer1))
		if (ValidParam(lpdwPointer2))
			return TRUE;

	return FALSE;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美性大战久久久久久久蜜臀 | 激情av综合网| 国产精品女上位| 欧美日韩在线不卡| 国产aⅴ精品一区二区三区色成熟| 一区二区三区av电影| 2021中文字幕一区亚洲| 欧美日韩成人综合在线一区二区| 成人美女在线视频| 国产麻豆成人精品| 日韩黄色免费网站| 一区二区三区欧美激情| 久久精品视频免费观看| 欧美一级午夜免费电影| 在线国产亚洲欧美| 9人人澡人人爽人人精品| 麻豆精品视频在线观看视频| 亚洲制服丝袜在线| 亚洲色图欧洲色图婷婷| 国产亚洲va综合人人澡精品| 日韩一级免费一区| 欧美日韩一区视频| 欧美性受xxxx| 91久久一区二区| 91视视频在线观看入口直接观看www| 狠狠色狠狠色合久久伊人| 蜜臀av性久久久久蜜臀aⅴ| 午夜精品视频一区| 亚洲mv在线观看| 亚洲一二三四在线| 樱花影视一区二区| 伊人性伊人情综合网| 成人免费视频在线观看| 中文字幕一区二区三区四区不卡| 中文字幕欧美国产| 国产精品久久久久久户外露出| 久久亚洲欧美国产精品乐播| 久久色在线视频| 久久亚洲精华国产精华液| 2024国产精品| 亚洲国产岛国毛片在线| 亚洲国产高清在线观看视频| 国产偷v国产偷v亚洲高清 | 亚洲一区二区综合| 亚洲综合区在线| 亚洲va欧美va人人爽| 性欧美疯狂xxxxbbbb| 一区二区三区电影在线播| 亚洲综合男人的天堂| 亚洲成a人片在线不卡一二三区| 亚洲一区免费在线观看| 性感美女久久精品| 三级欧美韩日大片在线看| 青青青伊人色综合久久| 韩国v欧美v日本v亚洲v| 国产精品资源网站| 91在线免费看| 欧美日韩高清一区二区三区| 日韩色在线观看| 国产日韩欧美高清| 亚洲男人的天堂一区二区| 亚州成人在线电影| 久久99精品国产麻豆不卡| 国产成人av电影在线| 色婷婷综合久久久久中文一区二区| 欧美自拍丝袜亚洲| 欧美一区二区三区免费观看视频 | 色婷婷av一区二区三区之一色屋| 色一情一伦一子一伦一区| 欧美日韩中文另类| 日韩精品最新网址| 中文字幕色av一区二区三区| 亚洲国产综合人成综合网站| 精品影视av免费| 97久久精品人人做人人爽| 欧美日韩在线播放一区| 久久综合国产精品| 一区二区三区在线免费视频| 蜜臀a∨国产成人精品| 高清久久久久久| 9191久久久久久久久久久| 国产三级精品在线| 亚洲国产精品久久不卡毛片| 国产精选一区二区三区| 欧美色图第一页| 国产亚洲精品资源在线26u| 一区二区高清视频在线观看| 久久99国内精品| 日本高清免费不卡视频| 欧美成人aa大片| 亚洲欧美视频在线观看视频| 秋霞午夜av一区二区三区| 99re热这里只有精品免费视频| 91精品国产综合久久久久| 国产精品久久久久久亚洲毛片 | 亚洲第一在线综合网站| 国产乱码精品一区二区三| 欧美日韩中文精品| 国产精品久久777777| 奇米精品一区二区三区四区 | 91高清在线观看| 国产欧美一区二区精品秋霞影院 | 日韩和欧美一区二区| 成人免费观看av| 久久亚洲欧美国产精品乐播| 婷婷综合久久一区二区三区| av亚洲精华国产精华| 久久免费美女视频| 青青草国产成人av片免费| 色婷婷久久久亚洲一区二区三区 | 婷婷激情综合网| 91国产视频在线观看| 国产精品国产三级国产aⅴ中文| 精品一区二区三区免费毛片爱| 欧美久久一二区| 亚洲午夜精品网| 色综合久久久久网| 亚洲日本护士毛茸茸| 成人免费视频caoporn| 精品成人私密视频| 精品亚洲国内自在自线福利| 日韩美女视频在线| 另类调教123区| 日韩网站在线看片你懂的| 亚洲大片精品永久免费| 欧美午夜精品一区二区蜜桃| 亚洲欧美激情视频在线观看一区二区三区| 国产91丝袜在线播放0| 久久久精品国产免大香伊| 国内精品久久久久影院薰衣草 | 成人激情校园春色| 久久精品一区二区三区四区| 国产一区二区在线观看免费| 精品久久国产97色综合| 久久99国产精品麻豆| www国产精品av| 国产麻豆欧美日韩一区| 国产亚洲视频系列| www.性欧美| 亚洲欧美国产三级| 欧美中文字幕亚洲一区二区va在线| 亚洲精品久久久蜜桃| 欧美亚洲另类激情小说| 午夜激情一区二区三区| 欧美精品1区2区| 久久99国产精品久久99果冻传媒| 精品少妇一区二区三区在线播放| 激情偷乱视频一区二区三区| 国产亚洲短视频| 91热门视频在线观看| 亚洲制服丝袜在线| 欧美一级电影网站| 国产一区二区三区免费观看| 国产精品欧美极品| 在线精品亚洲一区二区不卡| 五月婷婷另类国产| 精品毛片乱码1区2区3区| 国产精品综合一区二区| 中文字幕在线免费不卡| 欧美日韩视频在线第一区| 男人的天堂亚洲一区| 国产日韩欧美亚洲| 在线国产亚洲欧美| 国内精品第一页| 亚洲精品网站在线观看| 欧美一区二区三区影视| 国产毛片精品视频| 亚洲精品网站在线观看| 日韩午夜电影av| 99久久久免费精品国产一区二区| 亚洲成人综合在线| 久久久亚洲国产美女国产盗摄| 91首页免费视频| 蜜臀av一区二区三区| 国产精品成人在线观看| 制服丝袜亚洲播放| 成人av电影在线| 另类综合日韩欧美亚洲| 亚洲欧美经典视频| 久久一区二区三区国产精品| 日本伦理一区二区| 韩国精品主播一区二区在线观看| 亚洲男帅同性gay1069| 精品国产91乱码一区二区三区| 日本韩国一区二区| 国产在线精品一区二区| 亚洲自拍偷拍麻豆| 国产调教视频一区| 欧美精品丝袜中出| 99精品欧美一区| 精品一区二区三区在线播放视频| 亚洲激情第一区| 久久久久久**毛片大全| 欧美日韩国产一二三| www.欧美精品一二区| 寂寞少妇一区二区三区| 亚洲一区二区三区中文字幕| 国产日韩欧美一区二区三区乱码 | 国产凹凸在线观看一区二区| 亚洲h精品动漫在线观看|