mirror of
https://gitea.osmocom.org/sim-card/simtrace2.git
synced 2026-03-17 13:48:32 +03:00
Compare commits
7 Commits
lynxis/pre
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e1961beea1 | ||
|
|
d0ad985eb0 | ||
|
|
c38ad746f2 | ||
|
|
64e0adedb0 | ||
|
|
f9885fe019 | ||
|
|
ec9b0b5254 | ||
|
|
0cd501ef80 |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -25,4 +25,5 @@ host/tests
|
||||
usb_strings_generated.h
|
||||
firmware/usbstring/usbstring
|
||||
firmware/apps/*/usb_strings.txt.patched
|
||||
firmware/misc/crctool
|
||||
firmware/misc/crctool
|
||||
host/include/osmocom/simtrace2/version.h
|
||||
|
||||
11
README.md
11
README.md
@@ -41,3 +41,14 @@ The host software includes
|
||||
* simtrace2-list - list any USB-attached devices running simtrace2 firmware
|
||||
* simtrace2-sniff - interface the 'trace' firmware to obtain card protocol traces
|
||||
* simtrace2-cardem-pcsc - interface the 'cardem' fimrware to use a SIM in a PC/SC reader
|
||||
|
||||
|
||||
Do not expect SIMtrace2 to work in VMs
|
||||
--------------------------------------
|
||||
|
||||
We only support running SIMtrace2 together with a Linux system running
|
||||
"bare iron" on actual hardware (x86, x86_64, arm, ...). **using VMs
|
||||
with USB pass-through for things with critical timing like SIMtrace2 is
|
||||
calling for trouble** and we will not accept related bug reports or
|
||||
support you if you do. If you still want to use VMs: Feel free to do
|
||||
so, but understand that it's unsupported and you are on your own.
|
||||
|
||||
@@ -3,8 +3,7 @@
|
||||
# In short: https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html#Updating-version-info
|
||||
# LIBVERSION=c:r:a
|
||||
# If the library source code has changed at all since the last update, then increment revision: c:r + 1:a.
|
||||
# If any interfaces have been added, removed, or changed since the last update: c + 1:0:0.
|
||||
# If any interfaces have been added, removed, or changed since the last update: c + 1:0:a.
|
||||
# If any interfaces have been added since the last public release: c:r:a + 1.
|
||||
# If any interfaces have been removed or changed since the last public release: c:r:0.
|
||||
#library what description / commit summary line
|
||||
simtrace2 API/ABI change osmo_st2_transport new member
|
||||
|
||||
@@ -58,6 +58,7 @@ local hf_pts_resp = ProtoField.bytes("usb_simtrace.pts_resp", "PTS response")
|
||||
|
||||
local hf_cemu_cfg_features = ProtoField.uint32("usb_simtrace.cemu_cfg.features.status_irq", "CardEm Features", base.HEX)
|
||||
local hf_cemu_cfg_slot_mux_nr = ProtoField.uint32("usb_simtrace.cemu_cfg.features.slot_mux_nr", "CardEm Slot Mux Nr", base.DEC)
|
||||
local hf_cemu_cfg_presence_polarity = ProtoField.uint8("usb_simtrace.cemu_cfg.features.presence_polarity", "Sim presence polarity", base.DEC)
|
||||
|
||||
local card_insert_types = {
|
||||
[0x00] = "not inserted",
|
||||
@@ -71,6 +72,9 @@ local CEMU_STATUS_F_RCEMU_ACTIVE = ProtoField.uint32("usb_simtrace.CEMU_STATUS.
|
||||
local CEMU_STATUS_F_CARD_INSERT = ProtoField.uint32("usb_simtrace.CEMU_STATUS.F_CARD_INSERT", "CARD_INSERT", base.HEX_DEC, NULL, 0x00000008)
|
||||
local CEMU_STATUS_F_RESET_ACTIVE = ProtoField.uint32("usb_simtrace.CEMU_STATUS.F_RESET_ACTIVE", "RESET_ACTIVE", base.HEX_DEC, NULL, 0x00000010)
|
||||
|
||||
local CEMU_CONFIG_PRES_POL_PRES_H = ProtoField.uint32("usb_simtrace.CEMU_CONFIG.PRES_POL_PRES_H", "PRESENCE_HIGH", base.HEX_DEC, NULL, 0x00000001)
|
||||
local CEMU_CONFIG_PRES_POL_VALID = ProtoField.uint32("usb_simtrace.CEMU_CONFIG.PRES_POL_VALID", "PRESENCE_VALID", base.HEX_DEC, NULL, 0x00000002)
|
||||
|
||||
local modem_reset_types = {
|
||||
[0x00] = "de-assert",
|
||||
[0x01] = "assert",
|
||||
@@ -89,9 +93,10 @@ usb_simtrace_protocol.fields = {
|
||||
msgtype, seqnr, slotnr, reserved, payloadlen, payload,
|
||||
pb_and_rx, pb_and_tx, final, tpdu_hdr, rxtxdatalen, rxtxdata,
|
||||
CEMU_STATUS_F_VCC_PRESENT, CEMU_STATUS_F_CLK_ACTIVE, CEMU_STATUS_F_RCEMU_ACTIVE, CEMU_STATUS_F_CARD_INSERT, CEMU_STATUS_F_RESET_ACTIVE,
|
||||
CEMU_CONFIG_PRES_POL_PRES_H, CEMU_CONFIG_PRES_POL_VALID,
|
||||
modem_reset_status, modem_reset_len,
|
||||
hf_pts_len, hf_pts_req, hf_pts_resp,
|
||||
hf_cemu_cfg_features, hf_cemu_cfg_slot_mux_nr,
|
||||
hf_cemu_cfg_features, hf_cemu_cfg_slot_mux_nr, hf_cemu_cfg_presence_polarity,
|
||||
hf_cemu_cardinsert, hf_modem_sim_select,
|
||||
}
|
||||
|
||||
@@ -214,7 +219,15 @@ function dissect_cemu_config(payload_data, pinfo, tree)
|
||||
local subtree = tree:add(usb_simtrace_protocol, payload_data, "Card Emu Config")
|
||||
|
||||
subtree:add(hf_cemu_cfg_features, payload_data(0,4));
|
||||
subtree:add(hf_cemu_cfg_slot_mux_nr, payload_data(4,1));
|
||||
if payload_data:len() >= 4 then
|
||||
subtree:add(hf_cemu_cfg_slot_mux_nr, payload_data(4,1));
|
||||
end
|
||||
if payload_data:len() >= 5 then
|
||||
local pres = payload_data(5,1):le_uint();
|
||||
subtree:add(hf_cemu_cfg_presence_polarity, payload_data(5,1));
|
||||
headerSubtree:add(CEMU_CONFIG_PRES_POL_PRES_H, pres)
|
||||
headerSubtree:add(CEMU_CONFIG_PRES_POL_VALID, pres)
|
||||
end
|
||||
end
|
||||
|
||||
function dissect_modem_sim_sel(payload_data, pinfo, tree)
|
||||
|
||||
96
debian/changelog
vendored
96
debian/changelog
vendored
@@ -1,3 +1,99 @@
|
||||
simtrace2 (0.9.0) unstable; urgency=medium
|
||||
|
||||
[ Oliver Smith ]
|
||||
* host/contrib/simtrace2.spec.in: update
|
||||
* treewide: remove FSF address
|
||||
* contrib/jenkins.sh: set USE_CLANG=1
|
||||
* Cosmetic: fix CI errors
|
||||
* debian/rules: remove override_dh_autoreconf
|
||||
* debian: set compat level to 10
|
||||
* contrib/jenkins: tweak shell logic
|
||||
* firmware/Makefile: don't use distribution's CFLAGS
|
||||
* contrib: remove rpm spec file
|
||||
|
||||
[ Eric Wild ]
|
||||
* firmware: add crc stub to all dfu apps to ensure reliable loading
|
||||
* wireshark lua dissector: dissect more
|
||||
* lua dissector: adjust usage instructions
|
||||
* conrtrib/upload : upload elf files
|
||||
* contrib/jenkins.sh : build and publish combined targets
|
||||
* fw: only build the bl with clang
|
||||
|
||||
[ James Tavares ]
|
||||
* simtrace2-tool: add "modem sim-card (insert|remove)" command
|
||||
* firmware: add definition for main osc bypass when using external osc
|
||||
* gitignore: add missing entries binaries
|
||||
* firmware: bugfix: disable cardemu comms in local SIM mode
|
||||
* main: rotor: erase immediately after send
|
||||
* Fix missing generation of waiting-time-extension in some situations
|
||||
|
||||
[ Harald Welte ]
|
||||
* host: Print strerror(errno) in case of problems opening the USB device
|
||||
* cosmetic: Fix indent of printf() statement
|
||||
* host: properly zero-initialize interface match structures
|
||||
* contrib/simtrace.lua: Add VID/PID of all currentl simtrace2 devices
|
||||
* cosmetic: contrib/simtrace.lua: more consistent formatting
|
||||
* contrib/simtrace.lua: Add header with author/description/usage
|
||||
* contrib/simtrace.lua: print length + slot-number in decimal only
|
||||
* contrib/simtrace.lua: Don't print SIMTRACE_MSGT_ in every COL_INFO
|
||||
* contrib/simtrace.lua: Dissect some more cardem related message types
|
||||
* contrib/simtrace.lua: Register for "decode as..."
|
||||
* cardem: Report the VCC voltage (if supported)
|
||||
* card_emu_uart_interrupt: ASSERT if we get called with wrong uart_chan
|
||||
* cardem: set more reasonable interrupt priorities
|
||||
* host: Always initialize libosmocore logging before using it
|
||||
* simtrace2-cardem-pcsc: rename 'flags' to 'status_flags'
|
||||
* simtrace2-cardem-pcsc: Move all logging into libosmocore
|
||||
* simtrace2-cardem-pcsc: Detect card power-up without RESET
|
||||
* host: Don't pass -1 (converted to 255) as address
|
||||
* simtrace2-cardem-pcsc: Fix copy+paste error in log message
|
||||
* simtrace2-cardem-pcsc: continue in case of LIBUSB_TRANSFER_ERROR
|
||||
* contrib/simtrace.lua: Add Flag bits + Data to COL_INFO
|
||||
* Reduce bInterval of interrupt endpoints to avoid interrupt misses
|
||||
* simtrace2-cardem-pcsc.c: Send APDUs via GSMTAP
|
||||
* update git URLs (git -> https; gitea)
|
||||
* cardem: reset the uC in case of USB disconnect
|
||||
* cosmetic: Fix compile-time #error message string typo
|
||||
* firmware/sniffer: Fix copy+paste when logging invalid INS bytes
|
||||
* firmware/sniffer: Log parity errors, just like overruns and framing errors
|
||||
* firmware/sniffer: refactor setting TPDU state
|
||||
* firmware/sniffer: Log old and new state in ISO7816-3 state changes
|
||||
* firmware/sniffer: Avoid extra call for rbuf_is_full
|
||||
* firmware/sniffer: Fix programming error in PPS
|
||||
* firmware/sniffer: Make all global variables 'static'
|
||||
* firmware/sniffer: Group global variables in structs
|
||||
* firmware/sniffer: Log cause of WT change
|
||||
* firmware/sniffer: Rename global variable 'wt' to 'g_wt'
|
||||
* firmware/sniffer: Disable TIMEOUT interrupts in USART IER on exit
|
||||
* firmware/sniffer: Add + use 16bit ringbuffer
|
||||
* firmware/sniffer: Pass PARITY/OVERRUN/FRAMING error via ringbuffer
|
||||
* firmware/sniffer: Handle WT timeouts via ring-buffer
|
||||
* firmware/sniffer: introduce #define for interrupt enable flags
|
||||
* firmware/sniffer: Enable interrupts for overrun/parity/frame errors
|
||||
* Fix unchecked return value of osmo_libusb_init()
|
||||
* Add funding link to github mirror
|
||||
* README.md: Fix mark-down nested bullet syntax
|
||||
* README.md: Fix mark-down nested bullet syntax
|
||||
* README.md: add links to SIMtrace2 and QMOD
|
||||
* README.md: Add links to where hardware can be bought
|
||||
* README.md: Add section on ngff_carem
|
||||
* README.md: Add note to avoid using a VM
|
||||
|
||||
[ Alexander Couzens ]
|
||||
* firmware: usb: call USBD_HAL_DISCONNECT while usb init to recover from resets
|
||||
* ngff_cardem: cosmetic: fix superflous space
|
||||
* dissector: add support for sim polarity
|
||||
* firmware: allow to change the sim presence pin polarity
|
||||
* simtrace2-cardem-pcsc: allow to set sim presence polarity
|
||||
|
||||
[ Vadim Yanitskiy ]
|
||||
* host/cardem: fix integer overflow in process_do_rx_da()
|
||||
|
||||
[ Philipp Maier ]
|
||||
* simtrace2-cardem-pcsc: mark reset events in GSMTAP trace
|
||||
|
||||
-- Oliver Smith <osmith@sysmocom.de> Wed, 12 Feb 2025 16:07:53 +0100
|
||||
|
||||
simtrace2 (0.8.1) unstable; urgency=medium
|
||||
|
||||
* host/contrib/simtrace2.spec.in: fix soname
|
||||
|
||||
2
debian/control
vendored
2
debian/control
vendored
@@ -10,7 +10,7 @@ Build-Depends: debhelper (>= 10),
|
||||
pkg-config,
|
||||
git,
|
||||
dh-autoreconf,
|
||||
libosmocore-dev (>= 1.4.0),
|
||||
libosmocore-dev (>= 1.11.0),
|
||||
libpcsclite-dev,
|
||||
libnewlib-arm-none-eabi,
|
||||
libusb-1.0-0-dev,
|
||||
|
||||
@@ -124,4 +124,8 @@ extern void mode_cardemu_usart1_irq(void);
|
||||
void Timer_Init( void );
|
||||
void TC0_Counter_Reset( void );
|
||||
|
||||
/* Sim presence pins */
|
||||
bool mode_cardemu_get_presence_pol(uint8_t instance);
|
||||
void mode_cardemu_set_presence_pol(uint8_t instance, bool high);
|
||||
|
||||
#endif /* SIMTRACE_H */
|
||||
|
||||
@@ -261,12 +261,21 @@ struct cardemu_usb_msg_error {
|
||||
/* enable/disable the generation of DO_STATUS on IRQ endpoint */
|
||||
#define CEMU_FEAT_F_STATUS_IRQ 0x00000001
|
||||
|
||||
#define CEMU_CONFIG_PRES_POL_PRES_L 0x00
|
||||
#define CEMU_CONFIG_PRES_POL_PRES_H 0x01
|
||||
#define CEMU_CONFIG_PRES_POL_VALID 0x02
|
||||
|
||||
/* SIMTRACE_MSGT_BD_CEMU_CONFIG */
|
||||
struct cardemu_usb_msg_config {
|
||||
/* bit-mask of CEMU_FEAT_F flags */
|
||||
uint32_t features;
|
||||
/* the selected slot number (if an external mux is present) */
|
||||
uint8_t slot_mux_nr;
|
||||
/* Sim presence pin polarity. Bit 1 is a validity bit. Bit 0 gpio value when sim present.
|
||||
* When sim is present, set sim_present gpio to high -> 0x03
|
||||
* When sim is present, set sim_present gpio to low -> 0x02
|
||||
*/
|
||||
uint8_t pres_pol;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
/***********************************************************************
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include "trace.h"
|
||||
#include "iso7816_fidi.h"
|
||||
#include "card_emu.h"
|
||||
#include "simtrace.h"
|
||||
#include "simtrace_prot.h"
|
||||
#include "usb_buf.h"
|
||||
#include <osmocom/core/linuxlist.h>
|
||||
@@ -1096,7 +1097,7 @@ static void card_emu_report_config(struct card_handle *ch)
|
||||
#else
|
||||
cfg->slot_mux_nr = 0;
|
||||
#endif
|
||||
|
||||
cfg->pres_pol = mode_cardemu_get_presence_pol(ch->num) | CEMU_CONFIG_PRES_POL_VALID;
|
||||
|
||||
usb_buf_upd_len_and_submit(msg);
|
||||
}
|
||||
@@ -1270,6 +1271,11 @@ int card_emu_set_config(struct card_handle *ch, const struct cardemu_usb_msg_con
|
||||
}
|
||||
#endif
|
||||
|
||||
if (scfg_len >= sizeof(uint32_t)+sizeof(uint8_t)+sizeof(uint8_t)) {
|
||||
if (scfg->pres_pol & CEMU_CONFIG_PRES_POL_VALID)
|
||||
mode_cardemu_set_presence_pol(ch->num, scfg->pres_pol & CEMU_CONFIG_PRES_POL_PRES_H);
|
||||
}
|
||||
|
||||
/* send back a report of our current configuration */
|
||||
card_emu_report_config(ch);
|
||||
|
||||
|
||||
@@ -79,7 +79,10 @@ struct cardem_inst {
|
||||
uint8_t ep_out;
|
||||
uint8_t ep_in;
|
||||
uint8_t ep_int;
|
||||
/*! Pin to set when SIM is present/inserted (SIM presence pin). */
|
||||
const Pin pin_insert;
|
||||
/*! Invert the Pin polarity. When not inverted, the SIM pin_insert will be High, when a SIM is present. */
|
||||
bool pin_insert_inverted;
|
||||
#ifdef DETECT_VCC_BY_ADC
|
||||
uint32_t vcc_uv;
|
||||
#endif
|
||||
@@ -113,7 +116,10 @@ struct cardem_inst cardem_inst[] = {
|
||||
.ep_int = SIMTRACE_CARDEM_USB_EP_USIM1_INT,
|
||||
#ifdef PIN_SET_USIM1_PRES
|
||||
.pin_insert = PIN_SET_USIM1_PRES,
|
||||
#endif
|
||||
#endif /* PIN_SET_USIM1_PRES */
|
||||
#ifdef PIN_SET_USIM1_PRES_INVERTED
|
||||
.pin_insert_inverted = true,
|
||||
#endif /* PIN_SET_USIM1_PRES_INVERTED */
|
||||
},
|
||||
#ifdef CARDEMU_SECOND_UART
|
||||
{
|
||||
@@ -128,7 +134,10 @@ struct cardem_inst cardem_inst[] = {
|
||||
.ep_int = SIMTRACE_CARDEM_USB_EP_USIM2_INT,
|
||||
#ifdef PIN_SET_USIM2_PRES
|
||||
.pin_insert = PIN_SET_USIM2_PRES,
|
||||
#endif
|
||||
#endif /* PIN_SET_USIM2_PRES */
|
||||
#ifdef PIN_SET_USIM2_PRES_INVERTED
|
||||
.pin_insert_inverted = true,
|
||||
#endif /* PIN_SET_USIM2_PRES_INVERTED */
|
||||
},
|
||||
#endif
|
||||
};
|
||||
@@ -700,7 +709,7 @@ static void process_card_insert(struct cardem_inst *ci, bool card_insert)
|
||||
TRACE_INFO("%u: set card_insert to %s\r\n", ci->num, card_insert ? "INSERTED" : "REMOVED");
|
||||
|
||||
#ifdef HAVE_BOARD_CARDINSERT
|
||||
board_set_card_insert(ci, card_insert);
|
||||
board_set_card_insert(ci, card_insert ^ ci->pin_insert_inverted);
|
||||
#else
|
||||
if (!ci->pin_insert.pio) {
|
||||
TRACE_INFO("%u: skipping unsupported card_insert to %s\r\n",
|
||||
@@ -708,7 +717,7 @@ static void process_card_insert(struct cardem_inst *ci, bool card_insert)
|
||||
return;
|
||||
}
|
||||
|
||||
if (card_insert)
|
||||
if (card_insert ^ ci->pin_insert_inverted)
|
||||
PIO_Set(&ci->pin_insert);
|
||||
else
|
||||
PIO_Clear(&ci->pin_insert);
|
||||
@@ -962,3 +971,25 @@ void mode_cardemu_run(void)
|
||||
process_any_usb_commands(queue, ci);
|
||||
}
|
||||
}
|
||||
|
||||
void mode_cardemu_set_presence_pol(uint8_t instance, bool high)
|
||||
{
|
||||
struct cardem_inst *ci;
|
||||
|
||||
if (instance >= ARRAY_SIZE(cardem_inst))
|
||||
return;
|
||||
|
||||
ci = &cardem_inst[instance];
|
||||
ci->pin_insert_inverted = !high;
|
||||
}
|
||||
|
||||
bool mode_cardemu_get_presence_pol(uint8_t instance)
|
||||
{
|
||||
struct cardem_inst *ci;
|
||||
|
||||
if (instance >= ARRAY_SIZE(cardem_inst))
|
||||
return false;
|
||||
|
||||
ci = &cardem_inst[instance];
|
||||
return !ci->pin_insert_inverted;
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ CFLAGS=-g -Wall $(LIBOSMOCORE_CFLAGS) \
|
||||
-I../atmel_softpack_libraries/libchip_sam3s/cmsis \
|
||||
-I../atmel_softpack_libraries/libchip_sam3s/include \
|
||||
-I../atmel_softpack_libraries/usb/include \
|
||||
-I../atmel_softpack_libraries/ \
|
||||
-I../libcommon/include \
|
||||
-I../libboard/common/include \
|
||||
-I../libboard/simtrace/include \
|
||||
|
||||
@@ -93,7 +93,14 @@ void card_emu_uart_reset_wt(uint8_t uart_chan)
|
||||
printf("%s(uart_chan=%u\n", __func__, uart_chan);
|
||||
}
|
||||
|
||||
void mode_cardemu_set_presence_pol(uint8_t instance, bool high)
|
||||
{
|
||||
}
|
||||
|
||||
bool mode_cardemu_get_presence_pol(uint8_t instance)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* test helper functions
|
||||
|
||||
@@ -56,9 +56,9 @@ AC_COMPILE_IFELSE([AC_LANG_SOURCE([char foo;])],
|
||||
CFLAGS="$saved_CFLAGS"
|
||||
AC_SUBST(SYMBOL_VISIBILITY)
|
||||
|
||||
PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore >= 1.4.0)
|
||||
PKG_CHECK_MODULES(LIBOSMOSIM, libosmosim >= 1.4.0)
|
||||
PKG_CHECK_MODULES(LIBOSMOUSB, libosmousb >= 1.4.0)
|
||||
PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore >= 1.11.0)
|
||||
PKG_CHECK_MODULES(LIBOSMOSIM, libosmosim >= 1.11.0)
|
||||
PKG_CHECK_MODULES(LIBOSMOUSB, libosmousb >= 1.11.0)
|
||||
PKG_CHECK_MODULES(LIBUSB, libusb-1.0)
|
||||
|
||||
AC_ARG_ENABLE(sanitize,
|
||||
|
||||
@@ -1,3 +1,12 @@
|
||||
osmocom/simtrace2/version.h: osmocom/simtrace2/version.h.tpl
|
||||
$(AM_V_GEN)$(MKDIR_P) $(dir $@)
|
||||
$(AM_V_GEN)sed \
|
||||
-e "s/{{VERSION}}/$$(echo '@VERSION@' | cut -d. -f1-3)/g" \
|
||||
-e "s/{{VERSION_MAJOR}}/$$(echo '@VERSION@' | cut -d. -f1)/g" \
|
||||
-e "s/{{VERSION_MINOR}}/$$(echo '@VERSION@' | cut -d. -f2)/g" \
|
||||
-e "s/{{VERSION_PATCH}}/$$(echo '@VERSION@' | cut -d. -f3)/g" \
|
||||
$< > $@
|
||||
|
||||
nobase_include_HEADERS = \
|
||||
osmocom/simtrace2/apdu_dispatch.h \
|
||||
osmocom/simtrace2/simtrace2_api.h \
|
||||
@@ -5,4 +14,5 @@ nobase_include_HEADERS = \
|
||||
osmocom/simtrace2/simtrace_prot.h \
|
||||
osmocom/simtrace2/usb_util.h \
|
||||
osmocom/simtrace2/gsmtap.h \
|
||||
osmocom/simtrace2/version.h \
|
||||
$(NULL)
|
||||
|
||||
@@ -41,6 +41,8 @@ struct osmo_st2_cardem_inst {
|
||||
void *priv;
|
||||
};
|
||||
|
||||
struct cardemu_usb_msg_config;
|
||||
|
||||
int osmo_st2_slot_tx_msg(struct osmo_st2_slot *slot, struct msgb *msg,
|
||||
uint8_t msg_class, uint8_t msg_type);
|
||||
|
||||
@@ -53,7 +55,7 @@ int osmo_st2_cardem_request_sw_tx(struct osmo_st2_cardem_inst *ci, const uint8_t
|
||||
int osmo_st2_cardem_request_set_atr(struct osmo_st2_cardem_inst *ci, const uint8_t *atr,
|
||||
unsigned int atr_len);
|
||||
int osmo_st2_cardem_request_config(struct osmo_st2_cardem_inst *ci, uint32_t features);
|
||||
|
||||
int osmo_st2_cardem_request_config2(struct osmo_st2_cardem_inst *ci, const struct cardemu_usb_msg_config *config);
|
||||
|
||||
int osmo_st2_modem_reset_pulse(struct osmo_st2_slot *slot, uint16_t duration_ms);
|
||||
int osmo_st2_modem_reset_active(struct osmo_st2_slot *slot);
|
||||
|
||||
16
host/include/osmocom/simtrace2/version.h.tpl
Normal file
16
host/include/osmocom/simtrace2/version.h.tpl
Normal file
@@ -0,0 +1,16 @@
|
||||
#pragma once
|
||||
|
||||
#define LIBOSMO_SIMTRACE2_VERSION {{VERSION}}
|
||||
#define LIBOSMO_SIMTRACE2_VERSION_STR "{{VERSION}}"
|
||||
|
||||
#define LIBOSMO_SIMTRACE2_VERSION_MAJOR {{VERSION_MAJOR}}
|
||||
#define LIBOSMO_SIMTRACE2_VERSION_MINOR {{VERSION_MINOR}}
|
||||
#define LIBOSMO_SIMTRACE2_VERSION_PATCH {{VERSION_PATCH}}
|
||||
|
||||
#define LIBOSMO_SIMTRACE2_VERSION_GREATER_EQUAL(major, minor, patch) \
|
||||
(LIBOSMO_SIMTRACE2_VERSION_MAJOR > (major) || \
|
||||
(LIBOSMO_SIMTRACE2_VERSION_MAJOR == (major) && \
|
||||
LIBOSMO_SIMTRACE2_VERSION_MINOR > (minor)) || \
|
||||
(LIBOSMO_SIMTRACE2_VERSION_MAJOR == (major) && \
|
||||
LIBOSMO_SIMTRACE2_VERSION_MINOR == (minor) && \
|
||||
LIBOSMO_SIMTRACE2_VERSION_PATCH >= (patch)))
|
||||
@@ -1,7 +1,7 @@
|
||||
# This is _NOT_ the library release version, it's an API version.
|
||||
# Please read chapter "Library interface versions" of the libtool documentation
|
||||
# before making any modifications: https://www.gnu.org/software/libtool/manual/html_node/Versioning.html
|
||||
ST2_LIBVERSION=1:0:0
|
||||
ST2_LIBVERSION=2:0:1
|
||||
|
||||
AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/include -I$(top_builddir)
|
||||
AM_CFLAGS= -Wall $(LIBOSMOCORE_CFLAGS) $(LIBOSMOSIM_CFLAGS) $(LIBUSB_CFLAGS) $(COVERAGE_CFLAGS)
|
||||
|
||||
@@ -66,7 +66,7 @@ int osmo_st2_gsmtap_send_apdu(uint8_t sub_type, const uint8_t *apdu, unsigned in
|
||||
|
||||
memcpy(buf + sizeof(*gh), apdu, len);
|
||||
|
||||
rc = write(gsmtap_inst_fd(g_gti), buf, gross_len);
|
||||
rc = write(gsmtap_inst_fd2(g_gti), buf, gross_len);
|
||||
if (rc < 0) {
|
||||
perror("write gsmtap");
|
||||
free(buf);
|
||||
|
||||
@@ -272,6 +272,21 @@ int osmo_st2_cardem_request_config(struct osmo_st2_cardem_inst *ci, uint32_t fea
|
||||
return osmo_st2_slot_tx_msg(ci->slot, msg, SIMTRACE_MSGC_CARDEM, SIMTRACE_MSGT_BD_CEMU_CONFIG);
|
||||
}
|
||||
|
||||
/* user_cfg is in host byte order. */
|
||||
int osmo_st2_cardem_request_config2(struct osmo_st2_cardem_inst *ci, const struct cardemu_usb_msg_config *user_cfg)
|
||||
{
|
||||
struct msgb *msg = st_msgb_alloc();
|
||||
struct cardemu_usb_msg_config *tx_cfg;
|
||||
|
||||
tx_cfg = (struct cardemu_usb_msg_config *) msgb_put(msg, sizeof(*tx_cfg));
|
||||
|
||||
LOGSLOT(ci->slot, LOGL_NOTICE, "<= %s(features=%08x)\n", __func__, tx_cfg->features);
|
||||
memcpy(tx_cfg, user_cfg, sizeof(*tx_cfg));
|
||||
osmo_store32le(user_cfg->features, &tx_cfg->features);
|
||||
|
||||
return osmo_st2_slot_tx_msg(ci->slot, msg, SIMTRACE_MSGC_CARDEM, SIMTRACE_MSGT_BD_CEMU_CONFIG);
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* Modem Control protocol
|
||||
***********************************************************************/
|
||||
|
||||
@@ -413,6 +413,7 @@ static void print_help(void)
|
||||
"\t-S\t--usb-altsetting ALTSETTING_ID\n"
|
||||
"\t-A\t--usb-address\tADDRESS\n"
|
||||
"\t-H\t--usb-path\tPATH\n"
|
||||
"\t-Z\t--set-sim-presence\t<0/1>\n"
|
||||
"\n"
|
||||
);
|
||||
}
|
||||
@@ -431,6 +432,7 @@ static const struct option opts[] = {
|
||||
{ "usb-altsetting", 1, 0, 'S' },
|
||||
{ "usb-address", 1, 0, 'A' },
|
||||
{ "usb-path", 1, 0, 'H' },
|
||||
{ "set-sim-presence", 1, 0, 'Z' },
|
||||
{ NULL, 0, 0, 0 }
|
||||
};
|
||||
|
||||
@@ -487,6 +489,7 @@ int main(int argc, char **argv)
|
||||
char *path = NULL;
|
||||
struct osim_reader_hdl *reader;
|
||||
struct osim_card_hdl *card;
|
||||
struct cardemu_usb_msg_config cardem_config = { .features = CEMU_FEAT_F_STATUS_IRQ };
|
||||
|
||||
print_welcome();
|
||||
|
||||
@@ -509,7 +512,7 @@ int main(int argc, char **argv)
|
||||
while (1) {
|
||||
int option_index = 0;
|
||||
|
||||
c = getopt_long(argc, argv, "hi:V:P:C:I:S:A:H:akn:t:", opts, &option_index);
|
||||
c = getopt_long(argc, argv, "hi:V:P:C:I:S:A:H:akn:t:Z:", opts, &option_index);
|
||||
if (c == -1)
|
||||
break;
|
||||
switch (c) {
|
||||
@@ -553,6 +556,10 @@ int main(int argc, char **argv)
|
||||
case 'H':
|
||||
path = optarg;
|
||||
break;
|
||||
case 'Z':
|
||||
cardem_config.pres_pol = atoi(optarg) ? CEMU_CONFIG_PRES_POL_PRES_H : 0;
|
||||
cardem_config.pres_pol |= CEMU_CONFIG_PRES_POL_VALID;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -636,7 +643,7 @@ int main(int argc, char **argv)
|
||||
allocate_and_submit_in(ci);
|
||||
|
||||
/* request firmware to generate STATUS on IRQ endpoint */
|
||||
osmo_st2_cardem_request_config(ci, CEMU_FEAT_F_STATUS_IRQ);
|
||||
osmo_st2_cardem_request_config2(ci, &cardem_config);
|
||||
|
||||
/* simulate card-insert to modem (owhw, not qmod) */
|
||||
osmo_st2_cardem_request_card_insert(ci, true);
|
||||
|
||||
Reference in New Issue
Block a user