summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndrzej Zaborowski <andrew.zaborowski@intel.com>2009-08-05 09:08:40 +0200
committerDenis Kenzior <denkenz@gmail.com>2009-08-05 13:25:31 -0500
commite8552dde07dba231610f71bdb6c43fe55aa763f2 (patch)
treed31805bae279106fc992a6d8d7729f416eea01ce /src
parentad6b8adebbcb8a574dbbc381edbd0df759f625a9 (diff)
downloadofono-e8552dde07dba231610f71bdb6c43fe55aa763f2.tar.bz2
Add utility for building ADN records
Used to populate MSISDN, MBDN, etc records on the SIM
Diffstat (limited to 'src')
-rw-r--r--src/simutil.c27
-rw-r--r--src/simutil.h2
2 files changed, 29 insertions, 0 deletions
diff --git a/src/simutil.c b/src/simutil.c
index 51b1f5cc..7a0830ea 100644
--- a/src/simutil.c
+++ b/src/simutil.c
@@ -426,3 +426,30 @@ gboolean sim_adn_parse(const unsigned char *data, int length,
return TRUE;
}
+
+void sim_adn_build(unsigned char *data, int length,
+ const struct ofono_phone_number *ph)
+{
+ int number_len = strlen(ph->number);
+
+ /* Alpha-Identifier field */
+ if (length > 14) {
+ memset(data, 0xff, length - 14);
+ data += length - 14;
+ }
+
+ number_len = (number_len + 1) / 2;
+ *data++ = number_len + 1;
+
+ /* Use given number type and 'Unknown' for Numbering Plan */
+ *data++ = 0x80 | (ph->type << 4) | 0;
+
+ encode_bcd_number(ph->number, data);
+ memset(data + number_len, 0xff, 10 - number_len);
+ data += 10;
+
+ /* CCP1 unused */
+ *data++ = 0xff;
+ /* Ext1 unused */
+ *data++ = 0xff;
+}
diff --git a/src/simutil.h b/src/simutil.h
index c2b1e20c..9d198dbe 100644
--- a/src/simutil.h
+++ b/src/simutil.h
@@ -82,3 +82,5 @@ static inline enum sim_file_access file_access_condition_decode(int bcd)
gboolean sim_adn_parse(const unsigned char *data, int length,
struct ofono_phone_number *ph);
+void sim_adn_build(unsigned char *data, int length,
+ const struct ofono_phone_number *ph);