אישורים

חלק מהקודים של ההודעות מחייבים אישור מהנמען. במקרה הזה, המקבל צריך לשלוח אישור (ACK) או אישור שלילי (NAK) תוך שנייה אחת מקבלת ההודעה.

שם קבוצת ההודעות ערך
אישור 0xFF
השם של קוד האישור ערך
ACK 0x01
NAK 0x02

יש לשלוח את האישור ישירות לאחר קבלת ההודעה כדי השולח יוכל לפעול בהתאם. אישור צריך להכיל את קבוצת ההודעות , את הקוד ואת המצב הנוכחי של ההודעה שאליה היא מתייחסת. לדוגמה, אם הספק מקבל הודעה שמכילה את פעולת הצלצול (0x04010002013C), הוא צריך לאשר את הפעולה באמצעות שליחת 0xFF0100040401013C בחזרה כאשר:

  • 0xFF: אירוע ACK
  • 0x01: קוד ACK
  • 0x0004: אורך נתונים נוסף
  • 0x0401: קבוצת הודעות הפעולה והקוד
  • 0x013C: המצב הנוכחי של קבוצת הודעות הפעולה והקוד, מצלצלת בצד ימין זמן קצוב לתפוגה של 60 שניות

ב-NAK, צריך לכלול גם את הסיבה בתור הבייט הראשון של ההוספה . הסיבות למחיר יכולות להיות:

  • 0x00: לא נתמך
  • 0x01: המכשיר לא פנוי
  • 0x02: לא מורשה עקב המצב הנוכחי
  • 0x03: לא מורשה עקב קוד אימות הודעה שגוי
  • 0x04: פעולה מיותרת במכשיר

מהדוגמה הקודמת, אם הטבעת הייתה אמורה להיות NAK במקום זאת בגלל הספק עסוק במשימה אחרת, החבילה שמוחזרת צריכה להיות מוגדרת 0xFF02000401040100 איפה

  • 0xFF: אירוע ACK
  • 0x02: קוד NAK
  • 0x0004: אורך נתונים נוסף
  • 0x01: הסיבה ל-NAK, המכשיר תפוס
  • 0x0401: קבוצת הודעות הפעולה והקוד
  • 0x00: המצב הנוכחי של קבוצת הודעות הפעולה והקוד, כל הרכיבים הפסקת הצלצול

דוגמה:

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