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/baseband-devel@lists.osmocom.org/.
Max Max.Suraev at fairwaves.ru--- include/osmocom/gsm/gsm_utils.h | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/include/osmocom/gsm/gsm_utils.h b/include/osmocom/gsm/gsm_utils.h index cdbac87..9c3ec19 100644 --- a/include/osmocom/gsm/gsm_utils.h +++ b/include/osmocom/gsm/gsm_utils.h @@ -26,6 +26,7 @@ #define GSM_UTILS_H #include <stdint.h> +#include <stdlib.h> #define ADD_MODULO(sum, delta, modulo) do { \ if ((sum += delta) >= modulo) \ @@ -74,17 +75,36 @@ int rxlev2dbm(uint8_t rxlev); uint8_t dbm2rxlev(int dbm); /* According to GSM 04.08 Chapter 10.5.1.6 */ -static inline int ms_cm2_a5n_support(uint8_t *cm2, int n) { +static inline int ms_cm2_a5n_support(uint8_t *cm2, unsigned n) { switch (n) { case 0: return 1; case 1: return (cm2[0] & (1<<3)) ? 0 : 1; case 2: return (cm2[2] & (1<<0)) ? 1 : 0; case 3: return (cm2[2] & (1<<1)) ? 1 : 0; default: - return 0; + return (n > 7) ? 0 : -1; } } +/* According to GSM 04.08 Chapter 10.5.1.7 */ +static inline int ms_cm3_a5n_support(uint8_t *cm3, unsigned n) { + switch (n) { + case 4: return (cm3[0] & (1<<0)) ? 1 : 0; + case 5: return (cm3[0] & (1<<1)) ? 1 : 0; + case 6: return (cm3[0] & (1<<2)) ? 1 : 0; + case 7: return (cm3[0] & (1<<3)) ? 1 : 0; + default: + return (n > 7) ? 0 : -1; + } +} + +/* Either classmark could be NULL */ +static inline int ms_a5n_support(uint8_t *cm2, uint8_t *cm3, unsigned n) { + if ((NULL != cm3) && n > 3) return ms_cm3_a5n_support(cm3, n); + if ((NULL != cm2) && n < 4) return ms_cm2_a5n_support(cm2, n); + return 0; +} + /* According to GSM 04.08 Chapter 10.5.2.29 */ static inline int rach_max_trans_val2raw(int val) { return (val >> 1) & 3; } static inline int rach_max_trans_raw2val(int raw) { -- 1.7.10.4 --------------080107010001070606070100--