diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gsm/gsm0808_utils.c | 31 | ||||
-rw-r--r-- | src/gsm/libosmogsm.map | 1 |
2 files changed, 32 insertions, 0 deletions
diff --git a/src/gsm/gsm0808_utils.c b/src/gsm/gsm0808_utils.c index 2c659bba..080fc95b 100644 --- a/src/gsm/gsm0808_utils.c +++ b/src/gsm/gsm0808_utils.c @@ -988,6 +988,37 @@ int gsm0808_cell_id_list_add(struct gsm0808_cell_id_list2 *dst, const struct gsm return added; } +/*! Convert a single Cell Identifier to a Cell Identifier List with one entry. + * \param dst[out] Overwrite this list. + * \param src[in] Set \a dst to contain exactly this item. + */ +void gsm0808_cell_id_to_list(struct gsm0808_cell_id_list2 *dst, const struct gsm0808_cell_id *src) +{ + if (!dst) + return; + if (!src) { + *dst = (struct gsm0808_cell_id_list2){ + .id_discr = CELL_IDENT_NO_CELL, + }; + return; + } + + *dst = (struct gsm0808_cell_id_list2){ + .id_discr = src->id_discr, + .id_list = { src->id }, + .id_list_len = 1, + }; + + switch (src->id_discr) { + case CELL_IDENT_NO_CELL: + case CELL_IDENT_BSS: + dst->id_list_len = 0; + break; + default: + break; + } +} + /*! Encode Cell Identifier IE (3GPP TS 48.008 3.2.2.17). * \param[out] msg Message Buffer to which IE is to be appended * \param[in] ci Cell ID to be encoded diff --git a/src/gsm/libosmogsm.map b/src/gsm/libosmogsm.map index c4b1b75e..5a574290 100644 --- a/src/gsm/libosmogsm.map +++ b/src/gsm/libosmogsm.map @@ -177,6 +177,7 @@ gsm0808_enc_cell_id_list2; gsm0808_dec_cell_id_list; gsm0808_dec_cell_id_list2; gsm0808_cell_id_list_add; +gsm0808_cell_id_to_list; gsm0808_enc_cell_id; gsm0808_dec_cell_id; gsm0808_cell_id_name; |