mirror of
https://github.com/polhenarejos/pico-keys-sdk
synced 2026-06-18 20:35:57 +02:00
TinyUSB uses interface argument for that driver. Therefore, for vendord driver, interface starts at 0, even the HID interface is used.
Signed-off-by: Pol Henarejos <pol.henarejos@cttc.es>
This commit is contained in:
@@ -112,15 +112,23 @@ int driver_init_ccid(uint8_t itf) {
|
|||||||
|
|
||||||
void tud_vendor_rx_cb(uint8_t itf) {
|
void tud_vendor_rx_cb(uint8_t itf) {
|
||||||
uint32_t len = tud_vendor_n_available(itf);
|
uint32_t len = tud_vendor_n_available(itf);
|
||||||
|
#ifdef USB_ITF_HID
|
||||||
|
itf += 2;
|
||||||
|
#endif
|
||||||
usb_rx(itf, NULL, len);
|
usb_rx(itf, NULL, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
void tud_vendor_tx_cb(uint8_t itf, uint32_t sent_bytes) {
|
void tud_vendor_tx_cb(uint8_t itf, uint32_t sent_bytes) {
|
||||||
//printf("written %ld\n", sent_bytes);
|
#ifdef USB_ITF_HID
|
||||||
|
itf += 2;
|
||||||
|
#endif
|
||||||
usb_write_flush(itf);
|
usb_write_flush(itf);
|
||||||
}
|
}
|
||||||
|
|
||||||
int driver_write_ccid(uint8_t itf, const uint8_t *buffer, uint16_t buffer_size) {
|
int driver_write_ccid(uint8_t itf, const uint8_t *buffer, uint16_t buffer_size) {
|
||||||
|
#ifdef USB_ITF_HID
|
||||||
|
itf -= 2;
|
||||||
|
#endif
|
||||||
int r = tud_vendor_n_write(itf, buffer, buffer_size);
|
int r = tud_vendor_n_write(itf, buffer, buffer_size);
|
||||||
if (r > 0) {
|
if (r > 0) {
|
||||||
return MAX(tud_vendor_n_flush(itf), r);
|
return MAX(tud_vendor_n_flush(itf), r);
|
||||||
@@ -129,6 +137,9 @@ int driver_write_ccid(uint8_t itf, const uint8_t *buffer, uint16_t buffer_size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint16_t driver_read_ccid(uint8_t itf, uint8_t *buffer, uint16_t buffer_size) {
|
uint16_t driver_read_ccid(uint8_t itf, uint8_t *buffer, uint16_t buffer_size) {
|
||||||
|
#ifdef USB_ITF_HID
|
||||||
|
itf -= 2;
|
||||||
|
#endif
|
||||||
return tud_vendor_n_read(itf, buffer, buffer_size);
|
return tud_vendor_n_read(itf, buffer, buffer_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -165,14 +176,14 @@ int driver_process_usb_packet_ccid(uint8_t itf, uint16_t rx_read) {
|
|||||||
//printf("1 %x %x %x || %x %x %x\n",ccid_response->apdu,apdu.rdata,ccid_response,ccid_header,ccid_header->apdu,apdu.data);
|
//printf("1 %x %x %x || %x %x %x\n",ccid_response->apdu,apdu.rdata,ccid_response,ccid_header,ccid_header->apdu,apdu.data);
|
||||||
memcpy(&ccid_response[itf]->apdu, ccid_atr + 1, size_atr);
|
memcpy(&ccid_response[itf]->apdu, ccid_atr + 1, size_atr);
|
||||||
if (ccid_status == 1) {
|
if (ccid_status == 1) {
|
||||||
card_start(apdu_thread);
|
//card_start(apdu_thread);
|
||||||
}
|
}
|
||||||
ccid_status = 0;
|
ccid_status = 0;
|
||||||
ccid_write(itf, size_atr);
|
ccid_write(itf, size_atr);
|
||||||
}
|
}
|
||||||
else if (ccid_header[itf]->bMessageType == CCID_POWER_OFF) {
|
else if (ccid_header[itf]->bMessageType == CCID_POWER_OFF) {
|
||||||
if (ccid_status == 0) {
|
if (ccid_status == 0) {
|
||||||
card_exit(0);
|
//card_exit(0);
|
||||||
}
|
}
|
||||||
ccid_status = 1;
|
ccid_status = 1;
|
||||||
ccid_response[itf]->bMessageType = CCID_SLOT_STATUS_RET;
|
ccid_response[itf]->bMessageType = CCID_SLOT_STATUS_RET;
|
||||||
@@ -216,6 +227,9 @@ int driver_process_usb_packet_ccid(uint8_t itf, uint16_t rx_read) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool driver_mounted_ccid(uint8_t itf) {
|
bool driver_mounted_ccid(uint8_t itf) {
|
||||||
|
#ifdef USB_ITF_HID
|
||||||
|
itf -= 2;
|
||||||
|
#endif
|
||||||
return tud_vendor_n_mounted(itf);
|
return tud_vendor_n_mounted(itf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user