Adding notify_slot_change
This commit is contained in:
25
hsm2040.c
25
hsm2040.c
@@ -126,9 +126,30 @@ static void apdu_init (struct apdu *a)
|
|||||||
a->res_apdu_data_len = 0; /* will be set by upper layer */
|
a->res_apdu_data_len = 0; /* will be set by upper layer */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define NOTIFY_SLOT_CHANGE 0x50
|
||||||
|
static void ccid_notify_slot_change(struct ccid *c)
|
||||||
|
{
|
||||||
|
uint8_t msg;
|
||||||
|
uint8_t notification[2];
|
||||||
|
|
||||||
|
if (c->ccid_state == CCID_STATE_NOCARD)
|
||||||
|
msg = 0x02;
|
||||||
|
else
|
||||||
|
msg = 0x03;
|
||||||
|
|
||||||
|
notification[0] = NOTIFY_SLOT_CHANGE;
|
||||||
|
notification[1] = msg;
|
||||||
|
|
||||||
|
tud_vendor_write(notification, sizeof(notification));
|
||||||
|
}
|
||||||
|
|
||||||
static void ccid_init_cb(void) {
|
static void ccid_init_cb(void) {
|
||||||
|
struct ccid *c = &ccid;
|
||||||
TU_LOG2("-------- CCID INIT\r\n");
|
TU_LOG2("-------- CCID INIT\r\n");
|
||||||
vendord_init();
|
vendord_init();
|
||||||
|
|
||||||
|
ccid_notify_slot_change(c);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ccid_reset(uint8_t rhport) {
|
static void ccid_reset(uint8_t rhport) {
|
||||||
@@ -138,12 +159,10 @@ static void ccid_reset(uint8_t rhport) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static uint16_t ccid_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len) {
|
static uint16_t ccid_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len) {
|
||||||
|
tusb_desc_interface_t itf_vendor;
|
||||||
TU_LOG2("-------- CCID OPEN\r\n");
|
TU_LOG2("-------- CCID OPEN\r\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(rhport, itf_desc, max_len);
|
|
||||||
|
|
||||||
uint16_t const drv_len = sizeof(tusb_desc_interface_t) + sizeof(class_desc_ccid_t) + 2*sizeof(tusb_desc_endpoint_t);
|
uint16_t const drv_len = sizeof(tusb_desc_interface_t) + sizeof(class_desc_ccid_t) + 2*sizeof(tusb_desc_endpoint_t);
|
||||||
TU_VERIFY(max_len >= drv_len, 0);
|
TU_VERIFY(max_len >= drv_len, 0);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user