mirror of
https://github.com/esphome/esphome.git
synced 2026-10-08 20:06:03 +00:00
286 lines
5.7 KiB
Python
286 lines
5.7 KiB
Python
import esphome.codegen as cg
|
|
from esphome.components import binary_sensor
|
|
from esphome.components.binary_sensor import BinarySensor
|
|
import esphome.config_validation as cv
|
|
from esphome.const import CONF_KEY
|
|
from esphome.core import Lambda
|
|
from esphome.cpp_generator import ExpressionStatement, RawExpression
|
|
|
|
from .display import CONF_SDL_ID, Sdl
|
|
|
|
CODEOWNERS = ["@bdm310"]
|
|
|
|
STATE_ARG = "state"
|
|
|
|
SDL_KeyCode = cg.global_ns.enum("SDL_KeyCode")
|
|
|
|
SDL_KEYS = (
|
|
"SDLK_UNKNOWN",
|
|
"SDLK_RETURN",
|
|
"SDLK_ESCAPE",
|
|
"SDLK_BACKSPACE",
|
|
"SDLK_TAB",
|
|
"SDLK_SPACE",
|
|
"SDLK_EXCLAIM",
|
|
"SDLK_QUOTEDBL",
|
|
"SDLK_HASH",
|
|
"SDLK_PERCENT",
|
|
"SDLK_DOLLAR",
|
|
"SDLK_AMPERSAND",
|
|
"SDLK_QUOTE",
|
|
"SDLK_LEFTPAREN",
|
|
"SDLK_RIGHTPAREN",
|
|
"SDLK_ASTERISK",
|
|
"SDLK_PLUS",
|
|
"SDLK_COMMA",
|
|
"SDLK_MINUS",
|
|
"SDLK_PERIOD",
|
|
"SDLK_SLASH",
|
|
"SDLK_0",
|
|
"SDLK_1",
|
|
"SDLK_2",
|
|
"SDLK_3",
|
|
"SDLK_4",
|
|
"SDLK_5",
|
|
"SDLK_6",
|
|
"SDLK_7",
|
|
"SDLK_8",
|
|
"SDLK_9",
|
|
"SDLK_COLON",
|
|
"SDLK_SEMICOLON",
|
|
"SDLK_LESS",
|
|
"SDLK_EQUALS",
|
|
"SDLK_GREATER",
|
|
"SDLK_QUESTION",
|
|
"SDLK_AT",
|
|
"SDLK_LEFTBRACKET",
|
|
"SDLK_BACKSLASH",
|
|
"SDLK_RIGHTBRACKET",
|
|
"SDLK_CARET",
|
|
"SDLK_UNDERSCORE",
|
|
"SDLK_BACKQUOTE",
|
|
"SDLK_a",
|
|
"SDLK_b",
|
|
"SDLK_c",
|
|
"SDLK_d",
|
|
"SDLK_e",
|
|
"SDLK_f",
|
|
"SDLK_g",
|
|
"SDLK_h",
|
|
"SDLK_i",
|
|
"SDLK_j",
|
|
"SDLK_k",
|
|
"SDLK_l",
|
|
"SDLK_m",
|
|
"SDLK_n",
|
|
"SDLK_o",
|
|
"SDLK_p",
|
|
"SDLK_q",
|
|
"SDLK_r",
|
|
"SDLK_s",
|
|
"SDLK_t",
|
|
"SDLK_u",
|
|
"SDLK_v",
|
|
"SDLK_w",
|
|
"SDLK_x",
|
|
"SDLK_y",
|
|
"SDLK_z",
|
|
"SDLK_CAPSLOCK",
|
|
"SDLK_F1",
|
|
"SDLK_F2",
|
|
"SDLK_F3",
|
|
"SDLK_F4",
|
|
"SDLK_F5",
|
|
"SDLK_F6",
|
|
"SDLK_F7",
|
|
"SDLK_F8",
|
|
"SDLK_F9",
|
|
"SDLK_F10",
|
|
"SDLK_F11",
|
|
"SDLK_F12",
|
|
"SDLK_PRINTSCREEN",
|
|
"SDLK_SCROLLLOCK",
|
|
"SDLK_PAUSE",
|
|
"SDLK_INSERT",
|
|
"SDLK_HOME",
|
|
"SDLK_PAGEUP",
|
|
"SDLK_DELETE",
|
|
"SDLK_END",
|
|
"SDLK_PAGEDOWN",
|
|
"SDLK_RIGHT",
|
|
"SDLK_LEFT",
|
|
"SDLK_DOWN",
|
|
"SDLK_UP",
|
|
"SDLK_NUMLOCKCLEAR",
|
|
"SDLK_KP_DIVIDE",
|
|
"SDLK_KP_MULTIPLY",
|
|
"SDLK_KP_MINUS",
|
|
"SDLK_KP_PLUS",
|
|
"SDLK_KP_ENTER",
|
|
"SDLK_KP_1",
|
|
"SDLK_KP_2",
|
|
"SDLK_KP_3",
|
|
"SDLK_KP_4",
|
|
"SDLK_KP_5",
|
|
"SDLK_KP_6",
|
|
"SDLK_KP_7",
|
|
"SDLK_KP_8",
|
|
"SDLK_KP_9",
|
|
"SDLK_KP_0",
|
|
"SDLK_KP_PERIOD",
|
|
"SDLK_APPLICATION",
|
|
"SDLK_POWER",
|
|
"SDLK_KP_EQUALS",
|
|
"SDLK_F13",
|
|
"SDLK_F14",
|
|
"SDLK_F15",
|
|
"SDLK_F16",
|
|
"SDLK_F17",
|
|
"SDLK_F18",
|
|
"SDLK_F19",
|
|
"SDLK_F20",
|
|
"SDLK_F21",
|
|
"SDLK_F22",
|
|
"SDLK_F23",
|
|
"SDLK_F24",
|
|
"SDLK_EXECUTE",
|
|
"SDLK_HELP",
|
|
"SDLK_MENU",
|
|
"SDLK_SELECT",
|
|
"SDLK_STOP",
|
|
"SDLK_AGAIN",
|
|
"SDLK_UNDO",
|
|
"SDLK_CUT",
|
|
"SDLK_COPY",
|
|
"SDLK_PASTE",
|
|
"SDLK_FIND",
|
|
"SDLK_MUTE",
|
|
"SDLK_VOLUMEUP",
|
|
"SDLK_VOLUMEDOWN",
|
|
"SDLK_KP_COMMA",
|
|
"SDLK_KP_EQUALSAS400",
|
|
"SDLK_ALTERASE",
|
|
"SDLK_SYSREQ",
|
|
"SDLK_CANCEL",
|
|
"SDLK_CLEAR",
|
|
"SDLK_PRIOR",
|
|
"SDLK_RETURN2",
|
|
"SDLK_SEPARATOR",
|
|
"SDLK_OUT",
|
|
"SDLK_OPER",
|
|
"SDLK_CLEARAGAIN",
|
|
"SDLK_CRSEL",
|
|
"SDLK_EXSEL",
|
|
"SDLK_KP_00",
|
|
"SDLK_KP_000",
|
|
"SDLK_THOUSANDSSEPARATOR",
|
|
"SDLK_DECIMALSEPARATOR",
|
|
"SDLK_CURRENCYUNIT",
|
|
"SDLK_CURRENCYSUBUNIT",
|
|
"SDLK_KP_LEFTPAREN",
|
|
"SDLK_KP_RIGHTPAREN",
|
|
"SDLK_KP_LEFTBRACE",
|
|
"SDLK_KP_RIGHTBRACE",
|
|
"SDLK_KP_TAB",
|
|
"SDLK_KP_BACKSPACE",
|
|
"SDLK_KP_A",
|
|
"SDLK_KP_B",
|
|
"SDLK_KP_C",
|
|
"SDLK_KP_D",
|
|
"SDLK_KP_E",
|
|
"SDLK_KP_F",
|
|
"SDLK_KP_XOR",
|
|
"SDLK_KP_POWER",
|
|
"SDLK_KP_PERCENT",
|
|
"SDLK_KP_LESS",
|
|
"SDLK_KP_GREATER",
|
|
"SDLK_KP_AMPERSAND",
|
|
"SDLK_KP_DBLAMPERSAND",
|
|
"SDLK_KP_VERTICALBAR",
|
|
"SDLK_KP_DBLVERTICALBAR",
|
|
"SDLK_KP_COLON",
|
|
"SDLK_KP_HASH",
|
|
"SDLK_KP_SPACE",
|
|
"SDLK_KP_AT",
|
|
"SDLK_KP_EXCLAM",
|
|
"SDLK_KP_MEMSTORE",
|
|
"SDLK_KP_MEMRECALL",
|
|
"SDLK_KP_MEMCLEAR",
|
|
"SDLK_KP_MEMADD",
|
|
"SDLK_KP_MEMSUBTRACT",
|
|
"SDLK_KP_MEMMULTIPLY",
|
|
"SDLK_KP_MEMDIVIDE",
|
|
"SDLK_KP_PLUSMINUS",
|
|
"SDLK_KP_CLEAR",
|
|
"SDLK_KP_CLEARENTRY",
|
|
"SDLK_KP_BINARY",
|
|
"SDLK_KP_OCTAL",
|
|
"SDLK_KP_DECIMAL",
|
|
"SDLK_KP_HEXADECIMAL",
|
|
"SDLK_LCTRL",
|
|
"SDLK_LSHIFT",
|
|
"SDLK_LALT",
|
|
"SDLK_LGUI",
|
|
"SDLK_RCTRL",
|
|
"SDLK_RSHIFT",
|
|
"SDLK_RALT",
|
|
"SDLK_RGUI",
|
|
"SDLK_MODE",
|
|
"SDLK_AUDIONEXT",
|
|
"SDLK_AUDIOPREV",
|
|
"SDLK_AUDIOSTOP",
|
|
"SDLK_AUDIOPLAY",
|
|
"SDLK_AUDIOMUTE",
|
|
"SDLK_MEDIASELECT",
|
|
"SDLK_WWW",
|
|
"SDLK_MAIL",
|
|
"SDLK_CALCULATOR",
|
|
"SDLK_COMPUTER",
|
|
"SDLK_AC_SEARCH",
|
|
"SDLK_AC_HOME",
|
|
"SDLK_AC_BACK",
|
|
"SDLK_AC_FORWARD",
|
|
"SDLK_AC_STOP",
|
|
"SDLK_AC_REFRESH",
|
|
"SDLK_AC_BOOKMARKS",
|
|
"SDLK_BRIGHTNESSDOWN",
|
|
"SDLK_BRIGHTNESSUP",
|
|
"SDLK_DISPLAYSWITCH",
|
|
"SDLK_KBDILLUMTOGGLE",
|
|
"SDLK_KBDILLUMDOWN",
|
|
"SDLK_KBDILLUMUP",
|
|
"SDLK_EJECT",
|
|
"SDLK_SLEEP",
|
|
"SDLK_APP1",
|
|
"SDLK_APP2",
|
|
"SDLK_AUDIOREWIND",
|
|
"SDLK_AUDIOFASTFORWARD",
|
|
"SDLK_SOFTLEFT",
|
|
"SDLK_SOFTRIGHT",
|
|
"SDLK_CALL",
|
|
"SDLK_ENDCALL",
|
|
)
|
|
|
|
SDL_KEYMAP = {key: getattr(SDL_KeyCode, key) for key in SDL_KEYS}
|
|
|
|
CONFIG_SCHEMA = (
|
|
binary_sensor.binary_sensor_schema(BinarySensor)
|
|
.extend(
|
|
{
|
|
cv.Required(CONF_KEY): cv.enum(SDL_KEYMAP),
|
|
cv.GenerateID(CONF_SDL_ID): cv.use_id(Sdl),
|
|
}
|
|
)
|
|
.extend(cv.COMPONENT_SCHEMA)
|
|
)
|
|
|
|
|
|
async def to_code(config):
|
|
var = await binary_sensor.new_binary_sensor(config)
|
|
parent = await cg.get_variable(config[CONF_SDL_ID])
|
|
listener = Lambda(
|
|
str(ExpressionStatement(var.publish_state(RawExpression(STATE_ARG))))
|
|
)
|
|
listener = await cg.process_lambda(listener, [(cg.bool_, STATE_ARG)])
|
|
cg.add(parent.add_key_listener(config[CONF_KEY], listener))
|