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);
}