特別銘謝

部分訊息代碼需要接收方確認。在這種情況下,接收端應在收到訊息後的 1 秒內傳送確認 (ACK) 或負向確認 (NAK)。

訊息群組名稱
確認聲明 0 倍
確認碼名稱
確認 0x01
0x02 賽程

確認訊息應在收到訊息後直接傳送,以確保傳送者能夠採取相應行動。確認訊息應包含訊息群組、程式碼,以及所參照訊息的目前狀態。舉例來說,如果供應器收到了含有鈴聲的動作 (0x04010002013C) 的訊息,應向以下位置傳回 0xFF0100040401013C 確認該動作:

  • 0xFF:ACK 事件
  • 0x01:ACK 程式碼
  • 0x0004:額外的資料長度
  • 0x0401:動作訊息群組和代碼
  • 0x013C:動作訊息群組和程式碼的目前狀態、右環和 60 秒逾時

如為 NAK,則應同時將原因納入其他資料的第一個位元組。可能原因如下:

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

在上一個範例中,如果因為供應程式忙於其他工作而改為讓 NAK 被啟動,則傳回的封包應設為 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);
}