RBAPI(bool) com_ServoTRX(int com, unsigned char* cmd, int csize, unsigned char* buf, int bsize) { com_ClearRFIFO(com); if (com_Send(com, cmd, csize) == false) return false; if (COM_duplex[com] == COM_HDUPLEX) // discard the first-received csize bytes in case of TX/RX-short { int i; unsigned int tmpbyte; for (i=0; i<csize; i++) { if ((tmpbyte = com_Read(com)) == 0xffff) return false; if ((unsigned char)tmpbyte != cmd[i]) { err_SetMsg(ERROR_COM_FAIL, "receive a wrong self-feedback byte"); return false; } } } // end if (COM_duplex[com] ... if (buf != NULL) //&& if (com_Receive(com, buf, bsize) == false) return false; return true; }
RBAPI(void) com_Close(int com) { if(com_InUse(com) == false) return; com_FlushWFIFO(com); com_ClearRFIFO(com); #if defined(RB_MSVC_WIN32) || defined(RB_MSVC_WINCE) SetCommTimeouts(COM_info[com].fp, &COM_info[com].oldtimeouts); SetCommState(COM_info[com].fp, &(COM_info[com].oldstate)); CloseHandle(COM_info[com].fp); #elif defined(RB_LINUX) tcsetattr(COM_info[com].fp, TCSANOW, &(COM_info[com].oldstate)); close(COM_info[com].fp); #endif if (COM_oldTMode[com] == true) com_EnableTurboMode(com); else com_DisableTurboMode(com); if (COM_oldFMode[com] == true) com_EnableFIFO32(com); else com_DisableFIFO32(com); io_Close(COM_ioSection[com]); COM_ioSection[com] = -1; }
void FlushReceiveBuffer(void) { com_ClearRFIFO(Serial); com_FlushRxQueue(Serial); }