شكر وتقدير

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

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

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

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

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

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

من المثال السابق، إذا كان من المفترض أن تكون الحلقة باستخدام 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);
}