求助!WinCE下如何从USB口接收数据的资料!!!

sungangyi 2003-10-09 08:34:58
请各位高手给我一些WinCE下从USB口接收数据的资料!
...全文
301 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
kittymimihh 2010-06-09
  • 打赏
  • 举报
回复
UP!
liuw992000 2004-02-11
  • 打赏
  • 举报
回复
up
fishliu2000 2004-02-10
  • 打赏
  • 举报
回复
up
sway2003009 2004-01-02
  • 打赏
  • 举报
回复
up!!!!!!!
misshome 2003-12-30
  • 打赏
  • 举报
回复
所谓wince下USB口就是串口的说法是绝对错误的。
只是在某些平台下,使用了COM到USB口转换器,(例如Intel SA1100 or PXA25X系列的产品)。

看我写的一篇文章里面有详尽的描述如何编写wince.net下的USB驱动程序。

http://www.ccw.com.cn/htm/center/prog/02_8_9_8_2.asp
aiyu33 2003-12-25
  • 打赏
  • 举报
回复
如果你的设备默认是支持和pc进行usb连接的话,那你就不需要写驱动,一般厂家会提供驱动程序。比如pocketpc上的activesync下就会有驱动。那这样的话你就可以直接调用驱动,来收发数据拉。wince下的驱动一般将usb模拟成了串口,你可以在注册表中找找。可能是com3。如果驱动模拟成了串口,那么就用串口的方式收发数据。如果没有驱动程序,那么你就必须自己开发驱动,你必须了解你使用的usb芯片和支持的usb协议。在pc上的驱动可以使用windriver,在wince上可以使用platformbuilder。具体也说不清楚,你可以去www.driverdeveloper.com上问问做驱动的高手
lonelyprince 2003-11-10
  • 打赏
  • 举报
回复
to shi0503 && airsky,
那wince设备的usb口的通信速率是要受串口限制了,
不可能有更高的通信速率是吗?
xinshine 2003-11-07
  • 打赏
  • 举报
回复
这个帖子好,收藏先!!!

我在WBT终端试过,比如usb闪盘,有些能用,有些不能用,这是为何?
而且有些usb设备插入之后会提示说“请输入驱动程序名称”,这我们该怎么办?
另外我还想问一个问题,就是usb扫描仪插入之后是如何工作的,好像CE.net不支持扫描仪,该如何处理才能在终端上像映射其他COM口一样映射本地扫描仪,如果必须自己添加驱动的话该如何做?
airsky 2003-11-06
  • 打赏
  • 举报
回复
usb在wince下就是一个串口,驱动就是映射到串口的,但要让wince支持usb,需要加载usb的驱动,包括核驱动核应用驱动。
lonelyprince 2003-11-06
  • 打赏
  • 举报
回复
有点怀疑!
mygarfield 2003-11-05
  • 打赏
  • 举报
回复
收藏先
白植景 2003-11-01
  • 打赏
  • 举报
回复
要在Windows CE从USB口接收数据没这么简单,我想应该得写一个USB客户驱动程序。我不同意“Usb在CE下面就是一个串口”的说法!
abei11 2003-10-22
  • 打赏
  • 举报
回复
高手!
seking 2003-10-21
  • 打赏
  • 举报
回复
高手//eVC
kingcaid 2003-10-21
  • 打赏
  • 举报
回复
收藏
tt0595 2003-10-20
  • 打赏
  • 举报
回复
yifeng_ch 2003-10-20
  • 打赏
  • 举报
回复
收藏。
shi0503 2003-10-17
  • 打赏
  • 举报
回复
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;
}

blue2moon 2003-10-10
  • 打赏
  • 举报
回复
关注!

19,500

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧