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