rendered paste bodydiff --git a/drivers/atmodem/phonebook.c b/drivers/atmodem/phonebook.c
index 71b8921..b736d0c 100644
--- a/drivers/atmodem/phonebook.c
+++ b/drivers/atmodem/phonebook.c
@@ -43,7 +43,8 @@
#define CHARSET_UTF8 1
#define CHARSET_UCS2 2
-#define CHARSET_SUPPORT (CHARSET_UTF8 | CHARSET_UCS2)
+#define CHARSET_IRA 4
+#define CHARSET_SUPPORT (CHARSET_IRA | CHARSET_UTF8 | CHARSET_UCS2)
static const char *none_prefix[] = { NULL };
static const char *cpbr_prefix[] = { "+CPBR:", NULL };
@@ -85,6 +86,9 @@ static const char *best_charset(int supported)
{
const char *charset = "Invalid";
+ if (supported & CHARSET_IRA)
+ charset = "IRA";
+
if (supported & CHARSET_UCS2)
charset = "UCS2";
@@ -104,6 +108,9 @@ static void at_cpbr_notify(GAtResult *result, gpointer user_data)
dump_response("at_cbpr_notify", 1, result);
+ if (at->pb->supported & CHARSET_IRA)
+ current = CHARSET_IRA;
+
if (at->pb->supported & CHARSET_UCS2)
current = CHARSET_UCS2;
@@ -180,6 +187,9 @@ static void at_cpbr_notify(GAtResult *result, gpointer user_data)
g_free(sip_uri_utf8);
g_free(tel_uri_utf8);
} else {
+ /* In the case of IRA charset, assume these are Latin1
+ * characters, same as in UTF8
+ */
ofono_phonebook_entry(cbd->modem, index, number, type,
text, hidden, group, adnumber,
adtype, secondtext, email,
@@ -472,6 +482,8 @@ static void at_list_charsets_cb(gboolean ok, GAtResult *result,
at->pb->supported |= CHARSET_UTF8;
else if (!strcmp(charset, "UCS2"))
at->pb->supported |= CHARSET_UCS2;
+ else if (!strcmp(charset, "IRA"))
+ at->pb->supported |= CHARSET_IRA;
}
if (in_list && !g_at_result_iter_close_list(&iter))