謝辞

メッセージ コードの中には、受信者の確認応答を必要とするものがあります。この場合は、メッセージを受信してから 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);
}