laforge has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/libosmocore/+/32650 )


Change subject: Add osmo_gsm48_si1ro_nch_pos_{encode,decode} functions
......................................................................

Add osmo_gsm48_si1ro_nch_pos_{encode,decode} functions

These functions encode/decode the NCH position field within the SI1
rest octets.  This is used within ASCI (VBS/VGCS).

Change-Id: I24a0095ac6eee0197f9d9ef9895c7795df6cdc49
Related: OS#5781
---
M src/gsm/gsm48_rest_octets.c
M src/gsm/libosmogsm.map
2 files changed, 91 insertions(+), 0 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/50/32650/1

diff --git a/src/gsm/gsm48_rest_octets.c b/src/gsm/gsm48_rest_octets.c
index 77fd349..b63c63f 100644
--- a/src/gsm/gsm48_rest_octets.c
+++ b/src/gsm/gsm48_rest_octets.c
@@ -59,6 +59,82 @@
        return bv.data_len;
 }

+struct nch_pos {
+       uint8_t num_blocks;
+       uint8_t first_block;
+};
+
+/* 3GPP TS 44.010 Table 10.5.2.32.1b */
+static const struct nch_pos si1ro_nch_positions[] = {
+       [0x00] = {1,  0},
+       [0x01] = {1,  1},
+       [0x02] = {1,  2},
+       [0x03] = {1,  3},
+       [0x04] = {1,  4},
+       [0x05] = {1,  5},
+       [0x06] = {1,  6},
+
+       [0x07] = {2,  0},
+       [0x08] = {2,  1},
+       [0x08] = {2,  2},
+       [0x0a] = {2,  3},
+       [0x0b] = {2,  4},
+       [0x0c] = {2,  5},
+
+       [0x0d] = {3,  0},
+       [0x0e] = {3,  1},
+       [0x0f] = {3,  2},
+       [0x10] = {3,  3},
+       [0x11] = {3,  4},
+
+       [0x12] = {4,  0},
+       [0x13] = {4,  1},
+       [0x14] = {4,  2},
+       [0x15] = {4,  3},
+
+       [0x16] = {5,  0},
+       [0x17] = {5,  1},
+       [0x18] = {5,  2},
+
+       [0x19] = {6,  0},
+       [0x1a] = {6,  1},
+
+       [0x1b] = {7,  0},
+};
+
+/*! Decode the 5-bit 'NCH position' field within SI1 Rest Octets.
+ *  \param[in] value 5-bit value from SI1 rest octets
+ *  \param[out] num_blocks Number of CCCH used for NCH
+ *  \param[out] first_block First CCCH block used for NCH
+ *  \returns 0 on success; negative in case of error */
+int osmo_gsm48_si1ro_nch_pos_decode(uint8_t value, uint8_t *num_blocks, 
uint8_t *first_block)
+{
+       if (value >= ARRAY_SIZE(si1ro_nch_positions))
+               return -EINVAL;
+
+       *num_blocks = si1ro_nch_positions[value].num_blocks;
+       *first_block = si1ro_nch_positions[value].first_block;
+
+       return 0;
+}
+
+/*! Encode the 5-bit 'NCH position' field within SI1 Rest Octets.
+ *  \param[in] num_blocks Number of CCCH used for NCH
+ *  \param[in] first_block First CCCH block used for NCH
+ *  \returns 5-bit value for SI1 rest octets on success; negative in case of 
error */
+int osmo_gsm48_si1ro_nch_pos_encode(uint8_t num_blocks, uint8_t first_block)
+{
+       unsigned int i;
+
+       for (i = 0; i < ARRAY_SIZE(si1ro_nch_positions); i++) {
+               if (si1ro_nch_positions[i].num_blocks == num_blocks &&
+                   si1ro_nch_positions[i].first_block == first_block) {
+                       return i;
+               }
+       }
+       return -EINVAL;
+}
+
 /* Append Repeated E-UTRAN Neighbour Cell to bitvec: see 3GPP TS 44.018 Table 
10.5.2.33b.1 */
 static inline bool append_eutran_neib_cell(struct bitvec *bv, const struct 
osmo_earfcn_si2q *e, size_t *e_offset,
                                           uint8_t budget)
diff --git a/src/gsm/libosmogsm.map b/src/gsm/libosmogsm.map
index 0018e1c..003d6e8 100644
--- a/src/gsm/libosmogsm.map
+++ b/src/gsm/libosmogsm.map
@@ -336,6 +336,8 @@
 osmo_gsm48_rest_octets_si13_encode;
 osmo_gsm48_rest_octets_si3_decode;
 osmo_gsm48_rest_octets_si4_decode;
+osmo_gsm48_si1ro_nch_pos_encode;
+osmo_gsm48_si1ro_nch_pos_decode;
 gsm48_rr_short_pd_msg_name;
 gsm48_rr_msg_name;
 gsm48_cc_state_name;

--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/32650
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: I24a0095ac6eee0197f9d9ef9895c7795df6cdc49
Gerrit-Change-Number: 32650
Gerrit-PatchSet: 1
Gerrit-Owner: laforge <[email protected]>
Gerrit-MessageType: newchange

Reply via email to