State Machine¶
The state machine is core of libGammu operations. It gets the data from the phone and dispatches them through protocol layer to phone drivers.
To see how it operates, following figure shows example of what happens when
GSM_GetModel()
is called from the program:
digraph statemachine { "GSM_GetModel" -> "Phone.Functions.GetModel"; "Phone.Functions.GetModel" -> "GSM_WaitFor"; "GSM_WaitFor" -> "Protocol.Functions.WriteMessage"; "Protocol.Functions.WriteMessage" -> "GSM_WaitForOnce"; "GSM_WaitForOnce" -> "GSM_WaitFor" [label="Retries"]; "GSM_WaitForOnce" -> "GSM_ReadDevice"; "GSM_ReadDevice" -> "GSM_WaitForOnce" [label="Wair for complete request"]; "GSM_ReadDevice" -> "Device.Functions.ReadDevice"; "Device.Functions.ReadDevice" -> "GSM_ReadDevice" [label="Wait for data"]; "Device.Functions.ReadDevice" -> "Protocol.Functions.StateMachine"; "Protocol.Functions.StateMachine" -> "Phone.Functions.DispatchMessage" "Phone.Functions.DispatchMessage" -> "GSM_DispatchMessage"; "GSM_DispatchMessage" -> "Phone.Functions.ReplyFunctions[]()"; "Phone.Functions.ReplyFunctions[]()" -> "Phone.Functions.GetModel"; "Phone.Functions.GetModel" -> "GSM_GetModel"; }