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