Using vendor driver as background layout. However, it does not work since vendor_open() checks that the interface class equals to vendor_class. It must be bypassed somehow.
Signed-off-by: Pol Henarejos <pol.henarejos@cttc.es>
This commit is contained in:
25
hsm2040.c
25
hsm2040.c
@@ -23,15 +23,23 @@
|
|||||||
static uint8_t itf_num;
|
static uint8_t itf_num;
|
||||||
|
|
||||||
static void ccid_init(void) {
|
static void ccid_init(void) {
|
||||||
|
TU_LOG2("-------- CCID INIT\r\n");
|
||||||
|
vendord_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ccid_reset(uint8_t __unused rhport) {
|
static void ccid_reset(uint8_t rhport) {
|
||||||
|
TU_LOG2("-------- CCID RESET\r\n");
|
||||||
itf_num = 0;
|
itf_num = 0;
|
||||||
|
vendord_reset(rhport);
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint16_t ccid_open(uint8_t __unused 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) {
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
@@ -42,6 +50,7 @@ static uint16_t ccid_open(uint8_t __unused rhport, tusb_desc_interface_t const *
|
|||||||
// Support for parameterized reset via vendor interface control request
|
// Support for parameterized reset via vendor interface control request
|
||||||
static bool ccid_control_xfer_cb(uint8_t __unused rhport, uint8_t stage, tusb_control_request_t const * request) {
|
static bool ccid_control_xfer_cb(uint8_t __unused rhport, uint8_t stage, tusb_control_request_t const * request) {
|
||||||
// nothing to do with DATA & ACK stage
|
// nothing to do with DATA & ACK stage
|
||||||
|
TU_LOG2("-------- CCID CTRL XFER\r\n");
|
||||||
if (stage != CONTROL_STAGE_SETUP) return true;
|
if (stage != CONTROL_STAGE_SETUP) return true;
|
||||||
|
|
||||||
if (request->wIndex == itf_num)
|
if (request->wIndex == itf_num)
|
||||||
@@ -77,8 +86,10 @@ static bool ccid_control_xfer_cb(uint8_t __unused rhport, uint8_t stage, tusb_co
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool ccid_xfer_cb(uint8_t __unused rhport, uint8_t __unused ep_addr, xfer_result_t __unused result, uint32_t __unused xferred_bytes) {
|
static bool ccid_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) {
|
||||||
return true;
|
TU_LOG2("------ CALLED XFER_CB\r\n");
|
||||||
|
return vendord_xfer_cb(rhport, ep_addr, result, xferred_bytes);
|
||||||
|
//return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -127,10 +138,11 @@ void vendor_task(void)
|
|||||||
// connected and there are data available
|
// connected and there are data available
|
||||||
if ( tud_vendor_available() )
|
if ( tud_vendor_available() )
|
||||||
{
|
{
|
||||||
|
TU_LOG2("---- TASK VENDR AVAILABLE\r\n");
|
||||||
uint8_t buf[64];
|
uint8_t buf[64];
|
||||||
|
|
||||||
uint32_t count = tud_vendor_read(buf, sizeof(buf));
|
uint32_t count = tud_vendor_read(buf, sizeof(buf));
|
||||||
|
TU_LOG2("-------- RECEIVED %d, %x %x %x",count,buf[0],buf[1],buf[2]);
|
||||||
// echo back to both web serial and cdc
|
// echo back to both web serial and cdc
|
||||||
//echo_all(buf, count);
|
//echo_all(buf, count);
|
||||||
}
|
}
|
||||||
@@ -154,6 +166,7 @@ void tud_vendor_line_state_cb(uint8_t itf, bool dtr, bool rts)
|
|||||||
void tud_vendor_rx_cb(uint8_t itf)
|
void tud_vendor_rx_cb(uint8_t itf)
|
||||||
{
|
{
|
||||||
(void) itf;
|
(void) itf;
|
||||||
|
TU_LOG3("!!!!!!! RX_CB\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void tud_mount_cb()
|
void tud_mount_cb()
|
||||||
@@ -200,8 +213,8 @@ int main(void)
|
|||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
tud_task(); // tinyusb device task
|
|
||||||
vendor_task();
|
vendor_task();
|
||||||
|
tud_task(); // tinyusb device task
|
||||||
led_blinking_task();
|
led_blinking_task();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user