diff options
Diffstat (limited to 'library/SIMTRACE_Types.ttcn')
-rw-r--r-- | library/SIMTRACE_Types.ttcn | 357 |
1 files changed, 357 insertions, 0 deletions
diff --git a/library/SIMTRACE_Types.ttcn b/library/SIMTRACE_Types.ttcn new file mode 100644 index 00000000..d28df2f9 --- /dev/null +++ b/library/SIMTRACE_Types.ttcn @@ -0,0 +1,357 @@ +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, + uint8_t slot_mux_nr optional +}; + +/*********************************************************************** + * 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)" }; |