UPSTREAM: mm-sim-qmi: parse ICCID as hex instead of BCD

BUG=b:181736799
TEST=unit tests; cut tryjob, test by vendor

Change-Id: I27a2ee9b19d2eca14cff32ea561419bd9f0d1d57
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/modemmanager-next/+/2950383
Tested-by: Eric Caruso <ejcaruso@chromium.org>
Reviewed-by: Madhav . <madhavadas@google.com>
Commit-Queue: Eric Caruso <ejcaruso@chromium.org>
diff --git a/src/mm-sim-qmi.c b/src/mm-sim-qmi.c
index be58997..6e479aa 100644
--- a/src/mm-sim-qmi.c
+++ b/src/mm-sim-qmi.c
@@ -336,6 +336,7 @@
 {
     GError *error = NULL;
     GArray *read_result;
+    gchar *raw_iccid;
     gchar *iccid;
 
     read_result = uim_read_finish (client, res, &error);
@@ -345,10 +346,14 @@
         return;
     }
 
-    iccid = mm_bcd_to_string ((const guint8 *) read_result->data, read_result->len,
-                              TRUE /* low_nybble_first */);
-    g_assert (iccid);
-    g_task_return_pointer (task, iccid, g_free);
+    raw_iccid = mm_utils_bin2hexstr ((const guint8 *) read_result->data, read_result->len);
+    g_assert (raw_iccid);
+    iccid = mm_3gpp_parse_iccid (raw_iccid, &error);
+    if (!iccid) {
+        g_task_return_error (task, error);
+    } else {
+        g_task_return_pointer (task, iccid, g_free);
+    }
     g_object_unref (task);
 
     g_array_unref (read_result);