mirror of
https://github.com/polhenarejos/pico-keys-sdk
synced 2026-06-10 11:59:05 +02:00
Fix when multiple shutdowns are sent
Thread queues are empty on every start to avoid ancient messages from previous sessions. Signed-off-by: Pol Henarejos <pol.henarejos@cttc.es>
This commit is contained in:
12
src/apdu.c
12
src/apdu.c
@@ -126,21 +126,16 @@ uint16_t set_res_sw(uint8_t sw1, uint8_t sw2) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void apdu_thread() {
|
void apdu_thread() {
|
||||||
|
|
||||||
card_init_core1();
|
card_init_core1();
|
||||||
while (1) {
|
while (1) {
|
||||||
uint32_t m;
|
uint32_t m = 0;
|
||||||
queue_remove_blocking(&usb_to_card_q, &m);
|
queue_remove_blocking(&usb_to_card_q, &m);
|
||||||
|
|
||||||
if (m == EV_VERIFY_CMD_AVAILABLE || m == EV_MODIFY_CMD_AVAILABLE)
|
if (m == EV_VERIFY_CMD_AVAILABLE || m == EV_MODIFY_CMD_AVAILABLE){
|
||||||
{
|
|
||||||
set_res_sw (0x6f, 0x00);
|
set_res_sw (0x6f, 0x00);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
else if (m == EV_EXIT) {
|
else if (m == EV_EXIT) {
|
||||||
if (current_app && current_app->unload) {
|
|
||||||
current_app->unload();
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -154,9 +149,10 @@ void apdu_thread() {
|
|||||||
queue_add_blocking(&card_to_usb_q, &flag);
|
queue_add_blocking(&card_to_usb_q, &flag);
|
||||||
}
|
}
|
||||||
//printf("EXIT !!!!!!\r\n");
|
//printf("EXIT !!!!!!\r\n");
|
||||||
if (current_app && current_app->unload)
|
if (current_app && current_app->unload) {
|
||||||
current_app->unload();
|
current_app->unload();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void apdu_finish() {
|
void apdu_finish() {
|
||||||
apdu.rdata[apdu.rlen] = apdu.sw >> 8;
|
apdu.rdata[apdu.rlen] = apdu.sw >> 8;
|
||||||
|
|||||||
@@ -154,8 +154,7 @@ int driver_process_usb_nopacket() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int driver_process_usb_packet(uint16_t rx_read) {
|
int driver_process_usb_packet(uint16_t rx_read) {
|
||||||
if (rx_read >= 10)
|
if (rx_read >= 10) {
|
||||||
{
|
|
||||||
//printf("%d %d %x\r\n",tccid->dwLength,rx_read-10,tccid->bMessageType);
|
//printf("%d %d %x\r\n",tccid->dwLength,rx_read-10,tccid->bMessageType);
|
||||||
if (ccid_header->dwLength <= rx_read-10) {
|
if (ccid_header->dwLength <= rx_read-10) {
|
||||||
size_t apdu_sent = 0;
|
size_t apdu_sent = 0;
|
||||||
@@ -185,6 +184,8 @@ int driver_process_usb_packet(uint16_t rx_read) {
|
|||||||
ccid_write(size_atr);
|
ccid_write(size_atr);
|
||||||
}
|
}
|
||||||
else if (ccid_header->bMessageType == 0x63) {
|
else if (ccid_header->bMessageType == 0x63) {
|
||||||
|
if (ccid_status == 0)
|
||||||
|
card_exit(0);
|
||||||
ccid_status = 1;
|
ccid_status = 1;
|
||||||
ccid_response->bMessageType = CCID_SLOT_STATUS_RET;
|
ccid_response->bMessageType = CCID_SLOT_STATUS_RET;
|
||||||
ccid_response->dwLength = 0;
|
ccid_response->dwLength = 0;
|
||||||
@@ -192,7 +193,6 @@ int driver_process_usb_packet(uint16_t rx_read) {
|
|||||||
ccid_response->bSeq = ccid_header->bSeq;
|
ccid_response->bSeq = ccid_header->bSeq;
|
||||||
ccid_response->abRFU0 = ccid_status;
|
ccid_response->abRFU0 = ccid_status;
|
||||||
ccid_response->abRFU1 = 0;
|
ccid_response->abRFU1 = 0;
|
||||||
card_exit();
|
|
||||||
ccid_write(0);
|
ccid_write(0);
|
||||||
}
|
}
|
||||||
else if (ccid_header->bMessageType == 0x6F) {
|
else if (ccid_header->bMessageType == 0x6F) {
|
||||||
|
|||||||
Reference in New Issue
Block a user