MuditaOS's call library is able to perform:
The call logic is one of the oldest functionalities in the OS, which has been changed multiple times in the past. , therefore it has multiple visible (mis)conceptions. The current approach we want to keep is:
CellularCall.hpp - it's an interface for ServiceCellular used to perform calls
NOTE: Historically lots of state keeping was done in application call, while quite a bit of logic was glued in ServiceCellular - this is a wrong way to go.
This library's goal is to encapsulate the whole call flow/flows we can have. It's end goal is to provide: actions and guards to write call state machine to asure full control over call processing.
Public API headers should be placed in include/call/ catalog - these are exported in CMake to include paths for related libraries
All other headers should not be placed there. These are private internals of the library
CellularCall.hpp is written such as:
api catalog
State machine is written using boost::sml
NOTE API catalog should and can be further split into API header and platform implementation.
Call state machine can be generated with:
ninja call_uml
call_uml > call.puml
Latest generated UML:
NOTE:* The UML is generated automatically, for better readability please change lambdas to functions