Agradecimientos

Algunos códigos de mensaje requieren una confirmación del receptor. En este caso, el receptor debe enviar una confirmación (ACK) negativo-acuerdo (NAK) en un plazo de 1 segundo después de recibir el mensaje.

Nombre del grupo de mensajes Valor
Declaración 0xFF
Nombre del código de acuse de recibo Valor
Conf. 0 × 01
NAK 0x02

Las confirmaciones deben enviarse inmediatamente después de que se recibe el mensaje para que y el remitente puede actuar en consecuencia. Una confirmación debe contener el grupo de mensajes , el código y el estado actual del mensaje al que hace referencia. Por ejemplo, el proveedor recibe un mensaje que contiene la acción de hacer sonar (0x04010002013C) debe confirmar la acción mediante el envío de 0xFF0100040401013C donde:

  • 0xFF: evento de ACK
  • 0x01: Código ACK
  • 0x0004: Longitud de los datos adicionales
  • 0x0401: Grupo de mensajes de acción y código
  • 0x013C: El estado actual del grupo de mensajes de acción y el código, sonar a la derecha y Tiempo de espera de 60 segundos

Para un NAK, el motivo también debe incluirse como el primer byte de la de datos no estructurados. Se incluyen los siguientes motivos:

  • 0x00: No compatible
  • 0x01: Dispositivo ocupado
  • 0x02: No se permite debido al estado actual
  • 0x03: No se permite debido a que el código de autenticación del mensaje es incorrecto
  • 0x04: Acción redundante del dispositivo

En el ejemplo anterior, si se usara un NAK en el anillo debido a la El proveedor está ocupado con otra tarea, por lo que el paquete que se devuelve debe establecerse en 0xFF02000401040100 donde

  • 0xFF: evento de ACK
  • 0x02: Código NAK
  • 0x0004: Longitud de los datos adicionales
  • 0x01: Motivo de NAK, Dispositivo ocupado
  • 0x0401: Grupo de mensajes de acción y código
  • 0x00: El estado actual del grupo de mensajes de acción y el código, todos los componentes Dejar de hacer sonar

Ejemplo:

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