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