diff --git a/feeds/packages/libs/libqmi/patches/001-fix-nmea.patch b/feeds/packages/libs/libqmi/patches/001-fix-nmea.patch new file mode 100644 index 0000000..4bf445e --- /dev/null +++ b/feeds/packages/libs/libqmi/patches/001-fix-nmea.patch @@ -0,0 +1,153 @@ +Index: libqmi-1.24.8/build-aux/qmi-codegen/VariableString.py +=================================================================== +--- libqmi-1.24.8.orig/build-aux/qmi-codegen/VariableString.py ++++ libqmi-1.24.8/build-aux/qmi-codegen/VariableString.py +@@ -38,6 +38,11 @@ class VariableString(Variable): + self.private_format = 'gchar *' + self.public_format = self.private_format + ++ if 'force-ascii' in dictionary: ++ self.force_ascii = True ++ else: ++ self.force_ascii = False ++ + if 'fixed-size' in dictionary: + self.is_fixed_size = True + # Fixed-size strings +@@ -104,8 +109,9 @@ class VariableString(Variable): + else: + translations['n_size_prefix_bytes'] = self.n_size_prefix_bytes + translations['max_size'] = self.max_size if self.max_size != '' else '0' ++ translations['ascii'] = 'ascii' if self.force_ascii else '' + template = ( +- '${lp}if (!qmi_message_tlv_read_string (message, init_offset, &offset, ${n_size_prefix_bytes}, ${max_size}, &(${variable_name}), ${error}))\n' ++ '${lp}if (!qmi_message_tlv_read_${ascii}string (message, init_offset, &offset, ${n_size_prefix_bytes}, ${max_size}, &(${variable_name}), ${error}))\n' + '${lp} goto ${tlv_out};\n') + f.write(string.Template(template).substitute(translations)) + +@@ -151,12 +157,13 @@ class VariableString(Variable): + else: + translations['n_size_prefix_bytes'] = self.n_size_prefix_bytes + translations['max_size'] = self.max_size if self.max_size != '' else '0' ++ translations['ascii'] = 'ascii' if self.force_ascii else '' + template = ( + '\n' + '${lp}{\n' + '${lp} gchar *tmp;\n' + '\n' +- '${lp} if (!qmi_message_tlv_read_string (message, init_offset, &offset, ${n_size_prefix_bytes}, ${max_size}, &tmp, &error))\n' ++ '${lp} if (!qmi_message_tlv_read_${ascii}string (message, init_offset, &offset, ${n_size_prefix_bytes}, ${max_size}, &tmp, &error))\n' + '${lp} goto out;\n' + '${lp} g_string_append (printable, tmp);\n' + '${lp} g_free (tmp);\n' +Index: libqmi-1.24.8/data/qmi-service-pds.json +=================================================================== +--- libqmi-1.24.8.orig/data/qmi-service-pds.json ++++ libqmi-1.24.8/data/qmi-service-pds.json +@@ -164,6 +164,7 @@ + "id" : "0x10", + "type" : "TLV", + "since" : "1.0", ++ "force-ascii" : "1", + "format" : "string", + "max-size" : "200" }, + { "name" : "Extended NMEA Position", +Index: libqmi-1.24.8/src/libqmi-glib/qmi-message.c +=================================================================== +--- libqmi-1.24.8.orig/src/libqmi-glib/qmi-message.c ++++ libqmi-1.24.8/src/libqmi-glib/qmi-message.c +@@ -1260,15 +1260,15 @@ qmi_message_tlv_read_gdouble (QmiMessage + *offset = *offset + 8; + return TRUE; + } +- +-gboolean +-qmi_message_tlv_read_string (QmiMessage *self, ++static gboolean ++qmi_message_tlv_read_string_worker (QmiMessage *self, + gsize tlv_offset, + gsize *offset, + guint8 n_size_prefix_bytes, + guint16 max_size, + gchar **out, +- GError **error) ++ GError **error, ++ gboolean force_ascii) + { + const guint8 *ptr; + guint16 string_length; +@@ -1325,7 +1325,7 @@ qmi_message_tlv_read_string (QmiMessage + * but hey, the strings read using this method should all really be ASCII-7 + * and we're trying to do our best to overcome modem firmware problems... + */ +- if (__qmi_string_utf8_validate_printable (ptr, valid_string_length)) { ++ if (__qmi_string_utf8_validate_printable (ptr, valid_string_length) || force_ascii) { + *out = g_malloc (valid_string_length + 1); + memcpy (*out, ptr, valid_string_length); + (*out)[valid_string_length] = '\0'; +@@ -1348,6 +1348,34 @@ qmi_message_tlv_read_string (QmiMessage + } + + gboolean ++qmi_message_tlv_read_string (QmiMessage *self, ++ gsize tlv_offset, ++ gsize *offset, ++ guint8 n_size_prefix_bytes, ++ guint16 max_size, ++ gchar **out, ++ GError **error) ++{ ++ return qmi_message_tlv_read_string_worker (self, tlv_offset, offset, ++ n_size_prefix_bytes, max_size, out, error, FALSE); ++} ++ ++ ++gboolean ++qmi_message_tlv_read_asciistring (QmiMessage *self, ++ gsize tlv_offset, ++ gsize *offset, ++ guint8 n_size_prefix_bytes, ++ guint16 max_size, ++ gchar **out, ++ GError **error) ++{ ++ return qmi_message_tlv_read_string_worker (self, tlv_offset, offset, ++ n_size_prefix_bytes, max_size, out, error, TRUE); ++} ++ ++ ++gboolean + qmi_message_tlv_read_fixed_size_string (QmiMessage *self, + gsize tlv_offset, + gsize *offset, +Index: libqmi-1.24.8/src/libqmi-glib/qmi-message.h +=================================================================== +--- libqmi-1.24.8.orig/src/libqmi-glib/qmi-message.h ++++ libqmi-1.24.8/src/libqmi-glib/qmi-message.h +@@ -933,6 +933,14 @@ gboolean qmi_message_tlv_read_string (Qm + gchar **out, + GError **error); + ++gboolean qmi_message_tlv_read_asciistring (QmiMessage *self, ++ gsize tlv_offset, ++ gsize *offset, ++ guint8 n_size_prefix_bytes, ++ guint16 max_size, ++ gchar **out, ++ GError **error); ++ + /** + * qmi_message_tlv_read_fixed_size_string: + * @self: a #QmiMessage. +Index: libqmi-1.24.8/data/qmi-service-loc.json +=================================================================== +--- libqmi-1.24.8.orig/data/qmi-service-loc.json ++++ libqmi-1.24.8/data/qmi-service-loc.json +@@ -323,6 +323,7 @@ + "id" : "0x01", + "type" : "TLV", + "since" : "1.22", ++ "force-ascii" : "1", + "format" : "string" } ] }, + + // *********************************************************************************