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