mirror of https://github.com/ARMmbed/mbed-os.git
There had been essentially two state machines running in our stack which was too cumbersome and was not alligned in any symmetry. In this work we make sure that: * There are no callbacks from the MAC layer to Stack controller layer. * Primitives are made local to the mac layer and are presented as read-only to the stack controller layer. * Interrupt handling and processing is moved to the stack controller layer. * Reception is divided into smaller units, seperating handling of Join Accept and normal data frames. MIC gets its own unit. * Extraction of data and MAC commands from the payload is also being done now in its own method. * To ensure integrity of the stack, and sanctity of the radio payload, we copy the radio payload buffer immediately in the rx interrupt and hoist a flag that prevents another interrupt from happening for a short while when we are processing the previous packet. * If an automatic uplink is on going, we do not send a TX_DONE event to application anymore as that is logically incorrect. * state_controller() is the central engine for the state machine. To save code space and memory, we are not handling each and every state in the state_controller(). Some of the states which have no processing to be done, are explicitely set. * For all the states who need special processing, seperate methods are added. * Class A always run to completion to IDLE and CLass C always runs to completion as RECEIVING. |
||
|---|---|---|
| .. | ||
| FEATURE_BLE | ||
| FEATURE_LWIP/lwip-interface | ||
| FEATURE_UVISOR | ||
| TESTS/filesystem | ||
| cellular | ||
| filesystem | ||
| frameworks | ||
| lorawan | ||
| mbedtls | ||
| nanostack | ||
| netsocket | ||
| nvstore | ||
| storage/FEATURE_STORAGE | ||
| unsupported | ||