aboutsummaryrefslogtreecommitdiffstats
path: root/simtrace/SIMTRACE_Types.ttcn
blob: 7b1c8577387219b13bc0d052dce664ef3905e934 (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
module SIMTRACE_Types {

/* TTCN-3 data types with TITAN RAW codec annotations for Osmocom SIMTRACE2
 * as found in simtrace2.git/host/include/osmocom/simtrace2/simtrace_prot.h
 *
 * (C) 2020 by Harald Welte <laforge@gnumonks.org>
 */

import from General_Types all;
import from Osmocom_Types all;

type integer u16le_t (0..65535) with { variant "unsigned 16 bit" variant "BYTEORDER(first)" };
type integer u32le_t (0..4294967295) with { variant "unsigned 32 bit" variant "BYTEORDER(first)" };
type charstring CHAR32 length (0..32) with { variant "FIELDLENGTH(32)" };

type enumerated SIMTRACE_MsgClassType {
	/* SIMTRACE_MSGC_GENERIC */
	SIMTRACE_CMD_DO_ERROR			('0000'H),
	SIMTRACE_CMD_BD_BOARD_INFO		('0001'H),

	/* SIMTRACE_MSGC_CARDEM */
	SIMTRACE_MSGT_DT_CEMU_TX_DATA		('0101'H),
	SIMTRACE_MSGT_DT_CEMU_SET_ATR		('0102'H),
	SIMTRACE_MSGT_BD_CEMU_STATS		('0103'H),
	SIMTRACE_MSGT_BD_CEMU_STATUS		('0104'H),
	SIMTRACE_MSGT_DT_CEMU_CARDINSERT	('0105'H),
	SIMTRACE_MSGT_DO_CEMU_RX_DATA		('0106'H),
	SIMTRACE_MSGT_DO_CEMU_PTS		('0107'H),
	SIMTRACE_MSGT_BD_CEMU_CONFIG		('0108'H),

	/* SIMTRACE_MSGC_MODEM */
	SIMTRACE_MSGT_DT_MODEM_RESET		('0201'H),
	SIMTRACE_MSGT_DT_MODEM_SIM_SELECT	('0202'H),
	SIMTRACE_MSGT_BD_MODEM_STATUS		('0203'H),

	/* SIMTRACE_MSGC_SNIFF */
	SIMTRACE_MSGT_SNIFF_CHANGE		('0300'H),
	SIMTRACE_MSGT_SNIFF_FIDI		('0301'H),
	SIMTRACE_MSGT_SNIFF_ATR			('0302'H),
	SIMTRACE_MSGT_SNIFF_PPS			('0303'H),
	SIMTRACE_MSGT_SNIFF_TPDU		('0304'H)
} with { variant "FIELDLENGTH(16)" variant "BYTEORDER(last)" };

type record SIMTRACE_PDU {
	SIMTRACE_MsgClassType msg_type,
	uint8_t		seq_nr,
	uint8_t		slot_nr,
	OCT2		reserved,
	u16le_t		msg_len,
	SIMTRACE_Payload payload
  /* payload */
} with {
	variant (msg_len) "LENGTHTO(msg_type,seq_nr,slot_nr,reserved,msg_len,payload)"
	variant (payload) "CROSSTAG(
		gen_do_error,		msg_type = SIMTRACE_CMD_DO_ERROR;
		gen_bd_board_info,	msg_type = SIMTRACE_CMD_BD_BOARD_INFO;

		cardem_dt_txdata,	msg_type = SIMTRACE_MSGT_DT_CEMU_TX_DATA;
		cardem_dt_setatr,	msg_type = SIMTRACE_MSGT_DT_CEMU_SET_ATR;
		/* FIXME: stats */
		cardem_bd_status,	msg_type = SIMTRACE_MSGT_BD_CEMU_STATUS;
		cardem_dt_cardinsert,	msg_type = SIMTRACE_MSGT_DT_CEMU_CARDINSERT;
		cardem_do_rxdata,	msg_type = SIMTRACE_MSGT_DO_CEMU_RX_DATA;
		cardem_do_pts,		msg_type = SIMTRACE_MSGT_DO_CEMU_PTS;
		cardem_bd_config,	msg_type = SIMTRACE_MSGT_BD_CEMU_CONFIG;

		modem_dt_reset,		msg_type = SIMTRACE_MSGT_DT_MODEM_RESET;
		modem_dt_sim_select,	msg_type = SIMTRACE_MSGT_DT_MODEM_SIM_SELECT;
		modem_bd_status,	msg_type = SIMTRACE_MSGT_BD_MODEM_STATUS;

		sniff_do_change,	msg_type = SIMTRACE_MSGT_SNIFF_CHANGE;
		sniff_do_fidi,		msg_type = SIMTRACE_MSGT_SNIFF_FIDI;
		sniff_do_atr,		msg_type = SIMTRACE_MSGT_SNIFF_ATR;
		sniff_do_pps,		msg_type = SIMTRACE_MSGT_SNIFF_PPS;
		sniff_do_tpdu,		msg_type = SIMTRACE_MSGT_SNIFF_TPDU;
		other,			OTHERWISE;
			)"
};

external function enc_SIMTRACE_PDU(in SIMTRACE_PDU pdu) return octetstring
with { extension "prototype(convert)" extension "encode(RAW)" };

external function dec_SIMTRACE_PDU(in octetstring stream) return SIMTRACE_PDU
with { extension "prototype(convert)" extension "decode(RAW)" };

type union SIMTRACE_Payload {
	Generic_DO_Error	gen_do_error,
	Generic_BD_BoardInfo	gen_bd_board_info,

	CardEmu_DT_TxData	cardem_dt_txdata,
	CardEmu_DT_SetAtr	cardem_dt_setatr,
	CardEmu_BD_Status	cardem_bd_status,
	Cardemu_DT_CardInsert	cardem_dt_cardinsert,
	CardEmu_DO_RxData	cardem_do_rxdata,
	CardEmu_DO_Pts		cardem_do_pts,
	CardEmu_BD_Config	cardem_bd_config,

	Modem_DT_Reset		modem_dt_reset,
	Modem_DT_SimSelect	modem_dt_sim_select,
	Modem_BD_Status		modem_bd_status,

	Sniff_DO_Change		sniff_do_change,
	Sniff_DO_FiDi		sniff_do_fidi,
	Sniff_DO_Data		sniff_do_atr,
	Sniff_DO_Data		sniff_do_pps,
	Sniff_DO_Data		sniff_do_tpdu,

	octetstring		other
};

/***********************************************************************
 * GENERIC
 ***********************************************************************/

/* SIMTRACE_CMD_DO_ERROR */
type record Generic_DO_Error {
	uint8_t		severity,
	uint8_t		subsystem,
	u16le_t		code,
	uint8_t		msg_len,
	charstring	msg
} with {
	variant (msg_len) "LENGTHTO(msg)"
};

type record Generic_Capability_Vendor {
	/* Can erase a peer SAM3 controller */
	boolean		sysmo_qmod_erase_peer,
	/* Can read/write an attached EEPROM */
	boolean		sysmo_qmod_rw_eeprom,
	/* can reset an attached USB hub */
	boolean		sysmo_qmod_reset_hub
};

type record Generic_Capability {
	/* compatible with 5V SIM card interface */
	boolean		cap_volt_5v,
	/* compatible with 3V SIM card interface */
	boolean		cap_volt_3v,
	/* compatible with 1.8V SIM card interface */
	boolean		cap_volt_1v8,
	boolean		cap_led_1,
	boolean		cap_led_2,
	/* Has Single-Pole Dual-Throw (local/remote SIM) */
	boolean		cap_spdt,
	/* Has Bus-Switch (trace / MITM) */
	boolean		cap_bus_switch,
	/* Can read VSIM via ADC */
	boolean		cap_vsim_adc,
	/* Can read temperature via ADC */
	boolean		cap_temp_adc,
	/* Supports DFU for firmware update */
	boolean		cap_dfu,
	/* Supports Ctrl EP command for erasing flash / return to SAM-BA */
	boolean		cap_erase_flash,
	/* Can read the status of card insert contact */
	boolean		cap_read_card_det,
	/* Can control the status of a simulated card insert */
	boolean		cap_assert_card_det,
	/* Can toggle the hardware reset of an attached modem */
	boolean		cap_assert_modem_rst
};

type record Board_Info_Hardware {
	CHAR32		manufacturer,
	CHAR32		model,
	CHAR32		version
};

type record Board_Info_Software {
	CHAR32		provider,
	CHAR32		name,
	CHAR32		version,
	CHAR32		buildhost,
	OCT4		crc
};

type record Generic_BD_BoardInfo {
	Board_Info_Hardware	hardware,
	Board_Info_Software	software,
	u32le_t			max_baud_rate,
	uint8_t			cap_generic_bytes,
	uint8_t			cap_vendor_bytes,
	Generic_Capability	cap_generic optional,
	Generic_Capability_Vendor cap_vendor optional
} with {
	variant (cap_generic_bytes) "LENGTHTO(cap_generic)"
	variant (cap_vendor_bytes) "LENGTHTO(cap_vendor)"
};


/***********************************************************************
 * CARD EMULATOR / FORWARDER
 ***********************************************************************/

/* CEMU_USB_MSGT_DT_CARDINSERT */
type record Cardemu_DT_CardInsert {
	uint8_t		card_insert
};

/* CEMU_USB_MSGT_DT_SET_ATR */
type record CardEmu_DT_SetAtr {
	uint8_t		atr_len,
	octetstring	atr
} with {
	variant (atr_len) "LENGTHTO(atr)"
};

type record CardEmu_DataFlags {
	/* First octet here is last octet of little-endian encoded uint32_t */
	BIT4		reserved,
	/* indicates a PB is present and we should continue with RX */
	boolean 	pb_and_rx,
	/* indicates a PB is present and we should continue with TX */
	boolean 	pb_and_tx,
	/* indicates last part of transmission in this direction */
	boolean 	final,
	/* indicates a TPDU header is present in this message */
	boolean		tpdu_hdr,
	BIT24		reserved2
} with { variant "BITORDER(msb)" };

/* CEMU_USB_MSGT_DT_TX_DATA */
type record CardEmu_DT_TxData {
	CardEmu_DataFlags flags,
	u16le_t		data_len,
	octetstring	data
} with {
	variant (data_len) "LENGTHTO(data)"
};

/* CEMU_USB_MSGT_DO_RX_DATA */
type record CardEmu_DO_RxData {
	CardEmu_DataFlags flags,
	u16le_t		data_len,
	octetstring	data
} with {
	variant (data_len) "LENGTHTO(data)"
};

type record CardEmu_StatusFlags {
	/* First octet here is last octet of little-endian encoded uint32_t */
	BIT3		reserved,
	boolean		reset_active,
	boolean		card_insert,
	boolean		rcemu_active,
	boolean		clk_active,
	boolean		vcc_present,
	BIT24		reserved2
};

/* CEMU_USB_MSGT_BD_STATUS */
type record CardEmu_BD_Status {
	CardEmu_StatusFlags flags,
	u16le_t		voltage_mv,
	uint8_t		fi,
	uint8_t		di,
	uint8_t		wi,
	u32le_t		waiting_time
};

/* CEMU_USB_MSGT_DO_PTS */
type record CardEmu_DO_Pts {
	uint8_t		pts_len,
	OCT6		req,
	OCT6		resp
};

type record CardEmu_FeatureFlags {
	BIT7		reserved,
	boolean		status_irq,
	BIT24		reserved2
};

type record CardEmu_BD_Config {
	CardEmu_FeatureFlags	features
};

/***********************************************************************
 * MODEM CONTROL
 ***********************************************************************/

type enumerated ModemResetType {
	MODEM_RESET_RELEASE	(0),
	MODEM_RESET_ASSERT	(1),
	MODEM_RESET_PULSE	(2)
} with { variant "FIELDLENGTH(8)" };

/* SIMTRACE_MSGT_DT_MODEM_RESET */
type record Modem_DT_Reset {
	ModemResetType		asserted,
	u16le_t			pulse_duration_msec
};

type enumerated SimSelect {
	SIM_SELECT_LOCAL	(0),
	SIM_SELECT_REMOTE	(1)
} with { variant "FIELDLENGTH(8)" };

/* SIMTRACE_MSGT_DT_MODEM_SIM_SELECT */
type record Modem_DT_SimSelect {
	SimSelect	sim_select
};

type record Modem_Status {
	BIT6		reserved,
	boolean		card_inserted,
	boolean		wwan_led
};

/* SIMTRACE_MSGT_BD_MODEM_STATUS */
type record Modem_BD_Status {
	Modem_Status	supported,
	Modem_Status	status,
	Modem_Status	changed
};

/***********************************************************************
 * SNIFF
 ***********************************************************************/

type record Sniff_Flags {
	/* First octet here is last octet of little-endian encoded uint32_t */
	boolean		error_checksum,
	boolean		error_malformed,
	boolean		error_incomplete,
	boolean		timeout_wt,
	boolean		reset_deassert,
	boolean		reset_assert,
	boolean		card_eject,
	boolean		card_insert,
	BIT24		reserved
};

/* SIMTRACE_MSGT_SNIFF_CHANGE */
type record Sniff_DO_Change {
	Sniff_Flags	flags
};

/* SIMTRACE_MSGT_SNIFF_FIDI */
type record Sniff_DO_FiDi {
	uint8_t		fidi
};

/* SIMTRACE_MSGT_SNIFF_ATR, PPS, TPDU */
type record Sniff_DO_Data {
	Sniff_Flags	flags,
	u16le_t		data_len,
	octetstring	data
} with {
	variant (data_len) "LENGTHTO(data)"
};



} with { encode "RAW"; variant "FIELDORDER(msb)" };