Add procedure to compute unique ID at startup.

Signed-off-by: Pol Henarejos <pol.henarejos@cttc.es>
This commit is contained in:
Pol Henarejos
2024-04-15 23:44:51 +02:00
parent a7be923783
commit 8d86a8c56b
10 changed files with 52 additions and 39 deletions

View File

@@ -84,7 +84,6 @@ struct ccid_header {
uint8_t ccid_status = 1;
static uint8_t itf_num;
extern tusb_desc_endpoint_t const desc_ep3;
void ccid_write_offset(uint8_t itf, uint16_t size, uint16_t offset) {
if (*usb_get_tx(itf) + offset != 0x81) {
@@ -267,38 +266,31 @@ uint8_t *driver_prepare_response_ccid(uint8_t itf) {
#define MAX_USB_POWER 1
static void ccid_init_cb(void) {
TU_LOG1("-------- CCID INIT\n");
vendord_init();
}
static void ccid_reset_cb(uint8_t rhport) {
TU_LOG1("-------- CCID RESET\n");
itf_num = 0;
vendord_reset(rhport);
}
static uint16_t ccid_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len) {
uint8_t *itf_vendor = (uint8_t *) malloc(sizeof(uint8_t) * max_len);
//TU_LOG1("-------- CCID OPEN\n");
TU_VERIFY(
itf_desc->bInterfaceClass == TUSB_CLASS_SMART_CARD && itf_desc->bInterfaceSubClass == 0 && itf_desc->bInterfaceProtocol == 0,
0);
TU_VERIFY( itf_desc->bInterfaceClass == TUSB_CLASS_SMART_CARD && itf_desc->bInterfaceSubClass == 0 && itf_desc->bInterfaceProtocol == 0, 0);
//vendord_open expects a CLASS_VENDOR interface class
uint16_t const drv_len = sizeof(tusb_desc_interface_t) + sizeof(struct ccid_class_descriptor) + 3 * sizeof(tusb_desc_endpoint_t);
memcpy(itf_vendor, itf_desc, sizeof(uint8_t) * max_len);
((tusb_desc_interface_t *) itf_vendor)->bInterfaceClass = TUSB_CLASS_VENDOR_SPECIFIC;
((tusb_desc_interface_t *) itf_vendor)->bNumEndpoints -= 1;
vendord_open(rhport,
(tusb_desc_interface_t *) itf_vendor,
max_len - sizeof(tusb_desc_endpoint_t));
TU_ASSERT(usbd_edpt_open(rhport, &desc_ep3), 0);
vendord_open(rhport, (tusb_desc_interface_t *) itf_vendor, max_len - sizeof(tusb_desc_endpoint_t));
tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *)((uint8_t *)itf_desc + drv_len - sizeof(tusb_desc_endpoint_t));
TU_ASSERT(usbd_edpt_open(rhport, desc_ep), 0);
free(itf_vendor);
uint8_t msg[] = { 0x50, 0x03 };
usbd_edpt_xfer(rhport, desc_ep3.bEndpointAddress, msg, sizeof(msg));
usbd_edpt_xfer(rhport, desc_ep->bEndpointAddress, msg, sizeof(msg));
uint16_t const drv_len = sizeof(tusb_desc_interface_t) + sizeof(struct ccid_class_descriptor) +
3 * sizeof(tusb_desc_endpoint_t);
TU_VERIFY(max_len >= drv_len, 0);
itf_num = itf_desc->bInterfaceNumber;