Agradecimentos

Alguns códigos de mensagem exigem uma confirmação do destinatário. Nesse caso, o destinatário precisa enviar uma confirmação (ACK) ou confirmação negativa (NAK) dentro de um segundo após o recebimento da mensagem.

Nome do grupo de mensagens Valor
Confirmação 0xFF
Nome do código de confirmação Valor
CONF 0x01
NAM 0x02

As confirmações precisam ser enviadas diretamente após o recebimento da mensagem para que o remetente possa agir de acordo. Uma confirmação deve conter o grupo de mensagens, o código e o estado atual da mensagem que está referenciando. Por exemplo, se o provedor receber uma mensagem contendo a ação de toque (0x04010002013C), ele precisa confirmar a ação enviando 0xFF0100040401013C de volta, em que:

  • 0xFF: evento ACK
  • 0x01: código ACK
  • 0x0004: comprimento de dados adicionais
  • 0x0401: o código e o grupo de mensagens de ação
  • 0x013C: o estado atual do grupo de mensagens de ação e código, toque para a direita e tempo limite de 60 segundos

Para um NAK, o motivo também precisa ser incluído como o primeiro byte de dados adicionais. As razões incluem:

  • 0x00: não compatível
  • 0x01: dispositivo ocupado
  • 0x02: não permitido devido ao estado atual
  • 0x03: não permitido devido a um código de autenticação de mensagem incorreto
  • 0x04: Ação de dispositivo redundante

No exemplo anterior, se o anel tivesse que ser NAK devido ao provedor estar ocupado com outra tarefa, o pacote retornado precisa ser definido como 0xFF02000401040100, em que

  • 0xFF: evento ACK
  • 0x02: código NAK
  • 0x0004: comprimento de dados adicionais
  • 0x01: motivo da N/A, dispositivo ocupado
  • 0x0401: o código e o grupo de mensagens de ação
  • 0 x 00: o estado atual do grupo de mensagens de ação e do código, todos os componentes param de tocar

Exemplo:

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