特別銘謝

某些訊息代碼需要接收者確認。在本例中 接收方應傳送確認 (ACK) 或 收到訊息後 1 秒內做出負面確認 (NAK)

訊息群組名稱
確認聲明 0xFF
確認代碼名稱
確認 0x01
北美洲 0x02

系統會在收到訊息後直接傳送確認通知, 寄件者可據此採取行動確認應包含訊息群組 、程式碼和目前狀態。舉例來說 供應者收到包含響鈴動作 (0x04010002013C) 的訊息。 它應傳回 0xFF0100040401013C 來確認動作,其中:

  • 0xFF:ACK 事件
  • 0x01:ACK 程式碼
  • 0x0004:其他資料長度
  • 0x0401:動作訊息群組和代碼
  • 0x013C:動作訊息群組與代碼的目前狀態,鈴聲右側和 60 秒逾時

如果是 NAK,建議也應該納入 資料。原因包括:

  • 0x00:不支援
  • 0x01:裝置忙碌
  • 0x02:因目前狀態而不允許
  • 0x03:因訊息驗證碼不正確而不允許使用
  • 0x04:裝置多餘動作

在上一個範例中,由於圓環變更為「北美」 供應商正忙於處理其他工作,傳回的封包應設為 0xFF02000401040100,其中

  • 0xFF:ACK 事件
  • 0x02:NAK 代碼
  • 0x0004:其他資料長度
  • 0x01:NAK 原因,裝置忙碌
  • 0x0401:動作訊息群組和代碼
  • 0x00:動作訊息群組與程式碼的目前狀態以及所有元件 停止響鈴。

範例:

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