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

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