mirror of
https://github.com/esphome/esphome.git
synced 2025-09-15 01:32:19 +01:00
[usb_uart] Implement USB Host mode UART (#8334)
This commit is contained in:
64
esphome/components/usb_host/__init__.py
Normal file
64
esphome/components/usb_host/__init__.py
Normal file
@@ -0,0 +1,64 @@
|
||||
import esphome.codegen as cg
|
||||
from esphome.components.esp32 import (
|
||||
VARIANT_ESP32S2,
|
||||
VARIANT_ESP32S3,
|
||||
add_idf_sdkconfig_option,
|
||||
only_on_variant,
|
||||
)
|
||||
import esphome.config_validation as cv
|
||||
from esphome.const import CONF_ID
|
||||
from esphome.cpp_types import Component
|
||||
|
||||
AUTO_LOAD = ["bytebuffer"]
|
||||
CODEOWNERS = ["@clydebarrow"]
|
||||
DEPENDENCIES = ["esp32"]
|
||||
usb_host_ns = cg.esphome_ns.namespace("usb_host")
|
||||
USBHost = usb_host_ns.class_("USBHost", Component)
|
||||
USBClient = usb_host_ns.class_("USBClient", Component)
|
||||
|
||||
CONF_DEVICES = "devices"
|
||||
CONF_VID = "vid"
|
||||
CONF_PID = "pid"
|
||||
|
||||
|
||||
def usb_device_schema(cls=USBClient, vid: int = None, pid: [int] = None) -> cv.Schema:
|
||||
schema = cv.COMPONENT_SCHEMA.extend(
|
||||
{
|
||||
cv.GenerateID(): cv.declare_id(cls),
|
||||
}
|
||||
)
|
||||
if vid:
|
||||
schema = schema.extend({cv.Optional(CONF_VID, default=vid): cv.hex_uint16_t})
|
||||
else:
|
||||
schema = schema.extend({cv.Required(CONF_VID): cv.hex_uint16_t})
|
||||
if pid:
|
||||
schema = schema.extend({cv.Optional(CONF_PID, default=pid): cv.hex_uint16_t})
|
||||
else:
|
||||
schema = schema.extend({cv.Required(CONF_PID): cv.hex_uint16_t})
|
||||
return schema
|
||||
|
||||
|
||||
CONFIG_SCHEMA = cv.All(
|
||||
cv.COMPONENT_SCHEMA.extend(
|
||||
{
|
||||
cv.GenerateID(): cv.declare_id(USBHost),
|
||||
cv.Optional(CONF_DEVICES): cv.ensure_list(usb_device_schema()),
|
||||
}
|
||||
),
|
||||
cv.only_with_esp_idf,
|
||||
only_on_variant(supported=[VARIANT_ESP32S2, VARIANT_ESP32S3]),
|
||||
)
|
||||
|
||||
|
||||
async def register_usb_client(config):
|
||||
var = cg.new_Pvariable(config[CONF_ID], config[CONF_VID], config[CONF_PID])
|
||||
await cg.register_component(var, config)
|
||||
return var
|
||||
|
||||
|
||||
async def to_code(config):
|
||||
add_idf_sdkconfig_option("CONFIG_USB_HOST_CONTROL_TRANSFER_MAX_SIZE", 1024)
|
||||
var = cg.new_Pvariable(config[CONF_ID])
|
||||
await cg.register_component(var, config)
|
||||
for device in config.get(CONF_DEVICES) or ():
|
||||
await register_usb_client(device)
|
Reference in New Issue
Block a user