Ucapan terima kasih
Beberapa kode pesan memerlukan konfirmasi dari penerima. Dalam kasus ini, penerima harus mengirim 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 |
Pengakuan harus dikirim langsung setelah pesan diterima sehingga
pengirim dapat bertindak dengan sesuai. Sebuah {i>acknowledgment<i} harus berisi grup pesan
, kode, dan status saat ini untuk pesan yang dirujuknya. Misalnya, jika
Penyedia akan menerima pesan yang berisi tindakan dering (0x04010002013C
),
aplikasi harus mengonfirmasi tindakan dengan mengirimkan kembali 0xFF0100040401013C
, dengan:
- 0xFF: Peristiwa ACK
- 0x01: Kode ACK
- 0x0004: Panjang data tambahan
- 0x0401: Grup dan kode pesan tindakan
- 0x013C: Status saat ini dari grup dan kode pesan tindakan, berdering kanan dan Waktu tunggu 60 detik
Untuk NAK, alasannya juga harus dimasukkan sebagai byte pertama dari layanan otomatis dan data skalabel. 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 redundan
Dari contoh sebelumnya, jika cincin itu akan NAK, bukan karena
Penyedia sedang sibuk dengan tugas lain, paket yang dikembalikan harus diatur ke
0xFF02000401040100
di mana
- 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 grup pesan tindakan dan kode, 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);
}