תודות
קודי הודעות מסוימים מחייבים אישור מהמקבל. במקרה כזה, המקבל צריך לשלוח אישור (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);
}