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);
}