Ucapan terima kasih
Beberapa kode pesan memerlukan konfirmasi dari penerima. Dalam hal ini, penerima harus mengirimkan konfirmasi (ACK) atau konfirmasi negatif (NAK) dalam waktu 1 detik setelah menerima pesan.
Nama Grup Pesan | Nilai |
---|---|
Persetujuan | 0xFF |
Nama Kode Konfirmasi | Nilai |
---|---|
ACK | 0x01 |
NAK | 0x02 |
Konfirmasi harus dikirim langsung setelah pesan diterima agar pengirim dapat bertindak dengan semestinya. Konfirmasi harus berisi grup pesan, kode, dan status saat ini untuk pesan yang dirujuknya. Misalnya, jika
Penyedia menerima pesan yang berisi tindakan dering (0x04010002013C
),
penyedia harus mengonfirmasi tindakan tersebut dengan mengirim kembali 0xFF0100040401013C
tempat:
- 0xFF: peristiwa ACK
- 0x01: kode ACK
- 0x0004: Panjang data tambahan
- 0x0401: Grup dan kode pesan tindakan
- 0x013C: Status saat ini untuk kode dan grup pesan tindakan, berdering kanan, dan waktu tunggu 60 detik
Untuk NAK, alasannya juga harus disertakan sebagai byte pertama dari data tambahan. Alasannya meliputi:
- 0x00: Tidak didukung
- 0x01: Perangkat sibuk
- 0x02: Tidak diizinkan karena status saat ini
- 0x03: Tidak diizinkan karena kode autentikasi pesan salah
- 0x04: Tindakan perangkat yang berlebihan
Dari contoh sebelumnya, jika cincin seharusnya NAK disebabkan karena Penyedia sibuk dengan tugas lain, paket yang ditampilkan harus ditetapkan ke 0xFF02000401040100
dengan
- 0xFF: peristiwa ACK
- 0x02: Kode NAK
- 0x0004: Panjang data tambahan
- 0x01: Alasan NAK, Perangkat sibuk
- 0x0401: Grup dan kode pesan tindakan
- 0x00: Status saat ini untuk kode dan grup pesan tindakan, semua komponen berhenti berdering
Contoh:
#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);
}