aboutsummaryrefslogtreecommitdiff
path: root/libqcdm/src/dm-commands.h
blob: cc254bb7b7d132b934c6756a0ce3aeb37d65fbab (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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * Copyright (C) 2010 Red Hat, Inc.
 *
 * This program is free software: you can redistribute it and/or
 * modify it under the terms of version 2 of the GNU General Public
 * License as published by the Free Software Foundation
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef LIBQCDM_DM_COMMANDS_H
#define LIBQCDM_DM_COMMANDS_H

enum {
    DIAG_CMD_VERSION_INFO = 0,  /* Version info */
    DIAG_CMD_ESN          = 1,  /* ESN */
    DIAG_CMD_PEEKB        = 2,  /* Peek byte */
    DIAG_CMD_PEEKW        = 3,  /* Peek word */
    DIAG_CMD_PEEKD        = 4,  /* Peek dword */
    DIAG_CMD_POKEB        = 5,  /* Poke byte */
    DIAG_CMD_POKEW        = 6,  /* Poke word */
    DIAG_CMD_POKED        = 7,  /* Poke dword */
    DIAG_CMD_OUTP         = 8,  /* Byte output */
    DIAG_CMD_OUTPW        = 9,  /* Word output */
    DIAG_CMD_INP          = 10, /* Byte input */
    DIAG_CMD_INPW         = 11, /* Word input */
    DIAG_CMD_STATUS       = 12, /* Station status */
    DIAG_CMD_LOGMASK      = 15, /* Set logging mask */
    DIAG_CMD_LOG          = 16, /* Log packet */
    DIAG_CMD_NV_PEEK      = 17, /* Peek NV memory */
    DIAG_CMD_NV_POKE      = 18, /* Poke NV memory */
    DIAG_CMD_BAD_CMD      = 19, /* Invalid command (response) */
    DIAG_CMD_BAD_PARM     = 20, /* Invalid parameter (response) */
    DIAG_CMD_BAD_LEN      = 21, /* Invalid packet length (response) */
    DIAG_CMD_BAD_DEV      = 22, /* Not accepted by the device (response) */
    DIAG_CMD_BAD_MODE     = 24, /* Not allowed in this mode (response) */
    DIAG_CMD_TAGRAPH      = 25, /* Info for TA power and voice graphs */
    DIAG_CMD_MARKOV       = 26, /* Markov stats */
    DIAG_CMD_MARKOV_RESET = 27, /* Reset Markov stats */
    DIAG_CMD_DIAG_VER     = 28, /* Diagnostic Monitor version */
    DIAG_CMD_TIMESTAMP    = 29, /* Return a timestamp */
    DIAG_CMD_TA_PARM      = 30, /* Set TA parameters */
    DIAG_CMD_MESSAGE      = 31, /* Request for msg report */
    DIAG_CMD_HS_KEY       = 32, /* Handset emulation -- keypress */
    DIAG_CMD_HS_LOCK      = 33, /* Handset emulation -- lock or unlock */
    DIAG_CMD_HS_SCREEN    = 34, /* Handset emulation -- display request */
    DIAG_CMD_PARM_SET     = 36, /* Parameter download */
    DIAG_CMD_NV_READ      = 38, /* Read NV item */
    DIAG_CMD_NV_WRITE     = 39, /* Write NV item */
    DIAG_CMD_CONTROL      = 41, /* Mode change request */
    DIAG_CMD_ERR_READ     = 42, /* Error record retreival */
    DIAG_CMD_ERR_CLEAR    = 43, /* Error record clear */
    DIAG_CMD_SER_RESET    = 44, /* Symbol error rate counter reset */
    DIAG_CMD_SER_REPORT   = 45, /* Symbol error rate counter report */
    DIAG_CMD_TEST         = 46, /* Run a specified test */
    DIAG_CMD_GET_DIPSW    = 47, /* Retreive the current DIP switch setting */
    DIAG_CMD_SET_DIPSW    = 48, /* Write new DIP switch setting */
    DIAG_CMD_VOC_PCM_LB   = 49, /* Start/Stop Vocoder PCM loopback */
    DIAG_CMD_VOC_PKT_LB   = 50, /* Start/Stop Vocoder PKT loopback */
    DIAG_CMD_ORIG         = 53, /* Originate a call */
    DIAG_CMD_END          = 54, /* End a call */
    DIAG_CMD_SW_VERSION   = 56, /* Get software version */
    DIAG_CMD_DLOAD        = 58, /* Switch to downloader */
    DIAG_CMD_TMOB         = 59, /* Test Mode Commands and FTM commands*/
    DIAG_CMD_STATE        = 63, /* Current state of the phone */
    DIAG_CMD_PILOT_SETS   = 64, /* Return all current sets of pilots */
    DIAG_CMD_SPC          = 65, /* Send the Service Programming Code to unlock */
    DIAG_CMD_BAD_SPC_MODE = 66, /* Invalid NV read/write because SP is locked */
    DIAG_CMD_PARM_GET2    = 67, /* (obsolete) */
    DIAG_CMD_SERIAL_CHG   = 68, /* Serial mode change */
    DIAG_CMD_PASSWORD     = 70, /* Send password to unlock secure operations */
    DIAG_CMD_BAD_SEC_MODE = 71, /* Operation not allowed in this security state */
    DIAG_CMD_PRL_WRITE         = 72,  /* Write PRL */
    DIAG_CMD_PRL_READ          = 73,  /* Read PRL */
    DIAG_CMD_SUBSYS            = 75,  /* Subsystem commands */
    DIAG_CMD_FEATURE_QUERY     = 81,
    DIAG_CMD_SMS_READ          = 83,  /* Read SMS message out of NV memory */
    DIAG_CMD_SMS_WRITE         = 84,  /* Write SMS message into NV memory */
    DIAG_CMD_SUP_FER           = 85,  /* Frame Error Rate info on multiple channels */
    DIAG_CMD_SUP_WALSH_CODES   = 86,  /* Supplemental channel walsh codes */
    DIAG_CMD_SET_MAX_SUP_CH    = 87,  /* Sets the maximum # supplemental channels */
    DIAG_CMD_PARM_GET_IS95B    = 88,  /* Get parameters including SUPP and MUX2 */
    DIAG_CMD_FS_OP             = 89,  /* Embedded File System (EFS) operations */
    DIAG_CMD_AKEY_VERIFY       = 90,  /* AKEY Verification */
    DIAG_CMD_HS_BMP_SCREEN     = 91,  /* Handset Emulation -- Bitmap screen */
    DIAG_CMD_CONFIG_COMM       = 92,  /* Configure communications */
    DIAG_CMD_EXT_LOGMASK       = 93,  /* Extended logmask for > 32 bits */
    DIAG_CMD_EVENT_REPORT      = 96,  /* Static Event reporting */
    DIAG_CMD_STREAMING_CONFIG  = 97,  /* Load balancing etc */
    DIAG_CMD_PARM_RETRIEVE     = 98,  /* Parameter retrieval */
    DIAG_CMD_STATUS_SNAPSHOT   = 99,  /* Status snapshot */
    DIAG_CMD_RPC               = 100, /* Used for RPC */
    DIAG_CMD_GET_PROPERTY      = 101,
    DIAG_CMD_PUT_PROPERTY      = 102,
    DIAG_CMD_GET_GUID          = 103, /* GUID requests */
    DIAG_CMD_USER_CMD          = 104, /* User callbacks */
    DIAG_CMD_GET_PERM_PROPERTY = 105,
    DIAG_CMD_PUT_PERM_PROPERTY = 106,
    DIAG_CMD_PERM_USER_CMD     = 107, /* Permanent user callbacks */
    DIAG_CMD_GPS_SESS_CTRL     = 108, /* GPS session control */
    DIAG_CMD_GPS_GRID          = 109, /* GPS search grid */
    DIAG_CMD_GPS_STATISTICS    = 110,
    DIAG_CMD_TUNNEL            = 111, /* Tunneling command code */
    DIAG_CMD_RAM_RW            = 112, /* Calibration RAM control using DM */
    DIAG_CMD_CPU_RW            = 113, /* Calibration CPU control using DM */
    DIAG_CMD_SET_FTM_TEST_MODE = 114, /* Field (or Factory?) Test Mode */
    DIAG_CMD_LOG_CONFIG        = 115, /* New logging config command */
    DIAG_CMD_EXT_BUILD_ID      = 124,
    DIAG_CMD_EXT_MESSAGE_CONFIG= 125,
    DIAG_CMD_EVENT_GET_MASK    = 129,
    DIAG_CMD_EVENT_SET_MASK    = 130
};

/* Subsystem IDs used with DIAG_CMD_SUBSYS; these often obsolete many of
 * the original DM commands.
 */
enum {
    DIAG_SUBSYS_WCDMA           = 4,
    DIAG_SUBSYS_HDR             = 5,  /* High Data Rate (ie, EVDO) */
    DIAG_SUBSYS_GSM             = 8,
    DIAG_SUBSYS_UMTS            = 9,
    DIAG_SUBSYS_OS              = 12,
    DIAG_SUBSYS_GPS             = 13,
    DIAG_SUBSYS_SMS             = 14, /* Wireless Messaging Service */
    DIAG_SUBSYS_CM              = 15, /* Call manager */
    DIAG_SUBSYS_FS              = 19, /* File System (EFS2) */
    DIAG_SUBSYS_NW_CONTROL_6500 = 50, /* for Novatel Wireless MSM6500-based devices */
    DIAG_SUBSYS_ZTE             = 101, /* for ZTE EVDO devices */
    DIAG_SUBSYS_NW_CONTROL_6800 = 250 /* for Novatel Wireless MSM6800-based devices */
};

/* WCDMA subsystem command codes */
enum {
    DIAG_SUBSYS_WCDMA_CALL_START  = 12, /* Starts a call */
    DIAG_SUBSYS_WCDMA_CALL_END    = 13, /* Ends an ongoing call */
    DIAG_SUBSYS_WCDMA_STATE_INFO  = 15, /* Gets WCDMA state */
};

/* HDR subsystem command codes */
enum {
    DIAG_SUBSYS_HDR_STATE_INFO  = 8, /* Gets EVDO state */
};

/* GSM subsystem command codes */
enum {
    DIAG_SUBSYS_GSM_STATE_INFO  = 1, /* Gets GSM state */
};

/* CM subsystem command codes */
enum {
    DIAG_SUBSYS_CM_STATE_INFO = 0, /* Gets Call Manager state */
};

/* NW_CONTROL subsystem command codes (only for Novatel Wireless devices) */
enum {
    DIAG_SUBSYS_NW_CONTROL_AT_REQUEST     = 3, /* AT commands via diag */
    DIAG_SUBSYS_NW_CONTROL_AT_RESPONSE    = 4,
    DIAG_SUBSYS_NW_CONTROL_MODEM_SNAPSHOT = 7,
    DIAG_SUBSYS_NW_CONTROL_ERI            = 8, /* Extended Roaming Indicator */
    DIAG_SUBSYS_NW_CONTROL_PRL            = 12,
};

enum {
    DIAG_SUBSYS_NW_CONTROL_MODEM_SNAPSHOT_TECH_CDMA_EVDO = 7,
    DIAG_SUBSYS_NW_CONTROL_MODEM_SNAPSHOT_TECH_WCDMA = 20,
};

enum {
    DIAG_SUBSYS_ZTE_STATUS = 0,
};

enum {
    CDMA_PREV_UNKNOWN       = 0,
    CDMA_PREV_IS_95         = 1, /* and J_STD008 */
    CDMA_PREV_IS_95A        = 2,
    CDMA_PREV_IS_95A_TSB74  = 3,
    CDMA_PREV_IS_95B_PHASE1 = 4,
    CDMA_PREV_IS_95B_PHASE2 = 5,
    CDMA_PREV_IS2000_REL0   = 6,
    CDMA_PREV_IS2000_RELA   = 7
};

enum {
    CDMA_BAND_CLASS_0_CELLULAR_800   = 0,  /* 800 MHz cellular band */
    CDMA_BAND_CLASS_1_PCS            = 1,  /* 1800 to 2000 MHz PCS band */
    CDMA_BAND_CLASS_2_TACS           = 2,  /* 872 to 960 MHz TACS band */
    CDMA_BAND_CLASS_3_JTACS          = 3,  /* 832 to 925 MHz JTACS band */
    CDMA_BAND_CLASS_4_KOREAN_PCS     = 4,  /* 1750 to 1870 MHz Korean PCS band */
    CDMA_BAND_CLASS_5_NMT450         = 5,  /* 450 MHz NMT band */
    CDMA_BAND_CLASS_6_IMT2000        = 6,  /* 2100 MHz IMT-2000 band */
    CDMA_BAND_CLASS_7_CELLULAR_700   = 7,  /* Upper 700 MHz band */
    CDMA_BAND_CLASS_8_1800           = 8,  /* 1800 MHz band */
    CDMA_BAND_CLASS_9_900            = 9,  /* 900 MHz band */
    CDMA_BAND_CLASS_10_SECONDARY_800 = 10, /* Secondary 800 MHz band */
    CDMA_BAND_CLASS_11_PAMR_400      = 11, /* 400 MHz European PAMR band */
    CDMA_BAND_CLASS_12_PAMR_800      = 12, /* 800 MHz PAMR band */
    CDMA_BAND_CLASS_13_IMT2000_2500  = 13, /* 2500 MHz IMT-2000 Extension Band */
    CDMA_BAND_CLASS_14_US_PCS_1900   = 14, /* US PCS 1900 MHz Band */
    CDMA_BAND_CLASS_15_AWS           = 15, /* AWS 1700 MHz band */
    CDMA_BAND_CLASS_16_US_2500       = 16, /* US 2500 MHz Band */
    CDMA_BAND_CLASS_17_US_FLO_2500   = 17, /* US 2500 MHz Forward Link Only Band */
    CDMA_BAND_CLASS_18_US_PS_700     = 18, /* 700 MHz Public Safety Band */
    CDMA_BAND_CLASS_19_US_LOWER_700  = 19  /* Lower 700 MHz Band */
};

enum {
    CDMA_STATUS_SNAPSHOT_STATE_NO_SERVICE         = 0x00,
    CDMA_STATUS_SNAPSHOT_STATE_INITIALIZATION     = 0x01,
    CDMA_STATUS_SNAPSHOT_STATE_IDLE               = 0x02,
    CDMA_STATUS_SNAPSHOT_STATE_VOICE_CHANNEL_INIT = 0x03,
    CDMA_STATUS_SNAPSHOT_STATE_WAITING_FOR_ORDER  = 0x04,
    CDMA_STATUS_SNAPSHOT_STATE_WAITING_FOR_ANSWER = 0x05,
    CDMA_STATUS_SNAPSHOT_STATE_CONVERSATION       = 0x06,
    CDMA_STATUS_SNAPSHOT_STATE_RELEASE            = 0x07,
    CDMA_STATUS_SNAPSHOT_STATE_SYSTEM_ACCESS      = 0x08,
    CDMA_STATUS_SNAPSHOT_STATE_OFFLINE_CDMA       = 0x10,
    CDMA_STATUS_SNAPSHOT_STATE_OFFLINE_HDR        = 0x11,
    CDMA_STATUS_SNAPSHOT_STATE_OFFLINE_ANALOG     = 0x12,
    CDMA_STATUS_SNAPSHOT_STATE_RESET              = 0x13,
    CDMA_STATUS_SNAPSHOT_STATE_POWER_DOWN         = 0x14,
    CDMA_STATUS_SNAPSHOT_STATE_POWER_SAVE         = 0x15,
    CDMA_STATUS_SNAPSHOT_STATE_POWER_UP           = 0x16,
    CDMA_STATUS_SNAPSHOT_STATE_LOW_POWER_MODE     = 0x17,
    CDMA_STATUS_SNAPSHOT_STATE_SEARCHER_DSMM      = 0x18, /* Dedicated System Measurement Mode */
    CDMA_STATUS_SNAPSHOT_STATE_HDR                = 0x40,
};

/* Generic DM command header */
struct DMCmdHeader {
    u_int8_t code;
} __attribute__ ((packed));
typedef struct DMCmdHeader DMCmdHeader;

/* DIAG_CMD_SUBSYS */
struct DMCmdSubsysHeader {
    u_int8_t code;
    u_int8_t subsys_id;
    u_int16_t subsys_cmd;
} __attribute__ ((packed));
typedef struct DMCmdSubsysHeader DMCmdSubsysHeader;

/* DIAG_CMD_NV_READ / DIAG_CMD_NV_WRITE */
struct DMCmdNVReadWrite {
    u_int8_t code;
    u_int16_t nv_item;
    u_int8_t data[128];
    u_int16_t status;
} __attribute__ ((packed));
typedef struct DMCmdNVReadWrite DMCmdNVReadWrite;

/* DIAG_CMD_VERSION_INFO */
struct DMCmdVersionInfoRsp {
    u_int8_t code;
    char comp_date[11];
    char comp_time[8];
    char rel_date[11];
    char rel_time[8];
    char model[8];
    u_int8_t scm;
    u_int8_t mob_cai_rev;
    u_int8_t mob_model;
    u_int16_t mob_firmware_rev;
    u_int8_t slot_cycle_index;
    u_int8_t msm_ver;
    u_int8_t _unknown;
} __attribute__ ((packed));
typedef struct DMCmdVersionInfoRsp DMCmdVersionInfoRsp;

/* DIAG_CMD_ESN */
struct DMCmdEsnRsp {
    u_int8_t code;
    u_int8_t esn[4];
} __attribute__ ((packed));
typedef struct DMCmdEsnRsp DMCmdEsnRsp;

/* DIAG_CMD_STATUS */
struct DMCmdStatusRsp {
    u_int8_t code;
    u_int8_t _unknown[3];
    u_int8_t esn[4];
    u_int16_t rf_mode;
    u_int8_t min1_analog[4];
    u_int8_t min1_cdma[4];
    u_int8_t min2_analog[2];
    u_int8_t min2_cdma[2];
    u_int8_t _unknown1;
    u_int16_t cdma_rx_state;
    u_int8_t good_frames;
    u_int16_t analog_corrected_frames;
    u_int16_t analog_bad_frames;
    u_int16_t analog_word_syncs;
    u_int16_t entry_reason;
    u_int16_t curr_chan;
    u_int8_t cdma_code_chan;
    u_int16_t pilot_base;
    u_int16_t sid;
    u_int16_t nid;
    u_int16_t analog_locaid;
    u_int16_t analog_rssi;
    u_int8_t analog_power;
} __attribute__ ((packed));
typedef struct DMCmdStatusRsp DMCmdStatusRsp;

/* DIAG_CMD_SW_VERSION */
struct DMCmdSwVersionRsp {
    u_int8_t code;
    char version[31];
    char comp_date[11];
    u_int8_t _unknown1[2];
    char comp_time[8];
    u_int8_t _unknown2[2];
} __attribute__ ((packed));
typedef struct DMCmdSwVersionRsp DMCmdSwVersionRsp;

typedef enum {
    DM_OPER_MODE_POWER_OFF = 0,
    DM_OPER_MODE_FIELD_TEST_MODE = 1,
    DM_OPER_MODE_OFFLINE = 2,
    DM_OPER_MODE_OFFLINE_AMPS = 3,
    DM_OPER_MODE_OFFLINE_CDMA = 4,
    DM_OPER_MODE_ONLINE = 5,
    DM_OPER_MODE_LOW_POWER_MODE = 6,
    DM_OPER_MODE_RESETTING = 7,
} DMOperMode;

/* DIAG_CMD_STATUS_SNAPSHOT */
struct DMCmdStatusSnapshotRsp {
    u_int8_t code;
    u_int8_t esn[4];
    u_int8_t imsi_s1[4];
    u_int8_t imsi_s2[2];
    u_int8_t imsi_s[8];
    u_int8_t imsi_11_12;
    u_int16_t mcc;
    u_int8_t imsi_addr_num;
    u_int16_t sid;
    u_int16_t nid;
    u_int8_t prev;
    u_int8_t prev_in_use;
    u_int8_t mob_prev;
    u_int8_t band_class;
    u_int16_t frequency;
    u_int8_t oper_mode;
    u_int8_t state;
    u_int8_t sub_state;
} __attribute__ ((packed));
typedef struct DMCmdStatusSnapshotRsp DMCmdStatusSnapshotRsp;

/* DIAG_SUBSYS_CM_STATE_INFO subsys command */
struct DMCmdSubsysCMStateInfoRsp {
    DMCmdSubsysHeader header;
    u_int32_t call_state;
    u_int32_t oper_mode;
    u_int32_t system_mode;
    u_int32_t mode_pref;
    u_int32_t band_pref;
    u_int32_t roam_pref;
    u_int32_t srv_domain_pref;
    u_int32_t acq_order_pref;
    u_int32_t hybrid_pref;
    u_int32_t network_sel_mode_pref;
} __attribute__ ((packed));
typedef struct DMCmdSubsysCMStateInfoRsp DMCmdSubsysCMStateInfoRsp;

/* DIAG_SUBSYS_HDR_STATE_INFO subsys command */
struct DMCmdSubsysHDRStateInfoRsp {
    DMCmdSubsysHeader header;
    u_int8_t at_state;
    u_int8_t session_state;
    u_int8_t almp_state;
    u_int8_t init_state;
    u_int8_t idle_state;
    u_int8_t connected_state;
    u_int8_t route_update_state;
    u_int8_t overhead_msg_state;
    u_int8_t hdr_hybrid_mode;
} __attribute__ ((packed));
typedef struct DMCmdSubsysHDRStateInfoRsp DMCmdSubsysHDRStateInfoRsp;


/* DIAG_SUBSYS_ZTE_STATUS subsys command */
struct DMCmdSubsysZteStatusRsp {
    DMCmdSubsysHeader header;
    u_int8_t _unknown1[8];
    u_int8_t signal_ind;
    u_int8_t _unknown2;
} __attribute__ ((packed));
typedef struct DMCmdSubsysZteStatusRsp DMCmdSubsysZteStatusRsp;

/* DIAG_CMD_PILOT_SETS command */
struct DMCmdPilotSetsSet {
    u_int16_t pn_offset;
    u_int16_t ecio;
} __attribute__ ((packed));
typedef struct DMCmdPilotSetsSet DMCmdPilotSetsSet;

struct DMCmdPilotSetsRsp {
    u_int8_t code;
    u_int16_t pilot_inc;
    u_int8_t active_count;
    u_int8_t candidate_count;
    u_int8_t neighbor_count;
    DMCmdPilotSetsSet sets[52];
} __attribute__ ((packed));
typedef struct DMCmdPilotSetsRsp DMCmdPilotSetsRsp;

struct DMCmdLog {
    u_int8_t code;
    u_int8_t more;
    u_int16_t len;
    u_int16_t _unknown2; /* contains same value as len */
    u_int16_t log_code;
    u_int64_t timestamp;
    u_int8_t data[0];
} __attribute__ ((packed));
typedef struct DMCmdLog DMCmdLog;

struct DMCmdExtLogMask {
    u_int8_t code;
    /* Bit number of highest '1' in 'mask'; set to 0 to get current mask. */
    u_int16_t len;
    /* Bitfield of log messages to receive */
    u_int8_t mask[512];
} __attribute__ ((packed));
typedef struct DMCmdExtLogMask DMCmdExtLogMask;

struct DMCmdEventReport {
    u_int8_t code;
    u_int8_t on;
} __attribute__ ((packed));
typedef struct DMCmdEventReport DMCmdEventReport;

struct DMCmdEventReportRsp {
    u_int8_t code;
    u_int16_t len;
    u_int16_t event_id;
    u_int8_t data[0];
} __attribute__ ((packed));
typedef struct DMCmdEventReportRsp DMCmdEventReportRsp;

/* DIAG_SUBSYS_NW_CONTROL_* subsys command */
struct DMCmdSubsysNwSnapshotReq {
    DMCmdSubsysHeader hdr;
    u_int8_t technology;        /* DIAG_SUBSYS_NW_CONTROL_MODEM_SNAPSHOT_TECH_* */
    u_int32_t snapshot_mask;
} __attribute__ ((packed));
typedef struct DMCmdSubsysNwSnapshotReq DMCmdSubsysNwSnapshotReq;

/* DIAG_SUBSYS_NW_CONTROL_MODEM_SNAPSHOT response */
struct DMCmdSubsysNwSnapshotRsp {
    DMCmdSubsysHeader hdr;
    u_int8_t response_code;
    u_int32_t bitfield1;
    u_int32_t bitfield2;
    u_int8_t data[100];
} __attribute__ ((packed));
typedef struct DMCmdSubsysNwSnapshotRsp DMCmdSubsysNwSnapshotRsp;

struct DMCmdSubsysNwSnapshotCdma {
    u_int32_t rssi;
    u_int32_t battery_level;
    u_int8_t call_info;
    u_int8_t new_sms_ind;
    u_int8_t missed_calls;
    u_int32_t voicemail_ind;
    u_int8_t pkt_call_ctrl_state;
    u_int8_t mip_rrp_err_code;
    u_int8_t cur_packet_zone_id;
    u_int8_t prev;
    u_int8_t band_class;
    u_int8_t eri;
    u_int8_t eri_alert_id;
    u_int32_t cur_call_total_time;
    u_int32_t cur_call_active_time;
    u_int32_t cur_call_tx_ip_bytes;
    u_int32_t cur_call_rx_ip_bytes;
    u_int8_t connection_status;
    u_int16_t dominant_pn;
    u_int8_t wdisable_mask;
    u_int8_t hdr_rev;
} __attribute__ ((packed));
typedef struct DMCmdSubsysNwSnapshotCdma DMCmdSubsysNwSnapshotCdma;

enum {
    DIAG_CMD_LOG_CONFIG_OP_GET_RANGE = 0x01,
    DIAG_CMD_LOG_CONFIG_OP_SET_MASK = 0x03,
    DIAG_CMD_LOG_CONFIG_OP_GET_MASK = 0x04,
};

struct DMCmdLogConfig {
    u_int8_t code;
    u_int8_t pad[3];
    u_int32_t op;
    u_int32_t equipid;
    u_int32_t num_items;
    u_int8_t mask[0];
} __attribute__ ((packed));
typedef struct DMCmdLogConfig DMCmdLogConfig;

struct DMCmdLogConfigRsp {
    u_int8_t code;
    u_int8_t pad[3];
    u_int32_t op;
    u_int32_t result;  /* 0 = success */
    u_int32_t equipid;
    union {
        u_int32_t get_range_items[16];
        struct {
            u_int32_t num_items;
            u_int8_t mask[0];
        } get_set_items;
    } u;
} __attribute__ ((packed));
typedef struct DMCmdLogConfigRsp DMCmdLogConfigRsp;

/* DIAG_SUBSYS_WCDMA_CALL_START command */
struct DMCmdSubsysWcdmaCallStart {
    DMCmdSubsysHeader hdr;
    u_int8_t number_len;
    u_int8_t number_digits[32];
    u_int8_t amr_rate;  /* default to 7 */
} __attribute__ ((packed));
typedef struct DMCmdSubsysWcdmaCallStart DMCmdSubsysWcdmaCallStart;

/* DIAG_SUBSYS_WCDMA_STATE_INFO response */
struct DMCmdSubsysWcdmaStateInfoRsp {
    DMCmdSubsysHeader hdr;
    u_int8_t imei_len;
    u_int8_t imei[8];
    u_int8_t imsi_len;
    u_int8_t imsi[8];
    u_int8_t l1_state;
} __attribute__ ((packed));
typedef struct DMCmdSubsysWcdmaStateInfoRsp DMCmdSubsysWcdmaStateInfoRsp;

/* DIAG_SUBSYS_GSM_STATE_INFO response */
struct DMCmdSubsysGsmStateInfoRsp {
    DMCmdSubsysHeader hdr;
    u_int8_t imei_len;
    u_int8_t imei[8];
    u_int8_t imsi_len;
    u_int8_t imsi[8];
    u_int8_t lai[5];
    u_int16_t cellid;
    u_int8_t cm_call_state;
    u_int8_t cm_opmode;
    u_int8_t cm_sysmode;
} __attribute__ ((packed));
typedef struct DMCmdSubsysGsmStateInfoRsp DMCmdSubsysGsmStateInfoRsp;

#endif  /* LIBQCDM_DM_COMMANDS_H */