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