}
} return 0;
}
if(invFlag ==true){ }
if(accLen
continue; flag = true;
tagNum =buffer[2]; for(;tagNum>0;tagNum--){ }
if((tagNum-1) != num &&(tagNum!=0&&num!=0))
continue;
length = buffer[1];
commandLength+=buffer[1+commandLength]; num = buffer[2+commandLength]; if((tagNum-1) !=num)
break;
if(commandLength
continue;
m=-1; flag=true;
UINT WINAPI CSerialPort::ListenThread( void* pParam ) {
** 得到本类的指针 *
CSerialPort *pSerialPort = reinterpret_cast
if(buffer != NULL){ delete []buffer; }
buffer = new char[1000]; 线程循环,轮询方式读取串口数据 while (!pSerialPort->s_bExit) {
UINT BytesInQue = pSerialPort->GetBytesInCOM(); ** 如果串口输入缓冲区中无数据,则休息一会再查询 * ** 如果Inventory标志位为true,等一轮结束再接受* if ( BytesInQue == 0 && flag1 ==false) if ( BytesInQue == 0) {
Sleep(SLEEP_TIME_INTERVAL); continue; } do {
cRecved = 0x00;
if(pSerialPort->ReadChar(cRecved)) {
accum++;
buffer[accum] = cRecved; }
}while(--BytesInQue); } return 0; }
void CSerialPort::flush(){ }
bool CSerialPort::read(int beg, int len, char arr[]){ }
bool CSerialPort::ReadChar( char &cRecved )这里cRecved是引用 {
BOOL bResult = TRUE; while(len
Sleep(1); m=-1; rdLen = 0;
arr = new char[len];
for(int i=beg;i
arr[i] = buffer[i+rdLen];
rdLen+=len;
}
bool CSerialPort::WriteData( unsigned char* pData, unsigned int length ) {
for(int i=0;i
buffer[i] ='\\0'; DWORD BytesRead = 0; if(m_ false; }
** 临界区保护 *
EnterCriticalSection(&m_csCommunicationSync); ** 从缓冲区读取一个字节的数据 *
bResult = ReadFile(m_(&m_csCommunicationSync); }
** 离开临界区 *
LeaveCriticalSection(&m_csCommunicationSync); return (BytesRead == 1);
return false;
BOOL bResult = TRUE; DWORD BytesToSend = 0; if(m_ false; }
** 临界区保护 *
EnterCriticalSection(&m_csCommunicationSync); ** 向缓冲区写入指定量的数据 *
bResult = WriteFile(m_(&m_csCommunicationSync);