תודות

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

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

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

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

עבור ה-NAK, עליכם לכלול את הסיבה גם בתור הבייט הראשון של נתונים נוספים. הסיבות יכולות להיות:

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

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

  • 0xFF: אירוע ACK
  • 0x02: NAK
  • 0x0004: אורך נתונים נוספים
  • 0x01: סיבה לא ידועה, המכשיר לא פנוי
  • 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);
}