Danksagungen

Einige Nachrichtencodes erfordern eine Bestätigung des Empfängers. In diesem Fall sollte der Empfänger entweder eine Bestätigung (ACK) oder negative Bestätigung (NAK) innerhalb von 1 Sekunde nach Empfang der Nachricht.

Name der Nachrichtengruppe Wert
Bestätigung 0xFF
Name des Bestätigungscodes Wert
BESTÄTIGEN 0x01
Nackt 0x02

Bestätigungen sollten direkt nach Empfang der Nachricht gesendet werden, damit wie der Absender entsprechend handeln kann. Eine Bestätigung sollte die Nachrichtengruppe enthalten , Code und aktuellen Status für die Nachricht, auf die sie verweist. Wenn beispielsweise Der Anbieter erhält eine Nachricht mit der Anrufaktion (0x04010002013C), sollte sie die Aktion bestätigen, indem sie 0xFF0100040401013C zurücksendet, wobei Folgendes gilt:

  • 0xFF: ACK-Ereignis
  • 0x01: ACK-Code
  • 0x0004: Zusätzliche Datenlänge
  • 0x0401: Gruppe und Code der Aktionsnachricht
  • 0x013C: Der aktuelle Status der Aktionsnachrichtengruppe und des Codes, Klingelton rechts und Zeitlimit nach 60 Sekunden

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

  • 0x00: Nicht unterstützt
  • 0x01: Gerät nicht verfügbar
  • 0x02: Aufgrund des aktuellen Status nicht zulässig
  • 0x03: Aufgrund eines falschen Nachrichtenauthentifizierungscodes nicht zulässig
  • 0x04: Redundante Geräteaktion

Würde aus dem vorherigen Beispiel der Ring stattdessen aufgrund eines Anbieter ist mit einer anderen Aufgabe beschäftigt. Das zurückgegebene Paket sollte auf 0xFF02000401040100, wobei

  • 0xFF: ACK-Ereignis
  • 0x02: NAK-Code
  • 0x0004: Zusätzliche Datenlänge
  • 0x01: NAK-Grund, Gerät nicht verfügbar
  • 0x0401: Gruppe und Code der Aktionsnachricht
  • 0x00: Der aktuelle Status der Aktionsnachrichtengruppe und des Codes, alle Komponenten hör auf 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);
}