This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
Harald Welte gerrit-no-reply at lists.osmocom.orgHarald Welte has uploaded this change for review. ( https://gerrit.osmocom.org/14236 Change subject: rest_octets: Add function to parse SI3 rest octets ...................................................................... rest_octets: Add function to parse SI3 rest octets Change-Id: I690cf308311f910005a325d50f5d5d825678d2b2 Related: OS#3075 Related: OS#4023 --- M include/osmocom/gsm/gsm48_rest_octets.h M src/gsm/gsm48_rest_octets.c M src/gsm/libosmogsm.map 3 files changed, 82 insertions(+), 0 deletions(-) git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/36/14236/1 diff --git a/include/osmocom/gsm/gsm48_rest_octets.h b/include/osmocom/gsm/gsm48_rest_octets.h index 3029ac5..bc5023a 100644 --- a/include/osmocom/gsm/gsm48_rest_octets.h +++ b/include/osmocom/gsm/gsm48_rest_octets.h @@ -87,3 +87,6 @@ /* Generate SI13 Rest Octests (Chapter 10.5.2.37b) */ int osmo_gsm48_rest_octets_si13_encode(uint8_t *data, const struct osmo_gsm48_si13_info *si13); + +/* Parse SI3 Rest Octets */ +void osmo_gsm48_rest_octets_si3_decode(struct osmo_gsm48_si_ro_info *si3, const uint8_t *data); diff --git a/src/gsm/gsm48_rest_octets.c b/src/gsm/gsm48_rest_octets.c index b9d5275..d5c93fe 100644 --- a/src/gsm/gsm48_rest_octets.c +++ b/src/gsm/gsm48_rest_octets.c @@ -951,3 +951,81 @@ bitvec_spare_padding(&bv, (bv.data_len*8)-1); return bv.data_len; } + + +/*********************************************************************** + * Decoder + ***********************************************************************/ + +/*! Decode SI3 Rest Octests (Chapter 10.5.2.34 / Table 10.4.72). + * \param[out] si3 decoded SI3 rest octets + * \param[in] encoded SI3 rest octets, 4 octets long */ +void osmo_gsm48_rest_octets_si3_decode(struct osmo_gsm48_si_ro_info *si3, const uint8_t *data) +{ + struct osmo_gsm48_si_selection_params *sp = &si3->selection_params; + struct osmo_gsm48_si_power_offset *po = &si3->power_offset; + struct osmo_gsm48_si3_gprs_ind *gi = &si3->gprs_ind; + struct bitvec bv; + + memset(&bv, 0, sizeof(bv)); + bv.data = (uint8_t *) data; + bv.data_len = 4; + + memset(si3, 0, sizeof(*si3)); + + /* Optional Selection Paraosmo_gsm48_si_ro_infometers */ + if (bitvec_get_bit_high(&bv) == H) { + sp->present = 1; + sp->cbq = bitvec_get_uint(&bv, 1); + sp->cell_resel_off = bitvec_get_uint(&bv, 6); + sp->temp_offs = bitvec_get_uint(&bv, 3); + sp->penalty_time = bitvec_get_uint(&bv, 5); + } else + sp->present = 0; + + /* Optional Power Offset */ + if (bitvec_get_bit_high(&bv) == H) { + po->present = 1; + po->power_offset = bitvec_get_uint(&bv, 2); + } else + po->present = 0; + + /* System Information 2ter Indicator */ + if (bitvec_get_bit_high(&bv) == H) + si3->si2ter_indicator = 1; + else + si3->si2ter_indicator = 0; + + /* Early Classmark Sending Control */ + if (bitvec_get_bit_high(&bv) == H) + si3->early_cm_ctrl = 1; + else + si3->early_cm_ctrl = 0; + + /* Scheduling if and where */ + if (bitvec_get_bit_high(&bv) == H) { + si3->scheduling.present = 1; + si3->scheduling.where = bitvec_get_uint(&bv, 3); + } else + si3->scheduling.present = 0; + + /* GPRS Indicator */ + if (bitvec_get_bit_high(&bv) == H) { + gi->present = 1; + gi->ra_colour = bitvec_get_uint(&bv, 3); + gi->si13_position = bitvec_get_uint(&bv, 1); + } else + gi->present = 0; + + /* 3G Early Classmark Sending Restriction. If H, then controlled by + * early_cm_ctrl above */ + if (bitvec_get_bit_high(&bv) == H) + si3->early_cm_restrict_3g = 1; + else + si3->early_cm_restrict_3g = 0; + + if (bitvec_get_bit_high(&bv) == H) + si3->si2quater_indicator = 1; + else + si3->si2quater_indicator = 0; +} diff --git a/src/gsm/libosmogsm.map b/src/gsm/libosmogsm.map index 56fed0f..84d71e6 100644 --- a/src/gsm/libosmogsm.map +++ b/src/gsm/libosmogsm.map @@ -309,6 +309,7 @@ osmo_gsm48_rest_octets_si3_encode; osmo_gsm48_rest_octets_si4_encode; osmo_gsm48_rest_octets_si13_encode; +osmo_gsm48_rest_octets_si3_decode; gsm48_rr_msg_name; gsm48_cc_state_name; gsm48_construct_ra; -- To view, visit https://gerrit.osmocom.org/14236 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: libosmocore Gerrit-Branch: master Gerrit-MessageType: newchange Gerrit-Change-Id: I690cf308311f910005a325d50f5d5d825678d2b2 Gerrit-Change-Number: 14236 Gerrit-PatchSet: 1 Gerrit-Owner: Harald Welte <laforge at gnumonks.org> -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20190528/417d8428/attachment.htm>