일부 메시지 코드는 수신자의 확인이 필요합니다. 이 경우
수신자는 확인 (ACK) 또는
부정적 승인 (NAK)으로 응답합니다.
메시지 그룹 이름
값
확인
0xFF
확인 코드 이름
값
확인
0x01
NAK
0x02
확인은 메시지가 수신된 직후에 전송되어야 하므로
발신자가 적절하게 조치를 취할 수 있습니다. 확인에는 메시지 그룹이 포함되어야 합니다.
, 코드, 현재 상태가 참조되는 메시지의 현재 상태를 나타냅니다. 예를 들어
제공업체가 전화 수신 작업 (0x04010002013C)이 포함된 메시지를 수신함
0xFF0100040401013C를 다시 전송하여 작업을 확인해야 합니다. 각 항목의 의미는 다음과 같습니다.
0xFF: ACK 이벤트
0x01: ACK 코드
0x0004: 추가 데이터 길이
0x0401: 작업 메시지 그룹 및 코드
0x013C: 작업 메시지 그룹 및 코드의 현재 상태, 오른쪽 벨소리 및
60초 제한 시간
NAK의 경우 이유는 추가 조치의 첫 번째 바이트로도 포함되어야 합니다.
데이터를 수집하는 데 사용됩니다 이유는 다음과 같습니다.
0x00: 지원되지 않음
0x01: 기기 사용 중
0x02: 현재 상태로 인해 허용되지 않음
0x03: 잘못된 메시지 인증 코드로 인해 허용되지 않음
0x04: 중복 기기 작업
이전 예에서,
공급자가 다른 작업으로 바쁜 경우, 반환된 패킷은 다음과 같이 설정되어야 합니다.
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 0xFFstaticvoidfp_msg_send_ack(uint8_tmsgGroup,uint8_tmsgCode){FP_MESSAGE_STREAMreq={FP_MSG_GROUP_ACK,FP_MSG_ACK,0,2};req.data[0]=msgGroup;req.data[1]=msgCode;fp_send((uint8_t*)&req);}staticvoidfp_msg_send_nak(uint8_treason,uint8_tmsgGroup,uint8_tmsgCode){//reason= 0x00: Not supported, 0x01: Device busy, or 0x02: Not allowed due to current stateFP_MESSAGE_STREAMreq={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);}
[null,null,["최종 업데이트: 2025-08-13(UTC)"],[[["\u003cp\u003eSome message codes require an acknowledgement (ACK) or negative-acknowledgement (NAK) response within 1 second, sent only when specified.\u003c/p\u003e\n"],["\u003cp\u003eAcknowledgements (ACKs) use the code \u003ccode\u003e0xFF01\u003c/code\u003e and should include the referenced message's group, code, and current state.\u003c/p\u003e\n"],["\u003cp\u003eNegative-acknowledgements (NAKs) use the code \u003ccode\u003e0xFF02\u003c/code\u003e and provide a reason code (e.g., \u003ccode\u003e0x01\u003c/code\u003e for Device busy) along with the message's group and code.\u003c/p\u003e\n"],["\u003cp\u003eThe acknowledgement structure includes the event (ACK/NAK), code, additional data length, and relevant message details.\u003c/p\u003e\n"],["\u003cp\u003eExample code snippets demonstrate sending ACKs and NAKs using pre-defined message group and code values.\u003c/p\u003e\n"]]],["Receivers must send an acknowledgement (ACK) or negative-acknowledgement (NAK) within one second for specific message codes. ACKs (0x01) and NAKs (0x02) belong to the 0xFF message group. Responses include the message group, code, and current state of the action, and for NAKs, a reason. Example reasons: Not supported (0x00), Device busy (0x01), Not allowed (0x02), Incorrect message code (0x03) or Redundant action (0x04). Example for ring action: `0xFF0100040401013C` or NAK :`0xFF02000401040100`.\n"],null,["Acknowledgements\n----------------\n\nSome message codes require an acknowledgement from the receiver. In this case,\nthe receiver should send either an acknowledgement (ACK) or\nnegative-acknowledgement (NAK) within 1 second of receiving the message.\n| **Note:** Not all messages require an ACK. An ACK should only be sent when the spec above recommends doing so. Unexpected ACKs should be ignored by the receiver.\n\n| Message Group Name | Value |\n|--------------------|-------|\n| Acknowledgement | 0xFF |\n\n| Acknowledgement Code Name | Value |\n|---------------------------|-------|\n| ACK | 0x01 |\n| NAK | 0x02 |\n\nAcknowledgments should be sent directly after message is received so that the\nsender can act accordingly. An acknowledgment should contain the message group\n, code and current state for the message that it is referencing. For example, if\nthe Provider receives a message containing the ring action (`0x04010002013C`),\nit should acknowledge the action by sending back `0xFF0100040401013C` where:\n\n- 0xFF: ACK event\n- 0x01: ACK code\n- 0x0004: Additional data length\n- 0x0401: The action message group and code\n- 0x013C: The current state of the action message group and code, ring right and 60 seconds timeout\n\nFor a NAK, the reason should also be included as the first byte of additional\ndata. Reasons include:\n\n- 0x00: Not supported\n- 0x01: Device busy\n- 0x02: Not allowed due to current state\n- 0x03: Not allowed due to incorrect message authentication code\n- 0x04: Redundant device action\n\nFrom the previous example, if the ring were to be NAK'ed instead due to the\nProvider being busy with another task, the returned packet should be set to\n`0xFF02000401040100` where\n\n- 0xFF: ACK event\n- 0x02: NAK code\n- 0x0004: Additional data length\n- 0x01: NAK reason, Device busy\n- 0x0401: The action message group and code\n- 0x00: The current state of the action message group and code, all components stop ringing\n\nExample: \n\n #define FP_MSG_ACK 0x01\n #define FP_MSG_NAK 0x02\n #define FP_MSG_GROUP_ACK 0xFF\n\n\n static void fp_msg_send_ack(uint8_t msgGroup, uint8_t msgCode)\n {\n FP_MESSAGE_STREAM req = {FP_MSG_GROUP_ACK, FP_MSG_ACK, 0, 2};\n\n req.data[0] = msgGroup;\n req.data[1] = msgCode;\n\n fp_send((uint8_t *)&req);\n }\n\n static void fp_msg_send_nak(uint8_t reason, uint8_t msgGroup, uint8_t msgCode)\n {\n //reason= 0x00: Not supported, 0x01: Device busy, or 0x02: Not allowed due to current state\n FP_MESSAGE_STREAM req = {FP_MSG_GROUP_ACK, FP_MSG_NAK, 0, 3};\n\n req.data[0] = reason;\n req.data[1] = msgGroup;\n req.data[2] = msgCode;\n\n fp_send((uint8_t *)&req);\n }"]]