Exemplo n.º 1
0
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/// 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()
Exemplo n.º 2
0
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);
	}
}
Exemplo n.º 3
0
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/// 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()