diff options
author | Andrzej Zaborowski <andrew.zaborowski@intel.com> | 2009-08-05 09:08:40 +0200 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2009-08-05 13:25:31 -0500 |
commit | e8552dde07dba231610f71bdb6c43fe55aa763f2 (patch) | |
tree | d31805bae279106fc992a6d8d7729f416eea01ce | |
parent | ad6b8adebbcb8a574dbbc381edbd0df759f625a9 (diff) | |
download | ofono-e8552dde07dba231610f71bdb6c43fe55aa763f2.tar.bz2 |
Add utility for building ADN records
Used to populate MSISDN, MBDN, etc records on the SIM
-rw-r--r-- | src/simutil.c | 27 | ||||
-rw-r--r-- | src/simutil.h | 2 |
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); |