Danksagungen

Einige Nachrichtencodes müssen vom Empfänger bestätigt werden. In diesem Fall sollte der Empfänger innerhalb von einer Sekunde nach Erhalt der Nachricht entweder eine Bestätigung (ACK) oder eine negative Bestätigung (NAK) senden.

Name der Nachrichtengruppe Wert
Bestätigung 0xFF
Name des Bestätigungscodes Wert
Bestätigung 0x01
Nak 0x02

Bestätigungen sollten direkt nach Erhalt der Nachricht gesendet werden, damit der Absender entsprechend handeln kann. Eine Bestätigung sollte die Nachrichtengruppe, den Code und den aktuellen Status für die Nachricht enthalten, auf die sie verweist. Wenn der Anbieter beispielsweise eine Nachricht mit der Klingelaktion (0x04010002013C) erhält, sollte er die Aktion durch Senden von 0xFF0100040401013C bestätigen, wobei Folgendes gilt:

  • 0 x FF: ACK-Ereignis
  • 0 x 01: ACK-Code
  • 0 x 0004: Zusätzliche Datenlänge
  • 0x0401: Die Aktionsnachrichtengruppe und der Code
  • 0x013C: Der aktuelle Status der Aktionsnachrichtengruppe und des Codes, Klingelton rechts und Zeitlimit von 60 Sekunden

Bei einem NAK sollte der Grund auch als erstes Byte mit zusätzlichen Daten angegeben werden. Folgende Begründungen sind möglich:

  • 0 x 00: Nicht unterstützt
  • 0x01: Gerät nicht verfügbar
  • 0 x 02: Aufgrund des aktuellen Status nicht zulässig
  • 0 x 03: Nicht zulässig aufgrund eines falschen Nachrichtenauthentifizierungscodes
  • 0x04: Redundante Geräteaktion

Wenn der Ring aus dem vorherigen Beispiel stattdessen NAK ist, weil der Anbieter mit einer anderen Aufgabe beschäftigt ist, sollte das zurückgegebene Paket auf 0xFF02000401040100 gesetzt werden, wobei

  • 0 x FF: ACK-Ereignis
  • 0 x 02: NAK-Code
  • 0 x 0004: Zusätzliche Datenlänge
  • 0x01: NAK-Grund, Gerät belegt
  • 0x0401: Die Aktionsnachrichtengruppe und der Code
  • 0x00: Der aktuelle Status der Aktionsnachrichtengruppe und des Codes, alle Komponenten hören nicht mehr zu klingeln.

Beispiel:

#define FP_MSG_ACK                                  0x01
#define FP_MSG_NAK                                  0x02
#define FP_MSG_GROUP_ACK                            0xFF


static void fp_msg_send_ack(uint8_t msgGroup, uint8_t msgCode)
{
    FP_MESSAGE_STREAM  req = {FP_MSG_GROUP_ACK, FP_MSG_ACK, 0, 2};

    req.data[0] = msgGroup;
    req.data[1] = msgCode;

   fp_send((uint8_t *)&req);
}

static void fp_msg_send_nak(uint8_t reason, uint8_t msgGroup, uint8_t msgCode)
{
//reason= 0x00: Not supported, 0x01: Device busy, or 0x02: Not allowed due to current state
    FP_MESSAGE_STREAM  req = {FP_MSG_GROUP_ACK, FP_MSG_NAK, 0, 3};

    req.data[0] = reason;
    req.data[1] = msgGroup;
    req.data[2] = msgCode;

   fp_send((uint8_t *)&req);
}