@startuml

Title FreeRTOS Cellular Library URC handler implementation

participant Application
participant Cellular_modules_porting
participant Cellular_common
participant Cellular_modem

note over Cellular_modules_porting : Create variable CellularUrcHandlerTable\n\nCellularAtParseTokenMap_t CellularUrcHandlerTable[] =\n{\n    { "CEREG",             Cellular_CommonUrcProcessCereg },\n    { "CGREG",             Cellular_CommonUrcProcessCgreg },\n    { "CREG",              Cellular_CommonUrcProcessCreg  },\n    { "NORMAL POWER DOWN", _Cellular_ProcessPowerDown     }\n}\nuint32_t CellularUrcHandlerTableSize = 4;

Cellular_modem ->Cellular_common : "NORMAL POWER DOWN"

Cellular_common -> Cellular_modules_porting : Call the callback function\n_Cellular_ProcessPowerDown(  pContext, "NORMAL POWER DOWN" )

Cellular_modules_porting ->Application : Call the callback function registered in\nCellular_RegisterModemEventCallback()

Cellular_modem ->Cellular_common : "+CREG: 2,0"
Cellular_common -> Cellular_common : Call the callback function\nCellular_CommonUrcProcessCreg(  pContext, "+CREG: 2,0" )
Cellular_common->Application : callback function registered in\nCellular_RegisterUrcNetworkRegistrationEventCallback()

@enduml
