blob: 43279f8a87d4ef123006074660a4f5b6e95991ad [file] [log] [blame]
Harald Welte9d3e3822015-11-09 00:50:54 +01001#pragma once
2
3#include <stdint.h>
4
5struct card_handle;
6
7enum card_io {
8 CARD_IO_VCC,
9 CARD_IO_RST,
10 CARD_IO_CLK,
11};
12
Harald Welte8e7fca32017-05-07 16:14:33 +020013struct card_handle *card_emu_init(uint8_t slot_num, uint8_t tc_chan, uint8_t uart_chan,
14 uint8_t in_ep, uint8_t irq_ep);
Harald Welte9d3e3822015-11-09 00:50:54 +010015
16/* process a single byte received from the reader */
17void card_emu_process_rx_byte(struct card_handle *ch, uint8_t byte);
18
Harald Welte855ba9e2016-02-24 21:00:46 +010019/* transmit a single byte to the reader */
20int card_emu_tx_byte(struct card_handle *ch);
Harald Welte9d3e3822015-11-09 00:50:54 +010021
22/* hardware driver informs us that a card I/O signal has changed */
23void card_emu_io_statechg(struct card_handle *ch, enum card_io io, int active);
24
25/* User sets a new ATR to be returned during next card reset */
26int card_emu_set_atr(struct card_handle *ch, const uint8_t *atr, uint8_t len);
27
Harald Welte54cb3d02016-02-29 14:12:40 +010028struct llist_head *card_emu_get_uart_tx_queue(struct card_handle *ch);
Harald Welteacae4122016-03-02 10:27:58 +010029void card_emu_have_new_uart_tx(struct card_handle *ch);
Harald Welteff160652016-03-19 21:59:06 +010030void card_emu_report_status(struct card_handle *ch);
Harald Welte9d3e3822015-11-09 00:50:54 +010031
32#define ENABLE_TX 0x01
33#define ENABLE_RX 0x02
34
35int card_emu_uart_update_fidi(uint8_t uart_chan, unsigned int fidi);
36int card_emu_uart_tx(uint8_t uart_chan, uint8_t byte);
37void card_emu_uart_enable(uint8_t uart_chan, uint8_t rxtx);
Harald Weltec58bba02016-03-20 14:57:53 +010038void card_emu_uart_wait_tx_idle(uint8_t uart_chan);