Agradecimientos

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

Nombre del grupo de mensajes Valor
Declaración 0xFF
Nombre del código de confirmación Valor
Confirmación 0 × 01
NAK 0 × 02

Las confirmaciones deben enviarse directamente después de que se recibe el mensaje, de manera que el remitente pueda actuar en consecuencia. Una confirmación de recepción debe contener el grupo de mensajes, el código y el estado actual del mensaje al que hace referencia. Por ejemplo, si el proveedor recibe un mensaje que contiene la acción de anillo (0x04010002013C), debe confirmar la acción y devolver 0xFF0100040401013C donde:

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

Para un NAK, el motivo también debe incluirse como el primer byte de datos adicionales. 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 un código de autenticación de mensajes incorrecto
  • 0x04: Acción redundante en el dispositivo

A partir del ejemplo anterior, si el anillo se reemplazara por NAK debido a que el proveedor está ocupado con otra tarea, el paquete que se muestra debería establecerse en 0xFF02000401040100

  • 0xFF: evento ACK
  • 0x02: Código NAK
  • 0x0004: Longitud adicional de los datos
  • 0x01: Razón NAK, dispositivo ocupado
  • 0x0401: El grupo de mensajes de acción y el código
  • 0x00: El estado actual del código y el grupo de mensajes de acción, todos los componentes dejan de 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);
}