Files
esphome/esphome/components/tinyusb/tinyusb_component.h
2025-11-03 18:29:30 -06:00

73 lines
2.4 KiB
C++

#pragma once
#if defined(USE_ESP32_VARIANT_ESP32P4) || defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3)
#include "esphome/core/component.h"
#include "tinyusb.h"
#include "tusb.h"
namespace esphome::tinyusb {
enum USBDStringDescriptor : uint8_t {
LANGUAGE_ID = 0,
MANUFACTURER = 1,
PRODUCT = 2,
SERIAL_NUMBER = 3,
INTERFACE = 4,
TERMINATOR = 5,
SIZE = 6,
};
static const char *DEFAULT_USB_STR = "ESPHome";
class TinyUSB : public Component {
public:
void setup() override;
void dump_config() override;
float get_setup_priority() const override { return setup_priority::BUS; }
void set_usb_desc_product_id(uint16_t product_id) { this->usb_descriptor_.idProduct = product_id; }
void set_usb_desc_vendor_id(uint16_t vendor_id) { this->usb_descriptor_.idVendor = vendor_id; }
void set_usb_desc_lang_id(uint16_t lang_id) {
this->usb_desc_lang_id_[0] = lang_id & 0xFF;
this->usb_desc_lang_id_[1] = lang_id >> 8;
}
void set_usb_desc_manufacturer(const char *usb_desc_manufacturer) {
this->string_descriptor_[MANUFACTURER] = usb_desc_manufacturer;
}
void set_usb_desc_product(const char *usb_desc_product) { this->string_descriptor_[PRODUCT] = usb_desc_product; }
void set_usb_desc_serial(const char *usb_desc_serial) { this->string_descriptor_[SERIAL_NUMBER] = usb_desc_serial; }
protected:
char usb_desc_lang_id_[2] = {0x09, 0x04}; // defaults to english
const char *string_descriptor_[SIZE] = {
this->usb_desc_lang_id_, // 0: supported language is English (0x0409)
DEFAULT_USB_STR, // 1: Manufacturer
DEFAULT_USB_STR, // 2: Product
nullptr, // 3: Serial Number
nullptr, // 4: Interface
nullptr, // 5: Terminator
};
tinyusb_config_t tusb_cfg_{};
tusb_desc_device_t usb_descriptor_{
.bLength = sizeof(tusb_desc_device_t),
.bDescriptorType = TUSB_DESC_DEVICE,
.bcdUSB = 0x0200,
.bDeviceClass = TUSB_CLASS_MISC,
.bDeviceSubClass = MISC_SUBCLASS_COMMON,
.bDeviceProtocol = MISC_PROTOCOL_IAD,
.bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE,
.idVendor = 0x303A,
.idProduct = 0x4001,
.bcdDevice = CONFIG_TINYUSB_DESC_BCD_DEVICE,
.iManufacturer = 1,
.iProduct = 2,
.iSerialNumber = 3,
.bNumConfigurations = 1,
};
};
} // namespace esphome::tinyusb
#endif