Благодарности

Некоторые коды сообщений требуют подтверждения от получателя. В этом случае получатель должен отправить либо подтверждение (ACK), либо отрицательное подтверждение (NAK) в течение 1 секунды после получения сообщения.

Имя группы сообщений Стоимость
Подтверждение 0xFF
Имя кода подтверждения Стоимость
ПОДТВЕРЖДЕНИЕ 0x01
НАК 0x02

Подтверждения следует отправлять сразу после получения сообщения, чтобы отправитель мог действовать соответствующим образом. Подтверждение должно содержать группу сообщений, код и текущее состояние сообщения, на которое оно ссылается. Например, если провайдер получает сообщение, содержащее кольцевое действие ( 0x04010002013C ), он должен подтвердить действие, отправив обратно 0xFF0100040401013C где:

  • 0xFF: событие ACK
  • 0x01: код подтверждения
  • 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);
}