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

Некоторые коды сообщений требуют подтверждения от получателя. В этом случае получатель должен отправить либо подтверждение (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);
}