deskhop/webconfig/form.py

83 lines
2.7 KiB
Python
Raw Normal View History

#!/usr/bin/python3
from dataclasses import dataclass, field
@dataclass
class FormField:
offset: int
name: str
default: int | None = None
values: dict[int, str] = field(default_factory=dict)
data_type: str = "int32"
elem: str | None = None
SHORTCUTS = {
0x73: "None",
0x2A: "Backspace",
0x39: "Caps Lock",
0x2B: "Tab",
0x46: "Print Screen",
0x47: "Scroll Lock",
0x53: "Num Lock",
}
STATUS_ = [
FormField(78, "Running FW version", None, {}, "uint16", elem="hex_info"),
FormField(79, "Running FW checksum", None, {}, "uint32", elem="hex_info"),
]
CONFIG_ = [
FormField(1001, "Mouse", elem="label"),
FormField(71, "Force Mouse Boot Mode", None, {}, "uint8", "checkbox"),
FormField(75, "Enable Acceleration", None, {}, "uint8", "checkbox"),
FormField(77, "Jump Treshold", 0, {"min": 0, "max": 1024}, "uint16", "range"),
FormField(1002, "Keyboard", elem="label"),
FormField(72, "Force KBD Boot Protocol", None, {}, "uint8", "checkbox"),
FormField(73, "KBD LED as Indicator", None, {}, "uint8", "checkbox"),
FormField(76, "Enforce Ports", None, {}, "uint8", "checkbox"),
]
OUTPUT_ = [
FormField(1, "Screen Count", 1, {1: "1", 2: "2", 3: "3"}, "uint32"),
FormField(2, "Speed X", 16, {"min": 1, "max": 100}, "int32", "range"),
FormField(3, "Speed Y", 16, {"min": 1, "max": 100}, "int32", "range"),
FormField(4, "Border Top", None, {}, "int32"),
FormField(5, "Border Bottom", None, {}, "int32"),
FormField(6, "Operating System", 1, {1: "Linux", 2: "MacOS", 3: "Windows", 4: "Android", 255: "Other"}, "uint8"),
FormField(7, "Screen Position", 1, {1: "Left", 2: "Right"}, "uint8"),
FormField(8, "Cursor Park Position", 0, {0: "Top", 1: "Bottom", 3: "Previous"}, "uint8"),
FormField(1003, "Screensaver", elem="label"),
FormField(9, "Mode", 0, {0: "Disabled", 1: "Pong", 2: "Jitter"}, "uint8"),
FormField(10, "Only If Inactive", None, {}, "uint8", "checkbox"),
FormField(11, "Idle Time (μs)", None, {}, "uint64"),
FormField(12, "Max Time (μs)", None, {}, "uint64"),
]
def generate_output(base, data):
output = [
{
"name": field.name,
"key": base + field.offset,
"default": field.default,
"values": field.values,
"type": field.data_type,
"elem": field.elem,
}
for field in data
]
return output
def output_A(base=10):
return generate_output(base, data=OUTPUT_)
def output_B(base=40):
return generate_output(base, data=OUTPUT_)
def output_status():
return generate_output(0, data=STATUS_)
def output_config():
return generate_output(0, data=CONFIG_)