Remerciements
Certains codes de message nécessitent un accusé de réception de la part du destinataire. Dans ce cas, le destinataire doit envoyer un accusé de réception (ACK), ou d'accusé de réception négatif (NAK) dans la seconde qui suit la réception du message.
Nom du groupe de messages | Valeur |
---|---|
Acceptation | 0xFF |
Nom du code d'acquittement | Valeur |
---|---|
CONFIRMATION | 0x01 |
N/A | 0x02 |
Les accusés de réception doivent être envoyés directement après la réception du message.
l'expéditeur peut 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 d'appel (0x04010002013C
) ;
il doit accuser réception de l'action en renvoyant 0xFF0100040401013C
où:
- 0xFF: événement ACK
- 0x01: code ACK
- 0x0004: longueur de données supplémentaire
- 0x0401: groupe de messages d'action et code
- 0x013C: l'état actuel du groupe de messages d'action et de son code, la sonnerie droite et Délai avant expiration de 60 secondes
Pour une NAK, le motif doit également être inclus en tant que premier octet de données. Raisons possibles :
- 0 x 00: non compatible
- 0x01: Appareil occupé
- 0x02: non autorisée en raison de l'état actuel
- 0x03: non autorisée en raison d'un code d'authentification de message incorrect
- 0x04: Action redondante sur l'appareil
Reprenons l'exemple précédent. Si l'anneau devait être mis en correspondance
Le fournisseur est occupé par une autre tâche, le paquet renvoyé doit être défini sur
0xFF02000401040100
où
- 0xFF: événement ACK
- 0x02: code NAK
- 0x0004: longueur de données supplémentaire
- 0x01: motif NAK, appareil occupé
- 0x0401: groupe de messages d'action et code
- 0x00: état actuel du groupe de messages d'action et du code, tous les composants arrête 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);
}