आभार
कुछ मैसेज कोड के लिए, उनकी सहमति लेना ज़रूरी होता है. इस मामले में, मैसेज स्वीकार करने वाले व्यक्ति को मैसेज मिलने के एक सेकंड के अंदर, उस शिकायत को स्वीकार करना होगा जिसे स्वीकार करना होगा (ACK) या नेगेटिव को स्वीकार करना होगा.
मैसेज ग्रुप का नाम | वैल्यू |
---|---|
स्वीकार है | 0xएफ़एफ़ |
पुष्टि करने वाले कोड का नाम | वैल्यू |
---|---|
एसीई | 0x01 |
नाक | 0x02 |
पुष्टि करने वाला मैसेज मिलने के बाद, हम आपको बस यह जानकारी देते हैं कि मैसेज पाने वाला व्यक्ति जब चाहे, उस पर कार्रवाई कर सकता है. स्वीकार की जाने वाली जानकारी में, मैसेज का ग्रुप, कोड, और उस मैसेज के लिए मौजूदा स्थिति होनी चाहिए जिसका वह रेफ़रंस दे रहा है. उदाहरण के लिए, अगर सेवा देने वाली कंपनी को कोई मैसेज मिलता है जिसमें रिंग कार्रवाई (0x04010002013C
) शामिल है, तो उसे 0xFF0100040401013C
को वहां वापस भेजकर कार्रवाई को स्वीकार करना चाहिए जहां:
- 0xFF: ACK इवेंट
- 0x01: ACK कोड
- 0x0004: अतिरिक्त डेटा लंबाई
- 0x0401: कार्रवाई मैसेज समूह और कोड
- 0x013C: कार्रवाई मैसेज ग्रुप और कोड की मौजूदा स्थिति, दाईं ओर रिंग करें और 60 सेकंड का समय खत्म हो जाता है
एक NAK के लिए, कारण को अतिरिक्त डेटा के पहले बाइट के रूप में भी शामिल किया जाना चाहिए. इसकी ये वजहें हो सकती हैं:
- 0x00: समर्थित नहीं
- 0x01: डिवाइस व्यस्त
- 0x02: मौजूदा स्थिति की वजह से अनुमति नहीं है
- 0x03: गलत संदेश प्रमाणीकरण कोड के कारण अनुमति नहीं है
- 0x04: डिवाइस की अतिरिक्त कार्रवाई
पिछले उदाहरण में, अगर रिंग को किसी दूसरे टास्क में व्यस्त होने की वजह से NAK's पर सेट किया गया था, तो लौटाया गया पैकेट 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);
}