raspberry
This commit is contained in:
1 parent
84dfdf5210
commit
be436085b3
55 files changed
+2195
No files matched your search
@@ -0,0 +1,84 @@
|
||||
"""
|
||||
Script Name: ir-keytable-record.py
|
||||
Purpose: Script to capture remote control key presses and generate a TOML file.
|
||||
Author: Vince Ricosti
|
||||
Url: https://raw.githubusercontent.com/vricosti/infrared-resources/main/ir-keytable-record.py
|
||||
Usage:
|
||||
Run the script with -h or --help to see usage options.
|
||||
"""
|
||||
import os
|
||||
import subprocess
|
||||
import re
|
||||
import time
|
||||
import signal
|
||||
import argparse
|
||||
|
||||
def get_ir_keytable_output(sysdev):
|
||||
cmd = ["stdbuf", "-oL", "ir-keytable", "-s", sysdev, "-t"]
|
||||
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, bufsize=1, universal_newlines=True)
|
||||
|
||||
lines = []
|
||||
for line in iter(process.stdout.readline, ''):
|
||||
lines.append(line)
|
||||
if "lirc protocol" in line:
|
||||
break
|
||||
|
||||
process.send_signal(signal.SIGINT)
|
||||
process.communicate()
|
||||
|
||||
return ''.join(lines)
|
||||
|
||||
def extract_protocol_and_scancode(output):
|
||||
# Extract lines containing "lirc protocol"
|
||||
match = re.search(r"lirc protocol\(([^)]+)\): scancode = (0x[\da-fA-F]+)", output)
|
||||
if match:
|
||||
protocol, scancode = match.groups()
|
||||
return protocol, scancode
|
||||
return None, None
|
||||
|
||||
def parse_arguments():
|
||||
parser = argparse.ArgumentParser(description='Script to capture remote control key presses and generate a TOML file.')
|
||||
parser.add_argument('-s', '--sysdev', default='rc0', help='RC device to control. Defaults to rc0 if not specified.')
|
||||
return parser.parse_args()
|
||||
|
||||
def main():
|
||||
args = parse_arguments()
|
||||
sysdev = args.sysdev
|
||||
|
||||
filename = input("Please enter the file name: ").strip()
|
||||
filename_no_ext, ext = os.path.splitext(filename)
|
||||
if not ext:
|
||||
filename = f"{filename}.toml"
|
||||
|
||||
keys_dict = {}
|
||||
global_protocol = None
|
||||
|
||||
while True:
|
||||
key_name = input("Enter the key name (in upper case) or a space to stop: ").strip()
|
||||
if key_name == '':
|
||||
break
|
||||
|
||||
#print("Please press the button on your remote for key:", key_name)
|
||||
output = get_ir_keytable_output(sysdev)
|
||||
protocol, scancode = extract_protocol_and_scancode(output)
|
||||
if protocol and scancode:
|
||||
print(f'{scancode} = "{key_name}" #protocol ="{protocol}"')
|
||||
keys_dict[key_name] = scancode
|
||||
if not global_protocol:
|
||||
global_protocol = protocol
|
||||
if global_protocol == 'rc5x_20':
|
||||
global_protocol = 'rc5'
|
||||
|
||||
with open(filename, 'w') as f:
|
||||
f.write("[[protocols]]\n")
|
||||
f.write(f'name = "{filename_no_ext}"\n')
|
||||
f.write(f'protocol = "{global_protocol}"\n')
|
||||
f.write(f'variant = "{global_protocol}"\n')
|
||||
f.write("[protocols.scancodes]\n")
|
||||
for key_name, scancode in keys_dict.items():
|
||||
f.write(f'{scancode} = "{key_name}"\n')
|
||||
|
||||
print(f"File '{filename}' has been written.")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in new issue
Block a user