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