ESPHome 2026.8.0-dev
Loading...
Searching...
No Matches
tinyusb_component.h
Go to the documentation of this file.
1#pragma once
2#if defined(USE_ESP32_VARIANT_ESP32P4) || defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3) || \
3 defined(USE_ESP32_VARIANT_ESP32S31) || defined(USE_ESP32_VARIANT_ESP32H4)
5
6#include "tinyusb.h"
7#include "tusb.h"
8
9namespace esphome::tinyusb {
10
20
21static const char *const DEFAULT_USB_STR = "ESPHome";
22
23class TinyUSB final : public Component {
24 public:
25 void setup() override;
26 void dump_config() override;
27 float get_setup_priority() const override { return setup_priority::BUS; }
28
29 void set_usb_desc_product_id(uint16_t product_id) { this->usb_descriptor_.idProduct = product_id; }
30 void set_usb_desc_vendor_id(uint16_t vendor_id) { this->usb_descriptor_.idVendor = vendor_id; }
31 void set_usb_desc_lang_id(uint16_t lang_id) {
32 this->usb_desc_lang_id_[0] = lang_id & 0xFF;
33 this->usb_desc_lang_id_[1] = lang_id >> 8;
34 }
35 void set_usb_desc_manufacturer(const char *usb_desc_manufacturer) {
36 this->string_descriptor_[MANUFACTURER] = usb_desc_manufacturer;
37 }
38 void set_usb_desc_product(const char *usb_desc_product) { this->string_descriptor_[PRODUCT] = usb_desc_product; }
39 void set_usb_desc_serial(const char *usb_desc_serial) { this->string_descriptor_[SERIAL_NUMBER] = usb_desc_serial; }
40
41 protected:
42 char usb_desc_lang_id_[2] = {0x09, 0x04}; // defaults to english
43
44 const char *string_descriptor_[SIZE] = {
45 this->usb_desc_lang_id_, // 0: supported language is English (0x0409)
46 DEFAULT_USB_STR, // 1: Manufacturer
47 DEFAULT_USB_STR, // 2: Product
48 nullptr, // 3: Serial Number
49 nullptr, // 4: Interface
50 nullptr, // 5: Terminator
51 };
52
53 tinyusb_config_t tusb_cfg_{};
54 tusb_desc_device_t usb_descriptor_{
55 .bLength = sizeof(tusb_desc_device_t),
56 .bDescriptorType = TUSB_DESC_DEVICE,
57 .bcdUSB = 0x0200,
58 .bDeviceClass = TUSB_CLASS_MISC,
59 .bDeviceSubClass = MISC_SUBCLASS_COMMON,
60 .bDeviceProtocol = MISC_PROTOCOL_IAD,
61 .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE,
62 .idVendor = 0x303A,
63 .idProduct = 0x4001,
64 .bcdDevice = CONFIG_TINYUSB_DESC_BCD_DEVICE,
65 .iManufacturer = 1,
66 .iProduct = 2,
67 .iSerialNumber = 3,
68 .bNumConfigurations = 1,
69 };
70};
71
72} // namespace esphome::tinyusb
73#endif // USE_ESP32_VARIANT_ESP32P4 || USE_ESP32_VARIANT_ESP32S2 || USE_ESP32_VARIANT_ESP32S3 ||
74 // USE_ESP32_VARIANT_ESP32S31 || USE_ESP32_VARIANT_ESP32H4
void set_usb_desc_serial(const char *usb_desc_serial)
void set_usb_desc_product(const char *usb_desc_product)
void set_usb_desc_lang_id(uint16_t lang_id)
const char * string_descriptor_[SIZE]
void set_usb_desc_vendor_id(uint16_t vendor_id)
tusb_desc_device_t usb_descriptor_
float get_setup_priority() const override
void set_usb_desc_product_id(uint16_t product_id)
void set_usb_desc_manufacturer(const char *usb_desc_manufacturer)
constexpr float BUS
For communication buses like i2c/spi.
Definition component.h:39