blob: 2a54d76f001d4f82126366b6cbcd11f386371438 [file] [log] [blame]
Christina Quastc0aa7692015-02-25 14:02:01 +01001#ifndef SIMTRACE_H
2#define SIMTRACE_H
Christina Quast32906bb2015-02-24 11:35:19 +01003
Christina Quast4db82e02015-04-11 18:14:41 +02004#include "ringbuffer.h"
Harald Welte16055642016-03-03 11:02:45 +01005#include "board.h"
Christina Quast4db82e02015-04-11 18:14:41 +02006
Christina Quast4ba4d222015-03-02 16:14:09 +01007/* Endpoint numbers */
8#define DATAOUT 1
9#define DATAIN 2
10#define INT 3
11
Christina Quast235409a2015-06-24 16:05:09 +020012#define BUFLEN 512
Christina Quast71234252015-04-03 11:35:59 +020013
Christina Quastb65b8812015-04-04 10:51:37 +020014#define PHONE_DATAOUT 4
15#define PHONE_DATAIN 5
16#define PHONE_INT 6
Christina Quast71234252015-04-03 11:35:59 +020017
Harald Welte57b3a252016-03-02 15:20:27 +010018#define CARDEM_USIM2_DATAOUT DATAOUT
19#define CARDEM_USIM2_DATAIN DATAIN
20#define CARDEM_USIM2_INT INT
21
Christina Quastec9c09e2015-04-16 10:45:39 +020022#define CLK_MASTER true
23#define CLK_SLAVE false
24
25/* ===================================================*/
26/* Taken from iso7816_4.c */
27/* ===================================================*/
28/** Flip flop for send and receive char */
29#define USART_SEND 0
30#define USART_RCV 1
31
Christina Quast3eab56e2015-04-10 15:38:49 +020032
Christina Quast4db82e02015-04-11 18:14:41 +020033extern volatile ringbuf sim_rcv_buf;
Christina Quast95d66162015-04-09 22:38:47 +020034
35extern volatile bool rcvdChar;
36extern volatile uint32_t char_stat;
Christina Quast4ba4d222015-03-02 16:14:09 +010037
Christina Quaste4cbfe62015-04-20 13:07:28 +020038extern const Pin pinPhoneRST;
39
Christina Quast10b2e5a2015-02-25 18:40:15 +010040enum confNum {
Harald Welte16055642016-03-03 11:02:45 +010041 CFG_NUM_NONE = 0,
42#ifdef HAVE_SNIFFER
43 CFG_NUM_SNIFF,
44#endif
45#ifdef HAVE_CCID
46 CFG_NUM_CCID,
47#endif
48#ifdef HAVE_CARDEM
49 CFG_NUM_PHONE,
50#endif
51#ifdef HAVE_MITM
52 CFG_NUM_MITM,
53#endif
54 NUM_CONF
Christina Quast10b2e5a2015-02-25 18:40:15 +010055};
56
Christina Quastdb7b1ab2015-03-03 12:34:36 +010057/// CCIDDriverConfiguration Descriptors
58/// List of descriptors that make up the configuration descriptors of a
59/// device using the CCID driver.
60typedef struct {
61
62 /// Configuration descriptor
63 USBConfigurationDescriptor configuration;
64 /// Interface descriptor
65 USBInterfaceDescriptor interface;
66 /// CCID descriptor
67 CCIDDescriptor ccid;
68 /// Bulk OUT endpoint descriptor
69 USBEndpointDescriptor bulkOut;
70 /// Bulk IN endpoint descriptor
71 USBEndpointDescriptor bulkIn;
72 /// Interrupt OUT endpoint descriptor
73 USBEndpointDescriptor interruptIn;
74} __attribute__ ((packed)) CCIDDriverConfigurationDescriptors;
75
Christina Quast4b1e98d2015-04-06 23:28:02 +020076extern const USBConfigurationDescriptor *configurationDescriptorsArr[];
77
Christina Quast2b8a18b2015-04-12 09:31:36 +020078int check_data_from_phone();
Christina Quastcb646bc2015-05-03 14:21:26 +020079void update_fidi(uint8_t fidi);
Christina Quastbe235272015-05-02 17:56:32 +020080
Christina Quaste4cbfe62015-04-20 13:07:28 +020081void ISR_PhoneRST( const Pin *pPin);
Christina Quastdb7b1ab2015-03-03 12:34:36 +010082
Christina Quast95d66162015-04-09 22:38:47 +020083/* Configure functions */
84extern void Sniffer_configure( void );
85extern void CCID_configure( void );
Harald Welte2a6d3af2016-02-28 19:29:14 +010086extern void mode_cardemu_configure(void);
Christina Quast95d66162015-04-09 22:38:47 +020087extern void MITM_configure( void );
88
Christina Quast1edf3502015-02-27 13:33:52 +010089/* Init functions */
Christina Quast95d66162015-04-09 22:38:47 +020090extern void Sniffer_init( void );
Christina Quastdb7b1ab2015-03-03 12:34:36 +010091extern void CCID_init( void );
Harald Welte2a6d3af2016-02-28 19:29:14 +010092extern void mode_cardemu_init(void);
Christina Quast1edf3502015-02-27 13:33:52 +010093extern void MITM_init( void );
Christina Quast27c643d2015-02-24 19:09:08 +010094
Christina Quastc0aa7692015-02-25 14:02:01 +010095extern void SIMtrace_USB_Initialize( void );
Christina Quastc0aa7692015-02-25 14:02:01 +010096
Christina Quast95d66162015-04-09 22:38:47 +020097/* Exit functions */
98extern void Sniffer_exit( void );
99extern void CCID_exit( void );
Harald Welte2a6d3af2016-02-28 19:29:14 +0100100extern void mode_cardemu_exit(void);
Christina Quast95d66162015-04-09 22:38:47 +0200101extern void MITM_exit( void );
102
Christina Quast1edf3502015-02-27 13:33:52 +0100103/* Run functions */
104extern void Sniffer_run( void );
Christina Quastdb7b1ab2015-03-03 12:34:36 +0100105extern void CCID_run( void );
Harald Welte2a6d3af2016-02-28 19:29:14 +0100106extern void mode_cardemu_run(void);
Christina Quast1edf3502015-02-27 13:33:52 +0100107extern void MITM_run( void );
108
Harald Welte3bafe432016-03-20 16:43:12 +0100109extern void mode_cardemu_usart0_irq(void);
110extern void mode_cardemu_usart1_irq(void);
111
Christina Quast531d10b2015-03-19 19:27:04 +0100112/* Timer helper function */
113void Timer_Init( void );
114void TC0_Counter_Reset( void );
115
Harald Welte54cb3d02016-02-29 14:12:40 +0100116struct llist_head;
117int usb_refill_to_host(struct llist_head *queue, uint32_t ep);
118int usb_refill_from_host(struct llist_head *queue, int ep);
Harald Welte2a6d3af2016-02-28 19:29:14 +0100119
Christina Quast1edf3502015-02-27 13:33:52 +0100120#endif /* SIMTRACE_H */