56 uint16_t asn_ms1b_remainder;
62#define TSCH_ASN_INIT(asn, ms1b_, ls4b_) do { \
63 (asn).ms1b = (ms1b_); \
64 (asn).ls4b = (ls4b_); \
68#define TSCH_ASN_INC(asn, inc) do { \
69 uint32_t new_ls4b = (asn).ls4b + (inc); \
70 if(new_ls4b < (asn).ls4b) { (asn).ms1b++; } \
71 (asn).ls4b = new_ls4b; \
75#define TSCH_ASN_DEC(asn, dec) do { \
76 uint32_t new_ls4b = (asn).ls4b - (dec); \
77 if(new_ls4b > (asn).ls4b) { (asn).ms1b--; } \
78 (asn).ls4b = new_ls4b; \
82#define TSCH_ASN_DIFF(asn1, asn2) \
83 ((asn1).ls4b - (asn2).ls4b)
86#define TSCH_ASN_DIVISOR_INIT(div, val_) do { \
88 (div).asn_ms1b_remainder = ((0xffffffff % (val_)) + 1) % (val_); \
93#define TSCH_ASN_MOD(asn, div) \
94 ((uint16_t)((asn).ls4b % (div).val) \
95 + (uint16_t)((asn).ms1b * (div).asn_ms1b_remainder % (div).val)) \
For quick modulo operation on ASN.
The ASN is an absolute slot number over 5 bytes.