This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

[nRF52840] USB Vendor Specified Interface Class

Hello,

I would like to implement a Vendor Specified Interface Class for use with libusb on the nRF52840 USB. There are examples of HID, CDC, Audio, etc. But it is not clear to me how to define my own class. Basically, I would like to configure one interface, where I set the bInterfaceClass to 0xFF, and have one bulk IN endpoint, and one bulk OUT endpoint.

I've been trying to fill some struct to give to app_usbd_class_append(), but I can't really figure out what to put there.

Parents
  • I now have this for reception of data, seems to work fine

        case NRF_DRV_USBD_EVT_EPTRANSFER:
        	if (NRF_DRV_USBD_EPOUT1 == p_event->data.eptransfer.ep) {
        			static uint8_t receive_buffer[64];
        			static nrf_drv_usbd_ep_transfer_t usb_tranfer;
        		if (NRF_USBD_EP_WAITING == p_event->data.eptransfer.status) {
        				usb_tranfer.p_data.rx = receive_buffer;
        				usb_tranfer.size = 64;
        				int ret = nrf_drv_usbd_ep_transfer(p_event->data.eptransfer.ep, &usb_tranfer);
        
        		} else if (NRF_USBD_EP_OK == p_event->data.eptransfer.status) {
        			size_t size = 0;
        			nrf_drv_usbd_ep_status_get(p_event->data.eptransfer.ep, &size);
        				printf("Received %d bytes:\n", size);
        				for (int i = 0; i < size; i++) printf("0x%02X ", receive_buffer[i]);
        				printf("\n");
        		} else {
        			printf("Transfer failed on EPOUT1: %d\n", p_event->data.eptransfer.status);
        		}
        	}
    
    ...
    
Reply
  • I now have this for reception of data, seems to work fine

        case NRF_DRV_USBD_EVT_EPTRANSFER:
        	if (NRF_DRV_USBD_EPOUT1 == p_event->data.eptransfer.ep) {
        			static uint8_t receive_buffer[64];
        			static nrf_drv_usbd_ep_transfer_t usb_tranfer;
        		if (NRF_USBD_EP_WAITING == p_event->data.eptransfer.status) {
        				usb_tranfer.p_data.rx = receive_buffer;
        				usb_tranfer.size = 64;
        				int ret = nrf_drv_usbd_ep_transfer(p_event->data.eptransfer.ep, &usb_tranfer);
        
        		} else if (NRF_USBD_EP_OK == p_event->data.eptransfer.status) {
        			size_t size = 0;
        			nrf_drv_usbd_ep_status_get(p_event->data.eptransfer.ep, &size);
        				printf("Received %d bytes:\n", size);
        				for (int i = 0; i < size; i++) printf("0x%02X ", receive_buffer[i]);
        				printf("\n");
        		} else {
        			printf("Transfer failed on EPOUT1: %d\n", p_event->data.eptransfer.status);
        		}
        	}
    
    ...
    
Children
No Data
Related