98 lines
3.4 KiB
Python
Executable file
98 lines
3.4 KiB
Python
Executable file
"""
|
|
Adafruit Retrogame Setup Script
|
|
(C) Adafruit Industries, Creative Commons 3.0 - Attribution Share Alike
|
|
|
|
Converted to Python by Melissa LeBlanc-Williams for Adafruit Industries
|
|
|
|
Note: Currently Untested
|
|
"""
|
|
|
|
try:
|
|
from adafruit_shell import Shell
|
|
except ImportError:
|
|
raise RuntimeError("The library 'adafruit_shell' was not found. To install, try typing: sudo pip3 install adafruit-python-shell")
|
|
import os
|
|
|
|
shell = Shell()
|
|
shell.group="Retrogame"
|
|
|
|
def main():
|
|
shell.clear()
|
|
print("""This script downloads and installs
|
|
retrogame, a GPIO-to-keypress utility
|
|
for adding buttons and joysticks, plus
|
|
one of several configuration files.
|
|
Run time <1 minute. Reboot recommended.
|
|
""")
|
|
|
|
# Grouped by config name and menu label
|
|
config = {
|
|
"pigrrl2": "PiGRRL 2 controls",
|
|
"pocket": "Pocket PiGRRL",
|
|
"zero": "PiGRRL Zero",
|
|
"super": "Super Game Pi",
|
|
"2button": "Two buttons + joystick",
|
|
"6button": "Six buttons + joystick",
|
|
"bonnet": "Adafruit Arcade Bonnet",
|
|
"cupcade-orig": "Cupcade (gen 1 & 2 only)"
|
|
}
|
|
|
|
RETROGAME_SELECT = shell.select_n(
|
|
"Select configuration:", list(config.values()) + ["Quit without installing"]
|
|
)
|
|
|
|
if RETROGAME_SELECT <= len(config):
|
|
CONFIG_NAME = list(config.keys())[RETROGAME_SELECT-1]
|
|
|
|
if shell.exists("/boot/retrogame.cfg"):
|
|
print("/boot/retrogame.cfg already exists.\n"
|
|
"Continuing will overwrite file.\n")
|
|
if not shell.prompt("CONTINUE?", default='n'):
|
|
print("Canceled.")
|
|
shell.exit()
|
|
|
|
print("Downloading, installing retrogame...", end="")
|
|
# Download to tmpfile because might already be running
|
|
if shell.run_command("curl -f -s -o /tmp/retrogame https://raw.githubusercontent.com/adafruit/Adafruit-Retrogame/master/retrogame"):
|
|
shell.move("/tmp/retrogame", "/usr/local/bin/")
|
|
os.chmod("/usr/local/bin/retrogame", 0o755)
|
|
print("OK")
|
|
else:
|
|
print("ERROR")
|
|
|
|
print("Downloading, installing retrogame.cfg...", end="")
|
|
if shell.run_command(f"curl -f -s -o /boot/retrogame.cfg https://raw.githubusercontent.com/adafruit/Adafruit-Retrogame/master/configs/retrogame.cfg.{CONFIG_NAME}"):
|
|
print("OK")
|
|
else:
|
|
print("ERROR")
|
|
|
|
print("Performing other system configuration...", end="")
|
|
|
|
# Add udev rule (will overwrite if present)
|
|
shell.write_text_file("/etc/udev/rules.d/10-retrogame.rules", (
|
|
r"SUBSYSTEM==\"input\", ATTRS{name}==\"retrogame\", "
|
|
r"ENV{ID_INPUT_KEYBOARD}=\"1\""
|
|
))
|
|
|
|
if CONFIG_NAME == "bonnet":
|
|
# If Bonnet, make sure I2C is enabled. Call the I2C
|
|
# setup function in raspi-config (noninteractive):
|
|
shell.run_command("raspi-config nonint do_i2c 0")
|
|
|
|
# Start on boot
|
|
if shell.run_command("grep retrogame /etc/rc.local", suppress_message=True):
|
|
# retrogame already in rc.local, but make sure correct:
|
|
shell.pattern_replace("/etc/rc.local", "^.*retrogame.*$", "/usr/local/bin/retrogame &")
|
|
else:
|
|
# Insert retrogame into rc.local before final 'exit 0'
|
|
shell.pattern_replace("/etc/rc.local", "^exit 0", "/usr/local/bin/retrogame &\nexit 0")
|
|
|
|
print("OK")
|
|
|
|
shell.prompt_reboot()
|
|
print("Done")
|
|
|
|
# Main function
|
|
if __name__ == "__main__":
|
|
shell.require_root()
|
|
main()
|