From 72123ccaf1afca0266958c88259894ef31609c5a Mon Sep 17 00:00:00 2001 From: Adam Wiethuechter Date: Thu, 25 Jan 2024 16:59:33 -0500 Subject: [PATCH] fix: session id treated like strings ID Types 3 and 4 are byte structures as defined in F3411-22a and should be treated as such. --- RemoteIDModule/RemoteIDModule.ino | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/RemoteIDModule/RemoteIDModule.ino b/RemoteIDModule/RemoteIDModule.ino index fd3bcd7..7df6ca1 100644 --- a/RemoteIDModule/RemoteIDModule.ino +++ b/RemoteIDModule/RemoteIDModule.ino @@ -217,9 +217,15 @@ static void set_data(Transport &t) strnlen((const char *)basic_id.uas_id, 20) > 0) { g.set_by_name_uint8("UAS_TYPE", basic_id.ua_type); g.set_by_name_uint8("UAS_ID_TYPE", basic_id.id_type); - char uas_id[21] {}; - ODID_COPY_STR(uas_id, basic_id.uas_id); - g.set_by_name_string("UAS_ID", uas_id); + if (basic_id.id_type == 1 || basic_id.id_type == 2) { + // Serial Numbers and CAA Assigned can be treated like strings + char uas_id[21] {}; + ODID_COPY_STR(uas_id, basic_id.uas_id); + g.set_by_name_string("UAS_ID", uas_id); // this internally does a strncpy() + } else { + // any other ID Type should be treated as bytes + memcpy(g.uas_id, basic_id.uas_id, 20); + } } } @@ -228,7 +234,7 @@ static void set_data(Transport &t) // from parameters UAS_data.BasicID[0].UAType = (ODID_uatype_t)g.ua_type; UAS_data.BasicID[0].IDType = (ODID_idtype_t)g.id_type; - ODID_COPY_STR(UAS_data.BasicID[0].UASID, g.uas_id); + memcpy(UAS_data.BasicID[0].UASID, g.uas_id, 20); UAS_data.BasicIDValid[0] = 1; // BasicID 2 @@ -236,7 +242,7 @@ static void set_data(Transport &t) // from parameters UAS_data.BasicID[1].UAType = (ODID_uatype_t)g.ua_type_2; UAS_data.BasicID[1].IDType = (ODID_idtype_t)g.id_type_2; - ODID_COPY_STR(UAS_data.BasicID[1].UASID, g.uas_id_2); + memcpy(UAS_data.BasicID[1].UASID, g.uas_id_2, 20); UAS_data.BasicIDValid[1] = 1; } else if (strcmp((const char*)g.uas_id, (const char*)basic_id.uas_id) != 0) { /* @@ -248,7 +254,7 @@ static void set_data(Transport &t) strnlen((const char *)basic_id.uas_id, 20) > 0) { UAS_data.BasicID[1].UAType = (ODID_uatype_t)basic_id.ua_type; UAS_data.BasicID[1].IDType = (ODID_idtype_t)basic_id.id_type; - ODID_COPY_STR(UAS_data.BasicID[1].UASID, basic_id.uas_id); + memcpy(UAS_data.BasicID[1].UASID, basic_id.uas_id, 20); UAS_data.BasicIDValid[1] = 1; } } @@ -261,12 +267,12 @@ static void set_data(Transport &t) if (strcmp((const char*)UAS_data.BasicID[0].UASID, (const char*)basic_id.uas_id) != 0 && strnlen((const char *)basic_id.uas_id, 20) > 0) { UAS_data.BasicID[1].UAType = (ODID_uatype_t)basic_id.ua_type; UAS_data.BasicID[1].IDType = (ODID_idtype_t)basic_id.id_type; - ODID_COPY_STR(UAS_data.BasicID[1].UASID, basic_id.uas_id); + memcpy(UAS_data.BasicID[1].UASID, basic_id.uas_id, 20); UAS_data.BasicIDValid[1] = 1; } else { UAS_data.BasicID[0].UAType = (ODID_uatype_t)basic_id.ua_type; UAS_data.BasicID[0].IDType = (ODID_idtype_t)basic_id.id_type; - ODID_COPY_STR(UAS_data.BasicID[0].UASID, basic_id.uas_id); + memcpy(UAS_data.BasicID[0].UASID, basic_id.uas_id, 20); UAS_data.BasicIDValid[0] = 1; } }