//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /// Starts LX command mode. /// /// @param d device descriptor /// @param errBufSize error message buffer size /// @param errBuf[] [out] error message /// /// @retval true mode successfully set /// @retval false error (description in @p errBuf) /// //static bool DevLXNano::StartCMDMode(PDeviceDescriptor_t d, unsigned errBufSize, TCHAR errBuf[]) { // we have to wait longer while enabling declaration phase because we have // to parse all NMEA sequences that are incomming before declaration mode // is enabled. if(ComWrite(d, PKT_SYN, errBufSize, errBuf)) { ComExpect(d, PKT_ACK, 512, NULL, errBufSize, errBuf); } if(ComWrite(d, PKT_SYN, errBufSize, errBuf)) { ComExpect(d, PKT_ACK, 512, NULL, errBufSize, errBuf); } if (ComWrite(d, PKT_SYN, errBufSize, errBuf)) { if(ComExpect(d, PKT_ACK, 512, NULL, errBufSize, errBuf)) { return true; } } return false; } // StartCMDMode()
void COil::P_ThreadSend() { byte bytLvl = 0; char szRecvBuf[1024] = {0}; char szSendBuf[1024] = {0}; DWORD dwRecvLen = 0; int iSendLen = 0; DWORD dwPushTm; DWORD dwBufSize = (DWORD)sizeof(szRecvBuf); while( !g_bProgExit ) { dwRecvLen = 0; memset(szRecvBuf, 0, sizeof(szRecvBuf)); // 先处理串口接收到的数据 if( !m_objRecvMng.PopData(bytLvl, dwBufSize, dwRecvLen, szRecvBuf, dwPushTm)) { if( dwRecvLen <= dwBufSize ) DealComFrame(szRecvBuf, (int)dwRecvLen); } // 再向串口发送数据 if( !m_objSendMng.PopData(bytLvl, dwBufSize, dwRecvLen, szRecvBuf, dwPushTm)) { szSendBuf[1] = 2; // 协议版本,固定取1 szSendBuf[2] = 4; // 外设编号,固定取4 szSendBuf[3] = 0; // 外设序号,固定取0 memcpy(szSendBuf+4, szRecvBuf, dwRecvLen); szSendBuf[0] = get_crc((byte*)szSendBuf+1, 3+dwRecvLen); iSendLen = 4+dwRecvLen; // 转义 iSendLen = TranData(szSendBuf, iSendLen); // 发送数据帧 ComWrite(szSendBuf, iSendLen); } usleep(50000); } }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /// Writes given character to COM port and checks the result. /// /// @param d device descriptor /// @param character data to be written /// @param errBufSize error message buffer size /// @param errBuf[] [out] error message /// /// @retval true data written /// @retval false error (description in @p errBuf) /// //static bool DevBase::ComWrite(PDeviceDescriptor_t d, char character, unsigned errBufSize, TCHAR errBuf[]) { return(ComWrite(d, &character, 1, errBufSize, errBuf)); } // ComWrite()