Remerciements
Certains codes de message nécessitent une confirmation de la part du destinataire. Dans ce cas, le destinataire doit envoyer un accusé de réception (ACK) ou un accusé de réception négatif (NAK) dans la seconde qui suit la réception du message.
Nom du groupe de messages | Value |
---|---|
Acceptation | 0xFF |
Nom du code de confirmation | Value |
---|---|
CONFIRMATION | 0x01 |
NAK | 0x02 |
Les accusés de réception doivent être envoyés directement après la réception du message, afin que l'expéditeur puisse agir en conséquence. Un accusé de réception doit contenir le groupe de messages, le code et l'état actuel du message auquel il fait référence. Par exemple, si le fournisseur reçoit un message contenant l'action de sonnerie (0x04010002013C
), il doit accuser réception de l'action en renvoyant 0xFF0100040401013C
:
- 0xFF: événement de confirmation
- 0x01: code ACK
- 0x0004: Longueur de données supplémentaire
- 0x0401: le groupe de messages d'action et le code
- 0x013C: état actuel du code et du groupe de messages d'action, sonnerie vers la droite et délai avant expiration de 60 secondes
Pour un NAK, le motif doit également être inclus en tant que premier octet de données supplémentaires. Raisons possibles :
- 0 x 00: non compatible
- 0x01: Appareil occupé
- 0 x 02: non autorisé en raison de l'état actuel
- 0 x 03: non autorisé en raison d'un code d'authentification de message incorrect
- 0 x 04: action redondante sur un appareil
Dans l'exemple précédent, si l'anneau devait être nommé NAK, car le fournisseur était occupé par une autre tâche, le paquet renvoyé doit être défini sur 0xFF02000401040100
, où :
- 0xFF: événement de confirmation
- 0x02: code NAK
- 0x0004: Longueur de données supplémentaire
- 0x01: motif NAK, appareil occupé
- 0x0401: le groupe de messages d'action et le code
- 0x00: état actuel du groupe de messages d'action et du code, tous les composants cessent de sonner
Exemple :
#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);
}