| 
  |  struct Message { | 
  |    uint16_t Uniek; | 
  |    uint8_t BoardNo; | 
  |    uint16_t Command; | 
  |    uint16_t Argument; | 
  |    uint16_t ArgumentExt; | 
  |    uint8_t ArgumentSmall; | 
  |    byte Values[4]; | 
  |  }; | 
  |   | 
  |  const uint16_t None = 0; | 
  |  const uint16_t Nano_CH340 = 5; | 
  |  const uint16_t Identifier = 8324; | 
  |  bool IsActive = false; | 
  |  const uint16_t ErrorUniek = 1; | 
  |  const uint16_t ErrorCommandNotDefined = 14; | 
  |   | 
  |  const uint8_t BoardNr = 1; | 
  |   | 
  |  const uint16_t CmdGetDefinition = 1; | 
  |  const uint16_t CmdTest = 2; | 
  |  const uint16_t CmdError = 13; | 
  |   | 
  |  void setup() { | 
  |    Serial.begin(9600); | 
  |    IsActive = false; | 
  |  } | 
  |   | 
  |  void loop() { | 
  |    struct Message msg; | 
  |   | 
  |    if (Serial.available() > 0) { | 
  |      Serial.readBytes((uint8_t *)&msg, sizeof(msg)); | 
  |   | 
  |      if (msg.Uniek == Identifier) { | 
  |        switch (msg.Command) | 
  |        { | 
  |          case CmdGetDefinition: | 
  |            GetDefinition(); | 
  |            break; | 
  |          case CmdTest: | 
  |            SendTest(); | 
  |            break; | 
  |          default: | 
  |            SendError(ErrorCommandNotDefined, msg.Command); | 
  |            break; | 
  |        } | 
  |      } | 
  |      else | 
  |      { | 
  |        SendError(ErrorUniek, 0); | 
  |      } | 
  |    } | 
  |  } | 
  |   | 
  |  void SendTest() | 
  |  { | 
  |    struct Message msg; | 
  |    memset(&msg, 255, sizeof( msg)) ; | 
  |   | 
  |    msg.Uniek = Identifier; | 
  |    msg.BoardNo = BoardNr; | 
  |    msg.Command = CmdTest; | 
  |    msg.Argument =1000; | 
  |    msg.ArgumentExt = 1001; | 
  |    msg.ArgumentSmall = 100; | 
  |    msg.Values[0] = 10; | 
  |    msg.Values[1] = 11; | 
  |    msg.Values[2] = 12; | 
  |    msg.Values[3] = 13; | 
  |   | 
  |    Serial.write((const uint8_t *)&msg, sizeof(msg)); | 
  |  } | 
  |   | 
  |  void SendError(int error, int parms) | 
  |  { | 
  |    struct Message msg; | 
  |    memset(&msg, 255, sizeof( msg)) ; | 
  |   | 
  |    msg.Uniek = Identifier; | 
  |    msg.BoardNo = BoardNr; | 
  |    msg.Command = CmdError; | 
  |    msg.Argument = error; | 
  |    msg.ArgumentExt = parms; | 
  |   | 
  |    Serial.write((const uint8_t *)&msg, sizeof(msg)); | 
  |  } | 
  |   | 
  |  void GetDefinition() | 
  |  { | 
  |    struct Message msg; | 
  |    memset(&msg, 255, sizeof( msg)) ; | 
  |   | 
  |    msg.Uniek = Identifier; | 
  |    msg.BoardNo = BoardNr; | 
  |    msg.Command = CmdGetDefinition; | 
  |    msg.Argument = Nano_CH340; | 
  |    Serial.write((const uint8_t *)&msg, sizeof(msg)); | 
  |    IsActive = true; | 
  |  } | 
  |   | 
   |