Merge pull request #112 from makermelissa/master
Converted i2smic to Python
This commit is contained in:
commit
86ff8202b9
1 changed files with 101 additions and 0 deletions
101
i2smic.py
Normal file
101
i2smic.py
Normal file
|
|
@ -0,0 +1,101 @@
|
||||||
|
try:
|
||||||
|
from clint.textui import prompt
|
||||||
|
except ImportError:
|
||||||
|
raise RuntimeError("The library 'clint' was not found. To install, try typing: sudo pip3 install clint")
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
def selectN(message, selections):
|
||||||
|
"""
|
||||||
|
Display a list of selections for the user to enter
|
||||||
|
"""
|
||||||
|
options = []
|
||||||
|
|
||||||
|
for index, selection in enumerate(selections):
|
||||||
|
options.append({
|
||||||
|
'selector': str(index + 1),
|
||||||
|
'prompt': selection,
|
||||||
|
'return': index + 1,
|
||||||
|
})
|
||||||
|
return prompt.options(message, options)
|
||||||
|
|
||||||
|
def run_command(cmd, suppress_message = False):
|
||||||
|
"""
|
||||||
|
Run a shell command and show the output as it runs
|
||||||
|
"""
|
||||||
|
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE,
|
||||||
|
stderr=subprocess.PIPE)
|
||||||
|
while True:
|
||||||
|
output = proc.stdout.readline()
|
||||||
|
if len(output) == 0 and proc.poll() is not None:
|
||||||
|
break
|
||||||
|
if output and not suppress_message:
|
||||||
|
print(output.decode("utf-8").strip())
|
||||||
|
r = proc.poll()
|
||||||
|
if r == 0:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
err = proc.stderr.read()
|
||||||
|
if not suppress_message:
|
||||||
|
print(err.decode("utf-8"))
|
||||||
|
return False
|
||||||
|
|
||||||
|
####################################################### MAIN
|
||||||
|
def main():
|
||||||
|
os.system('clear')
|
||||||
|
print("""This script downloads and installs
|
||||||
|
I2S microphone support.
|
||||||
|
""")
|
||||||
|
pimodel_select = selectN("Select Pi Model:", ["Pi 0 or 0W", "Pi 2 or 3", "Pi 4"]) - 1
|
||||||
|
|
||||||
|
auto_load = prompt.yn("Auto load module at boot?")
|
||||||
|
|
||||||
|
print("""
|
||||||
|
Installing...""")
|
||||||
|
|
||||||
|
# Get needed packages
|
||||||
|
run_command("apt-get -y install git raspberrypi-kernel-headers")
|
||||||
|
|
||||||
|
# Clone the repo
|
||||||
|
run_command("git clone https://github.com/adafruit/Raspberry-Pi-Installer-Scripts.git")
|
||||||
|
|
||||||
|
# Build and install the module
|
||||||
|
os.chdir(os.getcwd() + "/Raspberry-Pi-Installer-Scripts/i2s_mic_module")
|
||||||
|
run_command("make clean")
|
||||||
|
run_command("make")
|
||||||
|
run_command("make install")
|
||||||
|
|
||||||
|
# Setup auto load at boot if selected
|
||||||
|
if auto_load:
|
||||||
|
file = open("/etc/modules-load.d/snd-i2smic-rpi.conf", "wt+")
|
||||||
|
file.write("""
|
||||||
|
snd-i2smic-rpi
|
||||||
|
""")
|
||||||
|
file = open("/etc/modprobe.d/snd-i2smic-rpi.conf", "wt+")
|
||||||
|
file.write("""
|
||||||
|
options snd-i2smic-rpi rpi_platform_generation={}
|
||||||
|
""".format(pimodel_select))
|
||||||
|
|
||||||
|
# Enable I2S overlay
|
||||||
|
run_command("sed -i -e 's/#dtparam=i2s/dtparam=i2s/g' /boot/config.txt")
|
||||||
|
|
||||||
|
# Done
|
||||||
|
print("""DONE.
|
||||||
|
|
||||||
|
Settings take effect on next boot.
|
||||||
|
""")
|
||||||
|
if prompt.yn("REBOOT NOW?", "n"):
|
||||||
|
print("Exiting without reboot.")
|
||||||
|
sys.exit(0)
|
||||||
|
print("Reboot started...")
|
||||||
|
os.system('reboot')
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
# Main function
|
||||||
|
if __name__ == "__main__":
|
||||||
|
if os.geteuid() != 0:
|
||||||
|
print("Installer must be run as root.")
|
||||||
|
print("Try 'sudo python3 {}'".format(sys.argv[0]))
|
||||||
|
sys.exit(1)
|
||||||
|
main()
|
||||||
Loading…
Reference in a new issue