我这里有一个HID设备,固件已经写好,我用VC编写了一个HID与PC双向通信的程序,其中用到ReadFile函数读数据,用WriteFile函数写数据。程序将一串字符串写入HID设备,再读出来。VC的程序如下:
void CTest1Dlg::OnWriteDevice()
{
BYTE wBuffer[33] = {0};
BYTE rBuffer[33] = {0};
char str[32]={'0'};
DWORD dwRet;
UpdateData(true);
memcpy(&wBuffer[1], m_writebuff, min(32, m_writebuff.GetLength()));
if(WriteFile(handle, wBuffer, 33, &dwRet,NULL))
{
//写成功
Sleep(1500);
if(ReadFile(handle, rBuffer, 33, &dwRet, NULL))
{
//读成功
memcpy(str, &rBuffer[1], min(32, strlen((char *)&rBuffer[1])));
m_readbuff=str; }
else
MessageBox("读失败!"); MessageBox("读写成功!");
}
else
MessageBox("写失败!");
}
问题是:在用WriteFile写入数据后如果马上用ReadFile读数据,那么读到的数据是“老值”,只有sleep()后才能读到刚才写入的“新值”。我的判断是IN中断是由PC轮询发出的,因此要有一个延时,等待PC的下一次的IN中断请求,ReadFile函数只是从缓冲区中读数据。我不知道这样的理解对不对,请各位高手指教。我如何才能加快PC与HID设备之间的数据交换速率呢?谢谢!!
void CTest1Dlg::OnWriteDevice()
{
BYTE wBuffer[33] = {0};
BYTE rBuffer[33] = {0};
char str[32]={'0'};
DWORD dwRet;
UpdateData(true);
memcpy(&wBuffer[1], m_writebuff, min(32, m_writebuff.GetLength()));
if(WriteFile(handle, wBuffer, 33, &dwRet,NULL))
{
//写成功
Sleep(1500);
if(ReadFile(handle, rBuffer, 33, &dwRet, NULL))
{
//读成功
memcpy(str, &rBuffer[1], min(32, strlen((char *)&rBuffer[1])));
m_readbuff=str; }
else
MessageBox("读失败!"); MessageBox("读写成功!");
}
else
MessageBox("写失败!");
}
问题是:在用WriteFile写入数据后如果马上用ReadFile读数据,那么读到的数据是“老值”,只有sleep()后才能读到刚才写入的“新值”。我的判断是IN中断是由PC轮询发出的,因此要有一个延时,等待PC的下一次的IN中断请求,ReadFile函数只是从缓冲区中读数据。我不知道这样的理解对不对,请各位高手指教。我如何才能加快PC与HID设备之间的数据交换速率呢?谢谢!!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货