mirror of
https://github.com/esphome/esphome.git
synced 2025-10-27 05:03:48 +00:00
Updating the touchscreen interface structure (#4596)
Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Co-authored-by: NP v/d Spek <github_mail@lumensoft.nl> Co-authored-by: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Co-authored-by: Gustavo Ambrozio <gustavo@gustavo.eng.br>
This commit is contained in:
@@ -3,44 +3,84 @@ import esphome.codegen as cg
|
||||
|
||||
from esphome.components import display
|
||||
from esphome import automation
|
||||
from esphome.const import CONF_ON_TOUCH
|
||||
from esphome.const import CONF_ON_TOUCH, CONF_ON_RELEASE
|
||||
from esphome.core import coroutine_with_priority
|
||||
|
||||
CODEOWNERS = ["@jesserockz"]
|
||||
CODEOWNERS = ["@jesserockz", "@nielsnl68"]
|
||||
DEPENDENCIES = ["display"]
|
||||
|
||||
IS_PLATFORM_COMPONENT = True
|
||||
|
||||
touchscreen_ns = cg.esphome_ns.namespace("touchscreen")
|
||||
|
||||
Touchscreen = touchscreen_ns.class_("Touchscreen")
|
||||
Touchscreen = touchscreen_ns.class_("Touchscreen", cg.PollingComponent)
|
||||
TouchRotation = touchscreen_ns.enum("TouchRotation")
|
||||
TouchPoint = touchscreen_ns.struct("TouchPoint")
|
||||
TouchPoints_t = cg.std_vector.template(TouchPoint)
|
||||
TouchPoints_t_const_ref = TouchPoints_t.operator("ref").operator("const")
|
||||
TouchListener = touchscreen_ns.class_("TouchListener")
|
||||
|
||||
CONF_DISPLAY = "display"
|
||||
CONF_TOUCHSCREEN_ID = "touchscreen_id"
|
||||
CONF_REPORT_INTERVAL = "report_interval" # not used yet:
|
||||
CONF_ON_UPDATE = "on_update"
|
||||
|
||||
CONF_MIRROR_X = "mirror_x"
|
||||
CONF_MIRROR_Y = "mirror_y"
|
||||
CONF_SWAP_XY = "swap_xy"
|
||||
CONF_TRANSFORM = "transform"
|
||||
|
||||
|
||||
TOUCHSCREEN_SCHEMA = cv.Schema(
|
||||
{
|
||||
cv.GenerateID(CONF_DISPLAY): cv.use_id(display.DisplayBuffer),
|
||||
cv.GenerateID(CONF_DISPLAY): cv.use_id(display.Display),
|
||||
cv.Optional(CONF_TRANSFORM): cv.Schema(
|
||||
{
|
||||
cv.Optional(CONF_SWAP_XY, default=False): cv.boolean,
|
||||
cv.Optional(CONF_MIRROR_X, default=False): cv.boolean,
|
||||
cv.Optional(CONF_MIRROR_Y, default=False): cv.boolean,
|
||||
}
|
||||
),
|
||||
cv.Optional(CONF_ON_TOUCH): automation.validate_automation(single=True),
|
||||
cv.Optional(CONF_ON_UPDATE): automation.validate_automation(single=True),
|
||||
cv.Optional(CONF_ON_RELEASE): automation.validate_automation(single=True),
|
||||
}
|
||||
)
|
||||
).extend(cv.polling_component_schema("50ms"))
|
||||
|
||||
|
||||
async def register_touchscreen(var, config):
|
||||
await cg.register_component(var, config)
|
||||
|
||||
disp = await cg.get_variable(config[CONF_DISPLAY])
|
||||
cg.add(var.set_display(disp))
|
||||
|
||||
if CONF_TRANSFORM in config:
|
||||
transform = config[CONF_TRANSFORM]
|
||||
cg.add(var.set_swap_xy(transform[CONF_SWAP_XY]))
|
||||
cg.add(var.set_mirror_x(transform[CONF_MIRROR_X]))
|
||||
cg.add(var.set_mirror_y(transform[CONF_MIRROR_Y]))
|
||||
|
||||
if CONF_ON_TOUCH in config:
|
||||
await automation.build_automation(
|
||||
var.get_touch_trigger(),
|
||||
[(TouchPoint, "touch")],
|
||||
[(TouchPoint, "touch"), (TouchPoints_t_const_ref, "touches")],
|
||||
config[CONF_ON_TOUCH],
|
||||
)
|
||||
|
||||
if CONF_ON_UPDATE in config:
|
||||
await automation.build_automation(
|
||||
var.get_update_trigger(),
|
||||
[(TouchPoints_t_const_ref, "touches")],
|
||||
config[CONF_ON_UPDATE],
|
||||
)
|
||||
|
||||
if CONF_ON_RELEASE in config:
|
||||
await automation.build_automation(
|
||||
var.get_release_trigger(),
|
||||
[],
|
||||
config[CONF_ON_RELEASE],
|
||||
)
|
||||
|
||||
|
||||
@coroutine_with_priority(100.0)
|
||||
async def to_code(config):
|
||||
|
||||
Reference in New Issue
Block a user