blob: 5ea8894b703d8c8514cc5339533a338f67a001ea (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
1. GSMD api towards libgsmd
- provides api for other processes to interact with GSM subsystem
2. GSMD api towards vendor-specific plugins
- implement vendor-specific AT commands
3. libgsmd api towards applications
- wraps GSMD-libgsmd api into C functions that can be used by applications
code flow in gsmd:
- select loop detects data has arrived on user socket
- gsmd_usock_user_cb()
- if this is atcmd passthrough,
- alloc + fill in gsmd_atcmd
- atcmd_submit()
- append it to pending_atcmds
- mark interest of writing to UART
- if this is not passthrough
- do whatever handling, including enqueueing of atcmds
- select loop detects UART is marked writable
- atcmd_select_cb()
- iterate over list of pending_atcmds()
- write a particular atcmd to UART
- move atcmd to busy_atcmds
- select loop detects UART is marked readable
- atcmd_select_cb()
- read up to 1024 bytes into buffer
- llparse_string()
- llparse_byte()
- llparse_append()
- llp->cb == ml_parse()
- if this is not unsolicited
- call cmd->cb()
- alloc + fill ucmd reply
- add to finished_ucmds
- mark user sock writable
- unlink + free atcmd
- if this is unsolicited
- unsolicited_parse()
- usock_evt_send()
- alloc + fill ucmd reply
- add to finished_ucmds
- mark user sock writable
- select loop detects user sock writeability
- gsmd_usock_user_cb()
- iterate over finished_ucmds
- write ucmd
- unlink + free ucmd
|