summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorLeo P2020-01-14 15:44:43 -0500
committerLeo P2020-01-14 15:44:43 -0500
commitce76a12c0df524549800a3881a8118befa4159ad (patch)
treefb9fe4d95a0322e8ed75a25d5f22732dd4361a98
downloadaur-ce76a12c0df524549800a3881a8118befa4159ad.tar.gz
atomic pi utils
-rw-r--r--.SRCINFO23
-rw-r--r--.gitignore3
-rw-r--r--PKGBUILD36
-rwxr-xr-xatomicpi-hold-mic18
-rwxr-xr-xatomicpi-hold-xmos20
-rwxr-xr-xatomicpi-reset-xmos2
-rw-r--r--lib_atomicpi.sh78
-rw-r--r--lib_gpio-present.sh12
-rw-r--r--lib_i2c-gpio-custom-filter.sh16
-rwxr-xr-xmmc-status27
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