osmo-bts-trx: drop ul_amr_fn_is_cmi() / dl_amr_fn_is_cmi()

The scheduler is now using the lookup tables instead of these
functions.  The only part using them is the AMR unit test.

Change-Id: I1a9c80dd12252e7befe9c9bc8e8f7ee8648b5465
This commit is contained in:
Vadim Yanitskiy 2022-11-01 01:09:11 +07:00
parent c33ff98d39
commit 8ec66a7f58
3 changed files with 1 additions and 350 deletions

View File

@ -22,9 +22,6 @@
#pragma once
#include <stdint.h>
#include <errno.h>
#include <stdbool.h>
#include <osmo-bts/scheduler.h>
extern void *tall_bts_ctx;
@ -36,77 +33,3 @@ static inline uint16_t compute_ber10k(int n_bits_total, int n_errors)
else
return 10000 * n_errors / n_bits_total;
}
/*! determine whether an uplink AMR block is CMI according to 3GPP TS 45.009.
* \param[in] fn_begin frame number of the beginning of the block.
* \returns true in case of CMI; false otherwise. */
static inline bool ul_amr_fn_is_cmi(uint32_t fn_begin)
{
switch (fn_begin % 26) {
/*! See also: 3GPP TS 45.009, section 3.2.1.3 Transmitter/Receiver Synchronisation */
/* valid for AHS subslot 0 and AFS: */
case 0:
case 8:
case 17:
/* valid for AHS subslot 1: */
case 1:
case 9:
case 18:
return true;
break;
/* Complementary values for sanity check */
/* valid for AHS subslot 0 and AFS: */
case 4:
case 13:
case 21:
/* valid for AHS subslot 1: */
case 5:
case 14:
case 22:
return false;
break;
default:
LOGP(DL1P, LOGL_DEBUG,
"uplink frame number fn_begin=%u does not mark the beginning of a voice block!\n", fn_begin);
OSMO_ASSERT(false);
return false;
break;
}
}
/*! determine the whether a downlink AMR block is CMI according to 3GPP TS 45.009.
* \param[in] fn_begin frame number of the beginning of the block.
* \returns true in case of CMI; false otherwise. */
static inline bool dl_amr_fn_is_cmi(uint32_t fn_begin)
{
switch (fn_begin % 26) {
/*! See also: 3GPP TS 45.009, section 3.2.1.3 Transmitter/Receiver Synchronisation */
/* valid for AHS subslot 0 and AFS: */
case 4:
case 13:
case 21:
/* valid for AHS subslot 1: */
case 5:
case 14:
case 22:
return true;
break;
/* Complementary values for sanity check */
/* valid for AHS subslot 0 and AFS: */
case 0:
case 8:
case 17:
/* valid for AHS subslot 1: */
case 1:
case 9:
case 18:
return false;
break;
default:
LOGP(DL1P, LOGL_DEBUG,
"downlink frame number fn_begin=%u does not mark the beginning of a voice block!\n", fn_begin);
OSMO_ASSERT(false);
return false;
break;
}
}

View File

@ -27,126 +27,7 @@
#include <stdlib.h>
#include <stdio.h>
#include "../../src/osmo-bts-trx/sched_utils.h"
struct amr_cmi_test_data {
/* Frame number that marks the beginning of the voice block */
uint32_t gsm_fn;
/* In uplink: True, when the voice block is a CMI block, false otherwise. */
/* In downlink: False, when the voice block is a CMI block, true otherwise. */
bool is_cmi;
};
/* The behavior of AHS in subslot 0 and AFS is the same */
static const struct amr_cmi_test_data testvec_ahs_h0_and_afs[] = {
{ 0, true },
{ 4, false },
{ 8, true },
{ 13, false },
{ 17, true },
{ 21, false },
{ 26, true },
{ 30, false },
{ 34, true },
{ 39, false },
{ 43, true },
{ 47, false },
{ 52, true },
{ 56, false },
{ 60, true },
{ 65, false },
{ 69, true },
{ 73, false },
{ 78, true },
{ 82, false },
{ 86, true },
{ 91, false },
{ 95, true },
{ 99, false },
};
static const struct amr_cmi_test_data testvec_ahs_h1[] = {
{ 1, true },
{ 5, false },
{ 9, true },
{ 14, false },
{ 18, true },
{ 22, false },
{ 27, true },
{ 31, false },
{ 35, true },
{ 40, false },
{ 44, true },
{ 48, false },
{ 53, true },
{ 57, false },
{ 61, true },
{ 66, false },
{ 70, true },
{ 74, false },
{ 79, true },
{ 83, false },
{ 87, true },
{ 92, false },
{ 96, true },
{ 100, false },
};
static void test_amr_cmi_sched(void)
{
unsigned int i;
bool res;
printf("AMR transmission phase (CMI) in relation to GSM FN:\n");
for (i = 0; i < ARRAY_SIZE(testvec_ahs_h0_and_afs); i++) {
res = ul_amr_fn_is_cmi(testvec_ahs_h0_and_afs[i].gsm_fn);
printf("Uplink, AMR AHS on HR subslot 0: fn_begin=%u, CMI=%u\n", testvec_ahs_h0_and_afs[i].gsm_fn, res);
OSMO_ASSERT(res == testvec_ahs_h0_and_afs[i].is_cmi);
}
printf("\n");
for (i = 0; i < ARRAY_SIZE(testvec_ahs_h0_and_afs); i++) {
res = dl_amr_fn_is_cmi(testvec_ahs_h0_and_afs[i].gsm_fn);
printf("Downlink, AMR AHS on HR subslot 0: fn_begin=%u, CMI=%u\n", testvec_ahs_h0_and_afs[i].gsm_fn, res);
OSMO_ASSERT(res == !testvec_ahs_h0_and_afs[i].is_cmi);
}
printf("\n");
printf("\n");
for (i = 0; i < ARRAY_SIZE(testvec_ahs_h1); i++) {
res = ul_amr_fn_is_cmi(testvec_ahs_h1[i].gsm_fn);
printf("Uplink, AMR AHS on HR subslot 1: fn_begin=%u, CMI=%u\n", testvec_ahs_h1[i].gsm_fn, res);
OSMO_ASSERT(res == testvec_ahs_h1[i].is_cmi);
}
printf("\n");
for (i = 0; i < ARRAY_SIZE(testvec_ahs_h1); i++) {
res = dl_amr_fn_is_cmi(testvec_ahs_h1[i].gsm_fn);
printf("Downlink, AMR AHS on HR subslot 1: fn_begin=%u, CMI=%u\n", testvec_ahs_h1[i].gsm_fn, res);
OSMO_ASSERT(res == !testvec_ahs_h1[i].is_cmi);
}
printf("\n");
printf("\n");
for (i = 0; i < ARRAY_SIZE(testvec_ahs_h0_and_afs); i++) {
res = ul_amr_fn_is_cmi(testvec_ahs_h0_and_afs[i].gsm_fn);
printf("Uplink, AMR AFS: fn_begin=%u, CMI=%u\n", testvec_ahs_h0_and_afs[i].gsm_fn, res);
OSMO_ASSERT(res == testvec_ahs_h0_and_afs[i].is_cmi);
}
printf("\n");
for (i = 0; i < ARRAY_SIZE(testvec_ahs_h0_and_afs); i++) {
res = dl_amr_fn_is_cmi(testvec_ahs_h0_and_afs[i].gsm_fn);
printf("Downlink, AMR AFS: fn_begin=%u, CMI=%u\n", testvec_ahs_h0_and_afs[i].gsm_fn, res);
OSMO_ASSERT(res == !testvec_ahs_h0_and_afs[i].is_cmi);
}
}
#include <errno.h>
static void test_amr_parse_mr_conf(void)
{
@ -185,7 +66,6 @@ int main(int argc, char **argv)
log_set_print_level(osmo_stderr_target, 1);
log_set_use_color(osmo_stderr_target, 0);
test_amr_cmi_sched();
test_amr_parse_mr_conf();
return EXIT_SUCCESS;
}

View File

@ -1,155 +1,3 @@
AMR transmission phase (CMI) in relation to GSM FN:
Uplink, AMR AHS on HR subslot 0: fn_begin=0, CMI=1
Uplink, AMR AHS on HR subslot 0: fn_begin=4, CMI=0
Uplink, AMR AHS on HR subslot 0: fn_begin=8, CMI=1
Uplink, AMR AHS on HR subslot 0: fn_begin=13, CMI=0
Uplink, AMR AHS on HR subslot 0: fn_begin=17, CMI=1
Uplink, AMR AHS on HR subslot 0: fn_begin=21, CMI=0
Uplink, AMR AHS on HR subslot 0: fn_begin=26, CMI=1
Uplink, AMR AHS on HR subslot 0: fn_begin=30, CMI=0
Uplink, AMR AHS on HR subslot 0: fn_begin=34, CMI=1
Uplink, AMR AHS on HR subslot 0: fn_begin=39, CMI=0
Uplink, AMR AHS on HR subslot 0: fn_begin=43, CMI=1
Uplink, AMR AHS on HR subslot 0: fn_begin=47, CMI=0
Uplink, AMR AHS on HR subslot 0: fn_begin=52, CMI=1
Uplink, AMR AHS on HR subslot 0: fn_begin=56, CMI=0
Uplink, AMR AHS on HR subslot 0: fn_begin=60, CMI=1
Uplink, AMR AHS on HR subslot 0: fn_begin=65, CMI=0
Uplink, AMR AHS on HR subslot 0: fn_begin=69, CMI=1
Uplink, AMR AHS on HR subslot 0: fn_begin=73, CMI=0
Uplink, AMR AHS on HR subslot 0: fn_begin=78, CMI=1
Uplink, AMR AHS on HR subslot 0: fn_begin=82, CMI=0
Uplink, AMR AHS on HR subslot 0: fn_begin=86, CMI=1
Uplink, AMR AHS on HR subslot 0: fn_begin=91, CMI=0
Uplink, AMR AHS on HR subslot 0: fn_begin=95, CMI=1
Uplink, AMR AHS on HR subslot 0: fn_begin=99, CMI=0
Downlink, AMR AHS on HR subslot 0: fn_begin=0, CMI=0
Downlink, AMR AHS on HR subslot 0: fn_begin=4, CMI=1
Downlink, AMR AHS on HR subslot 0: fn_begin=8, CMI=0
Downlink, AMR AHS on HR subslot 0: fn_begin=13, CMI=1
Downlink, AMR AHS on HR subslot 0: fn_begin=17, CMI=0
Downlink, AMR AHS on HR subslot 0: fn_begin=21, CMI=1
Downlink, AMR AHS on HR subslot 0: fn_begin=26, CMI=0
Downlink, AMR AHS on HR subslot 0: fn_begin=30, CMI=1
Downlink, AMR AHS on HR subslot 0: fn_begin=34, CMI=0
Downlink, AMR AHS on HR subslot 0: fn_begin=39, CMI=1
Downlink, AMR AHS on HR subslot 0: fn_begin=43, CMI=0
Downlink, AMR AHS on HR subslot 0: fn_begin=47, CMI=1
Downlink, AMR AHS on HR subslot 0: fn_begin=52, CMI=0
Downlink, AMR AHS on HR subslot 0: fn_begin=56, CMI=1
Downlink, AMR AHS on HR subslot 0: fn_begin=60, CMI=0
Downlink, AMR AHS on HR subslot 0: fn_begin=65, CMI=1
Downlink, AMR AHS on HR subslot 0: fn_begin=69, CMI=0
Downlink, AMR AHS on HR subslot 0: fn_begin=73, CMI=1
Downlink, AMR AHS on HR subslot 0: fn_begin=78, CMI=0
Downlink, AMR AHS on HR subslot 0: fn_begin=82, CMI=1
Downlink, AMR AHS on HR subslot 0: fn_begin=86, CMI=0
Downlink, AMR AHS on HR subslot 0: fn_begin=91, CMI=1
Downlink, AMR AHS on HR subslot 0: fn_begin=95, CMI=0
Downlink, AMR AHS on HR subslot 0: fn_begin=99, CMI=1
Uplink, AMR AHS on HR subslot 1: fn_begin=1, CMI=1
Uplink, AMR AHS on HR subslot 1: fn_begin=5, CMI=0
Uplink, AMR AHS on HR subslot 1: fn_begin=9, CMI=1
Uplink, AMR AHS on HR subslot 1: fn_begin=14, CMI=0
Uplink, AMR AHS on HR subslot 1: fn_begin=18, CMI=1
Uplink, AMR AHS on HR subslot 1: fn_begin=22, CMI=0
Uplink, AMR AHS on HR subslot 1: fn_begin=27, CMI=1
Uplink, AMR AHS on HR subslot 1: fn_begin=31, CMI=0
Uplink, AMR AHS on HR subslot 1: fn_begin=35, CMI=1
Uplink, AMR AHS on HR subslot 1: fn_begin=40, CMI=0
Uplink, AMR AHS on HR subslot 1: fn_begin=44, CMI=1
Uplink, AMR AHS on HR subslot 1: fn_begin=48, CMI=0
Uplink, AMR AHS on HR subslot 1: fn_begin=53, CMI=1
Uplink, AMR AHS on HR subslot 1: fn_begin=57, CMI=0
Uplink, AMR AHS on HR subslot 1: fn_begin=61, CMI=1
Uplink, AMR AHS on HR subslot 1: fn_begin=66, CMI=0
Uplink, AMR AHS on HR subslot 1: fn_begin=70, CMI=1
Uplink, AMR AHS on HR subslot 1: fn_begin=74, CMI=0
Uplink, AMR AHS on HR subslot 1: fn_begin=79, CMI=1
Uplink, AMR AHS on HR subslot 1: fn_begin=83, CMI=0
Uplink, AMR AHS on HR subslot 1: fn_begin=87, CMI=1
Uplink, AMR AHS on HR subslot 1: fn_begin=92, CMI=0
Uplink, AMR AHS on HR subslot 1: fn_begin=96, CMI=1
Uplink, AMR AHS on HR subslot 1: fn_begin=100, CMI=0
Downlink, AMR AHS on HR subslot 1: fn_begin=1, CMI=0
Downlink, AMR AHS on HR subslot 1: fn_begin=5, CMI=1
Downlink, AMR AHS on HR subslot 1: fn_begin=9, CMI=0
Downlink, AMR AHS on HR subslot 1: fn_begin=14, CMI=1
Downlink, AMR AHS on HR subslot 1: fn_begin=18, CMI=0
Downlink, AMR AHS on HR subslot 1: fn_begin=22, CMI=1
Downlink, AMR AHS on HR subslot 1: fn_begin=27, CMI=0
Downlink, AMR AHS on HR subslot 1: fn_begin=31, CMI=1
Downlink, AMR AHS on HR subslot 1: fn_begin=35, CMI=0
Downlink, AMR AHS on HR subslot 1: fn_begin=40, CMI=1
Downlink, AMR AHS on HR subslot 1: fn_begin=44, CMI=0
Downlink, AMR AHS on HR subslot 1: fn_begin=48, CMI=1
Downlink, AMR AHS on HR subslot 1: fn_begin=53, CMI=0
Downlink, AMR AHS on HR subslot 1: fn_begin=57, CMI=1
Downlink, AMR AHS on HR subslot 1: fn_begin=61, CMI=0
Downlink, AMR AHS on HR subslot 1: fn_begin=66, CMI=1
Downlink, AMR AHS on HR subslot 1: fn_begin=70, CMI=0
Downlink, AMR AHS on HR subslot 1: fn_begin=74, CMI=1
Downlink, AMR AHS on HR subslot 1: fn_begin=79, CMI=0
Downlink, AMR AHS on HR subslot 1: fn_begin=83, CMI=1
Downlink, AMR AHS on HR subslot 1: fn_begin=87, CMI=0
Downlink, AMR AHS on HR subslot 1: fn_begin=92, CMI=1
Downlink, AMR AHS on HR subslot 1: fn_begin=96, CMI=0
Downlink, AMR AHS on HR subslot 1: fn_begin=100, CMI=1
Uplink, AMR AFS: fn_begin=0, CMI=1
Uplink, AMR AFS: fn_begin=4, CMI=0
Uplink, AMR AFS: fn_begin=8, CMI=1
Uplink, AMR AFS: fn_begin=13, CMI=0
Uplink, AMR AFS: fn_begin=17, CMI=1
Uplink, AMR AFS: fn_begin=21, CMI=0
Uplink, AMR AFS: fn_begin=26, CMI=1
Uplink, AMR AFS: fn_begin=30, CMI=0
Uplink, AMR AFS: fn_begin=34, CMI=1
Uplink, AMR AFS: fn_begin=39, CMI=0
Uplink, AMR AFS: fn_begin=43, CMI=1
Uplink, AMR AFS: fn_begin=47, CMI=0
Uplink, AMR AFS: fn_begin=52, CMI=1
Uplink, AMR AFS: fn_begin=56, CMI=0
Uplink, AMR AFS: fn_begin=60, CMI=1
Uplink, AMR AFS: fn_begin=65, CMI=0
Uplink, AMR AFS: fn_begin=69, CMI=1
Uplink, AMR AFS: fn_begin=73, CMI=0
Uplink, AMR AFS: fn_begin=78, CMI=1
Uplink, AMR AFS: fn_begin=82, CMI=0
Uplink, AMR AFS: fn_begin=86, CMI=1
Uplink, AMR AFS: fn_begin=91, CMI=0
Uplink, AMR AFS: fn_begin=95, CMI=1
Uplink, AMR AFS: fn_begin=99, CMI=0
Downlink, AMR AFS: fn_begin=0, CMI=0
Downlink, AMR AFS: fn_begin=4, CMI=1
Downlink, AMR AFS: fn_begin=8, CMI=0
Downlink, AMR AFS: fn_begin=13, CMI=1
Downlink, AMR AFS: fn_begin=17, CMI=0
Downlink, AMR AFS: fn_begin=21, CMI=1
Downlink, AMR AFS: fn_begin=26, CMI=0
Downlink, AMR AFS: fn_begin=30, CMI=1
Downlink, AMR AFS: fn_begin=34, CMI=0
Downlink, AMR AFS: fn_begin=39, CMI=1
Downlink, AMR AFS: fn_begin=43, CMI=0
Downlink, AMR AFS: fn_begin=47, CMI=1
Downlink, AMR AFS: fn_begin=52, CMI=0
Downlink, AMR AFS: fn_begin=56, CMI=1
Downlink, AMR AFS: fn_begin=60, CMI=0
Downlink, AMR AFS: fn_begin=65, CMI=1
Downlink, AMR AFS: fn_begin=69, CMI=0
Downlink, AMR AFS: fn_begin=73, CMI=1
Downlink, AMR AFS: fn_begin=78, CMI=0
Downlink, AMR AFS: fn_begin=82, CMI=1
Downlink, AMR AFS: fn_begin=86, CMI=0
Downlink, AMR AFS: fn_begin=91, CMI=1
Downlink, AMR AFS: fn_begin=95, CMI=0
Downlink, AMR AFS: fn_begin=99, CMI=1
amr_parse_mr_conf() <- 20 a5 0d 46 52 54
amr_parse_mr_conf() -> num_modes=4
Mode[0] = 0/13/4