packages feed

serialport-0.4.7: tests/haskell_serial_test/haskell_serial_test.ino

static int test_running;
static uint8_t expected_char;

static const uint8_t lowest_expected_char = 0x00;
static const uint8_t highest_expected_char = 0xff;

// the setup routine runs once when you press reset:
void setup()
{
  // initialize the digital pin as an output.
  Serial.begin(9600);
  pinMode(13, OUTPUT);
}



void ConsumeAllSerial()
{
  while( Serial.available() )
    Serial.read();
}



// the loop routine runs over and over again forever:
void loop()
{
  if( Serial.available() )
  {
    int i = Serial.read();
    switch(i)
    {
      case 'a':
        Serial.write(i);
        Serial1.end();
        Serial1.begin(1200);
        ConsumeAllSerial();
        test_running = 1;
        expected_char = lowest_expected_char;
        break;
      case 'b':
        Serial.write(i);
        Serial1.end();
        Serial1.begin(2400);
        ConsumeAllSerial();
        test_running = 1;
        expected_char = lowest_expected_char;
        break;
      case 'c':
        Serial.write(i);
        Serial1.end();
        Serial1.begin(4800);
        ConsumeAllSerial();
        test_running = 1;
        expected_char = lowest_expected_char;
        break;
      case 'd':
        Serial.write(i);
        Serial1.end();
        Serial1.begin(9600);
        ConsumeAllSerial();
        test_running = 1;
        expected_char = lowest_expected_char;
        break;
      case 'e':
        Serial.write(i);
        Serial1.end();
        Serial1.begin(19200);
        ConsumeAllSerial();
        test_running = 1;
        expected_char = lowest_expected_char;
        break;
      case 'f':
        Serial.write(i);
        Serial1.end();
        Serial1.begin(57600);
        ConsumeAllSerial();
        test_running = 1;
        expected_char = lowest_expected_char;
        break;
      case 'g':
        Serial.write(i);
        Serial1.end();
        Serial1.begin(115200);
        ConsumeAllSerial();
        test_running = 1;
        expected_char = lowest_expected_char;
        break;
      case 'h':
        Serial.write(i);
        Serial1.end();
        Serial1.begin(9600);
        ConsumeAllSerial();
        test_running = 2;
        break;
    }
  }

  if( test_running == 1 )
  {
    while( Serial1.available() )
    {
      uint8_t i = Serial1.read() & 0xff;
      if( i == expected_char)
      {
        Serial1.write(expected_char);
        if( expected_char == highest_expected_char )
        {
          // test successfull
          Serial.println("ok");
          Serial1.flush();
          Serial1.end();
          test_running = 0;
        }
        else
          expected_char++;
      }
      else
      {
        Serial.print("expected char('");
        Serial.print(expected_char, HEX);
        Serial.print("') got ('");
        Serial.print(i, HEX);
        Serial.println("') test failed");
      }
    }
  }
  else if( test_running == 2 )
  {
    while( Serial1.available() )
    {
      uint8_t i = Serial1.read() & 0xff;
      switch( i )
      {
        case 'a':
          Serial1.write('a');
          Serial1.write('A');
          break;
        case 'b':
          Serial1.write('b');
          delay(50);
          Serial1.write('B');
          break;
        case 'c':
          Serial1.write('c');
          delay(150);
          Serial1.write('C');
          break;
        case 'd':
          Serial1.write('d');
          delay(200);
          Serial1.write('D');
          break;
        case 'e':
          // 50 ms delay
          delay(500);
          Serial1.write('E');
          break;
        default:
          test_running = 0;
          break;
      }
    }
  }
}