特別銘謝
某些訊息代碼需要接收者確認。在本例中 接收方應傳送確認 (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);
}