~aleteoryx/muditaos

ec10e68bb5c53845130c0bbb2757e4115ca01525 — Hubert Chrzaniuk 5 years ago ba8f0ac
[EGD-5732] Add URC handling and Call Request handling diagrams

Updated documentation fro cellular service.
M module-services/service-cellular/doc/README.md => module-services/service-cellular/doc/README.md +13 -1
@@ 9,4 9,16 @@ Full state machine of Cellular service could be found below.
In order to protect system of sudden blackout, GSM module has to be switched off below certain critical battery level.
This way system voltage will not be dropped down when module is trying to acheive cellular network connection.

![](cellular_gsm_onoff_flow.svg)
\ No newline at end of file
![](cellular_gsm_onoff_flow.svg)

## URC handling flow

![](urc_handling.svg)

## Call Request handling flow

Call request represents the string written by te user in the input window.
It can be request of external phone number but also emergency call request,USSD code request or MMI request.
The logic has to recognize the request and apply proper action.

![](call_request_handling.svg)

A module-services/service-cellular/doc/call_request_handling.puml => module-services/service-cellular/doc/call_request_handling.puml +43 -0
@@ 0,0 1,43 @@
@startuml
participant ServiceCellular as cellular
participant RequestFactory as factory
participant IRequest as request
participant CellularRequestHandler as handler
participant DLC_channel as channel


?->     cellular + : ""call request""
cellular -> factory + : Create
factory -> factory : emergencyCheck()
alt is emergency and allowed
        factory -> request ** : <<create CallRequest>>
    factory --> cellular : <<CallRequest : IRequest>>
else is emergency and not allowed
    factory -> request : <<create RejectRequest>>
    factory --> cellular : <<RejectRequest : IRequest>>
end
note left: decision depends on the emergency\nnumber itself and state of SIM card
loop request types
    factory -> factory : <<regexmatch>>
    alt matched
        factory -> request : <<create matched request>>
        factory --> cellular : << matched : IRequest>>
    end
end
alt SIM not present
    factory -> request : <<create RejectRequest>>
    factory --> cellular : <<RejectRequest>>
else else
    factory -> request : <<create CallRequest>>
    factory --> cellular -: <<CallRequest>>
end
cellular ->request : command()
request --> cellular: <<command>>
cellular -> channel: cmd(command)
channel -->cellular : at::Result
cellular -> request +: Handle(CellularRequestHandler, at::Result)
request -> handler + : Handle(IRequest)
handler->? - : <<specific system actions>>
?<--    cellular -- : ""multicast response""
cellular -> request !! : delete
@enduml
\ No newline at end of file

A module-services/service-cellular/doc/call_request_handling.svg => module-services/service-cellular/doc/call_request_handling.svg +53 -0
@@ 0,0 1,53 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="969px" preserveAspectRatio="none" style="width:995px;height:969px;" version="1.1" viewBox="0 0 995 969" width="995px" zoomAndPan="magnify"><defs><filter height="300%" id="f1ke4x5lxerpcl" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><rect fill="#FFFFFF" filter="url(#f1ke4x5lxerpcl)" height="808.0938" style="stroke:#A80036;stroke-width:1.0;" width="10" x="163" y="71.4297"/><rect fill="#FFFFFF" filter="url(#f1ke4x5lxerpcl)" height="538.8984" style="stroke:#A80036;stroke-width:1.0;" width="10" x="399" y="100.5625"/><rect fill="#FFFFFF" filter="url(#f1ke4x5lxerpcl)" height="116.5313" style="stroke:#A80036;stroke-width:1.0;" width="10" x="632" y="792.125"/><rect fill="#FFFFFF" filter="url(#f1ke4x5lxerpcl)" height="29.1328" style="stroke:#A80036;stroke-width:1.0;" width="10" x="772" y="821.2578"/><rect fill="#FFFFFF" filter="url(#f1ke4x5lxerpcl)" height="164.6328" style="stroke:#000000;stroke-width:2.0;" width="588" x="99" y="157.6953"/><rect fill="#FFFFFF" height="73.0703" style="stroke:none;stroke-width:1.0;" width="588" x="99" y="249.2578"/><rect fill="#FFFFFF" filter="url(#f1ke4x5lxerpcl)" height="148.6641" style="stroke:#000000;stroke-width:2.0;" width="608" x="89" y="336.3281"/><rect fill="#FFFFFF" filter="url(#f1ke4x5lxerpcl)" height="75.3984" style="stroke:#000000;stroke-width:2.0;" width="588" x="99" y="402.5938"/><rect fill="#FFFFFF" filter="url(#f1ke4x5lxerpcl)" height="148.4688" style="stroke:#000000;stroke-width:2.0;" width="588" x="99" y="498.9922"/><rect fill="#FFFFFF" height="73.0703" style="stroke:none;stroke-width:1.0;" width="588" x="99" y="574.3906"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="168" x2="168" y1="40.2969" y2="926.6563"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="403.5" x2="403.5" y1="40.2969" y2="926.6563"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="637" x2="637" y1="207.4766" y2="926.6563"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="777" x2="777" y1="40.2969" y2="926.6563"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="931" x2="931" y1="40.2969" y2="926.6563"/><rect fill="#FEFECE" filter="url(#f1ke4x5lxerpcl)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="114" x="109" y="5"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="100" x="116" y="24.9951">ServiceCellular</text><rect fill="#FEFECE" filter="url(#f1ke4x5lxerpcl)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="114" x="109" y="925.6563"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="100" x="116" y="945.6514">ServiceCellular</text><rect fill="#FEFECE" filter="url(#f1ke4x5lxerpcl)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="123" x="340.5" y="5"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="109" x="347.5" y="24.9951">RequestFactory</text><rect fill="#FEFECE" filter="url(#f1ke4x5lxerpcl)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="123" x="340.5" y="925.6563"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="109" x="347.5" y="945.6514">RequestFactory</text><rect fill="#FEFECE" filter="url(#f1ke4x5lxerpcl)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="76" x="597" y="925.6563"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="62" x="604" y="945.6514">IRequest</text><rect fill="#FEFECE" filter="url(#f1ke4x5lxerpcl)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="176" x="687" y="5"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="162" x="694" y="24.9951">CellularRequestHandler</text><rect fill="#FEFECE" filter="url(#f1ke4x5lxerpcl)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="176" x="687" y="925.6563"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="162" x="694" y="945.6514">CellularRequestHandler</text><rect fill="#FEFECE" filter="url(#f1ke4x5lxerpcl)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="104" x="877" y="5"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="90" x="884" y="24.9951">DLC_channel</text><rect fill="#FEFECE" filter="url(#f1ke4x5lxerpcl)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="104" x="877" y="925.6563"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="90" x="884" y="945.6514">DLC_channel</text><rect fill="#FFFFFF" filter="url(#f1ke4x5lxerpcl)" height="808.0938" style="stroke:#A80036;stroke-width:1.0;" width="10" x="163" y="71.4297"/><rect fill="#FFFFFF" filter="url(#f1ke4x5lxerpcl)" height="538.8984" style="stroke:#A80036;stroke-width:1.0;" width="10" x="399" y="100.5625"/><rect fill="#FFFFFF" filter="url(#f1ke4x5lxerpcl)" height="116.5313" style="stroke:#A80036;stroke-width:1.0;" width="10" x="632" y="792.125"/><rect fill="#FFFFFF" filter="url(#f1ke4x5lxerpcl)" height="29.1328" style="stroke:#A80036;stroke-width:1.0;" width="10" x="772" y="821.2578"/><polygon fill="#A80036" points="151,67.4297,161,71.4297,151,75.4297,155,71.4297" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="53" x2="157" y1="71.4297" y2="71.4297"/><text fill="#000000" font-family="monospace" font-size="13" lengthAdjust="spacing" textLength="96" x="60" y="66.3638">call request</text><polygon fill="#A80036" points="387,96.5625,397,100.5625,387,104.5625,391,100.5625" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="173" x2="393" y1="100.5625" y2="100.5625"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="43" x="180" y="95.4966">Create</text><line style="stroke:#A80036;stroke-width:1.0;" x1="409" x2="451" y1="129.6953" y2="129.6953"/><line style="stroke:#A80036;stroke-width:1.0;" x1="451" x2="451" y1="129.6953" y2="142.6953"/><line style="stroke:#A80036;stroke-width:1.0;" x1="410" x2="451" y1="142.6953" y2="142.6953"/><polygon fill="#A80036" points="420,138.6953,410,142.6953,420,146.6953,416,142.6953" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="121" x="416" y="124.6294">emergencyCheck()</text><path d="M99,157.6953 L163,157.6953 L163,164.6953 L153,174.6953 L99,174.6953 L99,157.6953 " fill="#EEEEEE" style="stroke:#000000;stroke-width:1.0;"/><rect fill="none" height="164.6328" style="stroke:#000000;stroke-width:2.0;" width="588" x="99" y="157.6953"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="19" x="114" y="170.7622">alt</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacing" textLength="178" x="178" y="169.9058">[is emergency and allowed]</text><path d="M692,162.6953 L692,202.6953 L945,202.6953 L945,172.6953 L935,162.6953 L692,162.6953 " fill="#FBFB77" filter="url(#f1ke4x5lxerpcl)" style="stroke:#A80036;stroke-width:1.0;"/><path d="M935,162.6953 L935,172.6953 L945,172.6953 L935,162.6953 " fill="#FBFB77" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="232" x="698" y="179.7622">decision depends on the emergency</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="224" x="698" y="194.895">number itself and state of SIM card</text><polygon fill="#A80036" points="585,191.9609,595,195.9609,585,199.9609,589,195.9609" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="409" x2="591" y1="195.9609" y2="195.9609"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="164" x="416" y="190.895">&lt;&lt;create CallRequest&gt;&gt;</text><rect fill="#FEFECE" filter="url(#f1ke4x5lxerpcl)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="76" x="597" y="174.8281"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="62" x="604" y="194.8232">IRequest</text><polygon fill="#A80036" points="184,237.2578,174,241.2578,184,245.2578,180,241.2578" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="178" x2="398" y1="241.2578" y2="241.2578"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="186" x="190" y="236.1919">&lt;&lt;CallRequest : IRequest&gt;&gt;</text><line style="stroke:#000000;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="99" x2="687" y1="250.2578" y2="250.2578"/><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacing" textLength="203" x="104" y="260.4683">[is emergency and not allowed]</text><polygon fill="#A80036" points="625,281.1953,635,285.1953,625,289.1953,629,285.1953" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="409" x2="631" y1="285.1953" y2="285.1953"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="180" x="416" y="280.1294">&lt;&lt;create RejectRequest&gt;&gt;</text><polygon fill="#A80036" points="184,310.3281,174,314.3281,184,318.3281,180,314.3281" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="178" x2="398" y1="314.3281" y2="314.3281"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="202" x="190" y="309.2622">&lt;&lt;RejectRequest : IRequest&gt;&gt;</text><path d="M89,336.3281 L166,336.3281 L166,343.3281 L156,353.3281 L89,353.3281 L89,336.3281 " fill="#EEEEEE" style="stroke:#000000;stroke-width:1.0;"/><rect fill="none" height="148.6641" style="stroke:#000000;stroke-width:2.0;" width="608" x="89" y="336.3281"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="32" x="104" y="349.395">loop</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacing" textLength="98" x="181" y="348.5386">[request types]</text><line style="stroke:#A80036;stroke-width:1.0;" x1="409" x2="451" y1="374.5938" y2="374.5938"/><line style="stroke:#A80036;stroke-width:1.0;" x1="451" x2="451" y1="374.5938" y2="387.5938"/><line style="stroke:#A80036;stroke-width:1.0;" x1="410" x2="451" y1="387.5938" y2="387.5938"/><polygon fill="#A80036" points="420,383.5938,410,387.5938,420,391.5938,416,387.5938" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="121" x="416" y="369.5278">&lt;&lt;regexmatch&gt;&gt;</text><path d="M99,402.5938 L163,402.5938 L163,409.5938 L153,419.5938 L99,419.5938 L99,402.5938 " fill="#EEEEEE" style="stroke:#000000;stroke-width:1.0;"/><rect fill="none" height="75.3984" style="stroke:#000000;stroke-width:2.0;" width="588" x="99" y="402.5938"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="19" x="114" y="415.6606">alt</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacing" textLength="65" x="178" y="414.8042">[matched]</text><polygon fill="#A80036" points="625,436.8594,635,440.8594,625,444.8594,629,440.8594" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="409" x2="631" y1="440.8594" y2="440.8594"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="199" x="416" y="435.7935">&lt;&lt;create matched request&gt;&gt;</text><polygon fill="#A80036" points="184,465.9922,174,469.9922,184,473.9922,180,469.9922" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="178" x2="398" y1="469.9922" y2="469.9922"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="172" x="190" y="464.9263">&lt;&lt; matched : IRequest&gt;&gt;</text><path d="M99,498.9922 L163,498.9922 L163,505.9922 L153,515.9922 L99,515.9922 L99,498.9922 " fill="#EEEEEE" style="stroke:#000000;stroke-width:1.0;"/><rect fill="none" height="148.4688" style="stroke:#000000;stroke-width:2.0;" width="588" x="99" y="498.9922"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="19" x="114" y="512.0591">alt</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacing" textLength="111" x="178" y="511.2026">[SIM not present]</text><polygon fill="#A80036" points="625,533.2578,635,537.2578,625,541.2578,629,537.2578" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="409" x2="631" y1="537.2578" y2="537.2578"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="180" x="416" y="532.1919">&lt;&lt;create RejectRequest&gt;&gt;</text><polygon fill="#A80036" points="184,562.3906,174,566.3906,184,570.3906,180,566.3906" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="178" x2="398" y1="566.3906" y2="566.3906"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="135" x="190" y="561.3247">&lt;&lt;RejectRequest&gt;&gt;</text><line style="stroke:#000000;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="99" x2="687" y1="575.3906" y2="575.3906"/><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacing" textLength="37" x="104" y="585.6011">[else]</text><polygon fill="#A80036" points="625,606.3281,635,610.3281,625,614.3281,629,610.3281" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="409" x2="631" y1="610.3281" y2="610.3281"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="164" x="416" y="605.2622">&lt;&lt;create CallRequest&gt;&gt;</text><polygon fill="#A80036" points="184,635.4609,174,639.4609,184,643.4609,180,639.4609" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="178" x2="403" y1="639.4609" y2="639.4609"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="119" x="190" y="634.395">&lt;&lt;CallRequest&gt;&gt;</text><polygon fill="#A80036" points="625,671.5938,635,675.5938,625,679.5938,629,675.5938" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="173" x2="631" y1="675.5938" y2="675.5938"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="75" x="180" y="670.5278">command()</text><polygon fill="#A80036" points="184,700.7266,174,704.7266,184,708.7266,180,704.7266" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="178" x2="636" y1="704.7266" y2="704.7266"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="109" x="190" y="699.6606">&lt;&lt;command&gt;&gt;</text><polygon fill="#A80036" points="919,729.8594,929,733.8594,919,737.8594,923,733.8594" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="173" x2="925" y1="733.8594" y2="733.8594"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="103" x="180" y="728.7935">cmd(command)</text><polygon fill="#A80036" points="184,758.9922,174,762.9922,184,766.9922,180,762.9922" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="178" x2="930" y1="762.9922" y2="762.9922"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="60" x="190" y="757.9263">at::Result</text><polygon fill="#A80036" points="620,788.125,630,792.125,620,796.125,624,792.125" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="173" x2="626" y1="792.125" y2="792.125"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="272" x="180" y="787.0591">Handle(CellularRequestHandler, at::Result)</text><polygon fill="#A80036" points="760,817.2578,770,821.2578,760,825.2578,764,821.2578" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="642" x2="766" y1="821.2578" y2="821.2578"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="110" x="649" y="816.1919">Handle(IRequest)</text><polygon fill="#A80036" points="981,846.3906,991,850.3906,981,854.3906,985,850.3906" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="777" x2="987" y1="850.3906" y2="850.3906"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="192" x="784" y="845.3247">&lt;&lt;specific system actions&gt;&gt;</text><polygon fill="#A80036" points="11,875.5234,1,879.5234,11,883.5234,7,879.5234" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="5" x2="167" y1="879.5234" y2="879.5234"/><text fill="#000000" font-family="monospace" font-size="13" lengthAdjust="spacing" textLength="144" x="17" y="874.4575">multicast response</text><polygon fill="#A80036" points="625,904.6563,635,908.6563,625,912.6563,629,908.6563" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="168" x2="631" y1="908.6563" y2="908.6563"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="40" x="175" y="903.5903">delete</text><line style="stroke:#A80036;stroke-width:2.0;" x1="628" x2="646" y1="899.6563" y2="917.6563"/><line style="stroke:#A80036;stroke-width:2.0;" x1="628" x2="646" y1="917.6563" y2="899.6563"/><!--MD5=[edee2e5540815f12480a1f2d3e978caa]
@startuml
participant ServiceCellular as cellular
participant RequestFactory as factory
participant IRequest as request
participant CellularRequestHandler as handler
participant DLC_channel as channel


?->     cellular + : ""call request""
cellular -> factory + : Create
factory -> factory : emergencyCheck()
alt is emergency and allowed
        factory -> request ** : <<create CallRequest>>
    factory - -> cellular : <<CallRequest : IRequest>>
else is emergency and not allowed
    factory -> request : <<create RejectRequest>>
    factory - -> cellular : <<RejectRequest : IRequest>>
end
note left: decision depends on the emergency\nnumber itself and state of SIM card
loop request types
    factory -> factory : <<regexmatch>>
    alt matched
        factory -> request : <<create matched request>>
        factory - -> cellular : << matched : IRequest>>
    end
end
alt SIM not present
    factory -> request : <<create RejectRequest>>
    factory - -> cellular : <<RejectRequest>>
else else
    factory -> request : <<create CallRequest>>
    factory - -> cellular -: <<CallRequest>>
end
cellular ->request : command()
request - -> cellular: <<command>>
cellular -> channel: cmd(command)
channel - ->cellular : at::Result
cellular -> request +: Handle(CellularRequestHandler, at::Result)
request -> handler + : Handle(IRequest)
handler->? - : <<specific system actions>>
?<- -    cellular - - : ""multicast response""
cellular -> request !! : delete
@enduml

PlantUML version 1.2021.00(Sun Jan 10 11:25:05 CET 2021)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: UTF-8
Language: en
Country: US
--></g></svg>
\ No newline at end of file

A module-services/service-cellular/doc/urc_handling.puml => module-services/service-cellular/doc/urc_handling.puml +32 -0
@@ 0,0 1,32 @@
@startuml
participant ServiceCellular as cellular
participant TS0710 as ts
participant WorkerThread as worker
participant UrcFactory as factory
participant Urc as urc
participant CellularUrcHandler as handler


cellular -> ts + : <<create>>
cellular -> ts  : setCallback
ts -> worker * : <<create>>
note right worker 
processing of the incoming data takes place is separate thread
utilizing the callback function set by ServiceCellular
end note
loop true
?-> worker : new data
worker -> cellular : callback
cellular -> factory + : Create
factory -> urc ** : <<create>>
return <<return>>
cellular -> urc +: Handle(CellularUrcHandler)
urc -> handler + : Handle(Urc)
handler->? : <<specific system\nactions>>
handler<-? - : <<result>>
cellular -> handler + : getResponse
handler --> cellular - : <<response>>
?<--    cellular -- : ""multicast\nresponse""
cellular -> urc !! : delete
end
@enduml
\ No newline at end of file

A module-services/service-cellular/doc/urc_handling.svg => module-services/service-cellular/doc/urc_handling.svg +42 -0
@@ 0,0 1,42 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="717px" preserveAspectRatio="none" style="width:895px;height:717px;" version="1.1" viewBox="0 0 895 717" width="895px" zoomAndPan="magnify"><defs><filter height="300%" id="f9zn9nm1ckmmn" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><rect fill="#FFFFFF" filter="url(#f9zn9nm1ckmmn)" height="593.9844" style="stroke:#A80036;stroke-width:1.0;" width="10" x="204" y="71.4297"/><rect fill="#FFFFFF" filter="url(#f9zn9nm1ckmmn)" height="74.4297" style="stroke:#A80036;stroke-width:1.0;" width="10" x="489.5" y="311.6563"/><rect fill="#FFFFFF" filter="url(#f9zn9nm1ckmmn)" height="234.1953" style="stroke:#A80036;stroke-width:1.0;" width="10" x="624" y="415.2188"/><rect fill="#FFFFFF" filter="url(#f9zn9nm1ckmmn)" height="73.3984" style="stroke:#A80036;stroke-width:1.0;" width="10" x="730" y="444.3516"/><rect fill="#FFFFFF" filter="url(#f9zn9nm1ckmmn)" height="29.1328" style="stroke:#A80036;stroke-width:1.0;" width="10" x="730" y="546.8828"/><rect fill="#FFFFFF" filter="url(#f9zn9nm1ckmmn)" height="442.2891" style="stroke:#000000;stroke-width:2.0;" width="871" x="10" y="215.125"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="100" x2="100" y1="40.2969" y2="674.4141"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="209" x2="209" y1="40.2969" y2="674.4141"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="381" x2="381" y1="141.2109" y2="674.4141"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="494" x2="494" y1="40.2969" y2="674.4141"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="628.5" x2="628.5" y1="352.3047" y2="674.4141"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="735" x2="735" y1="40.2969" y2="674.4141"/><rect fill="#FEFECE" filter="url(#f9zn9nm1ckmmn)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="114" x="41" y="5"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="100" x="48" y="24.9951">ServiceCellular</text><rect fill="#FEFECE" filter="url(#f9zn9nm1ckmmn)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="114" x="41" y="673.4141"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="100" x="48" y="693.4092">ServiceCellular</text><rect fill="#FEFECE" filter="url(#f9zn9nm1ckmmn)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="68" x="173" y="5"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="54" x="180" y="24.9951">TS0710</text><rect fill="#FEFECE" filter="url(#f9zn9nm1ckmmn)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="68" x="173" y="673.4141"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="54" x="180" y="693.4092">TS0710</text><rect fill="#FEFECE" filter="url(#f9zn9nm1ckmmn)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="112" x="323" y="673.4141"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="98" x="330" y="693.4092">WorkerThread</text><rect fill="#FEFECE" filter="url(#f9zn9nm1ckmmn)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="87" x="449" y="5"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="73" x="456" y="24.9951">UrcFactory</text><rect fill="#FEFECE" filter="url(#f9zn9nm1ckmmn)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="87" x="449" y="673.4141"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="73" x="456" y="693.4092">UrcFactory</text><rect fill="#FEFECE" filter="url(#f9zn9nm1ckmmn)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="37" x="608.5" y="673.4141"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="23" x="615.5" y="693.4092">Urc</text><rect fill="#FEFECE" filter="url(#f9zn9nm1ckmmn)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="140" x="663" y="5"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="126" x="670" y="24.9951">CellularUrcHandler</text><rect fill="#FEFECE" filter="url(#f9zn9nm1ckmmn)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="140" x="663" y="673.4141"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="126" x="670" y="693.4092">CellularUrcHandler</text><rect fill="#FFFFFF" filter="url(#f9zn9nm1ckmmn)" height="593.9844" style="stroke:#A80036;stroke-width:1.0;" width="10" x="204" y="71.4297"/><rect fill="#FFFFFF" filter="url(#f9zn9nm1ckmmn)" height="74.4297" style="stroke:#A80036;stroke-width:1.0;" width="10" x="489.5" y="311.6563"/><rect fill="#FFFFFF" filter="url(#f9zn9nm1ckmmn)" height="234.1953" style="stroke:#A80036;stroke-width:1.0;" width="10" x="624" y="415.2188"/><rect fill="#FFFFFF" filter="url(#f9zn9nm1ckmmn)" height="73.3984" style="stroke:#A80036;stroke-width:1.0;" width="10" x="730" y="444.3516"/><rect fill="#FFFFFF" filter="url(#f9zn9nm1ckmmn)" height="29.1328" style="stroke:#A80036;stroke-width:1.0;" width="10" x="730" y="546.8828"/><polygon fill="#A80036" points="192,67.4297,202,71.4297,192,75.4297,196,71.4297" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="100" x2="198" y1="71.4297" y2="71.4297"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="85" x="107" y="66.3638">&lt;&lt;create&gt;&gt;</text><polygon fill="#A80036" points="192,96.5625,202,100.5625,192,104.5625,196,100.5625" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="100" x2="198" y1="100.5625" y2="100.5625"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="73" x="107" y="95.4966">setCallback</text><polygon fill="#A80036" points="311,125.6953,321,129.6953,311,133.6953,315,129.6953" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="214" x2="317" y1="129.6953" y2="129.6953"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="85" x="221" y="124.6294">&lt;&lt;create&gt;&gt;</text><rect fill="#FEFECE" filter="url(#f9zn9nm1ckmmn)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="112" x="323" y="108.5625"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="98" x="330" y="128.5576">WorkerThread</text><path d="M386,158.8594 L386,198.8594 L810,198.8594 L810,168.8594 L800,158.8594 L386,158.8594 " fill="#FBFB77" filter="url(#f9zn9nm1ckmmn)" style="stroke:#A80036;stroke-width:1.0;"/><path d="M800,158.8594 L800,168.8594 L810,168.8594 L800,158.8594 " fill="#FBFB77" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="403" x="392" y="175.9263">processing of the incoming data takes place is separate thread</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="324" x="392" y="191.0591">utilizing the callback function set by ServiceCellular</text><path d="M10,215.125 L87,215.125 L87,222.125 L77,232.125 L10,232.125 L10,215.125 " fill="#EEEEEE" style="stroke:#000000;stroke-width:1.0;"/><rect fill="none" height="442.2891" style="stroke:#000000;stroke-width:2.0;" width="871" x="10" y="215.125"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="32" x="25" y="228.1919">loop</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacing" textLength="36" x="102" y="227.3354">[true]</text><polygon fill="#A80036" points="369,249.3906,379,253.3906,369,257.3906,373,253.3906" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="299" x2="375" y1="253.3906" y2="253.3906"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="58" x="306" y="248.3247">new data</text><polygon fill="#A80036" points="111,278.5234,101,282.5234,111,286.5234,107,282.5234" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="105" x2="380" y1="282.5234" y2="282.5234"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="51" x="117" y="277.4575">callback</text><polygon fill="#A80036" points="477.5,307.6563,487.5,311.6563,477.5,315.6563,481.5,311.6563" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="100" x2="483.5" y1="311.6563" y2="311.6563"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="43" x="107" y="306.5903">Create</text><polygon fill="#A80036" points="596.5,336.7891,606.5,340.7891,596.5,344.7891,600.5,340.7891" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="499.5" x2="602.5" y1="340.7891" y2="340.7891"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="85" x="506.5" y="335.7231">&lt;&lt;create&gt;&gt;</text><rect fill="#FEFECE" filter="url(#f9zn9nm1ckmmn)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="37" x="608.5" y="319.6563"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="23" x="615.5" y="339.6514">Urc</text><polygon fill="#A80036" points="111,382.0859,101,386.0859,111,390.0859,107,386.0859" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="105" x2="493.5" y1="386.0859" y2="386.0859"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="83" x="117" y="381.02">&lt;&lt;return&gt;&gt;</text><polygon fill="#A80036" points="612,411.2188,622,415.2188,612,419.2188,616,415.2188" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="100" x2="618" y1="415.2188" y2="415.2188"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="174" x="107" y="410.1528">Handle(CellularUrcHandler)</text><polygon fill="#A80036" points="718,440.3516,728,444.3516,718,448.3516,722,444.3516" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="634" x2="724" y1="444.3516" y2="444.3516"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="77" x="641" y="439.2856">Handle(Urc)</text><polygon fill="#A80036" points="872,484.6172,882,488.6172,872,492.6172,876,488.6172" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="740" x2="878" y1="488.6172" y2="488.6172"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="120" x="747" y="468.4185">&lt;&lt;specific system</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="68" x="747" y="483.5513">actions&gt;&gt;</text><polygon fill="#A80036" points="746,513.75,736,517.75,746,521.75,742,517.75" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="740" x2="838" y1="517.75" y2="517.75"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="80" x="752" y="512.6841">&lt;&lt;result&gt;&gt;</text><polygon fill="#A80036" points="718,542.8828,728,546.8828,718,550.8828,722,546.8828" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="100" x2="724" y1="546.8828" y2="546.8828"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="83" x="107" y="541.8169">getResponse</text><polygon fill="#A80036" points="111,572.0156,101,576.0156,111,580.0156,107,576.0156" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="105" x2="734" y1="576.0156" y2="576.0156"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="103" x="117" y="570.9497">&lt;&lt;response&gt;&gt;</text><polygon fill="#A80036" points="18,616.2813,8,620.2813,18,624.2813,14,620.2813" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="12" x2="99" y1="620.2813" y2="620.2813"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="69" x="24" y="600.0825">""multicast</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="69" x="24" y="615.2153">response""</text><polygon fill="#A80036" points="617,645.4141,627,649.4141,617,653.4141,621,649.4141" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="100" x2="623" y1="649.4141" y2="649.4141"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="40" x="107" y="644.3481">delete</text><line style="stroke:#A80036;stroke-width:2.0;" x1="620" x2="638" y1="640.4141" y2="658.4141"/><line style="stroke:#A80036;stroke-width:2.0;" x1="620" x2="638" y1="658.4141" y2="640.4141"/><!--MD5=[38e3838875216213e2be62ff3a06c39b]
@startuml
participant ServiceCellular as cellular
participant TS0710 as ts
participant WorkerThread as worker
participant UrcFactory as factory
participant Urc as urc
participant CellularUrcHandler as handler


cellular -> ts + : <<create>>
cellular -> ts  : setCallback
ts -> worker * : <<create>>
note right worker 
processing of the incoming data takes place is separate thread
utilizing the callback function set by ServiceCellular
end note
loop true
?-> worker : new data
worker -> cellular : callback
cellular -> factory + : Create
factory -> urc ** : <<create>>
return <<return>>
cellular -> urc +: Handle(CellularUrcHandler)
urc -> handler + : Handle(Urc)
handler->? : <<specific system\nactions>>
handler<-? - : <<result>>
cellular -> handler + : getResponse
handler - -> cellular - : <<response>>
?<- -    cellular - - : ""multicast\nresponse""
cellular -> urc !! : delete
end
@enduml

PlantUML version 1.2021.00(Sun Jan 10 11:25:05 CET 2021)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: UTF-8
Language: en
Country: US
--></g></svg>
\ No newline at end of file