Project

General

Profile

Diag » History » Version 11

laforge, 12/17/2016 11:15 AM

1 4 laforge
{{>toc}}
2
3 1 laforge
h1. Diag
4
5 6 laforge
FIXME
6
7 1 laforge
h2. Acronyms
8
9
|DCI|Diag Consumer Interface|
10
11 4 laforge
h2. Child Pages
12
13
{{child_pages()}}
14 6 laforge
15
h2. Subsystems
16
17
h3. Logging
18
19
Logging works by so-called log-codes.  The Log code identifies the source/category of the logged information.  Log codes are 16bit unsigned integers.
20
21
|_.Base Code|_.Purpose|
22
|0x1000|CDMA 1x|
23
|0x4000|WCDMA|
24
|0x5000|GSM|
25
|0x6000|Location Based Services|
26
|0x7000|UMTS|
27
|0x8000|TDMA|
28
|0xA000|DTV|
29
|0xB000|APPS|
30
|0xB010|LTE (until 0xB1FF)|
31
|0xB400|WIMAX|
32
|0xC000|DSP|
33
|0xD000|TD-SCDMA (until 0xD1FF)|
34
|0xF000|LOG TOOLS|
35 4 laforge
36 3 laforge
h2. Kernel support
37
38 1 laforge
See [[Qualcomm_Kernel#diag]]
39
40 4 laforge
h2. Library
41 1 laforge
42 4 laforge
There is @/usr/lib/libdiag.so.1@ which is linked by virtually any Qualcomm or Quectel proprietary program running on the Linux in the Modem.
43
44
it offers the follwing symbols:
45
<pre>
46 9 laforge
log_submit
47
pools
48
diag_vote_md_real_time
49
DiagSvc_Free
50
diag_dci_get_real_time_status_proc
51
diagpkt_subsys_get_delayed_rsp_id
52
diagpkt_subsys_alloc_v2
53
diag_read_mask_file_list
54
diagpkt_subsys_get_cmd_code
55
Diag_LSM_Event_DeInit
56
diag_wakelock_init
57
mask_file2
58
cleanup_mask
59
diag_register_dci_client
60
mask_file
61
msg_send_var
62
diagpkt_subsys_alloc_v2_delay
63
log_to_memory
64
diagpkt_alloc
65
db_thread_initialized
66
_init
67
stop_cond
68
diag_hdlc_toggle
69
diag_wakelock_acquire
70
parser_state
71
num_bytes_read
72
log_update_dci_mask
73
send_mask_modem
74
qsr4_db_file_fd
75
qsr4_db_write_buf_pool
76
event_update_mask
77
mask_sync_initialize
78
file_name_curr
79
msg_sprintf
80
mask_file_mdm2
81
event_report_payload
82
DiagSvc_Malloc_Init
83
diag_release_dci_client
84
update_sync_mask
85
diag_send_socket_data
86
diag_register_dci_stream_proc
87
DiagSvc_Malloc
88
buffer_init
89
msg_mask_tbl_size
90
curr_write_idx
91
diag_logger_flush
92
pool0_buffers
93
log_set_length
94
hdlc_disabled
95
fd_qsr4_xml
96
qsr4_xml_file_name
97
diagpkt_LSM_process_request
98
diag_get_real_time_status
99
Diag_LSM_Pkt_DeInit
100
flush_buffer
101
diag_callback_send_data
102
dci_cumulative_event_mask
103
dci_transaction_id
104
diag_get_health_stats_proc
105
stop_mutex
106
diag_get_health_stats
107
log_free
108
mask_file_mdm
109
diagpkt_subsys_reset_delayed_rsp_id
110
diag_logger_init
111
dummy_handler
112
diag_send_data
113
diag_kill_qshrink4_threads
114
ts_get_lohi
115
diagpkt_subsys_set_rsp_cnt
116
diag_notify_parser_thread
117
diag_disable_all_logs
118
diagpkt_commit
119
proc_type
120
diag_log_stream_config
121
log_status
122
msg_send
123
WriteToDisk
124
Diag_LSM_Log_DeInit
125
fd_dev
126
diag_dci_get_real_time_status
127
qsr4_db_cmd_req_buf
128
diagpkt_subsys_alloc
129
get_sync_mask
130
diag_get_dci_support_list_proc
131
diag_get_real_time_status_proc
132
qsr4_read_db_mutex
133
dir_name
134
diag_set_socket_fd
135
diag_switch_logging_proc
136
diagpkt_get_cmd_code
137
diagpkt_subsys_get_status
138
in_read
139
Diag_LSM_Event_Init
140
diag_dci_error_type
141
diag_disable_all_events
142
pid_file
143
qsr4_db_parser_thread_hdl
144
num_dci_proc
145
in_wait_for_peripheral_status
146
write_in_progress
147
Diag_LSM_Pkt_Init
148
max_file_size
149
ts_get
150
diag_get_event_status
151
log_set_timestamp
152
curr_read
153
diag_register_dci_signal_data
154
diagpkt_shorten
155
curr_read_idx
156
pool1_buffers
157
lookup_pkt_rsp_transaction
158
diag_disable_console
159
max_file_num
160
diag_send_dci_async_req
161
log_get_length
162
diagpkt_set_cmd_code
163
diagpkt_subsys_set_status
164
diag_peripheral_buffering_drain_immediate
165
event_mask
166
log_commit
167
min_file_size
168
gdwClientID
169
msg_send_ts
170
read_thread_hdl
171
valid_token
172
add_guid_to_qshrink4_header
173
msg_mask
174
file_list_size
175
log_shorten
176
diagpkt_free
177
fd_socket
178
flush_log
179
create_diag_qshrink4_db_parser_thread
180
diag_read_mask_file
181
diag_deregister_dci_signal_data
182
num_dci_clients_event
183
proc_name
184
diag_lsm_dci_deinit
185
diag_wakelock_release
186
read_buffer
187
diagpkt_subsys_get_id
188
peripheral_name
189
Diag_LSM_Init
190
diag_configure_peripheral_buffering_tx_mode
191
curr_write
192
diag_callback_send_data_hdlc
193
qsr_msg_send_1
194
qsr_msg_send_2
195
db_write_thread_hdl
196
Diag_LSM_Msg_Init
197
qsr_msg_send_3
198
token_list
199
diag_has_remote_device
200
diag_register_remote_callback
201
in_write
202
file_list
203
process_incoming_data
204
delete_log
205
log_to_device
206
logging_mode
207
log_set_code
208
diagpkt_delay_commit
209
flush_in_progress
210
diag_send_to_output
211
diag_get_max_channels
212
Diag_LSM_Log_Init
213
file_name_del
214
uart_logging_proc
215
DiagSvc_Malloc_Exit
216
output_dir
217
diag_event_stream_config
218
Diag_LSM_DeInit
219
diagpkt_tbl_reg
220
diag_dci_vote_real_time
221
kill_thread
222
count_written_bytes_1
223
qsr_msg_send
224
event_report
225
diag_fd
226
event_update_dci_mask
227
diag_get_dci_support_list
228
log_update_mask
229
parse_data_for_qsr4_db_file_op_rsp
230
file_list_index
231
rename_file_names
232
diag_register_callback
233
diag_lsm_dci_init
234
diag_vote_md_real_time_proc
235
msg_send_1
236
msg_send_2
237
msg_send_3
238
diag_is_wakelock_init
239
disk_write_hdl
240
diag_register_socket_cb
241
msg_update_mask
242
diag_set_peripheral_mask
243
log_alloc
244
dci_client_tbl
245
do_mask_sync
246
write_qshrink_header
247
fd_uart
248
qsr_msg_send_var
249
periph_info
250
diag_logger_exit
251
send_empty_mask
252
gnDiag_LSM_Event_Initialized
253
diagpkt_err_rsp
254
diag_logger_write
255
diag_get_log_status
256
qsr4_read_db_cond
257
rename_dir_name
258
diag_wakelock_destroy
259
diag_register_dci_stream
260
log_get_code
261
msg_mask_tbl
262
Diag_LSM_Msg_DeInit
263
to_integer
264
_fini
265
diag_get_peripheral_name_from_mask
266
count_written_bytes
267
diag_switch_logging
268
fd_md
269 4 laforge
</pre>
270 5 laforge
271 10 laforge
h3. Initialization
272
273
|_.Function|_.Purpose|
274
|Diag_LSM_Init()|Registering with Diag which gives the client a handle to the Diag. Called once per process|
275
276 5 laforge
h3. Logging Service API
277
278
This is about sending log messages via the Diag interface.
279
280
|_.Function|_.Purpose|
281
|log_alloc(u16 code, len)|Allocate a buffer + fill header|
282
|log_shorten(ptr, len)|Shorten the length of a previously allocated buffer|
283
|log_commit(ptr)|Send the log to diag|
284
|log_free(ptr)|Free a buffer previously allocated with log_alloc()|
285
|log_submit(ptr)|Convenience wrapper around log_alloc()/memcpy()/log_commit()|
286
287 7 laforge
On the [[EC25]], it seems only the following Linux programs use the avove API to generate logs via Diag:
288
* @/usr/bin/cnss_diag@
289
* @/usr/bin/ftmdaemon@
290
* @/usr/bin/mbimd@
291
* @/usr/bin/test_diag@
292
293 5 laforge
h3. Diag Consumer Interface
294
295 1 laforge
This seems to be about implementing a program that consumes Diag events. You can register to certain events/masks and then receive the related information in call-backs.
296 8 laforge
297
|_.Function|_.Description|
298
|diag_lsm_dci_init()|Initialize DCI subsystem of libdiag|
299 11 laforge
|diag_register_dci_client()|Register a DCI client, issues DIAG_IOCTL_DCI_REG to /dev/diag|
300
|diag_get_dci_support_list()|Get list of peripherals supported, issues DIAG_IOCTL_DCI_SUPPORT to /dev/diag|
301
|diag_register_dci_stream()|Register call-backs for events and logs, writes to /dev/diag|
302
|diag_event_stream_config()|Set up event streaming to the client, writes to /dev/diag|
303
|diag_log_stream_config()|Specify array of requested log codes, writes to /dev/diag|
304
|diag_get_health_stats()|Get statistics about missed/succeeded logs and events, issues DIAG_IOCTL_DCI_HEALTH_STATS to /dev/diag|
305 8 laforge
|diag_register_dci_signal_data()|Request OS signal when DCI data is received|
Add picture from clipboard (Maximum size: 48.8 MB)