diff options
author | Leo P | 2020-01-14 15:44:43 -0500 |
---|---|---|
committer | Leo P | 2020-01-14 15:44:43 -0500 |
commit | ce76a12c0df524549800a3881a8118befa4159ad (patch) | |
tree | fb9fe4d95a0322e8ed75a25d5f22732dd4361a98 | |
download | aur-ce76a12c0df524549800a3881a8118befa4159ad.tar.gz |
atomic pi utils
-rw-r--r-- | .SRCINFO | 23 | ||||
-rw-r--r-- | .gitignore | 3 | ||||
-rw-r--r-- | PKGBUILD | 36 | ||||
-rwxr-xr-x | atomicpi-hold-mic | 18 | ||||
-rwxr-xr-x | atomicpi-hold-xmos | 20 | ||||
-rwxr-xr-x | atomicpi-reset-xmos | 2 | ||||
-rw-r--r-- | lib_atomicpi.sh | 78 | ||||
-rw-r--r-- | lib_gpio-present.sh | 12 | ||||
-rw-r--r-- | lib_i2c-gpio-custom-filter.sh | 16 | ||||
-rwxr-xr-x | mmc-status | 27 |
10 files changed, 235 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO new file mode 100644 index 000000000000..0efa72d8c2ed --- /dev/null +++ b/.SRCINFO @@ -0,0 +1,23 @@ +pkgbase = atomicpi-utils + pkgdesc = Tools and Utilities for the Atomic Pi Single-board computer from Digital Loggers + pkgver = 0.1 + pkgrel = 0 + arch = any + license = Unknown + source = atomicpi-hold-mic + source = atomicpi-hold-xmos + source = atomicpi-reset-xmos + source = lib_atomicpi.sh + source = lib_gpio-present.sh + source = lib_i2c-gpio-custom-filter.sh + source = mmc-status + md5sums = 278fb4895488f3c191dbc8c01f316652 + md5sums = a3514ab3b4d3e047e42b2e00ebcc6b4e + md5sums = b7c2352da6b12aafc45d1c1d4a9ad483 + md5sums = 4e3af84055edf48d49372e2fd67ef05c + md5sums = 9ac895e909ebd9fd64293e390f9bd7e3 + md5sums = 7660a6981d202526d4b3e733fbb3f954 + md5sums = 221c1499797d5b514dc6f25270498446 + +pkgname = atomicpi-utils + diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000000..a905e6105ba2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +pkg +src +*.xz diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 000000000000..94f3115eada7 --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,36 @@ +#!/bin/sh +pkgname="atomicpi-utils" +depends=() +pkgdesc="Tools and Utilities for the Atomic Pi Single-board computer from Digital Loggers" +arch=('any') +license=("Unknown") + +pkgver=0.1 +pkgrel=0 + +source=(atomicpi-hold-mic + atomicpi-hold-xmos + atomicpi-reset-xmos + lib_atomicpi.sh + lib_gpio-present.sh + lib_i2c-gpio-custom-filter.sh + mmc-status +) +md5sums=('278fb4895488f3c191dbc8c01f316652' + 'a3514ab3b4d3e047e42b2e00ebcc6b4e' + 'b7c2352da6b12aafc45d1c1d4a9ad483' + '4e3af84055edf48d49372e2fd67ef05c' + '9ac895e909ebd9fd64293e390f9bd7e3' + '7660a6981d202526d4b3e733fbb3f954' + '221c1499797d5b514dc6f25270498446') + + +package() { + install -D -m755 atomicpi-hold-mic "${pkgdir}/usr/bin/atomicpi-hold-mic" + install -D -m755 atomicpi-hold-xmos "${pkgdir}/usr/bin/atomicpi-hold-xmos" + install -D -m755 mmc-status "${pkgdir}/usr/bin/mmc-status" + install -D -m644 lib_atomicpi.sh "${pkgdir}/usr/lib/atomicpi.sh" + install -D -m644 lib_gpio-present.sh "${pkgdir}/usr/lib/gpio-present.sh" + install -D -m644 lib_i2c-gpio-custom-filter.sh "${pkgdir}/usr/lib/lib_i2c-gpio-custom-filter.sh" + +} diff --git a/atomicpi-hold-mic b/atomicpi-hold-mic new file mode 100755 index 000000000000..56c747934712 --- /dev/null +++ b/atomicpi-hold-mic @@ -0,0 +1,18 @@ +#!/bin/sh + +. /usr/lib/atomicpi.sh + +if [ "$1" = "--cleanup" ]; then + atomicpi_gpio_hardware && gpioset --mode=time --us=200000 $ATOMICPICHIP_AU_MIC_SEL=1 +fi + +if [ -z "$1" ]; then + # Hold AU_MIC_SEL low to enable recording from microphone + if atomicpi_gpio_hardware; then + exec gpioset --mode=signal $ATOMICPICHIP_AU_MIC_SEL=0 + else + while true; do + sleep 2147483647; + done + fi +fi diff --git a/atomicpi-hold-xmos b/atomicpi-hold-xmos new file mode 100755 index 000000000000..fb6618fa6211 --- /dev/null +++ b/atomicpi-hold-xmos @@ -0,0 +1,20 @@ +#!/bin/sh + +. /usr/lib/atomicpi.sh + +if [ "$1" = "--cleanup" ] || ! lsusb -d 20b1: ; then + # If XMOS hasn't initialized, first pull the reset line low to + # give it a nice voltage ramp. + atomicpi_gpio_hardware && gpioset --mode=time --us=200000 $ATOMICPICHIP_XMOS_RESET=0 +fi + +if [ -z "$1" ]; then + # Hold reset high + if atomicpi_gpio_hardware; then + exec gpioset --mode=signal $ATOMICPICHIP_XMOS_RESET=1 + else + while true; do + sleep 2147483647; + done + fi +fi diff --git a/atomicpi-reset-xmos b/atomicpi-reset-xmos new file mode 100755 index 000000000000..fc6d8fca04f2 --- /dev/null +++ b/atomicpi-reset-xmos @@ -0,0 +1,2 @@ +#!/bin/sh +systemctl restart atomicpi-hold-xmos diff --git a/lib_atomicpi.sh b/lib_atomicpi.sh new file mode 100644 index 000000000000..10bd78059ded --- /dev/null +++ b/lib_atomicpi.sh @@ -0,0 +1,78 @@ +# Kernel-visible signals + +# ATOMICPI_* constants: Global GPIO index +# ATOMICPICHIP_* constants: Chip ID " " Index in chip +# Think gpioget $ATOMICPICHIP_ISH_GPIO_0 (without quotes) + +# External GPIO +ATOMICPI_ISH_GPIO_0=335 +ATOMICPICHIP_ISH_GPIO_0="gpiochip3 21" +ATOMICPI_ISH_GPIO_1=332 +ATOMICPICHIP_ISH_GPIO_1="gpiochip3 18" +ATOMICPI_ISH_GPIO_2=338 +ATOMICPICHIP_ISH_GPIO_2="gpiochip3 24" +ATOMICPI_ISH_GPIO_3=329 +ATOMICPICHIP_ISH_GPIO_3="gpiochip3 15" +ATOMICPI_ISH_GPIO_4=336 +ATOMICPICHIP_ISH_GPIO_4="gpiochip3 22" +ATOMICPI_ISH_GPIO_7=330 +ATOMICPICHIP_ISH_GPIO_7="gpiochip3 16" + +# Volume up pin +ATOMICPI_GPIO_DFX_2=348 +ATOMICPICHIP_GPIO_DFX_2="gpiochip1 7" +# Volume down pin +ATOMICPI_GPIO_DFX_4=346 +ATOMICPICHIP_GPIO_DFX_4="gpiochip1 5" + +# Internal signals +ATOMICPI_I2C2_3P3_SDA=476 +ATOMICPICHIP_I2C2_3P3_SDA="gpiochip0 62" +ATOMICPI_I2C2_3P3_SCL=480 +ATOMICPICHIP_I2C2_3P3_SCL="gpiochip0 66" +ATOMICPI_AU_MIC_SEL=341 +ATOMICPICHIP_AU_MIC_SEL="gpiochip1 0" +ATOMICPI_XMOS_RESET=349 +ATOMICPICHIP_XMOS_RESET="gpiochip1 8" +ATOMICPI_BN_INT=358 +ATOMICPICHIP_BN_INT="gpiochip1 17" +ATOMICPI_BN_RESET=366 +ATOMICPICHIP_BN_RESET="gpiochip1 25" + +# Physical connector descriptions +# 26-pin connector interface +ATOMICPICONN_ISH_GPIO_0=24 +ATOMICPICONN_ISH_GPIO_1=25 +ATOMICPICONN_ISH_GPIO_2=26 +ATOMICPICONN_ISH_GPIO_3=18 +ATOMICPICONN_ISH_GPIO_4=19 +ATOMICPICONN_ISH_GPIO_7=20 +# Enchilada breakout board +ATOMICPIENCHCONN_ISH_GPIO_0=9 +ATOMICPIENCHCONN_ISH_GPIO_1=10 +ATOMICPIENCHCONN_ISH_GPIO_2=11 +ATOMICPIENCHCONN_ISH_GPIO_3=3 +ATOMICPIENCHCONN_ISH_GPIO_4=4 +ATOMICPIENCHCONN_ISH_GPIO_7=5 +# LEDs +ATOMICPIENCHLED_GREEN="ISH_GPIO_1" +ATOMICPIENCHLED_YELLOW="ISH_GPIO_2" + +# Test if actually running on compatible hardware + +ATOMICPI_GPIO_HARDWARE_CHIPS="228 314 341 414" +ATOMICPI_GPIO_HARDWARE_NGPIO_228=86 +ATOMICPI_GPIO_HARDWARE_NGPIO_314=27 +ATOMICPI_GPIO_HARDWARE_NGPIO_341=73 +ATOMICPI_GPIO_HARDWARE_NGPIO_414=98 + +atomicpi_gpio_hardware() { + for CHIP in $ATOMICPI_GPIO_HARDWARE_CHIPS; do + eval NGPIO_EXPECTED='$ATOMICPI_GPIO_HARDWARE_NGPIO_'$CHIP + NGPIO_ACTUAL=`cat "/sys/class/gpio/gpiochip$CHIP/ngpio" || true` + if [ "$NGPIO_EXPECTED" != "$NGPIO_ACTUAL" ]; then + return 1 + fi + done + return 0 +} diff --git a/lib_gpio-present.sh b/lib_gpio-present.sh new file mode 100644 index 000000000000..af6f9fc9c980 --- /dev/null +++ b/lib_gpio-present.sh @@ -0,0 +1,12 @@ +gpio_present() { + for CHIP in /sys/class/gpio/gpiochip*; do + if [ -d "$CHIP" ]; then + BASE=`cat "$CHIP/base" || true` + NGPIO=`cat "$CHIP/ngpio" || true` + if [ -n "$BASE" ] && [ -n "$NGPIO" ] && [ "$1" -ge "$BASE" ] && [ "$1" -lt "$(($BASE+$NGPIO))" ]; then + return 0 + fi + fi + done + return 1 +} diff --git a/lib_i2c-gpio-custom-filter.sh b/lib_i2c-gpio-custom-filter.sh new file mode 100644 index 000000000000..b8780fb8ab45 --- /dev/null +++ b/lib_i2c-gpio-custom-filter.sh @@ -0,0 +1,16 @@ +. /usr/lib/gpio-present.sh + +check_gpio_bus_configuration () { + ERRORS=0 + shift; + if ! gpio_present $1; then + echo "SDA GPIO ($1) not detected" >&2 + ERRORS="$(($ERRORS+1))" + fi + shift; + if ! gpio_present $1; then + echo "SCL GPIO ($1) not detected" >&2 + ERRORS="$(($ERRORS+1))" + fi + return "$ERRORS" +} diff --git a/mmc-status b/mmc-status new file mode 100755 index 000000000000..12f38abc4c2f --- /dev/null +++ b/mmc-status @@ -0,0 +1,27 @@ +#!/bin/sh +for MMC in /sys/bus/mmc/devices/*; do + if [ -d "$MMC" ]; then + read LIFE_TIME_SLC LIFE_TIME_MLC <$MMC/life_time + read PRE_EOL_INFO < $MMC/pre_eol_info + + LIFE_TIME_10PCT_SLC=`printf "%d\n" $LIFE_TIME_SLC` + LIFE_TIME_10PCT_MLC=`printf "%d\n" $LIFE_TIME_MLC` + LIFE_TIME_10PCT_RSVD=0 + case `printf "%d\n" $PRE_EOL_INFO` in + 2) LIFE_TIME_10PCT_RSVD=8;; + 3) LIFE_TIME_10PCT_RSVD=9;; + esac + LIFE_TIME_10PCT="$LIFE_TIME_10PCT_SLC" + if [ "$LIFE_TIME_10PCT" -lt "$LIFE_TIME_10PCT_MLC" ]; then + LIFE_TIME_10PCT=$LIFE_TIME_10PCT_MLC + fi + if [ "$LIFE_TIME_10PCT" -lt "$LIFE_TIME_10PCT_RSVD" ]; then + LIFE_TIME_10PCT=$LIFE_TIME_10PCT_RSVD + fi + if [ "$LIFE_TIME_10PCT" -gt 10 ]; then + echo `basename $MMC`: expected life lime exceeded + else + echo `basename $MMC`: $(((10-$LIFE_TIME_10PCT)*10+5))% ± 5% life time remaining + fi + fi +done |