diff options
author | Max <msuraev@sysmocom.de> | 2018-02-05 16:15:30 +0100 |
---|---|---|
committer | Neels Hofmeyr <neels@hofmeyr.de> | 2018-02-27 22:27:53 +0100 |
commit | deeb68bebabb7a7fc749592145abeebb0ca7d3ad (patch) | |
tree | f595b62639f632c76e54b74a87dbeeba31bd443d /src/mslot_class.c | |
parent | 321bf390d0ae41d2bce36433c468e410ae6fc840 (diff) |
Simplify TS alloc: move slot check into functionsneels/master
Move timeslot applicability check outside of nested for loop into
separate functions and document them. Add corresponding tests.
This allows us to clarify types used in TS-related computations.
Change-Id: Ic39e848da47dc11357782362fdf6206d2c1457c2
Related: OS#2282
Diffstat (limited to 'src/mslot_class.c')
-rw-r--r-- | src/mslot_class.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/mslot_class.c b/src/mslot_class.c index d403f001..2a482f18 100644 --- a/src/mslot_class.c +++ b/src/mslot_class.c @@ -260,3 +260,38 @@ void ts_format(char *buf, uint8_t dl_mask, uint8_t ul_mask) masked_override_with(buf, ul_mask, 'U'); masked_override_with(buf, ul_mask & dl_mask, 'C'); } + +uint16_t mslot_wrap_window(uint16_t win) +{ + return (win | win >> 8) & 0xFF; +} + +bool mslot_test_and_set_bit(uint32_t *bits, size_t elem) +{ + bool was_set = bits[elem/32] & (1 << (elem % 32)); + bits[elem/32] |= (1 << (elem % 32)); + + return was_set; +} + +/*! Filter out bad slots + * + * \param[in] mask TS selection mask + * \param[in] ul_slots set of UL timeslots + * \param[in] dl_slots set of DL timeslots + * \param[in] rx_valid_win Mask for valid RX window value + * \returns negative error code or RX window on success + */ +int16_t mslot_filter_bad(uint8_t mask, uint8_t ul_slots, uint8_t dl_slots, uint16_t rx_valid_win) +{ + uint8_t rx_good; + uint16_t rx_bad = (uint16_t)(0xFF & ~mask) << ul_slots; + + /* TODO: CHECK this calculation -> separate function for unit testing */ + rx_bad = (rx_bad | (rx_bad >> 8)) & 0xFF; + rx_good = dl_slots & ~rx_bad; + if (!rx_good) + return -1; + + return rx_good & rx_valid_win; +} |