شكر وتقدير

تتطلّب بعض رموز الرسائل تأكيدًا من المستلِم. وفي هذه الحالة، أن يرسل المستلِم إقرارًا (ACK) أو إقرار سلبي (NAK) خلال ثانية واحدة من استلام الرسالة.

اسم مجموعة الرسائل القيمة
إقرار 0xFF
اسم رمز الإقرار القيمة
الإقرار 0x01
NAK 0x02

يجب إرسال الإقرارات مباشرةً بعد استلام الرسالة حتى لا يمكن للمرسل التصرف وفقًا لذلك. يجب أن يحتوي الإقرار على مجموعة الرسائل ، الرمز الحالي والحالة الحالية للرسالة التي تشير إليها. على سبيل المثال، إذا يتلقى موفّر الخدمة رسالة تحتوي على إجراء الرنين (0x04010002013C) يجب أن تُقر الشركة بالإجراء من خلال إعادة إرسال 0xFF0100040401013C حيث:

  • 0xFF: حدث ACK
  • 0x01: رمز ACK
  • 0x0004: طول البيانات الإضافية
  • 0x0401: مجموعة رسالة الإجراء ورمزها
  • 0x013C: الحالة الحالية لمجموعة رسالة الإجراء ورمزها، الرنين لليمين و مهلة 60 ثانية

بالنسبة إلى NAK، ينبغي أيضًا تضمين السبب باعتباره البايت الأول من البيانات. تشمل الأسباب ما يلي:

  • 0x00: غير متاح
  • 0x01: الجهاز مشغول
  • 0x02: غير مسموح به بسبب الحالة الحالية
  • 0x03: غير مسموح به بسبب وجود رمز غير صحيح لمصادقة الرسالة
  • 0x04: إجراء متكرر على الجهاز

من المثال السابق، إذا كان من المفترض أن تكون الخاتم NAK بدلاً من ذلك بسبب الموفر مشغول بمهمة أخرى، يجب تعيين الحزمة التي تم إرجاعها على مكان 0xFF02000401040100

  • 0xFF: حدث ACK
  • 0x02: رمز NAK
  • 0x0004: طول البيانات الإضافية
  • 0x01: السبب غير معروف، الجهاز مشغول
  • 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);
}