cancel
Showing results for 
Search instead for 
Did you mean: 

USB : TinyUSB for WebUSB

JL_Loyd
Associate

Dear community,

i'm trying to use tinysub for WebUSB application.
My device is already see as a HID device....

In copy, my USB_descriptor.c

 

 

#include "tusb.h" #include "usb_descriptors.h" #include <string.h> // Identifiants USB #define USB_VID 0xCAFE #define USB_PID 0x4001 #define USB_BCD 0x0100 // UUID WebUSB (nécessaire pour Chrome) en little-endian #define WEBUSB_UUID \ { 0x38, 0xB6, 0x08, 0x34, /* Little-endian */ \ 0xA9, 0x09, /* Little-endian */ \ 0xA0, 0x47, /* Little-endian */ \ 0x8B, 0xFD, /* Big-endian */ \ 0xA0, 0x76, 0x88, 0x15, 0xB6, 0x65 } /* Big-endian */ // Descripteur principal du périphérique USB const tusb_desc_device_t desc_device = { .bLength = sizeof(tusb_desc_device_t), .bDescriptorType = TUSB_DESC_DEVICE, .bcdUSB = 0x0200, // USB 2.0 .bDeviceClass = TUSB_CLASS_VENDOR_SPECIFIC, .bDeviceSubClass = 0x00, .bDeviceProtocol = 0x00, .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, .idVendor = USB_VID, .idProduct = USB_PID, .bcdDevice = USB_BCD, .iManufacturer = 1, .iProduct = 2, .iSerialNumber = 3, .bNumConfigurations = 1 }; // Descripteur de capacité WebUSB const uint8_t webusb_capability_descriptor[] = { 0x10, // bLength 0x10, // bDescriptorType (Capability) 0x05, // bDevCapabilityType (Platform) 0x00, // bReserved WEBUSB_UUID, // UUID spécifique WebUSB 0x01, // bVendorCode (permet un contrôle spécifique) 0x01 // iLandingPage (index de la chaîne) }; // Descripteur BOS (Binary Object Store) const uint8_t bos_descriptor[] = { 0x05, // bLength 0x0F, // bDescriptorType (BOS) 0x16, 0x00, // wTotalLength (22 octets) 0x01, // bNumDeviceCaps (1 capacité) 0x10, // bLength de la capacité WebUSB 0x10, // bDescriptorType (Device Capability) 0x05, // bDevCapabilityType (Platform) 0x00, // bReserved WEBUSB_UUID, // UUID WebUSB 0x01, // bVendorCode (permet un contrôle spécifique) 0x01 // iLandingPage (index de la chaîne) }; // Descripteur de configuration avec WebUSB (Vendor Interface) const uint8_t desc_configuration[] = { TUD_CONFIG_DESCRIPTOR(1, 1, 0, TUD_CONFIG_DESC_LEN + TUD_VENDOR_DESC_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100), TUD_VENDOR_DESCRIPTOR(0, 0x81, 64, 0x01, 64) }; // Fonction callback pour fournir le descripteur principal du périphérique const uint8_t* tud_descriptor_device_cb(void) { return (const uint8_t*) &desc_device; } // Fonction callback pour fournir le descripteur de configuration const uint8_t* tud_descriptor_configuration_cb(uint8_t index) { (void) index; return desc_configuration; } // Fonction callback pour fournir le descripteur BOS const uint8_t* tud_descriptor_bos_cb(void) { return bos_descriptor; } // Chaînes de caractères USB const char* string_desc_arr[] = { (const char[]) {0x09, 0x04}, // Langue (US English) "MonFabricant", "MonProduit WebUSB", "123456", }; // Buffer pour les chaînes de caractères static uint16_t desc_str[32]; // Fonction callback pour les chaînes de caractères USB const uint16_t* tud_descriptor_string_cb(uint8_t index, uint16_t langid) { (void) langid; uint8_t len; if (index == 0) { memcpy(&desc_str[1], string_desc_arr[0], 2); len = 1; } else { if (index >= sizeof(string_desc_arr) / sizeof(string_desc_arr[0])) return NULL; const char* str = string_desc_arr[index]; len = strlen(str); if (len > 31) len = 31; for (uint8_t i = 0; i < len; i++) { desc_str[i + 1] = str[i]; } } desc_str[0] = (TUSB_DESC_STRING << | (2 * len + 2); return desc_str; }
View more

 

the tusb_config.h

#ifndef _TUSB_CONFIG_H_ #define _TUSB_CONFIG_H_ #define CFG_TUSB_MCU OPT_MCU_STM32F1 #define CFG_TUSB_RHPORT0_MODE OPT_MODE_DEVICE #define CFG_TUSB_OS OPT_OS_NONE // Taille des buffers USB #define CFG_TUD_ENDPOINT0_SIZE 64 // Activer WebUSB #define CFG_TUD_HID 0 // Désactiver HID #define CFG_TUD_CDC 0 // Désactiver USB CDC #define CFG_TUD_MSC 0 // Désactiver Mass Storage #define CFG_TUD_MIDI 0 // Désactiver MIDI #define CFG_TUD_AUDIO 0 // Désactiver Audio #define CFG_TUD_VENDOR 1 // Activer Vendor (WebUSB) #define CFG_TUD_BOS 1 // Activer le support BOS pour WebUSB #define CFG_TUD_VENDOR_EP_BUFSIZE 64 #endif // _TUSB_CONFIG_H_

 Do you see something wrong ?

2 REPLIES 2
FBL
ST Employee

Hi @JL_Loyd 

TinyUSB is not supported by STMicroelectronics and unfortunately we don't have an example for WebUSB using STM32Cube firmware.

To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.


Pavel A.
Super User

In your webusb_capability_descriptor and bos_descriptor, the WEBUSB_UUID macro is expanded to something enclosed in { braces }.

This does not do what you think it does. Pease check the actual data with a debugger.