mirror of
https://gitea.osmocom.org/sim-card/simtrace2.git
synced 2026-03-16 21:28:33 +03:00
implement CEMU_USB_MSGT_DT_GET_STATUS
card_emu can now report its current satus upon request.
This commit is contained in:
@@ -822,6 +822,36 @@ void card_emu_have_new_uart_tx(struct card_handle *ch)
|
||||
}
|
||||
}
|
||||
|
||||
void card_emu_report_status(struct card_handle *ch)
|
||||
{
|
||||
struct req_ctx *rctx;
|
||||
struct cardemu_usb_msg_status *sts;
|
||||
|
||||
rctx = req_ctx_find_get(0, RCTX_S_FREE, RCTX_S_UART_RX_BUSY);
|
||||
if (!rctx)
|
||||
return;
|
||||
|
||||
rctx->tot_len = sizeof(*sts);
|
||||
sts = (struct cardemu_usb_msg_status *)rctx->data;
|
||||
sts->hdr.msg_type = CEMU_USB_MSGT_DO_STATUS;
|
||||
sts->hdr.msg_len = sizeof(*sts);
|
||||
sts->flags = 0;
|
||||
if (ch->vcc_active)
|
||||
sts->flags |= CEMU_STATUS_F_VCC_PRESENT;
|
||||
if (ch->clocked)
|
||||
sts->flags |= CEMU_STATUS_F_CLK_ACTIVE;
|
||||
if (ch->in_reset)
|
||||
sts->flags |= CEMU_STATUS_F_RESET_ACTIVE;
|
||||
/* FIXME: voltage + card insert */
|
||||
sts->fi = ch->fi;
|
||||
sts->di = ch->di;
|
||||
sts->wi = ch->wi;
|
||||
sts->waiting_time = ch->waiting_time;
|
||||
|
||||
llist_add_tail(&rctx->list, &ch->usb_tx_queue);
|
||||
req_ctx_set_state(rctx, RCTX_S_USB_TX_PENDING);
|
||||
}
|
||||
|
||||
/* hardware driver informs us that a card I/O signal has changed */
|
||||
void card_emu_io_statechg(struct card_handle *ch, enum card_io io, int active)
|
||||
{
|
||||
|
||||
@@ -27,6 +27,7 @@ int card_emu_set_atr(struct card_handle *ch, const uint8_t *atr, uint8_t len);
|
||||
struct llist_head *card_emu_get_uart_tx_queue(struct card_handle *ch);
|
||||
struct llist_head *card_emu_get_usb_tx_queue(struct card_handle *ch);
|
||||
void card_emu_have_new_uart_tx(struct card_handle *ch);
|
||||
void card_emu_report_status(struct card_handle *ch);
|
||||
|
||||
#define ENABLE_TX 0x01
|
||||
#define ENABLE_RX 0x02
|
||||
|
||||
@@ -92,6 +92,7 @@ struct cardemu_usb_msg_rx_data {
|
||||
#define CEMU_STATUS_F_CLK_ACTIVE 0x00000002
|
||||
#define CEMU_STATUS_F_RCEMU_ACTIVE 0x00000004
|
||||
#define CEMU_STATUS_F_CARD_INSERT 0x00000008
|
||||
#define CEMU_STATUS_F_RESET_ACTIVE 0x00000010
|
||||
|
||||
/* CEMU_USB_MSGT_DO_STATUS */
|
||||
struct cardemu_usb_msg_status {
|
||||
|
||||
@@ -316,8 +316,10 @@ static void dispatch_usb_command(struct req_ctx *rctx, struct cardem_inst *ci)
|
||||
PIO_Clear(&ci->pin_insert);
|
||||
req_ctx_put(rctx);
|
||||
break;
|
||||
case CEMU_USB_MSGT_DT_GET_STATS:
|
||||
case CEMU_USB_MSGT_DT_GET_STATUS:
|
||||
card_emu_report_status(ci->ch);
|
||||
break;
|
||||
case CEMU_USB_MSGT_DT_GET_STATS:
|
||||
default:
|
||||
/* FIXME */
|
||||
req_ctx_put(rctx);
|
||||
|
||||
Reference in New Issue
Block a user