謝辞
メッセージ コードの中には、受信者の確認応答を必要とするものがあります。この場合は、メッセージを受信してから 1 秒以内に、確認応答(ACK)または否定確認(NAK)が送信されます。
メッセージ グループ名 | 値 |
---|---|
同意表現 | 0xFF |
承認コード名 | 値 |
---|---|
ACK | 0x01 |
NAK | 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);
}