int SerialInit(Serial *serial, int baud, const char *format, int rtscts) { int cflags = CLOCAL | CREAD; if ((!format) || (strlen(format) != 3)) { return (SERIAL_ERR_INIT); } // datasize switch (format[0]) { case '5': cflags |= CS5; break; case '6': cflags |= CS6; break; case '7': cflags |= CS7; break; case '8': cflags |= CS8; break; default: return (SERIAL_ERR_INIT); } // parity switch (format[1]) { case 'N': break; // no parity case 'O': cflags |= PARODD; // no break! // odd parity case 'E': cflags |= PARENB; break; // even parity default: return (SERIAL_ERR_INIT); } // stopbit switch (format[2]) { case '1': break; // 1 stopbit case '2': cflags |= CSTOPB; break; // 2 stopbits default: return (SERIAL_ERR_INIT); } // baudrate switch (baud) { case 115200: cflags |= B115200; break; case 57600: cflags |= B57600; break; case 38400: cflags |= B38400; break; case 19200: cflags |= B19200; break; case 9600: cflags |= B9600; break; case 4800: cflags |= B4800; break; case 2400: cflags |= B2400; break; case 300: cflags |= B300; break; default: return (SERIAL_ERR_INIT); } // handshake if (rtscts) { cflags |= CRTSCTS; // hardware handshake } // clear struct and set port parameters memset(&serial->settings, 0, sizeof (serial->settings)); serial->settings.c_cflag = cflags; serial->settings.c_iflag = IGNPAR; SerialSetTimeout(serial, 0); SerialFlush(serial); return (0); }
BT_RESPONSE BT_sendCommand(u8 uart_port, u8 *fmt, ...) { SerialFlush(uart_port); SerialPrintf(uart_port, fmt); //CDCprintf(fmt); Delayms(BT_DELAY); }
int main(int argc, char* argv[]) { unsigned int ser = SerialOpen(115200); //Open serial port with a 115200 baud rate int a = 0; SerialFlush(ser); //Clear TX and RX buffer, can be called periodically SerialPuts(ser,"Serial communication using the Sensorian Shield.\r\n"); SerialPrintf(ser,"You are using device number %d.\r\n",ser); SerialFlush(ser); while(1) { if(SerialDataAvail(ser)) { a = SerialGetchar(ser); SerialPrintf(ser,"You sent %c.\r\n",(char)(a)); if(a == 'b') break; } } SerialPrintf(ser,"Closing serial port ..."); SerialClose(ser); //Close serial port return 0; }
void setup() { SerialOpen(0,115200); SerialFlush(0); //PWM RSSI pinMode(PWMrssiPin, INPUT); //Led output pinMode(7,OUTPUT); // PD7 checkEEPROM(); readEEPROM(); MAX7456_Setup(); analogReference(DEFAULT); setMspRequests(); blankserialRequest(MSP_IDENT); }
void DwFlush(void) { if (CurrentPortKind() == 's') SerialFlush((struct SPort*)Ports[CurrentPort]); else DigisparkFlush((struct UPort*)Ports[CurrentPort]); }
void SocketModbusMasterLoop( void ) { char AdrIP[ 30 ]; int SizeQuestionToAsk; static char QuestionFrame[ 800 ]; int ResponseSize; static char ResponseFrame[ 800 ]; int SendResultStatus = 0; #ifdef __XENO__ pthread_set_name_np(pthread_self(), __FUNCTION__); #endif while( ClientSocketRunning ) { // TODO: added for XENO... not found why required for now... // (task suspended otherwise with the watchdog, seen with dmesg!) // removing this next line for EMC- we don't use XENO // DoPauseMilliSecs( 10 ); if (InfosGene->LadderState!=STATE_RUN) { DoPauseMilliSecs( ModbusTimeInterFrame ); } else { SizeQuestionToAsk = ModbusMasterAsk( (unsigned char*)AdrIP, (unsigned char*)QuestionFrame ); if ( SizeQuestionToAsk>0 ) { if ( ModbusSerialPortNameUsed[ 0 ]=='\0' ) { SendResultStatus = SendSocketModbusMaster( AdrIP, 502, QuestionFrame, SizeQuestionToAsk ); } else { // before sending queston, set size of frame that will be to receive after! SerialSetResponseSize( 1/*adr*/+GetModbusResponseLenghtToReceive()+2/*crc*/, ModbusTimeOutReceipt ); SerialSend( QuestionFrame, SizeQuestionToAsk ); } if ( SendResultStatus==0 ) { if ( ModbusTimeAfterTransmit>0 ) { // useful for USB-RS485 dongle... if( ModbusDebugLevel>=3 ) printf(_("INFO CLASSICLADDER- after transmit delay now...%i milliseconds\n"),ModbusTimeAfterTransmit); DoPauseMilliSecs( ModbusTimeAfterTransmit ); } if ( ModbusSerialPortNameUsed[ 0 ]=='\0' ) ResponseSize = WaitRespSocketModbusMaster( ResponseFrame, 800, ModbusTimeOutReceipt ); else ResponseSize = SerialReceive( ResponseFrame, 800, ModbusTimeOutReceipt ); NbrFrames++; if ( ResponseSize==0 ) printf(_("ERROR CLASSICLADDER- MODBUS NO RESPONSE (Errs=%d/%d) !?\n"), ++CptErrors, NbrFrames); if ( !TreatModbusMasterResponse( (unsigned char *)ResponseFrame, ResponseSize ) ) { // trouble? => flush all (perhaps we can receive now responses for old asks // and are shifted between ask/resp...) if ( ModbusSerialPortNameUsed[ 0 ]!='\0' ) SerialFlush( ); } } DoPauseMilliSecs( ModbusTimeInterFrame ); } else { // sleep( 1 ); DoPauseMilliSecs( 1000 ); } } } #ifndef __WIN32__ pthread_exit(NULL); #endif }
void serial4flush(void) { SerialFlush(UART4); }