James Tavares has uploaded this change for review. ( https://gerrit.osmocom.org/c/simtrace2/+/26865 )
Change subject: firmware: bugfix: disable cardemu comms in local SIM mode
......................................................................
firmware: bugfix: disable cardemu comms in local SIM mode
This change prevents contention on the ISO7816 bus by disabling the card emulation state machine when the SIM switch is in the local mode. Without this change, the card emulation firmware can clobber ISO7816 communications and cause contention with certain (but not all) SIM cards.
Changes:
- Add 'enabled' flag to cardemu instance that is set/cleared by usb_command_sim_select() (the only place where sim switch occurs).
- Flag is initialized as false (disabled) by default, to match local SIM mode default.
- When card emulation is disabled, force SIM VCC to be "OFF", SIM RESET as "not in RESET", and drop bytes bytes received on the ISO7816 interface (but do service buffers).
Change-Id: I4010f988712eac4a6af8568ccd60062f9de62449
---
M firmware/libcommon/source/mode_cardemu.c
1 file changed, 31 insertions(+), 13 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/simtrace2 refs/changes/65/26865/1
diff --git a/firmware/libcommon/source/mode_cardemu.c b/firmware/libcommon/source/mode_cardemu.c
index 8e4acf9..00a062e 100644
--- a/firmware/libcommon/source/mode_cardemu.c
+++ b/firmware/libcommon/source/mode_cardemu.c
@@ -83,10 +83,21 @@
#ifdef DETECT_VCC_BY_ADC
uint32_t vcc_uv;
#endif
+
+ /*! real-time state of VCC I/O line, irrespective of enabled flag */
bool vcc_active;
+
+ /*! last VCC state we reported to the card emu state machine (conditioned by enabled flag) */
bool vcc_active_last;
+
+ /*! real-time state of RST I/O line, irrespective of enabled flag */
bool rst_active;
+
+ /*! last RST state we reported to the card emu state machine (conditioned by enabled flag) */
bool rst_active_last;
+
+ /*! flag indicating whether this instance should perform card emulation, or not */
+ bool enabled;
};
struct cardem_inst cardem_inst[] = {
@@ -505,19 +516,25 @@
#endif /* DETECT_VCC_BY_ADC */
-/* called from main loop; dispatches card I/O state changes to card_emu from main loop */
+/**
+ * called from main loop; dispatches card I/O state changes to card_emu from main loop.
+ * NOTE: conditions I/O state on the ci->enabled flag; if the instance is disabled, we assume VCC is
+ * disabled and the device is not in reset
+ */
static void process_io_statechg(struct cardem_inst *ci)
{
- if (ci->vcc_active != ci->vcc_active_last) {
- card_emu_io_statechg(ci->ch, CARD_IO_VCC, ci->vcc_active);
+ const bool vcc_active = ci->vcc_active && ci->enabled;
+ if (vcc_active != ci->vcc_active_last) {
+ card_emu_io_statechg(ci->ch, CARD_IO_VCC, vcc_active);
/* FIXME do this for real */
- card_emu_io_statechg(ci->ch, CARD_IO_CLK, ci->vcc_active);
- ci->vcc_active_last = ci->vcc_active;
+ card_emu_io_statechg(ci->ch, CARD_IO_CLK, vcc_active);
+ ci->vcc_active_last = vcc_active;
}
- if (ci->rst_active != ci->rst_active_last) {
- card_emu_io_statechg(ci->ch, CARD_IO_RST, ci->rst_active);
- ci->rst_active_last = ci->rst_active;
+ const bool rst_active = ci->rst_active && ci->enabled;
+ if (rst_active != ci->rst_active_last) {
+ card_emu_io_statechg(ci->ch, CARD_IO_RST, rst_active);
+ ci->rst_active_last = rst_active;
}
}
@@ -764,10 +781,8 @@
if (msgb_l2len(msg) < sizeof(*mss))
return -1;
- if (mss->remote_sim)
- sim_switch_use_physical(ci->num, 0);
- else
- sim_switch_use_physical(ci->num, 1);
+ ci->enabled = mss->remote_sim ? true : false;
+ sim_switch_use_physical(ci->num, !ci->enabled);
return 0;
}
@@ -911,7 +926,10 @@
}
uint8_t byte = rbuf_read(&ci->rb);
__enable_irq();
- card_emu_process_rx_byte(ci->ch, byte);
+
+ if (ci->enabled) {
+ card_emu_process_rx_byte(ci->ch, byte);
+ }
//TRACE_ERROR("%uRx%02x\r\n", i, byte);
}
--
To view, visit https://gerrit.osmocom.org/c/simtrace2/+/26865
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: simtrace2
Gerrit-Branch: master
Gerrit-Change-Id: I4010f988712eac4a6af8568ccd60062f9de62449
Gerrit-Change-Number: 26865
Gerrit-PatchSet: 1
Gerrit-Owner: James Tavares <jtavares(a)kvh.com>
Gerrit-MessageType: newchange
Attention is currently required from: fixeria.
laforge has posted comments on this change. ( https://gerrit.osmocom.org/c/libosmocore/+/27521 )
Change subject: clean-up pkg-config files: Make use of "Requires" as documented
......................................................................
Patch Set 1:
(1 comment)
File libosmogb.pc.in:
https://gerrit.osmocom.org/c/libosmocore/+/27521/comment/262bfb9a_2011a6c4
PS1, Line 9: Requires: libosmocore, libosmovty
> talloc is missing here.
libosmocore 'requires' talloc, so no need to specify it here again. pkg-config does this recursively.
--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/27521
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: I2ab1fe8e4bbfc120b471d6c9f2312a89dbc7d42b
Gerrit-Change-Number: 27521
Gerrit-PatchSet: 1
Gerrit-Owner: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
Gerrit-CC: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Attention: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Comment-Date: Thu, 24 Mar 2022 14:56:56 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-MessageType: comment
Attention is currently required from: neels.
laforge has posted comments on this change. ( https://gerrit.osmocom.org/c/osmo-upf/+/27217 )
Change subject: libosmo-gtlv: add generic TLV de- and encoder
......................................................................
Patch Set 4: Code-Review+1
(1 comment)
Patchset:
PS4:
I would put it straight into the libosmocore repo, avoiding the need to change stuff later on, but it's up to you.
--
To view, visit https://gerrit.osmocom.org/c/osmo-upf/+/27217
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-upf
Gerrit-Branch: master
Gerrit-Change-Id: Ib0fd00d9f288ffe13b7e67701f3e47073587404a
Gerrit-Change-Number: 27217
Gerrit-PatchSet: 4
Gerrit-Owner: neels <nhofmeyr(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-CC: pespin <pespin(a)sysmocom.de>
Gerrit-Attention: neels <nhofmeyr(a)sysmocom.de>
Gerrit-Comment-Date: Thu, 24 Mar 2022 14:51:22 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: Yes
Gerrit-MessageType: comment