pespin has submitted this change. ( https://gerrit.osmocom.org/c/libosmocore/+/27945 )
Change subject: gsm: Introduce helper rach_tx_integer_raw2val() ......................................................................
gsm: Introduce helper rach_tx_integer_raw2val()
Change-Id: I6ef085ee92b2064cb46fa5ec3ae98a0ca59ad599 --- M TODO-RELEASE M include/osmocom/gsm/gsm_utils.h M tests/gsm0408/gsm0408_test.c M tests/gsm0408/gsm0408_test.ok 4 files changed, 35 insertions(+), 0 deletions(-)
Approvals: fixeria: Looks good to me, but someone else must approve osmith: Looks good to me, but someone else must approve pespin: Looks good to me, approved; Verified
diff --git a/TODO-RELEASE b/TODO-RELEASE index a6d16d2..0ae28c0 100644 --- a/TODO-RELEASE +++ b/TODO-RELEASE @@ -10,3 +10,4 @@ libosmogsm ABI BREAKAGE CELL_IDENT_WHOLE_GLOBAL_PS changed enum number libosmogsm add struct member Add codec_list_bss_supported to gsm0808_handover_request_ack (more_items flag ensures ABI compat) libosmogb ABI BREAKAGE Add reset_ack_notification function pointer to struct bssgp_bvc_fsm_ops +libosmogsm add API Add rach_tx_integer_raw2val() in gsm_utils.h diff --git a/include/osmocom/gsm/gsm_utils.h b/include/osmocom/gsm/gsm_utils.h index 07b6a8b..fef2fdd 100644 --- a/include/osmocom/gsm/gsm_utils.h +++ b/include/osmocom/gsm/gsm_utils.h @@ -152,6 +152,13 @@ const int tbl[4] = { 1, 2, 4, 7 }; return tbl[raw & 3]; } +static inline uint8_t rach_tx_integer_raw2val(uint8_t raw) { + const int tbl[6] = { 14, 16, 20, 25, 32, 50 }; + raw &= 0x0f; + if (raw <= 9) + return raw + 3; + return tbl[raw - 10]; +}
#define ARFCN_PCS 0x8000 #define ARFCN_UPLINK 0x4000 diff --git a/tests/gsm0408/gsm0408_test.c b/tests/gsm0408/gsm0408_test.c index cdccf53..2aceefa 100644 --- a/tests/gsm0408/gsm0408_test.c +++ b/tests/gsm0408/gsm0408_test.c @@ -1732,6 +1732,16 @@ VERIFY(rc, <, 0); }
+static void test_rach_tx_integer_raw2val() +{ + unsigned int raw; + for (raw = 0; raw <= 0x0f; raw++) { + unsigned int val = rach_tx_integer_raw2val(raw); + printf("rach_tx_integer_raw2val(0x0%x): %u slots used to spread transmission\n", + raw, val); + } +} + int main(int argc, char **argv) { test_bearer_cap(); @@ -1750,6 +1760,7 @@ test_print_encoding(); test_range_encoding(); test_power_ctrl(); + test_rach_tx_integer_raw2val();
return EXIT_SUCCESS; } diff --git a/tests/gsm0408/gsm0408_test.ok b/tests/gsm0408/gsm0408_test.ok index 52c4ea7..97bf083 100644 --- a/tests/gsm0408/gsm0408_test.ok +++ b/tests/gsm0408/gsm0408_test.ok @@ -791,3 +791,19 @@ Random range test: range 255, max num ARFCNs 22 Random range test: range 511, max num ARFCNs 18 Random range test: range 1023, max num ARFCNs 16 +rach_tx_integer_raw2val(0x00): 3 slots used to spread transmission +rach_tx_integer_raw2val(0x01): 4 slots used to spread transmission +rach_tx_integer_raw2val(0x02): 5 slots used to spread transmission +rach_tx_integer_raw2val(0x03): 6 slots used to spread transmission +rach_tx_integer_raw2val(0x04): 7 slots used to spread transmission +rach_tx_integer_raw2val(0x05): 8 slots used to spread transmission +rach_tx_integer_raw2val(0x06): 9 slots used to spread transmission +rach_tx_integer_raw2val(0x07): 10 slots used to spread transmission +rach_tx_integer_raw2val(0x08): 11 slots used to spread transmission +rach_tx_integer_raw2val(0x09): 12 slots used to spread transmission +rach_tx_integer_raw2val(0x0a): 14 slots used to spread transmission +rach_tx_integer_raw2val(0x0b): 16 slots used to spread transmission +rach_tx_integer_raw2val(0x0c): 20 slots used to spread transmission +rach_tx_integer_raw2val(0x0d): 25 slots used to spread transmission +rach_tx_integer_raw2val(0x0e): 32 slots used to spread transmission +rach_tx_integer_raw2val(0x0f): 50 slots used to spread transmission