กิตติกรรมประกาศ
รหัสข้อความบางรหัสต้องได้รับความยินยอมจากผู้รับ ในกรณีนี้ ผู้รับควรส่งการตอบรับ (ACK) หรือ การตอบรับเชิงลบ (NAK) ภายใน 1 วินาทีหลังจากได้รับข้อความ
| ชื่อกลุ่มข้อความ | ค่า | 
|---|---|
| รับทราบ | 0xFF | 
| ชื่อรหัสการตอบรับ | ค่า | 
|---|---|
| รับทราบ | 0x | 
| แนก | 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);
}