Onaylar

Bazı mesaj kodları, alıcının onayını gerektirir. Bu durumda alıcı, iletiyi aldıktan sonraki 1 saniye içinde onay (ACK) veya negatif onay (NAK) gönderir.

Mesaj Grubu Adı Değer
Onay 0xFF
Onay Kodu Adı Değer
ACK 0x01
199 0x02

Gönderenin mesajı buna göre gönderebilmesi için teşekkürler, mesaj alındıktan hemen sonra gönderilmelidir. Onay, ilişkili olduğu iletinin mesaj grubunu, kodunu ve geçerli durumunu içermelidir. Örneğin, Sağlayıcı zil işlemini (0x04010002013C) içeren bir mesaj alırsa aşağıdaki adımları uygulayarak 0xFF0100040401013C işlemini geri göndererek işlemi kabul etmelidir:

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

NAK değeri için neden, ek verilerin ilk baytı olarak da dahil edilmelidir. Bunun nedenlerinden bazıları şunlardır:

  • 0x00: Desteklenmez
  • 0x01: Cihaz meşgul
  • 0x02: Mevcut durum nedeniyle izin verilmiyor
  • 0x03: Yanlış ileti kimlik doğrulama kodu nedeniyle izin verilmiyor
  • 0x04: Gereksiz cihaz işlemi

Önceki örnekte, Sağlayıcı başka bir görevle meşgul olduğundan bunun yerine yüzük NAK' ise, döndürülen paket 0xFF02000401040100 olarak ayarlanmalıdır.

  • 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 geçerli durumu, tüm bileşenlerin çalması durur

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