ข้อความแสดงการยอมรับ

รหัสข้อความบางอย่างต้องรับทราบจากผู้รับ ในกรณีนี้ ผู้รับควรส่งการรับทราบ (ACK) หรือการรับทราบเชิงลบ (NAK) ภายใน 1 วินาทีหลังจากได้รับข้อความ

ชื่อกลุ่มข้อความ ค่า
รับทราบ 0xFF
ชื่อรหัสรับทราบ ค่า
ACK 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);
}