mirror of
https://gitea.osmocom.org/sim-card/simtrace2.git
synced 2026-03-27 10:48:35 +03:00
Split init into configure and init
* Implemented configure, init, exit functions:
When a configuration is changed, interrupts for reset pins
should be disabled
* Moved variables shared between code files to simtrace.h
This commit is contained in:
@@ -112,8 +112,6 @@ static void ConfigureCardDetection( void )
|
|||||||
printf("+++++ Configure PIOs\n\r");
|
printf("+++++ Configure PIOs\n\r");
|
||||||
PIO_Configure( &pinSmartCard, 1 ) ;
|
PIO_Configure( &pinSmartCard, 1 ) ;
|
||||||
NVIC_EnableIRQ( PIOA_IRQn );
|
NVIC_EnableIRQ( PIOA_IRQn );
|
||||||
// FIXME: Do we need to set priority?: NVIC_SetPriority( PIOA_IRQn, 10);
|
|
||||||
PIO_ConfigureIt( &pinSmartCard, ISR_PioSmartCard ) ;
|
|
||||||
PIO_EnableIt( &pinSmartCard ) ;
|
PIO_EnableIt( &pinSmartCard ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -133,21 +131,27 @@ static void ConfigureCardDetection( void )
|
|||||||
/*-----------------------------------------------------------------------------
|
/*-----------------------------------------------------------------------------
|
||||||
* Initialization and run
|
* Initialization and run
|
||||||
*-----------------------------------------------------------------------------*/
|
*-----------------------------------------------------------------------------*/
|
||||||
static const CCIDDriverConfigurationDescriptors *configDescCCID;
|
|
||||||
extern CCIDDriverConfigurationDescriptors configurationDescriptorCCID;
|
extern CCIDDriverConfigurationDescriptors configurationDescriptorCCID;
|
||||||
|
|
||||||
|
void CCID_configure ( void ) {
|
||||||
|
CCIDDriver_Initialize();
|
||||||
|
// FIXME: Do we need to set priority?: NVIC_SetPriority( PIOA_IRQn, 10);
|
||||||
|
PIO_ConfigureIt( &pinSmartCard, ISR_PioSmartCard ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CCID_exit ( void ) {
|
||||||
|
PIO_DisableIt( &pinSmartCard ) ;
|
||||||
|
}
|
||||||
|
|
||||||
void CCID_init( void )
|
void CCID_init( void )
|
||||||
{
|
{
|
||||||
uint8_t pAtr[MAX_ATR_SIZE];
|
uint8_t pAtr[MAX_ATR_SIZE];
|
||||||
uint8_t ucSize ;
|
uint8_t ucSize ;
|
||||||
|
|
||||||
configDescCCID = &configurationDescriptorCCID;
|
|
||||||
|
|
||||||
// FIXME: do we want to print ATR?
|
// FIXME: do we want to print ATR?
|
||||||
/* Initialize Atr buffer */
|
/* Initialize Atr buffer */
|
||||||
memset( pAtr, 0, sizeof( pAtr ) ) ;
|
memset( pAtr, 0, sizeof( pAtr ) ) ;
|
||||||
|
|
||||||
/* Configure IT on Smart Card */
|
|
||||||
ConfigureCardDetection() ;
|
ConfigureCardDetection() ;
|
||||||
|
|
||||||
// Configure ISO7816 driver
|
// Configure ISO7816 driver
|
||||||
@@ -160,8 +164,6 @@ void CCID_init( void )
|
|||||||
|
|
||||||
ISO7816_Init( &pinIso7816RstMC ) ;
|
ISO7816_Init( &pinIso7816RstMC ) ;
|
||||||
|
|
||||||
CCIDDriver_Initialize();
|
|
||||||
|
|
||||||
/* Read ATR */
|
/* Read ATR */
|
||||||
ISO7816_warm_reset() ;
|
ISO7816_warm_reset() ;
|
||||||
|
|
||||||
|
|||||||
@@ -9,34 +9,33 @@
|
|||||||
* Internal variables
|
* Internal variables
|
||||||
*------------------------------------------------------------------------------*/
|
*------------------------------------------------------------------------------*/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
void (* configure) ( void );
|
||||||
void (* init) ( void );
|
void (* init) ( void );
|
||||||
|
void (* exit) ( void );
|
||||||
void (* run) ( void );
|
void (* run) ( void );
|
||||||
} conf_func;
|
} conf_func;
|
||||||
|
|
||||||
conf_func config_func_ptrs[] = {
|
conf_func config_func_ptrs[] = {
|
||||||
{Sniffer_Init, Sniffer_run}, /* CFG_NUM_SNIFF */
|
{Sniffer_configure, Sniffer_init, Sniffer_exit, Sniffer_run}, /* CFG_NUM_SNIFF */
|
||||||
{CCID_init, CCID_run}, /* CFG_NUM_CCID */
|
{CCID_configure, CCID_init, CCID_exit, CCID_run}, /* CFG_NUM_CCID */
|
||||||
{Phone_Master_Init, Phone_run}, /* CFG_NUM_PHONE */
|
{Phone_configure, Phone_init, Phone_exit, Phone_run}, /* CFG_NUM_PHONE */
|
||||||
{MITM_init, MITM_run}, /* CFG_NUM_MITM */
|
{MITM_configure, MITM_init, MITM_exit, MITM_run}, /* CFG_NUM_MITM */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------
|
/*------------------------------------------------------------------------------
|
||||||
* Internal variables
|
* Internal variables
|
||||||
*------------------------------------------------------------------------------*/
|
*------------------------------------------------------------------------------*/
|
||||||
uint8_t simtrace_config = CFG_NUM_SNIFF;
|
volatile enum confNum simtrace_config = CFG_NUM_SNIFF;
|
||||||
uint8_t conf_changed = 1;
|
|
||||||
|
|
||||||
uint8_t rcvdChar = 0;
|
|
||||||
uint32_t char_stat = 0;
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------
|
/*------------------------------------------------------------------------------
|
||||||
* Main
|
* Main
|
||||||
*------------------------------------------------------------------------------*/
|
*------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
extern int main( void )
|
extern int main( void )
|
||||||
{
|
{
|
||||||
uint8_t isUsbConnected = 0;
|
uint8_t isUsbConnected = 0;
|
||||||
|
enum confNum last_simtrace_config = simtrace_config;
|
||||||
|
|
||||||
LED_Configure(LED_NUM_RED);
|
LED_Configure(LED_NUM_RED);
|
||||||
LED_Configure(LED_NUM_GREEN);
|
LED_Configure(LED_NUM_GREEN);
|
||||||
@@ -51,6 +50,14 @@ extern int main( void )
|
|||||||
|
|
||||||
printf("%s", "USB init\n\r");
|
printf("%s", "USB init\n\r");
|
||||||
|
|
||||||
|
for (unsigned int i = 0; i < sizeof(config_func_ptrs)/sizeof(config_func_ptrs[0]); ++i)
|
||||||
|
{
|
||||||
|
config_func_ptrs[i].configure();
|
||||||
|
}
|
||||||
|
|
||||||
|
config_func_ptrs[simtrace_config-1].init();
|
||||||
|
last_simtrace_config = simtrace_config;
|
||||||
|
|
||||||
// FIXME: why don't we get any interrupts with this line?:
|
// FIXME: why don't we get any interrupts with this line?:
|
||||||
while(USBD_GetState() < USBD_STATE_CONFIGURED);
|
while(USBD_GetState() < USBD_STATE_CONFIGURED);
|
||||||
|
|
||||||
@@ -72,15 +79,16 @@ extern int main( void )
|
|||||||
|
|
||||||
isUsbConnected = 1;
|
isUsbConnected = 1;
|
||||||
// TC_Start(TC0, 0);
|
// TC_Start(TC0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// for (int i=0; i <10000; i++);
|
// for (int i=0; i <10000; i++);
|
||||||
|
|
||||||
/* FIXME: Or should we move the while loop into every case, and break out
|
/* FIXME: Or should we move the while loop into every case, and break out
|
||||||
in case the config changes? */
|
in case the config changes? */
|
||||||
if (conf_changed) {
|
if (last_simtrace_config != simtrace_config) {
|
||||||
|
config_func_ptrs[last_simtrace_config-1].exit();
|
||||||
config_func_ptrs[simtrace_config-1].init();
|
config_func_ptrs[simtrace_config-1].init();
|
||||||
conf_changed = 0;
|
last_simtrace_config = simtrace_config;
|
||||||
} else {
|
} else {
|
||||||
config_func_ptrs[simtrace_config-1].run();
|
config_func_ptrs[simtrace_config-1].run();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,11 +38,16 @@
|
|||||||
|
|
||||||
static const Pin pins_bus[] = {PINS_BUS_DEFAULT};
|
static const Pin pins_bus[] = {PINS_BUS_DEFAULT};
|
||||||
|
|
||||||
|
void MITM_configure( void )
|
||||||
|
{
|
||||||
|
Phone_configure();
|
||||||
|
CCID_configure();
|
||||||
|
}
|
||||||
|
|
||||||
void MITM_init( void )
|
void MITM_init( void )
|
||||||
{
|
{
|
||||||
CCID_init();
|
CCID_init();
|
||||||
Phone_Master_Init();
|
Phone_init();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
/* Configure ISO7816 driver */
|
/* Configure ISO7816 driver */
|
||||||
@@ -62,9 +67,14 @@ void MITM_init( void )
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MITM_exit( void )
|
||||||
|
{
|
||||||
|
Phone_exit();
|
||||||
|
CCID_exit();
|
||||||
|
}
|
||||||
|
|
||||||
void MITM_run( void )
|
void MITM_run( void )
|
||||||
{
|
{
|
||||||
Phone_run();
|
Phone_run();
|
||||||
CCID_SmartCardRequest();
|
CCID_run();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -126,7 +126,6 @@ enum states{
|
|||||||
static uint8_t StateUsartGlobal = USART_RCV;
|
static uint8_t StateUsartGlobal = USART_RCV;
|
||||||
|
|
||||||
static enum states state;
|
static enum states state;
|
||||||
extern uint8_t rcvdChar;
|
|
||||||
|
|
||||||
extern volatile uint8_t timeout_occured;
|
extern volatile uint8_t timeout_occured;
|
||||||
|
|
||||||
@@ -146,21 +145,9 @@ static void ISR_PhoneRST( const Pin *pPin)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
state = RST_RCVD;
|
state = RST_RCVD;
|
||||||
|
|
||||||
// FIXME: What to do on reset?
|
|
||||||
// FIXME: It seems like the phone is constantly sending a lot of these RSTs
|
|
||||||
PIO_DisableIt( &pinPhoneRST ) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void Config_PhoneRST_IrqHandler()
|
/* Interrupt enabled after ATR is sent to phone */
|
||||||
{
|
PIO_DisableIt( &pinPhoneRST ) ;
|
||||||
PIO_Configure( &pinPhoneRST, 1);
|
|
||||||
// PIO_Configure( &pinPhoneClk, 1);
|
|
||||||
PIO_ConfigureIt( &pinPhoneRST, ISR_PhoneRST ) ;
|
|
||||||
// PIO_ConfigureIt( &pinPhoneClk, ISR_PhoneRST ) ;
|
|
||||||
PIO_EnableIt( &pinPhoneRST ) ;
|
|
||||||
// PIO_EnableIt( &pinPhoneClk ) ;
|
|
||||||
NVIC_EnableIRQ( PIOA_IRQn );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -252,13 +239,25 @@ uint32_t _ISO7816_SendChar( uint8_t CharToSend )
|
|||||||
return( status );
|
return( status );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Phone_Master_Init( void ) {
|
void Phone_configure( void ) {
|
||||||
|
PIO_ConfigureIt( &pinPhoneRST, ISR_PhoneRST ) ;
|
||||||
|
NVIC_EnableIRQ( PIOA_IRQn );
|
||||||
|
}
|
||||||
|
|
||||||
|
void Phone_exit( void ) {
|
||||||
|
PIO_DisableIt( &pinPhoneRST ) ;
|
||||||
|
USART_DisableIt( USART_PHONE, US_IER_RXRDY) ;
|
||||||
|
USART_SetTransmitterEnabled(USART_PHONE, 0);
|
||||||
|
USART_SetReceiverEnabled(USART_PHONE, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Phone_init( void ) {
|
||||||
PIO_Configure( pinsISO7816_PHONE, PIO_LISTSIZE( pinsISO7816_PHONE ) ) ;
|
PIO_Configure( pinsISO7816_PHONE, PIO_LISTSIZE( pinsISO7816_PHONE ) ) ;
|
||||||
PIO_Configure( pins_bus, PIO_LISTSIZE( pins_bus) ) ;
|
PIO_Configure( pins_bus, PIO_LISTSIZE( pins_bus) ) ;
|
||||||
|
|
||||||
Config_PhoneRST_IrqHandler();
|
PIO_Configure( &pinPhoneRST, 1);
|
||||||
|
|
||||||
|
PIO_EnableIt( &pinPhoneRST ) ;
|
||||||
_ISO7816_Init();
|
_ISO7816_Init();
|
||||||
|
|
||||||
USART_SetTransmitterEnabled(USART_PHONE, 1);
|
USART_SetTransmitterEnabled(USART_PHONE, 1);
|
||||||
@@ -272,20 +271,8 @@ void Phone_Master_Init( void ) {
|
|||||||
|
|
||||||
// FIXME: Or do I need to call VBUS_CONFIGURE() here instead, which will call USBD_Connect() later?
|
// FIXME: Or do I need to call VBUS_CONFIGURE() here instead, which will call USBD_Connect() later?
|
||||||
// USBD_Connect();
|
// USBD_Connect();
|
||||||
// FIXME: USB clock? USB PMC?
|
|
||||||
// NVIC_EnableIRQ( UDP_IRQn );
|
|
||||||
|
|
||||||
USART_EnableIt( USART_PHONE, US_IER_RXRDY) ;
|
USART_EnableIt( USART_PHONE, US_IER_RXRDY) ;
|
||||||
|
|
||||||
// FIXME: At some point USBD_IrqHandler() should get called and set USBD_STATE_CONFIGURED
|
|
||||||
/* while (USBD_GetState() < USBD_STATE_CONFIGURED) {
|
|
||||||
int i = 1;
|
|
||||||
if ((i%10000) == 0) {
|
|
||||||
TRACE_DEBUG("%d: USB State: %x\n\r", i, USBD_GetState());
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
Timer_Init();
|
Timer_Init();
|
||||||
}
|
}
|
||||||
@@ -330,7 +317,6 @@ void sendResponse( uint8_t *pArg, uint8_t status, uint32_t transferred, uint32_t
|
|||||||
state = WAIT_CMD_PHONE;
|
state = WAIT_CMD_PHONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern ring_buffer buf;
|
|
||||||
#define MAX_MSG_LEN 64
|
#define MAX_MSG_LEN 64
|
||||||
|
|
||||||
void wait_for_response(uint8_t pBuffer[]) {
|
void wait_for_response(uint8_t pBuffer[]) {
|
||||||
@@ -339,7 +325,7 @@ void wait_for_response(uint8_t pBuffer[]) {
|
|||||||
printf(" rr ");
|
printf(" rr ");
|
||||||
|
|
||||||
/* DATA_IN for host side is data_out for simtrace side */
|
/* DATA_IN for host side is data_out for simtrace side */
|
||||||
ret = USBD_Write( PHONE_DATAIN, buf.buf, BUFLEN, 0, 0 );
|
ret = USBD_Write( PHONE_DATAIN, (void *)buf.buf, BUFLEN, 0, 0 );
|
||||||
if (ret != USBD_STATUS_SUCCESS) {
|
if (ret != USBD_STATUS_SUCCESS) {
|
||||||
TRACE_ERROR("USB err status: %d (%s)", __FUNCTION__, ret);
|
TRACE_ERROR("USB err status: %d (%s)", __FUNCTION__, ret);
|
||||||
return;
|
return;
|
||||||
@@ -350,7 +336,7 @@ void wait_for_response(uint8_t pBuffer[]) {
|
|||||||
} else if (timeout_occured && buf.idx != 0) {
|
} else if (timeout_occured && buf.idx != 0) {
|
||||||
printf(" to ");
|
printf(" to ");
|
||||||
|
|
||||||
ret = USBD_Write( PHONE_DATAIN, buf.buf, buf.idx, 0, 0 );
|
ret = USBD_Write( PHONE_DATAIN, (void *) buf.buf, buf.idx, 0, 0 );
|
||||||
if (ret != USBD_STATUS_SUCCESS) {
|
if (ret != USBD_STATUS_SUCCESS) {
|
||||||
TRACE_ERROR("USB err status: %d (%s)", __FUNCTION__, ret);
|
TRACE_ERROR("USB err status: %d (%s)", __FUNCTION__, ret);
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -18,6 +18,11 @@ typedef struct ring_buffer
|
|||||||
uint8_t idx; // number of items in the buffer
|
uint8_t idx; // number of items in the buffer
|
||||||
} ring_buffer;
|
} ring_buffer;
|
||||||
|
|
||||||
|
extern volatile ring_buffer buf;
|
||||||
|
|
||||||
|
extern volatile bool rcvdChar;
|
||||||
|
extern volatile uint32_t char_stat;
|
||||||
|
extern volatile enum confNum simtrace_config;
|
||||||
|
|
||||||
enum confNum {
|
enum confNum {
|
||||||
CFG_NUM_SNIFF = 1, CFG_NUM_CCID, CFG_NUM_PHONE, CFG_NUM_MITM, NUM_CONF
|
CFG_NUM_SNIFF = 1, CFG_NUM_CCID, CFG_NUM_PHONE, CFG_NUM_MITM, NUM_CONF
|
||||||
@@ -50,15 +55,27 @@ extern const USBConfigurationDescriptor *configurationDescriptorsArr[];
|
|||||||
extern uint32_t _ISO7816_GetChar( uint8_t *pCharToReceive );
|
extern uint32_t _ISO7816_GetChar( uint8_t *pCharToReceive );
|
||||||
extern uint32_t _ISO7816_SendChar( uint8_t CharToSend );
|
extern uint32_t _ISO7816_SendChar( uint8_t CharToSend );
|
||||||
|
|
||||||
|
/* Configure functions */
|
||||||
|
extern void Sniffer_configure( void );
|
||||||
|
extern void CCID_configure( void );
|
||||||
|
extern void Phone_configure( void );
|
||||||
|
extern void MITM_configure( void );
|
||||||
|
|
||||||
/* Init functions */
|
/* Init functions */
|
||||||
extern void Phone_Master_Init( void );
|
extern void Sniffer_init( void );
|
||||||
extern void CCID_init( void );
|
extern void CCID_init( void );
|
||||||
extern void Sniffer_Init( void );
|
extern void Phone_init( void );
|
||||||
extern void MITM_init( void );
|
extern void MITM_init( void );
|
||||||
|
|
||||||
extern void SIMtrace_USB_Initialize( void );
|
extern void SIMtrace_USB_Initialize( void );
|
||||||
extern void _ISO7816_Init( void );
|
extern void _ISO7816_Init( void );
|
||||||
|
|
||||||
|
/* Exit functions */
|
||||||
|
extern void Sniffer_exit( void );
|
||||||
|
extern void CCID_exit( void );
|
||||||
|
extern void Phone_exit( void );
|
||||||
|
extern void MITM_exit( void );
|
||||||
|
|
||||||
/* Run functions */
|
/* Run functions */
|
||||||
extern void Sniffer_run( void );
|
extern void Sniffer_run( void );
|
||||||
extern void CCID_run( void );
|
extern void CCID_run( void );
|
||||||
|
|||||||
@@ -35,8 +35,8 @@
|
|||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
extern uint8_t rcvdChar;
|
volatile uint32_t char_stat;
|
||||||
extern uint32_t char_stat;
|
volatile bool rcvdChar = 0;
|
||||||
|
|
||||||
//#define BUFLEN 14
|
//#define BUFLEN 14
|
||||||
// FIXME: Remove:
|
// FIXME: Remove:
|
||||||
@@ -49,7 +49,7 @@ extern uint32_t char_stat;
|
|||||||
uint8_t idx; // number of items in the buffer
|
uint8_t idx; // number of items in the buffer
|
||||||
} ring_buffer;
|
} ring_buffer;
|
||||||
*/
|
*/
|
||||||
ring_buffer buf = { {0}, 0 };
|
volatile ring_buffer buf = { {0}, 0 };
|
||||||
|
|
||||||
void buf_push(uint8_t item)
|
void buf_push(uint8_t item)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -60,20 +60,23 @@ static const Pin pPwr[] = {
|
|||||||
{VCC_FWD, PIOA, ID_PIOA, PIO_OUTPUT_1, PIO_DEFAULT}
|
{VCC_FWD, PIOA, ID_PIOA, PIO_OUTPUT_1, PIO_DEFAULT}
|
||||||
};
|
};
|
||||||
|
|
||||||
extern uint32_t char_stat;
|
|
||||||
extern uint8_t rcvdChar;
|
|
||||||
extern ring_buffer buf;
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------
|
/*-----------------------------------------------------------------------------
|
||||||
* Initialization routine
|
* Initialization routine
|
||||||
*-----------------------------------------------------------------------------*/
|
*-----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
void Sniffer_Init( void )
|
void Sniffer_configure( void ){
|
||||||
|
}
|
||||||
|
|
||||||
|
void Sniffer_exit( void ){
|
||||||
|
USART_SetReceiverEnabled(USART_PHONE, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Sniffer_init( void )
|
||||||
{
|
{
|
||||||
/* Configure ISO7816 driver */
|
/* Configure ISO7816 driver */
|
||||||
PIO_Configure( pinsISO7816_sniff, PIO_LISTSIZE( pinsISO7816_sniff ) ) ;
|
PIO_Configure( pinsISO7816_sniff, PIO_LISTSIZE( pinsISO7816_sniff ) ) ;
|
||||||
PIO_Configure( pins_bus, PIO_LISTSIZE( pins_bus) ) ;
|
PIO_Configure( pins_bus, PIO_LISTSIZE( pins_bus) ) ;
|
||||||
|
|
||||||
PIO_Configure(pPwr, PIO_LISTSIZE( pPwr ));
|
PIO_Configure(pPwr, PIO_LISTSIZE( pPwr ));
|
||||||
|
|
||||||
_ISO7816_Init();
|
_ISO7816_Init();
|
||||||
@@ -87,7 +90,7 @@ void Sniffer_run( void )
|
|||||||
/* DATA_IN for host side is data_out for simtrace side */
|
/* DATA_IN for host side is data_out for simtrace side */
|
||||||
/* FIXME: Performancewise sending a USB packet for every byte is a disaster */
|
/* FIXME: Performancewise sending a USB packet for every byte is a disaster */
|
||||||
PR("----- %x %x %x ..\n\r", buf.buf[0], buf.buf[1],buf.buf[2] );
|
PR("----- %x %x %x ..\n\r", buf.buf[0], buf.buf[1],buf.buf[2] );
|
||||||
USBD_Write( DATAIN, buf.buf, BUFLEN, 0, 0 );
|
USBD_Write( DATAIN, (void *) buf.buf, BUFLEN, 0, 0 );
|
||||||
PR("----- Rcvd char\n\r");
|
PR("----- Rcvd char\n\r");
|
||||||
rcvdChar = 0;
|
rcvdChar = 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -602,13 +602,10 @@ const USBDDriverDescriptors driverDescriptors = {
|
|||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
* Callbacks
|
* Callbacks
|
||||||
*----------------------------------------------------------------------------*/
|
*----------------------------------------------------------------------------*/
|
||||||
extern uint8_t conf_changed;
|
|
||||||
extern uint8_t simtrace_config;
|
|
||||||
|
|
||||||
void USBDDriverCallbacks_ConfigurationChanged(uint8_t cfgnum)
|
void USBDDriverCallbacks_ConfigurationChanged(uint8_t cfgnum)
|
||||||
{
|
{
|
||||||
TRACE_INFO_WP("cfgChanged%d ", cfgnum);
|
TRACE_INFO_WP("cfgChanged%d ", cfgnum);
|
||||||
conf_changed =1;
|
|
||||||
simtrace_config = cfgnum;
|
simtrace_config = cfgnum;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user