Die Nachrichten-Erzeugungsroutine "wbus_msg_send()"

FIXME - NOCH NICHT FERTIG -

Über den W-Bus können Steuerbefehle gesendet, Laufzeit- oder Konfigurationsparameter abgefragt werden. Dies erfolgt in Form einer dem W-Bus Protokoll entsprechenden Datenstruktur, welche seriell über den W-Bus versendet wird. Die Datenstruktur enthält dabei nicht nur den Befehl und mögliche Nutzdaten, sondern auch Protokollinformationen die zum Routing der Nachricht und deren Datenintegrität dienen.

Anstelle diese Datenstruktur jedesmal vorab in einem Bytearray selbst zu kodieren wollen wir eine Funktion dafür einsetzen. Zudem soll die Funktion die erzeugte Nachricht auch gleich versenden. Dementsprechend ist der Rückgabewert der Funktion entweder ERFOLG (=Nachricht wurde versendet) oder FEHLER (=bei der Übertragung wurde ein Fehler festgestellt).

int wbus_msg_send(byte addr_from, byte addr_to, byte cmd, byte *data, byte dlen) {
  byte frame[32] = { };
  byte *p = frame;
  *p++ = wbus_addr(addr_from, addr_to);
  *p++ = 4 + dlen;
  *p++ = cmd;
  for (; dlen!=0;dlen--) {
    *p++ = *data++;
  }
  *p = wbus_checksum(frame);
  
}
// Start heater for 30 minutes
byte from = 0x0F;  // Our own W-Bus address
byte to   = 0x04;  // W-Bus address of heating device
byte cmd  = 0x23;  // W-Bus command for "start parking heater"
byte data[1] = { 0x1E };  // heater runtime should be 30 mins
if (wbus_msg_send(from, to, cmd, data) != 0) {
  print("Error sending frame via W-Bus\n");
}
// Stop heater
byte from = 0x0F;  // Our own W-Bus address
byte to   = 0x04;  // W-Bus address of heating device
byte cmd  = 0x23;  // W-Bus command for "start parking heater"
if (wbus_msg_send(from, to, cmd, null) != 0) {
  print("Error sending frame via W-Bus\n");
}