Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
BT_RESPONSE BT_sendCommand(u8 uart_port, u8 *fmt, ...)
{
	SerialFlush(uart_port);
	SerialPrintf(uart_port, fmt);
	//CDCprintf(fmt);
	Delayms(BT_DELAY);
}
Ejemplo n.º 3
0
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;
}
Ejemplo n.º 4
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);
}
Ejemplo n.º 5
0
void DwFlush(void) {
  if (CurrentPortKind() == 's')
    SerialFlush((struct SPort*)Ports[CurrentPort]);
  else
    DigisparkFlush((struct UPort*)Ports[CurrentPort]);
}
Ejemplo n.º 6
0
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

}
Ejemplo n.º 7
0
void serial4flush(void)
{
    SerialFlush(UART4);
}