Harald Welte | 0ee2297 | 2020-02-29 11:32:50 +0100 | [diff] [blame] | 1 | module SIMTRACE_Types { |
| 2 | |
| 3 | /* TTCN-3 data types with TITAN RAW codec annotations for Osmocom SIMTRACE2 |
| 4 | * as found in simtrace2.git/host/include/osmocom/simtrace2/simtrace_prot.h |
| 5 | * |
| 6 | * (C) 2020 by Harald Welte <laforge@gnumonks.org> |
| 7 | */ |
| 8 | |
| 9 | import from General_Types all; |
| 10 | import from Osmocom_Types all; |
| 11 | |
| 12 | type integer u16le_t (0..65535) with { variant "unsigned 16 bit" variant "BYTEORDER(first)" }; |
| 13 | type integer u32le_t (0..4294967295) with { variant "unsigned 32 bit" variant "BYTEORDER(first)" }; |
| 14 | type charstring CHAR32 length (0..32) with { variant "FIELDLENGTH(32)" }; |
| 15 | |
| 16 | type enumerated SIMTRACE_MsgClassType { |
| 17 | /* SIMTRACE_MSGC_GENERIC */ |
| 18 | SIMTRACE_CMD_DO_ERROR ('0000'H), |
| 19 | SIMTRACE_CMD_BD_BOARD_INFO ('0001'H), |
| 20 | |
| 21 | /* SIMTRACE_MSGC_CARDEM */ |
| 22 | SIMTRACE_MSGT_DT_CEMU_TX_DATA ('0101'H), |
| 23 | SIMTRACE_MSGT_DT_CEMU_SET_ATR ('0102'H), |
| 24 | SIMTRACE_MSGT_BD_CEMU_STATS ('0103'H), |
| 25 | SIMTRACE_MSGT_BD_CEMU_STATUS ('0104'H), |
| 26 | SIMTRACE_MSGT_DT_CEMU_CARDINSERT ('0105'H), |
| 27 | SIMTRACE_MSGT_DO_CEMU_RX_DATA ('0106'H), |
| 28 | SIMTRACE_MSGT_DO_CEMU_PTS ('0107'H), |
| 29 | SIMTRACE_MSGT_BD_CEMU_CONFIG ('0108'H), |
| 30 | |
| 31 | /* SIMTRACE_MSGC_MODEM */ |
| 32 | SIMTRACE_MSGT_DT_MODEM_RESET ('0201'H), |
| 33 | SIMTRACE_MSGT_DT_MODEM_SIM_SELECT ('0202'H), |
| 34 | SIMTRACE_MSGT_BD_MODEM_STATUS ('0203'H), |
| 35 | |
| 36 | /* SIMTRACE_MSGC_SNIFF */ |
| 37 | SIMTRACE_MSGT_SNIFF_CHANGE ('0300'H), |
| 38 | SIMTRACE_MSGT_SNIFF_FIDI ('0301'H), |
| 39 | SIMTRACE_MSGT_SNIFF_ATR ('0302'H), |
| 40 | SIMTRACE_MSGT_SNIFF_PPS ('0303'H), |
| 41 | SIMTRACE_MSGT_SNIFF_TPDU ('0304'H) |
| 42 | } with { variant "FIELDLENGTH(16)" variant "BYTEORDER(last)" }; |
| 43 | |
| 44 | type record SIMTRACE_PDU { |
| 45 | SIMTRACE_MsgClassType msg_type, |
| 46 | uint8_t seq_nr, |
| 47 | uint8_t slot_nr, |
| 48 | OCT2 reserved, |
| 49 | u16le_t msg_len, |
| 50 | SIMTRACE_Payload payload |
| 51 | /* payload */ |
| 52 | } with { |
| 53 | variant (msg_len) "LENGTHTO(msg_type,seq_nr,slot_nr,reserved,msg_len,payload)" |
| 54 | variant (payload) "CROSSTAG( |
| 55 | gen_do_error, msg_type = SIMTRACE_CMD_DO_ERROR; |
| 56 | gen_bd_board_info, msg_type = SIMTRACE_CMD_BD_BOARD_INFO; |
| 57 | |
| 58 | cardem_dt_txdata, msg_type = SIMTRACE_MSGT_DT_CEMU_TX_DATA; |
| 59 | cardem_dt_setatr, msg_type = SIMTRACE_MSGT_DT_CEMU_SET_ATR; |
| 60 | /* FIXME: stats */ |
| 61 | cardem_bd_status, msg_type = SIMTRACE_MSGT_BD_CEMU_STATUS; |
| 62 | cardem_dt_cardinsert, msg_type = SIMTRACE_MSGT_DT_CEMU_CARDINSERT; |
| 63 | cardem_do_rxdata, msg_type = SIMTRACE_MSGT_DO_CEMU_RX_DATA; |
| 64 | cardem_do_pts, msg_type = SIMTRACE_MSGT_DO_CEMU_PTS; |
| 65 | cardem_bd_config, msg_type = SIMTRACE_MSGT_BD_CEMU_CONFIG; |
| 66 | |
| 67 | modem_dt_reset, msg_type = SIMTRACE_MSGT_DT_MODEM_RESET; |
| 68 | modem_dt_sim_select, msg_type = SIMTRACE_MSGT_DT_MODEM_SIM_SELECT; |
| 69 | modem_bd_status, msg_type = SIMTRACE_MSGT_BD_MODEM_STATUS; |
| 70 | |
| 71 | sniff_do_change, msg_type = SIMTRACE_MSGT_SNIFF_CHANGE; |
| 72 | sniff_do_fidi, msg_type = SIMTRACE_MSGT_SNIFF_FIDI; |
| 73 | sniff_do_atr, msg_type = SIMTRACE_MSGT_SNIFF_ATR; |
| 74 | sniff_do_pps, msg_type = SIMTRACE_MSGT_SNIFF_PPS; |
| 75 | sniff_do_tpdu, msg_type = SIMTRACE_MSGT_SNIFF_TPDU; |
| 76 | other, OTHERWISE; |
| 77 | )" |
| 78 | }; |
| 79 | |
| 80 | external function enc_SIMTRACE_PDU(in SIMTRACE_PDU pdu) return octetstring |
| 81 | with { extension "prototype(convert)" extension "encode(RAW)" }; |
| 82 | |
| 83 | external function dec_SIMTRACE_PDU(in octetstring stream) return SIMTRACE_PDU |
| 84 | with { extension "prototype(convert)" extension "decode(RAW)" }; |
| 85 | |
| 86 | type union SIMTRACE_Payload { |
| 87 | Generic_DO_Error gen_do_error, |
| 88 | Generic_BD_BoardInfo gen_bd_board_info, |
| 89 | |
| 90 | CardEmu_DT_TxData cardem_dt_txdata, |
| 91 | CardEmu_DT_SetAtr cardem_dt_setatr, |
| 92 | CardEmu_BD_Status cardem_bd_status, |
| 93 | Cardemu_DT_CardInsert cardem_dt_cardinsert, |
| 94 | CardEmu_DO_RxData cardem_do_rxdata, |
| 95 | CardEmu_DO_Pts cardem_do_pts, |
| 96 | CardEmu_BD_Config cardem_bd_config, |
| 97 | |
| 98 | Modem_DT_Reset modem_dt_reset, |
| 99 | Modem_DT_SimSelect modem_dt_sim_select, |
| 100 | Modem_BD_Status modem_bd_status, |
| 101 | |
| 102 | Sniff_DO_Change sniff_do_change, |
| 103 | Sniff_DO_FiDi sniff_do_fidi, |
| 104 | Sniff_DO_Data sniff_do_atr, |
| 105 | Sniff_DO_Data sniff_do_pps, |
| 106 | Sniff_DO_Data sniff_do_tpdu, |
| 107 | |
| 108 | octetstring other |
| 109 | }; |
| 110 | |
| 111 | /*********************************************************************** |
| 112 | * GENERIC |
| 113 | ***********************************************************************/ |
| 114 | |
| 115 | /* SIMTRACE_CMD_DO_ERROR */ |
| 116 | type record Generic_DO_Error { |
| 117 | uint8_t severity, |
| 118 | uint8_t subsystem, |
| 119 | u16le_t code, |
| 120 | uint8_t msg_len, |
| 121 | charstring msg |
| 122 | } with { |
| 123 | variant (msg_len) "LENGTHTO(msg)" |
| 124 | }; |
| 125 | |
| 126 | type record Generic_Capability_Vendor { |
| 127 | /* Can erase a peer SAM3 controller */ |
| 128 | boolean sysmo_qmod_erase_peer, |
| 129 | /* Can read/write an attached EEPROM */ |
| 130 | boolean sysmo_qmod_rw_eeprom, |
| 131 | /* can reset an attached USB hub */ |
| 132 | boolean sysmo_qmod_reset_hub |
| 133 | }; |
| 134 | |
| 135 | type record Generic_Capability { |
| 136 | /* compatible with 5V SIM card interface */ |
| 137 | boolean cap_volt_5v, |
| 138 | /* compatible with 3V SIM card interface */ |
| 139 | boolean cap_volt_3v, |
| 140 | /* compatible with 1.8V SIM card interface */ |
| 141 | boolean cap_volt_1v8, |
| 142 | boolean cap_led_1, |
| 143 | boolean cap_led_2, |
| 144 | /* Has Single-Pole Dual-Throw (local/remote SIM) */ |
| 145 | boolean cap_spdt, |
| 146 | /* Has Bus-Switch (trace / MITM) */ |
| 147 | boolean cap_bus_switch, |
| 148 | /* Can read VSIM via ADC */ |
| 149 | boolean cap_vsim_adc, |
| 150 | /* Can read temperature via ADC */ |
| 151 | boolean cap_temp_adc, |
| 152 | /* Supports DFU for firmware update */ |
| 153 | boolean cap_dfu, |
| 154 | /* Supports Ctrl EP command for erasing flash / return to SAM-BA */ |
| 155 | boolean cap_erase_flash, |
| 156 | /* Can read the status of card insert contact */ |
| 157 | boolean cap_read_card_det, |
| 158 | /* Can control the status of a simulated card insert */ |
| 159 | boolean cap_assert_card_det, |
| 160 | /* Can toggle the hardware reset of an attached modem */ |
| 161 | boolean cap_assert_modem_rst |
| 162 | }; |
| 163 | |
| 164 | type record Board_Info_Hardware { |
| 165 | CHAR32 manufacturer, |
| 166 | CHAR32 model, |
| 167 | CHAR32 version |
| 168 | }; |
| 169 | |
| 170 | type record Board_Info_Software { |
| 171 | CHAR32 provider, |
| 172 | CHAR32 name, |
| 173 | CHAR32 version, |
| 174 | CHAR32 buildhost, |
| 175 | OCT4 crc |
| 176 | }; |
| 177 | |
| 178 | type record Generic_BD_BoardInfo { |
| 179 | Board_Info_Hardware hardware, |
| 180 | Board_Info_Software software, |
| 181 | u32le_t max_baud_rate, |
| 182 | uint8_t cap_generic_bytes, |
| 183 | uint8_t cap_vendor_bytes, |
| 184 | Generic_Capability cap_generic optional, |
| 185 | Generic_Capability_Vendor cap_vendor optional |
| 186 | } with { |
| 187 | variant (cap_generic_bytes) "LENGTHTO(cap_generic)" |
| 188 | variant (cap_vendor_bytes) "LENGTHTO(cap_vendor)" |
| 189 | }; |
| 190 | |
| 191 | |
| 192 | /*********************************************************************** |
| 193 | * CARD EMULATOR / FORWARDER |
| 194 | ***********************************************************************/ |
| 195 | |
| 196 | /* CEMU_USB_MSGT_DT_CARDINSERT */ |
| 197 | type record Cardemu_DT_CardInsert { |
| 198 | uint8_t card_insert |
| 199 | }; |
| 200 | |
| 201 | /* CEMU_USB_MSGT_DT_SET_ATR */ |
| 202 | type record CardEmu_DT_SetAtr { |
| 203 | uint8_t atr_len, |
| 204 | octetstring atr |
| 205 | } with { |
| 206 | variant (atr_len) "LENGTHTO(atr)" |
| 207 | }; |
| 208 | |
| 209 | type record CardEmu_DataFlags { |
| 210 | /* First octet here is last octet of little-endian encoded uint32_t */ |
| 211 | BIT4 reserved, |
| 212 | /* indicates a PB is present and we should continue with RX */ |
| 213 | boolean pb_and_rx, |
| 214 | /* indicates a PB is present and we should continue with TX */ |
| 215 | boolean pb_and_tx, |
| 216 | /* indicates last part of transmission in this direction */ |
| 217 | boolean final, |
| 218 | /* indicates a TPDU header is present in this message */ |
| 219 | boolean tpdu_hdr, |
| 220 | BIT24 reserved2 |
| 221 | } with { variant "BITORDER(msb)" }; |
| 222 | |
| 223 | /* CEMU_USB_MSGT_DT_TX_DATA */ |
| 224 | type record CardEmu_DT_TxData { |
| 225 | CardEmu_DataFlags flags, |
| 226 | u16le_t data_len, |
| 227 | octetstring data |
| 228 | } with { |
| 229 | variant (data_len) "LENGTHTO(data)" |
| 230 | }; |
| 231 | |
| 232 | /* CEMU_USB_MSGT_DO_RX_DATA */ |
| 233 | type record CardEmu_DO_RxData { |
| 234 | CardEmu_DataFlags flags, |
| 235 | u16le_t data_len, |
| 236 | octetstring data |
| 237 | } with { |
| 238 | variant (data_len) "LENGTHTO(data)" |
| 239 | }; |
| 240 | |
| 241 | type record CardEmu_StatusFlags { |
| 242 | /* First octet here is last octet of little-endian encoded uint32_t */ |
| 243 | BIT3 reserved, |
| 244 | boolean reset_active, |
| 245 | boolean card_insert, |
| 246 | boolean rcemu_active, |
| 247 | boolean clk_active, |
| 248 | boolean vcc_present, |
| 249 | BIT24 reserved2 |
| 250 | }; |
| 251 | |
| 252 | /* CEMU_USB_MSGT_BD_STATUS */ |
| 253 | type record CardEmu_BD_Status { |
| 254 | CardEmu_StatusFlags flags, |
| 255 | u16le_t voltage_mv, |
| 256 | uint8_t fi, |
| 257 | uint8_t di, |
| 258 | uint8_t wi, |
| 259 | u32le_t waiting_time |
| 260 | }; |
| 261 | |
| 262 | /* CEMU_USB_MSGT_DO_PTS */ |
| 263 | type record CardEmu_DO_Pts { |
| 264 | uint8_t pts_len, |
| 265 | OCT6 req, |
| 266 | OCT6 resp |
| 267 | }; |
| 268 | |
| 269 | type record CardEmu_FeatureFlags { |
| 270 | BIT7 reserved, |
| 271 | boolean status_irq, |
| 272 | BIT24 reserved2 |
| 273 | }; |
| 274 | |
| 275 | type record CardEmu_BD_Config { |
Harald Welte | 97c7197 | 2021-06-03 23:01:44 +0200 | [diff] [blame] | 276 | CardEmu_FeatureFlags features, |
| 277 | uint8_t slot_mux_nr optional |
Harald Welte | 0ee2297 | 2020-02-29 11:32:50 +0100 | [diff] [blame] | 278 | }; |
| 279 | |
| 280 | /*********************************************************************** |
| 281 | * MODEM CONTROL |
| 282 | ***********************************************************************/ |
| 283 | |
| 284 | type enumerated ModemResetType { |
| 285 | MODEM_RESET_RELEASE (0), |
| 286 | MODEM_RESET_ASSERT (1), |
| 287 | MODEM_RESET_PULSE (2) |
| 288 | } with { variant "FIELDLENGTH(8)" }; |
| 289 | |
| 290 | /* SIMTRACE_MSGT_DT_MODEM_RESET */ |
| 291 | type record Modem_DT_Reset { |
| 292 | ModemResetType asserted, |
| 293 | u16le_t pulse_duration_msec |
| 294 | }; |
| 295 | |
| 296 | type enumerated SimSelect { |
| 297 | SIM_SELECT_LOCAL (0), |
| 298 | SIM_SELECT_REMOTE (1) |
| 299 | } with { variant "FIELDLENGTH(8)" }; |
| 300 | |
| 301 | /* SIMTRACE_MSGT_DT_MODEM_SIM_SELECT */ |
| 302 | type record Modem_DT_SimSelect { |
| 303 | SimSelect sim_select |
| 304 | }; |
| 305 | |
| 306 | type record Modem_Status { |
| 307 | BIT6 reserved, |
| 308 | boolean card_inserted, |
| 309 | boolean wwan_led |
| 310 | }; |
| 311 | |
| 312 | /* SIMTRACE_MSGT_BD_MODEM_STATUS */ |
| 313 | type record Modem_BD_Status { |
| 314 | Modem_Status supported, |
| 315 | Modem_Status status, |
| 316 | Modem_Status changed |
| 317 | }; |
| 318 | |
| 319 | /*********************************************************************** |
| 320 | * SNIFF |
| 321 | ***********************************************************************/ |
| 322 | |
| 323 | type record Sniff_Flags { |
| 324 | /* First octet here is last octet of little-endian encoded uint32_t */ |
| 325 | boolean error_checksum, |
| 326 | boolean error_malformed, |
| 327 | boolean error_incomplete, |
| 328 | boolean timeout_wt, |
| 329 | boolean reset_deassert, |
| 330 | boolean reset_assert, |
| 331 | boolean card_eject, |
| 332 | boolean card_insert, |
| 333 | BIT24 reserved |
| 334 | }; |
| 335 | |
| 336 | /* SIMTRACE_MSGT_SNIFF_CHANGE */ |
| 337 | type record Sniff_DO_Change { |
| 338 | Sniff_Flags flags |
| 339 | }; |
| 340 | |
| 341 | /* SIMTRACE_MSGT_SNIFF_FIDI */ |
| 342 | type record Sniff_DO_FiDi { |
| 343 | uint8_t fidi |
| 344 | }; |
| 345 | |
| 346 | /* SIMTRACE_MSGT_SNIFF_ATR, PPS, TPDU */ |
| 347 | type record Sniff_DO_Data { |
| 348 | Sniff_Flags flags, |
| 349 | u16le_t data_len, |
| 350 | octetstring data |
| 351 | } with { |
| 352 | variant (data_len) "LENGTHTO(data)" |
| 353 | }; |
| 354 | |
| 355 | |
| 356 | |
| 357 | } with { encode "RAW"; variant "FIELDORDER(msb)" }; |