diff options
author | Yang Gu <yang.gu@intel.com> | 2010-03-26 00:07:32 +0800 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2010-03-25 11:36:11 -0500 |
commit | cf38ef05bab75814eb6c32958c0e343cf76b3dac (patch) | |
tree | 7300297c0e777cf09cab91a658626b1e1459517c /src/stkutil.c | |
parent | a13db81229d5657bc0d8202059114290a7b65067 (diff) | |
download | ofono-cf38ef05bab75814eb6c32958c0e343cf76b3dac.tar.bz2 |
Add parser for location information objects
Diffstat (limited to 'src/stkutil.c')
-rw-r--r-- | src/stkutil.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/stkutil.c b/src/stkutil.c index 9c83f493..d67c5c4b 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -519,6 +519,40 @@ error: return FALSE; } +/* Defined in TS 102.223 Section 8.19 */ +static gboolean parse_dataobj_location_info( + struct comprehension_tlv_iter *iter, void *user) +{ + struct stk_location_info *li = user; + const unsigned char *data; + unsigned int len; + + if (comprehension_tlv_iter_get_tag(iter) != + STK_DATA_OBJECT_TYPE_LOCATION_INFO) + return FALSE; + + len = comprehension_tlv_iter_get_length(iter); + if ((len != 5) && (len != 7) && (len != 9)) + return FALSE; + + data = comprehension_tlv_iter_get_data(iter); + + sim_parse_mcc_mnc(data, li->mcc, li->mnc); + li->lac_tac = (data[3] << 8) + data[4]; + + if (len >= 7) { + li->has_ci = TRUE; + li->ci = (data[5] << 8) + data[6]; + } + + if (len == 9) { + li->has_ext_ci = TRUE; + li->ext_ci = (data[7] << 8) + data[8]; + } + + return TRUE; +} + /* Defined in TS 102.223 Section 8.31 */ static gboolean parse_dataobj_icon_id(struct comprehension_tlv_iter *iter, void *user) @@ -638,6 +672,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type) return parse_dataobj_tone; case STK_DATA_OBJECT_TYPE_FILE_LIST: return parse_dataobj_file_list; + case STK_DATA_OBJECT_TYPE_LOCATION_INFO: + return parse_dataobj_location_info; case STK_DATA_OBJECT_TYPE_ICON_ID: return parse_dataobj_icon_id; case STK_DATA_OBJECT_TYPE_IMMEDIATE_RESPONSE: |