Ringraziamenti
Alcuni codici di messaggio richiedono una conferma da parte del destinatario. In questo caso, il destinatario deve inviare una conferma (ACK) o una accettazione negativa (NAK) entro 1 secondo dalla ricezione del messaggio.
Nome gruppo di messaggi | Valore |
---|---|
Accettazione | 0xFF |
Nome codice di conferma | Valore |
---|---|
ACK | 0x01 |
NAK | 0x02 |
Le conferme devono essere inviate direttamente dopo la ricezione del messaggio, in modo che il mittente possa agire di conseguenza. Una conferma deve contenere il gruppo di messaggi, il codice e lo stato attuale del messaggio a cui fa riferimento. Ad esempio, se il provider riceve un messaggio contenente l'azione di risposta (0x04010002013C
), deve riconoscere l'azione inviando 0xFF0100040401013C
dove:
- 0xFF: evento ACK
- 0x01: codice ACK
- 0x0004: lunghezza dei dati aggiuntiva
- 0x0401: codice e gruppo di messaggi di azione
- 0x013C: lo stato attuale del gruppo e del codice del messaggio di azione, squillo a destra e timeout di 60 secondi
Per una NAK, il motivo deve essere incluso anche come primo byte di dati aggiuntivi. Ecco alcuni dei motivi:
- 0 x 00: non supportato
- 0x01: dispositivo occupato
- 0 x 02: non consentito a causa dello stato attuale
- 0x03: non consentito a causa di un codice di autenticazione del messaggio errato
- 0x04: azione del dispositivo ridondante
Nell'esempio precedente, se l'anello doveva essere NAK invece perché il provider era occupato con un'altra attività, il pacchetto restituito dovrebbe essere impostato su 0xFF02000401040100
, dove
- 0xFF: evento ACK
- 0x02: codice NAK
- 0x0004: lunghezza dei dati aggiuntiva
- 0x01: motivo NAK, dispositivo occupato
- 0x0401: codice e gruppo di messaggi di azione
- 0x00: lo stato attuale del gruppo e del codice del messaggio di azione, tutti i componenti smettono di suonare
Esempio:
#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);
}