謝辞

一部のメッセージ コードでは、受信者からの確認応答が必要です。この例では 受信側は確認応答(ACK)または 受信後 1 秒以内にネガティブ確認応答(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);
}