Podziękowania

Niektóre kody wiadomości wymagają potwierdzenia przez odbiorcę. W tym przypadku odbiorca powinien wysłać potwierdzenie (ACK) lub Negatywne potwierdzenie (NAK) w ciągu 1 sekundy od otrzymania wiadomości.

Nazwa grupy wiadomości Wartość
Potwierdzenie 0xFF
Nazwa kodu potwierdzenia Wartość
POTWIERDŹ 0x01
NAK 0x02

Potwierdzenia należy wysyłać bezpośrednio po otrzymaniu wiadomości, aby może podjąć odpowiednie działania. Potwierdzenie powinno zawierać grupę wiadomości , kod oraz bieżący stan wiadomości, do której się odnosi. Na przykład, jeśli Dostawca otrzyma wiadomość z dzwonieniem (0x04010002013C), powinien potwierdzić działanie, odsyłając 0xFF0100040401013C, gdzie:

  • 0xFF: zdarzenie potwierdzenia
  • 0x01: kod potwierdzenia
  • 0x0004: dodatkowa długość danych
  • 0x0401: grupa wiadomości i kod działania
  • 0x013C: bieżący stan grupy wiadomości i kodu działania, zadzwoń po prawej Limit czasu wynosi 60 sekund

W przypadku NAK przyczynę należy również podać jako pierwszy bajt dodatkowych i skalowalnych danych. Możliwe przyczyny:

  • 0x00: nieobsługiwane
  • 0x01: Urządzenie jest zajęte
  • 0x02: niedozwolone ze względu na bieżący stan
  • 0x03: niedozwolone z powodu nieprawidłowego kodu uwierzytelniania wiadomości
  • 0x04: Nadmiarowe działanie urządzenia

Z poprzedniego przykładu, gdyby pierścień zostałby zamknięty ze względu na Dostawca jest zajęty innym zadaniem, zwrócony pakiet powinien mieć wartość 0xFF02000401040100, gdzie

  • 0xFF: zdarzenie potwierdzenia
  • 0x02: kod NAK
  • 0x0004: dodatkowa długość danych
  • 0x01: powód NAK, Urządzenie jest zajęte
  • 0x0401: grupa wiadomości i kod działania
  • 0x00: bieżący stan grupy wiadomości i kodu działania, wszystkie komponenty Przestań dzwonić

Przykład:

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