Usb在CE下面就是一个串口
我把一个source code贴出来你们看看
BOOL serialSetup(LPCTSTR dev, DWORD baudrate, DWORD parity, BOOL errorCheck, DWORD stop)
{
DCB dcb;
BOOL fSuccess;
// ErrorMessage(dev);
// TCHAR devname[6]=TEXT( "COM1: ");
m_hCom=CreateFile( dev, GENERIC_READ|GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
if(m_hCom==INVALID_HANDLE_VALUE ){
//TCHAR err[100];
// ErrorMessage(dev);
return FALSE;
/*swprintf(err,TEXT( "filename=%s,error in create file./n errno %d "),dev,GetLastError());
MessageBox(DM_Hwnd,err,TEXT( "Error "),MB_OK);
*/
}
GetCommState(m_hCom,&dcb);
SetupComm(m_hCom,1,1);
oldDcb=dcb;
// Fill in the DCB: baud=xxx,xxx bps, 8 data bits, no parity, and 1 stop bit.
switch(baudrate){// set the baud rate
case 115200:
dcb.BaudRate = CBR_115200;
break;
case 57600:
dcb.BaudRate = CBR_57600;
break;
case 38400:
dcb.BaudRate = CBR_38400;
break;
case 19200:
dcb.BaudRate = CBR_19200;
break;
default:
dcb.BaudRate = CBR_115200;
}
dcb.fBinary = TRUE;
dcb.ByteSize = 8; // data size, xmit, and rcv
dcb.Parity = NOPARITY; // no parity bit
dcb.fOutxCtsFlow = TRUE; // hw flow control
dcb.fOutxDsrFlow = FALSE;
dcb.fDtrControl = DTR_CONTROL_ENABLE;//DTR_CONTROL_HANDSHAKE;
dcb.fDsrSensitivity = FALSE;///TRUE;
dcb.fTXContinueOnXoff = TRUE;
dcb.fOutX = FALSE;
dcb.fInX = FALSE;
dcb.StopBits = ONESTOPBIT; // one stop bit
dcb.fRtsControl = RTS_CONTROL_HANDSHAKE; //hw flow control
fSuccess = SetCommState(m_hCom, &dcb);
if(!fSuccess){
//TCHAR err[100];
return FALSE;
/*
swprintf(err,TEXT( "error in setup com./n errno %d "),GetLastError());
MessageBox(DM_Hwnd,err,TEXT( "Error "),MB_OK);
*/
}
return TRUE;
}
void serialClose(){
SetCommTimeouts(m_hCom, &oldCommTimeouts);
SetCommState(m_hCom, &oldDcb);
CloseHandle(m_hCom);
}
void serialSetTimeouts(LPCOMMTIMEOUTS lpCommTimeouts){
lpCommTimeouts-> ReadIntervalTimeout=MAXDWORD ;
lpCommTimeouts-> ReadTotalTimeoutMultiplier=MAXDWORD ;
lpCommTimeouts-> ReadTotalTimeoutConstant=10000;
lpCommTimeouts-> WriteTotalTimeoutMultiplier=10;
lpCommTimeouts-> WriteTotalTimeoutConstant=1000;
}
BOOL serialSendBlock(const char *buf, int len)
{
unsigned long realSize;
int err=0;
int i=0;
if(m_hCom==INVALID_HANDLE_VALUE){
TCHAR err[100];
swprintf(err,TEXT( "error in open in send block./n errno %d "),GetLastError());
//ErrorMessage(err);
return FALSE;
}
GetCommTimeouts(m_hCom, &oldCommTimeouts);
serialSetTimeouts(&commTimeouts);
for(i=0;i <len;i++){
BOOL ret=WriteFile(m_hCom,&buf[i],1,&realSize,NULL);
if(ret==FALSE){
err=GetLastError();
//ErrorMessage(TEXT( "Error in Write "));
break;
}
if(realSize==0){
//ErrorMessage(TEXT( "Error in Write Size "));
return FALSE;
}
}
//FlushFileBuffers(m_hCom);
return TRUE;
}
BOOL serialReceiveBlock( Packet_Data *Packet, int len){
unsigned long realSize;
int i=0;
unsigned char buf[32];
TCHAR err[100];
if(m_hCom==INVALID_HANDLE_VALUE){
swprintf(err,TEXT( "error in open in send block./n errno %d "),GetLastError());
ErrorMessage(err);
return FALSE;
}
GetCommTimeouts(m_hCom, &oldCommTimeouts);
serialSetTimeouts(&commTimeouts);
// for(i=0;i <len;i++)
{
BOOL ret=ReadFile(m_hCom,(void *)Packet,len,&realSize,NULL);
if(ret==FALSE){
swprintf(err,TEXT( "error in open in send block./n errno %d "),GetLastError());
ErrorMessage(err);
// ErrorMessage(TEXT( "Error in Read "));
return FALSE;
// break;
}
else if(realSize==0){
ErrorMessage(_T( "error in read bytes! "));
return FALSE;
}
}
return TRUE;
}
BOOL checkRegister(const TCHAR* regKey, TCHAR* finalDeviceName){
//TCHAR* regKey = TEXT( "Drivers//BuiltIn//USB ");
//TCHAR* regKey = TEXT( "Drivers//BuiltIn//Serial ");
//TCHAR* regKey = TEXT( "Drivers//BuiltIn//IrDA ");
HKEY key;
// TCHAR* regIndex = TEXT( "Index ");
TCHAR* regIndex = TEXT( "Order ");
TCHAR* regPrefix = TEXT( "Prefix ");
DWORD dataType ;
DWORD dataSize;
// DWORD index;
TCHAR retVal[20];
DWORD retindex;
// TCHAR cc[20];
LONG lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, regKey, 0, KEY_READ, &key);
if (lResult == ERROR_SUCCESS) {
dataSize = sizeof(DWORD);
dataType = REG_DWORD;
RegQueryValueEx(key, regIndex, 0, &dataType, (BYTE *) &retindex, &dataSize);
// index=*(DWORD*)(&retVal);
// wsprintf(cc,TEXT( "index=%d "),retindex);
// ErrorMessage(cc);
dataSize = 20;
dataType = REG_SZ;
RegQueryValueEx(key, regPrefix, 0, &dataType, (BYTE *) &retVal, &dataSize);
swprintf(finalDeviceName,TEXT( "%s%d: "),retVal,retindex);
// ErrorMessage(finalDeviceName);
RegCloseKey(key);
}
return TRUE;
}
BOOL checkUSB(TCHAR* finalDeviceName){
TCHAR regKey[21][25]={
TEXT( "Drivers//Active//00 "),
TEXT( "Drivers//Active//01 "),
TEXT( "Drivers//Active//02 "),
TEXT( "Drivers//Active//03 "),
TEXT( "Drivers//Active//04 "),
TEXT( "Drivers//Active//05 "),
TEXT( "Drivers//Active//06 "),
TEXT( "Drivers//Active//07 "),
TEXT( "Drivers//Active//08 "),
TEXT( "Drivers//Active//09 "),
TEXT( "Drivers//Active//10 "),
TEXT( "Drivers//Active//11 "),
TEXT( "Drivers//Active//12 "),
TEXT( "Drivers//Active//13 "),
TEXT( "Drivers//Active//14 "),
TEXT( "Drivers//Active//15 "),
TEXT( "Drivers//Active//16 "),
TEXT( "Drivers//Active//17 "),
TEXT( "Drivers//Active//18 "),
TEXT( "Drivers//Active//19 "),
TEXT( "Drivers//Active//20 "),
};
TCHAR* RegUSB=TEXT( "Drivers//BuiltIn//USB ");
HKEY key;
LONG lResult;
int i;
TCHAR* regName = TEXT( "Name ");
TCHAR* regPath = TEXT( "Key ");
DWORD dataType ;
DWORD dataSize;
TCHAR retVal[30];
// DWORD retindex;
for(i=0;i <21;i++){
//ErrorMessage(regKey);
lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, regKey[i], 0, KEY_READ, &key);
if (lResult == ERROR_SUCCESS) {
dataSize = sizeof(retVal);
dataType = REG_SZ;
if(RegQueryValueEx(key, regPath, 0, &dataType, (BYTE *) &retVal, &dataSize)==ERROR_SUCCESS){
//ErrorMessage(retVal);
if(wcscmp(retVal,RegUSB)==0){
dataSize = sizeof(retVal);
dataType = REG_SZ;
if(RegQueryValueEx(key, regName, 0, &dataType, (BYTE *)&retVal, &dataSize)==ERROR_SUCCESS){
//ErrorMessage(retVal);
wcscpy(finalDeviceName,retVal);
RegCloseKey(key);
return TRUE;
}
}
// else{
// ErrorMessage(retVal);
// }
}
}
}
if(i> =21){
RegCloseKey(key);
return FALSE;
}
return FALSE;
}
Usb在CE下面就是一个串口 ????
最新推荐文章于 2024-10-09 17:53:45 发布