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