Благодарности
Некоторые коды сообщений требуют подтверждения от получателя. В этом случае получатель должен отправить либо подтверждение (ACK), либо отрицательное подтверждение (NAK) в течение 1 секунды после получения сообщения.
| Имя группы сообщений | Ценить | 
|---|---|
| Благодарность | 0xFF | 
| Имя кода подтверждения | Ценить | 
|---|---|
| ПОДТВЕРЖДЕНИЕ | 0x01 | 
| НАК | 0x02 | 
 Подтверждения следует отправлять сразу после получения сообщения, чтобы отправитель мог действовать соответствующим образом. Подтверждение должно содержать группу сообщений, код и текущее состояние сообщения, на которое оно ссылается. Например, если поставщик получает сообщение, содержащее действие звонка ( 0x04010002013C ), он должен подтвердить действие, отправив обратно 0xFF0100040401013C , где:
- 0xFF: событие подтверждения
- 0x01: код подтверждения
- 0x0004: Дополнительная длина данных.
- 0x0401: группа и код сообщения о действии.
- 0x013C: Текущее состояние группы и кода сообщения о действии, правый звонок и тайм-аут 60 секунд.
Для NAK причина также должна быть включена в качестве первого байта дополнительных данных. Причины включают в себя:
- 0x00: Не поддерживается.
- 0x01: Устройство занято.
- 0x02: Не разрешено из-за текущего состояния.
- 0x03: Не разрешено из-за неправильного кода аутентификации сообщения.
- 0x04: действие резервного устройства.
 В предыдущем примере, если кольцо должно было получить NAK вместо этого из-за того, что провайдер занят другой задачей, возвращаемый пакет должен быть установлен в 0xFF02000401040100 , где
- 0xFF: событие подтверждения
- 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);
}