4#if defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3) || defined(USE_ESP32_VARIANT_ESP32P4)
7#include "usb/usb_host.h"
8#include <freertos/FreeRTOS.h>
9#include <freertos/task.h>
37static const char *
const TAG =
"usb_host";
44static const uint8_t USB_RECIP_DEVICE = 0;
45static const uint8_t USB_RECIP_INTERFACE = 1;
46static const uint8_t USB_RECIP_ENDPOINT = 2;
47static const uint8_t USB_TYPE_STANDARD = 0 << 5;
48static const uint8_t USB_TYPE_CLASS = 1 << 5;
49static const uint8_t USB_TYPE_VENDOR = 2 << 5;
50static const uint8_t USB_DIR_MASK = 1 << 7;
51static const uint8_t USB_DIR_IN = 1 << 7;
52static const uint8_t USB_DIR_OUT = 0;
53static const size_t SETUP_PACKET_SIZE = 8;
55static const size_t MAX_REQUESTS = 16;
56static_assert(MAX_REQUESTS <= 16,
"MAX_REQUESTS must be <= 16 to fit in uint16_t bitmask");
57static constexpr size_t USB_EVENT_QUEUE_SIZE = 32;
58static constexpr size_t USB_TASK_STACK_SIZE = 4096;
59static constexpr UBaseType_t USB_TASK_PRIORITY = 5;
123 void setup()
override;
124 void loop()
override;
135 const std::vector<uint8_t> &data = {});
175 void loop()
override;
176 void setup()
override;
TransferRequest * get_trq_()
USBClient(uint16_t vid, uint16_t pid)
usb_host_client_handle_t handle_
void on_opened(uint8_t addr)
TransferRequest requests_[MAX_REQUESTS]
void transfer_in(uint8_t ep_address, const transfer_cb_t &callback, uint16_t length)
Performs a transfer input operation.
void transfer_out(uint8_t ep_address, const transfer_cb_t &callback, const uint8_t *data, uint16_t length)
Performs an output transfer operation.
float get_setup_priority() const override
void dump_config() override
void control_transfer_callback(const usb_transfer_t *xfer) const
void release_trq(TransferRequest *trq)
std::atomic< uint16_t > trq_in_use_
static void usb_task_fn(void *arg)
virtual void on_connected()
virtual void disconnect()
TaskHandle_t usb_task_handle_
EventPool< UsbEvent, USB_EVENT_QUEUE_SIZE > event_pool
virtual void on_disconnected()
bool control_transfer(uint8_t type, uint8_t request, uint16_t value, uint16_t index, const transfer_cb_t &callback, const std::vector< uint8_t > &data={})
void on_removed(usb_device_handle_t handle)
usb_device_handle_t device_handle_
LockFreeQueue< UsbEvent, USB_EVENT_QUEUE_SIZE > event_queue
std::vector< USBClient * > clients_
float get_setup_priority() const override
const float BUS
For communication buses like i2c/spi.
const float IO
For components that represent GPIO pins like PCF8573.
@ EVENT_TRANSFER_COMPLETE
std::function< void(const TransferStatus &)> transfer_cb_t
Providing packet encoding functions for exchanging data with a remote host.
usb_transfer_t * transfer
struct esphome::usb_host::UsbEvent::@152::@155 transfer
usb_device_handle_t handle
struct esphome::usb_host::UsbEvent::@152::@153 device_new
union esphome::usb_host::UsbEvent::@152 data
struct esphome::usb_host::UsbEvent::@152::@154 device_gone