#!/bin/bash ########################################################################## # ovos-i2csound # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. ########################################################################## # Scanning the I2C bus for know addresses is_1a=$(i2cdetect -y 1 0x1a 0x1a | grep -E "(1a|UU)" | awk '{print $2}') # WM8xxx based if [ "${is_1a}" == "1a" ] || [ "${is_1a}" == "UU" ] ; then echo "WM8xxx based HAT found" atmega328p=$(avrdude -p atmega328p -C /etc/avrdude-gpio.conf -c linuxgpio -U signature:r:-:i -F 2>/dev/null | head -n1) if [ "${atmega328p}" == ":030000001E950F3B" ] ; then MARK1=found echo "Mark-1 enclosure $MARK1" else WM8960=found echo "WM8960 based 2-mic $WM8960" fi fi is_35=$(i2cdetect -y 1 0x35 0x35 | grep -E "(35|UU)" | awk '{print $2}') # ReSpeaker 4-mic squared if [ "${is_35}" == "35" ] || [ "${is_35}" == "UU" ] ; then RESPEAKER4=found echo "ReSpeaker 4-mic $RESPEAKER4" fi is_3b=$(i2cdetect -y 1 0x3b 0x3b | grep -E "(3b|UU)" | awk '{print $2}') # ReSpeaker 4-mic lineair / 6-mic if [ "${is_3b}" == "3b" ] || [ "${is_3b}" == "UU" ] ; then RESPEAKER6=found echo "ReSpeaker 6-mic $RESPEAKER6" fi is_4b=$(i2cdetect -y 1 0x4b 0x4b | grep -E "(4b|UU)" | awk '{print $2}') # Adafruit if [ "${is_4b}" == "4b" ] || [ "${is_4b}" == "UU" ] ; then ADAFRUIT=found echo "Adafruit $ADAFRUIT" fi is_2f=$(i2cdetect -y 1 0x2c 0x2c | grep -E "(2c|UU)" | awk '{print $2}') # TAS5806 if [ "${is_2c}" == "2c" ] || [ "${is_2c}" == "UU" ] ; then XMOS=found echo "XMOS Chip $XMOS" fi is_2f=$(i2cdetect -y 1 0x2f 0x2f | grep -E "(2f|UU)" | awk '{print $2}') # TAS5806 if [ "${is_2f}" == "2f" ] || [ "${is_2f}" == "UU" ] ; then TAS5806=found echo "Texas Instruments 5806 $TAS5806" fi is_04=$(i2cdetect -y -a 1 0x04 0x04 | grep -E "(04|UU)" | awk '{print $2}') # SJ201 Led Ring if [ "${is_04}" == "04" ] || [ "${is_04}" == "UU" ] ; then SJ201LED=found echo "Mark2-Devkit SJ201 Leds $SJ201LED" fi # Configure found devices if [ "$WM8960" == "found" ] && [ "$RESPEAKER4" != "found" ] ; then echo "Installing and configuring WM8960 based 2-mic HAT" dtoverlay wm8960-soundcard echo "Configuring board" sleep 3 # Allow some time to fully initialise the hardware / driver amixer -c "wm8960soundcard" cset numid=1 34,34 amixer -c "wm8960soundcard" cset numid=26 3 amixer -c "wm8960soundcard" cset numid=27 4 amixer -c "wm8960soundcard" cset numid=30 5 amixer -c "wm8960soundcard" cset numid=32 5 amixer -c "wm8960soundcard" cset numid=33 5 amixer -c "wm8960soundcard" cset numid=34 25 amixer -c "wm8960soundcard" cset numid=35 on amixer -c "wm8960soundcard" cset numid=9 3 amixer -c "wm8960soundcard" cset numid=8 3 amixer -c "wm8960soundcard" cset numid=49 on amixer -c "wm8960soundcard" cset numid=51 on amixer -c "wm8960soundcard" cset numid=37 0 amixer -c "wm8960soundcard" cset numid=38 0 amixer -c "wm8960soundcard" cset numid=39 5 amixer -c "wm8960soundcard" cset numid=48 on amixer -c "wm8960soundcard" cset numid=50 on amixer -c "wm8960soundcard" cset numid=54 on amixer -c "wm8960soundcard" cset numid=16 5 amixer -c "wm8960soundcard" cset numid=15 4 echo "Configuring button" dtoverlay wm8960-button-overlay fi if [ "$MARK1" == "found" ] ; then echo "Installing and configuring WM8731 based sound HAT" dtoverlay proto-codec echo "Configuring board" sleep 3 # Allow some time to fully initialise the hardware / driver amixer -c "sndrpiproto" cset numid=1 107,107 amixer -c "sndrpiproto" cset numid=2 on amixer -c "sndrpiproto" cset numid=6 on amixer -c "sndrpiproto" cset numid=10 on amixer -c "sndrpiproto" cset numid=14 1 amixer -c "sndrpiproto" cset numid=13 on amixer -c "sndrpiproto" cset numid=9 on echo "Resetting Mark-1 faceplate" echo "eyes.color=7365993" > /dev/ttyAMA0 # color=soft gray, #706569 echo "mouth.text=" > /dev/ttyAMA0 fi if [ "${RESPEAKER6}" == "found" ] && [ "${RESPEAKER4}" != "found" ] ; then echo "Installing and configuring ReSpeaker 4-mic HAT" dtoverlay seeed-4mic-voicecard echo "Configuring board" sleep 3 # Allow some time to fully initialise the hardware / driver amixer -c "seeed4micvoicec" cset numid=1 222 amixer -c "seeed4micvoicec" cset numid=2 222 amixer -c "seeed4micvoicec" cset numid=3 222 amixer -c "seeed4micvoicec" cset numid=4 222 amixer -c "seeed4micvoicec" cset numid=5 13 amixer -c "seeed4micvoicec" cset numid=6 13 amixer -c "seeed4micvoicec" cset numid=7 13 amixer -c "seeed4micvoicec" cset numid=8 13 fi if [ "{$RESPEAKER6}" == "found" ] && [ "${RESPEAKER4}" == "found" ] ; then echo "Installing and configuring ReSpeaker 6mic HAT" dtoverlay seeed-8mic-voicecard fi if [ "$ADAFRUIT" ] ; then echo "Installing and configuring Adafruit" /usr/sbin/i2cset -y 1 0x4b 30 # Set maximum volume to 30 fi if [ "$TAS5806" ] ; then echo "Installing and configuring SJ-201 HAT" # Initializing XMOS xvf3510 dtoverlay xvf3510 xvf3510-flash --direct "/usr/lib/firmware/xvf3510/app_xvf3510_int_spi_boot_v4_1_0.bin" # Initializing Texas Instruments 5806 Amplifier /usr/bin/tas5806-init if [ "$SJ201LED" ] ; then echo "Found revision-6 SJ-201 board" # Initializing and resetting LED ring /usr/bin/sj201-reset-led # Reset FAN to low speed /usr/sbin/i2cset -a -y 1 0x04 101 30 i else echo "Assume revision-10 SJ-201 board" dtoverlay sj201-rev10-pwm-fan-overlay fi echo "Configuring buttons" dtoverlay sj201-buttons-overlay fi