diff --git a/.gitignore b/.gitignore index b988b88..1701d31 100644 --- a/.gitignore +++ b/.gitignore @@ -51,3 +51,8 @@ compile_commands.json Kicad/PCB_AndroidAuto-backups/ *.lck +# Local tooling & screen captures +platform-tools/ +screen.png + + diff --git a/key_map_database b/key_map_database new file mode 100644 index 0000000..374c9ad Binary files /dev/null and b/key_map_database differ diff --git a/populate_db.py b/populate_db.py new file mode 100644 index 0000000..0e68dcd --- /dev/null +++ b/populate_db.py @@ -0,0 +1,133 @@ +import sqlite3 +import json +import uuid + +def generate_uuid(): + return str(uuid.uuid4()) + +# Configuration for the mappings +device_id = "75bae499fc7060c40ae424563b660e5122e33c7b" +device_name = "2.4G Mouse " + +mappings = [ + # 1. UP + { + "trigger_keyCode": 19, + "trigger_scanCode": 103, + "action_type": "KEY_EVENT", + "action_data": "19", # KEYCODE_DPAD_UP + "action_flags": 4 # Repeat until released + }, + # 2. DOWN + { + "trigger_keyCode": 20, + "trigger_scanCode": 108, + "action_type": "KEY_EVENT", + "action_data": "20", # KEYCODE_DPAD_DOWN + "action_flags": 4 + }, + # 3. LEFT + { + "trigger_keyCode": 21, + "trigger_scanCode": 105, + "action_type": "KEY_EVENT", + "action_data": "21", # KEYCODE_DPAD_LEFT + "action_flags": 4 + }, + # 4. RIGHT + { + "trigger_keyCode": 22, + "trigger_scanCode": 106, + "action_type": "KEY_EVENT", + "action_data": "22", # KEYCODE_DPAD_RIGHT + "action_flags": 4 + }, + # 5. ENTER (Select) + { + "trigger_keyCode": 66, + "trigger_scanCode": 352, + "action_type": "KEY_EVENT", + "action_data": "23", # KEYCODE_DPAD_CENTER + "action_flags": 0 + }, + # 6. BACK + { + "trigger_keyCode": 4, + "trigger_scanCode": 174, + "action_type": "KEY_EVENT", + "action_data": "4", # KEYCODE_BACK + "action_flags": 0 + }, + # 7. Volume Up (Shutdown) + { + "trigger_keyCode": 24, + "trigger_scanCode": 115, + "action_type": "SHELL_COMMAND", + "action_data": "cmVib290IC1w", # base64 for 'reboot -p' + "action_flags": 0, + "shell_description": "Shutdown", + "shell_timeout": "10000" + } +] + +conn = sqlite3.connect('key_map_database') +cursor = conn.cursor() + +# Clear existing keymaps +cursor.execute("DELETE FROM keymaps;") + +for m in mappings: + key_uid = generate_uuid() + trigger_json = { + "extras": [], + "flags": 0, + "keys": [ + { + "clickType": 0, + "deviceId": device_id, + "deviceName": device_name, + "flags": 0, + "keyCode": m["trigger_keyCode"], + "scanCode": m["trigger_scanCode"], + "uid": key_uid + } + ], + "mode": 2 + } + + action_uid = generate_uuid() + action_item = { + "data": m["action_data"], + "extras": [], + "flags": m["action_flags"], + "type": m["action_type"], + "uid": action_uid + } + + if m["action_type"] == "SHELL_COMMAND": + action_item["extras"] = [ + {"data": m["shell_description"], "id": "extra_shell_command_description"}, + {"data": m["shell_timeout"], "id": "extra_shell_command_timeout"} + ] + + action_list_json = [action_item] + + row_uid = generate_uuid() + + cursor.execute(""" + INSERT INTO keymaps (trigger, action_list, constraint_list, constraint_mode, flags, is_enabled, uid, group_uid) + VALUES (?, ?, ?, ?, ?, ?, ?, ?) + """, ( + json.dumps(trigger_json), + json.dumps(action_list_json), + "[]", + 1, + 0, + 1, + row_uid, + None + )) + +conn.commit() +conn.close() +print("Successfully populated key_map_database!")