Teşekkür

Bazı mesaj kodları için alıcının onayı gerekir. Böyle durumlarda alıcı bir onay (ACK) göndermeli bir negatif onay (NAK) alır.

Mesaj Grubu Adı Değer
Onay 0xFF
Onay Kodu Adı Değer
Onayla 0x01
NAK 0x02

Onaylar, ileti alındıktan hemen sonra gönderilmelidir. buna göre hareket edebilir. Onay, mesaj grubunu içermelidir , kodu ve geçerli durumu için de uygun olacaktır. Örneğin, Sağlayıcı, zil işlemini (0x04010002013C) içeren bir mesaj alır. Aşağıdaki durumlarda 0xFF0100040401013C geri göndererek işlemi onaylamalıdır:

  • 0xFF: ACK etkinliği
  • 0x01: ACK kodu
  • 0x0004: Ek veri uzunluğu
  • 0x0401: İşlem mesajı grubu ve kodu
  • 0x013C: İşlem mesajı grubunun ve kodunun geçerli durumu, sağı çaldır ve 60 saniye zaman aşımı

Bir NAK için neden, dışı verilerdir. Nedenler arasında şunlar yer alır:

  • 0x00: Desteklenmiyor
  • 0x01: Cihaz meşgul
  • 0x02: Geçerli durum nedeniyle izin verilmiyor
  • 0x03: Yanlış mesaj kimlik doğrulama kodu nedeniyle izin verilmiyor
  • 0x04: Gereksiz cihaz işlemi

Önceki örnekten devam edersek halka Sağlayıcı başka bir görevle meşgul. Döndürülen paket 0xFF02000401040100 burada:

  • 0xFF: ACK etkinliği
  • 0x02: NAK kodu
  • 0x0004: Ek veri uzunluğu
  • 0x01: NAK nedeni, Cihaz meşgul
  • 0x0401: İşlem mesajı grubu ve kodu
  • 0x00: İşlem mesajı grubunun ve kodunun mevcut durumu, tüm bileşenler çalmayı kes

Örnek:

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