37 lines
4.6 KiB
Nix
37 lines
4.6 KiB
Nix
{ config, lib, pkgs, ... }:
|
||
|
||
with lib;
|
||
|
||
let
|
||
cfg = config.hardware.uconsole-cm5-aio-v2;
|
||
|
||
# GPIO pin map matching the AIO v2 board hardware
|
||
# SDR (RTL-SDR): GPIO 7
|
||
# LoRa (S60127) : GPIO 16
|
||
# USB Hub Interne: GPIO 23
|
||
# GPS (GNSS) : GPIO 27
|
||
gpioMap = {
|
||
GPS = 27;
|
||
LORA = 16;
|
||
SDR = 7;
|
||
USB = 23;
|
||
};
|
||
|
||
# Generate a script that applies boot rail states via pinctrl
|
||
applyRailsScript = pkgs.writeShellScript "apply-aio-v2-rails" (
|
||
''
|
||
set -e
|
||
PINCTRL=${pkgs.libraspberrypip}/bin/pinctrl
|
||
''
|
||
+ concatStringsSep "" (mapAttrToList (name: pin: ''
|
||
if [ "${if cfg.bootRails.${name} then "1" else "0"}" = "1" ]; then
|
||
echo "AIO v2: ${name} (GPIO${toString pin}) → ON"
|
||
$PINCTRL set ${toString pin} op dh
|
||
else
|
||
echo "AIO v2: ${name} (GPIO${toString pin}) → OFF"
|
||
$PINCTRL set ${toString pin} op dl
|
||
fi
|
||
'') gpioMap)
|
||
);
|
||
|
||
# aiov2_ctl CLI tool ‘ä<E28098>™•Ñ<E280A2>¡•<C2A1><E280A2>™É½´<C2BD>¥Ñ!Õˆ°<CB86>…Ù…¥±…‰±”<C2B1>…Ì<E280A6><C38C>…¥½ØÉ}<7D>ѱ€(€<>…¥½ØÉ
|
||
ѱAœ€ô<EFBFBD>Á<EFBFBD>̹ÍÑ‘•¹Ø¹µ•É¥Ù…Ñ¥½¸<EFBFBD>É•Œ<EFBFBD>ì(€€€<EFBFBD>Á¹…µ”€ô€‰…¥½ØÉ}<EFBFBD>Ѱˆì(€€€<EFBFBD>Ù•ÉÍ¥½¸€ô€ˆÀµÕ¹ÍÑ…‰±”´ÈÀÈØ´ÀØ´ÄØˆì((€€€<EFBFBD>ÍÉŒ€ô<EFBFBD>Á<EFBFBD>̹™•Ñ<EFBFBD>¡É½µ¥Ñ!Õˆ<EFBFBD>ì(€€€€€<EFBFBD>½Ý¹•È€ô€‰¡…<EFBFBD>•É<EFBFBD>…‘<EFBFBD>•Ñ̈ì(€€€€€<EFBFBD>É•Á¼€ô€‰…¥½ØÉ}<EFBFBD>Ѱˆì(€€€€€<EFBFBD>ɕ؀ô€‰µ…¥¸ˆì(€€€€€<EFBFBD>¡…Í €ô€‰Í¡„ÈÔØµ¡Å=ÙLÅ,ÕÁYaɽUÔÁ¤ÕHåeÅI<EFBFBD>ÉTÍ™é‰äÙÕÕØÝ,ÀĈì(€€€<EFBFBD>ôì((€€€<EFBFBD>‘½¹ÑU¹Á…<EFBFBD>¬€ô<EFBFBD>ÑÉÕ”ì((€€€<EFBFBD>¥¹ÍÑ…±±A¡…Í”€ô€œœ(€€€€€<EFBFBD>µ‘¥È€µÀ€‘½Õн‰¥¸€‘½Õн͡…É”½…¥½ØÉ}<EFBFBD>Ѱ½¥µœ(€€€€€<EFBFBD><EFBFBD>À€‘ÍÉŒ½…¥½ØÉ}<EFBFBD>Ѱ¹Á䀑½Õн‰¥¸½…¥½ØÉ}<EFBFBD>Ѱ(€€€€€<EFBFBD><EFBFBD>¡µ½<EFBFBD>€¬Ý`€‘½Õн‰¥¸½…¥½ØÉ}<EFBFBD>Ѱ(€€€€€<EFBFBD>Á…Ñ<EFBFBD>¡M¡•‰…¹<EFBFBD>Ì€‘½Õн‰¥¸½…¥½ØÉ}<EFBFBD>Ѱ(€€€€€<EFBFBD>ÍÕ‰ÍÑ¥ÑÕÑ•%¹A±…<EFBFBD>”€‘½Õн‰¥¸½…¥½ØÉ}<EFBFBD>Ѱ<EFBFBD>p(€€€€€€€€´µÉ•Á±…<EFBFBD>”µ™…¥°€œˆ½ÕÍȽ±½<EFBFBD>…°½Í¡…É”½…¥½ØÉ}<EFBFBD>Ѱ½¥µœ¼œ€œˆ‘½Õн͡…É”½…¥½ØÉ}<EFBFBD>Ѱ½¥µœ¼œ(€€€€€<EFBFBD><EFBFBD>À€µÈ€‘ÍÉŒ½¥µœ¼¨€‘½Õн͡…É”½…¥½ØÉ}<EFBFBD>Ѱ½¥µœ¼(€€€€œœì((€€€<EFBFBD>µ•Ñ„€ô<EFBFBD>ì(€€€€€<EFBFBD>‘•Í<EFBFBD>É¥ÁÑ¥½¸€ô€‰!…<EFBFBD>•É…‘<EFBFBD>•ÑÌ<EFBFBD>Õ
|
||
½¹Í½±”<EFBFBD>%<<EFBFBD>ØÈ<EFBFBD>A%<<EFBFBD><EFBFBD>½¹Ñɽ°<EFBFBD>…¹<EFBFBD><EFBFBD>Ñ•±•µ•ÑÉä<EFBFBD>ѽ½°ˆì(€€€€€<EFBFBD>¡½µ•Á…<EFBFBD>”€ô€‰¡ÑÑÁÌè¼½<EFBFBD>¥Ñ¡Õˆ¹<EFBFBD>½´½¡…<EFBFBD>•É<EFBFBD>…‘<EFBFBD>•Ñ̽…¥½ØÉ}<EFBFBD>Ѱˆì(€€€€€<EFBFBD>±¥<EFBFBD>•¹Í”€ô<EFBFBD>±¥ˆ¹±¥<EFBFBD>•¹Í•̹µ¥Ðì(€€€€€<EFBFBD>µ…¥¹Ñ…¥¹•ÉÌ€ô<EFBFBD>Ý¥Ñ <EFBFBD>±¥ˆ¹µ…¥¹Ñ…¥¹•ÉÌì<EFBFBD>l<EFBFBD>tì(€€€€€<EFBFBD>Á±…Ñ™½ÉµÌ€ô<EFBFBD>l€‰……É<EFBFBD> ØÐµ±¥¹Õàˆ<EFBFBD>tì(€€€<EFBFBD>ôì(€<EFBFBD>ôì)¥¸<EFBFBD>ì(€<EFBFBD>½ÁÑ¥½¹Ì¹¡…ɑ݅ɔ¹Õ<EFBFBD>½¹Í½±”µ<EFBFBD>´Ôµ…¥¼µØÈ€ô<EFBFBD>ì(€€€<EFBFBD>•¹…‰±”€ô<EFBFBD>µ¹…‰±•=ÁÑ¥½¸€‰!…<EFBFBD>•É…‘<EFBFBD>•ÑÌ<EFBFBD>Õ
|
||
½¹Í½±”<EFBFBD>%<<EFBFBD>ØÈ<EFBFBD>‰½…É<EFBFBD><EFBFBD>ÍÕÁÁ½ÉЈì((€€€<EFBFBD>‰½½ÑI…¥±Ì€ô<EFBFBD>ì(€€€€€<EFBFBD>AL€ô<EFBFBD>µ=ÁÑ¥½¸<EFBFBD>ì(€€€€€€€<EFBFBD>ÑåÁ”€ô<EFBFBD>ÑåÁ•̹‰½½°ì(€€€€€€€<EFBFBD>‘•™…ձЀô<EFBFBD>™…±Í”ì(€€€€€€€<EFBFBD>‘•Í<EFBFBD>É¥ÁÑ¥½¸€ô€‰¹…‰±”<EFBFBD>AL<EFBFBD>µ½‘Õ±”<EFBFBD>…Ð<EFBFBD>‰½½Ð€¡A%<€Èܤˆì(€€€€€<EFBFBD>ôì(€€€€€<EFBFBD>1=I€ô<EFBFBD>µ=ÁÑ¥½¸<EFBFBD>ì(€€€€€€€<EFBFBD>ÑåÁ”€ô<EFBFBD>ÑåÁ•̹‰½½°ì(€€€€€€€<EFBFBD>‘•™…ձЀô<EFBFBD>™…±Í”ì(€€€€€€€<EFBFBD>‘•Í<EFBFBD>É¥ÁÑ¥½¸€ô€‰¹…‰±”<EFBFBD>1½I„<EFBFBD>µ½‘Õ±”<EFBFBD>…Ð<EFBFBD>‰½½Ð€¡A%<€Äؤˆì(€€€€€<EFBFBD>ôì(€€€€€<EFBFBD>MH€ô<EFBFBD>µ=ÁÑ¥½¸<EFBFBD>ì(€€€€€€€<EFBFBD>ÑåÁ”€ô<EFBFBD>ÑåÁ•̹‰½½°ì(€€€€€€€<EFBFBD>‘•™…ձЀô<EFBFBD>™…±Í”ì(€€€€€€€<EFBFBD>‘•Í<EFBFBD>É¥ÁÑ¥½¸€ô€‰¹…‰±”<EFBFBD>M<EFBFBD>µ½‘Õ±”<EFBFBD>…Ð<EFBFBD>‰½½Ð€¡A%<€Ü¤ˆì(€€€€€<EFBFBD>ôì(€€€€€<EFBFBD>UM€ô<EFBFBD>µ=ÁÑ¥½¸<EFBFBD>ì(€€€€€€€<EFBFBD>ÑåÁ”€ô<EFBFBD>ÑåÁ•̹‰½½°ì(€€€€€€€<EFBFBD>‘•™…ձЀô<EFBFBD>™…±Í”ì(€€€€€€€<EFBFBD>‘•Í<EFBFBD>É¥ÁÑ¥½¸€ô€‰¹…‰±”<EFBFBD>¥¹Ñ•ɹ…°<EFBFBD>UM<EFBFBD>¡Õˆ<EFBFBD>…Ð<EFBFBD>‰½½Ð€¡A%<€È̤ˆì(€€€€€<EFBFBD>ôì(€€€<EFBFBD>ôì((€€€<EFBFBD>Á…<EFBFBD>…<EFBFBD>”€ô<EFBFBD>µ=ÁÑ¥½¸<EFBFBD>ì(€€€€€<EFBFBD>ÑåÁ”€ô<EFBFBD>ÑåÁ•̹Á…<EFBFBD>…<EFBFBD>”ì(€€€€€<EFBFBD>‘•™…ձЀô<EFBFBD>…¥½ØÉ
|
||
ѱAœì(€€€€€<EFBFBD>‘•™…Õ±ÑQ•áЀô<EFBFBD>±¥Ñ•É…±áÁÉ•ÍÍ¥½¸€‰…¥½ØÉ
|
||
ѱAœˆì(€€€€€<EFBFBD>‘•Í<EFBFBD>É¥ÁÑ¥½¸€ô€‰…¥½ØÉ}<EFBFBD>Ѱ<EFBFBD>Á…<EFBFBD>…<EFBFBD>”<EFBFBD>Ѽ<EFBFBD>ÕÍ”ˆì(€€€<EFBFBD>ôì((€€€<EFBFBD>•¹…‰±•AL€ô<EFBFBD>µ=ÁÑ¥½¸<EFBFBD>ì(€€€€€<EFBFBD>ÑåÁ”€ô<EFBFBD>ÑåÁ•̹‰½½°ì(€€€€€<EFBFBD>‘•™…ձЀô<EFBFBD>™…±Í”ì(€€€€€<EFBFBD>‘•Í<EFBFBD>É¥ÁÑ¥½¸€ô€œœ(€€€€€€€<EFBFBD>¹…‰±”<EFBFBD>AL<EFBFBD>UIP€ ½‘•ؽÑÑå5À<EFBFBD>…ЀäØÀÀ<EFBFBD>‰…Õ<EFBFBD>¤¸(€€€€€€€<EFBFBD>I•ÅեɕÌ<EFBFBD>•¹…‰±¥¹œ<EFBFBD>UIP<EFBFBD>½¸<EFBFBD>Ñ¡”<EFBFBD>
|
||
4Ô<EFBFBD>Ù¥„<EFBFBD>‰½½Ð¹•ɹ•±A…É…µÌ¸(€€€€€€œœì(€€€<EFBFBD>ôì((€€€<EFBFBD>•¹…‰±•U$€ô<EFBFBD>µ=ÁÑ¥½¸<EFBFBD>ì(€€€€€<EFBFBD>ÑåÁ”€ô<EFBFBD>ÑåÁ•̹‰½½°ì(€€€€€<EFBFBD>‘•™…ձЀô<EFBFBD>™…±Í”ì(€€€€€<EFBFBD>‘•Í<EFBFBD>É¥ÁÑ¥½¸€ô€œœ(€€€€€€€<EFBFBD>¹…‰±”<EFBFBD>Ñ¡”<EFBFBD>ÍåÍÑ•´<EFBFBD>ÑÉ…ä<EFBFBD>U$<EFBFBD>™½È<EFBFBD>…¥½ØÉ}<EFBFBD>Ѱ¸(€€€€€€€<EFBFBD>I•ÅեɕÌ<EFBFBD>„<EFBFBD>‘•ÍѽÀ<EFBFBD>•¹Ù¥É½¹µ•¹Ð<EFBFBD>Ý¥Ñ <EFBFBD>ÍåÍÑ•´<EFBFBD>ÑÉ…ä<EFBFBD>ÍÕÁÁ½Éи(€€€€€€œœì(€€€<EFBFBD>ôì(€<EFBFBD>ôì((€<EFBFBD><EFBFBD>½¹™¥œ€ô<EFBFBD>µ%˜<EFBFBD><EFBFBD>™œ¹•¹…‰±”<EFBFBD>ì(€€€€Œ<EFBFBD>A…<EFBFBD>…<EFBFBD>”<EFBFBD>Ñ¡”<EFBFBD>…¥½ØÉ}<EFBFBD>Ѱ<EFBFBD>ѽ½°€¬<EFBFBD>Á¥¹<EFBFBD>Ñɰ(€€€<EFBFBD>•¹Ù¥É½¹µ•¹Ð¹ÍåÍÑ•µA…<EFBFBD>…<EFBFBD>•Ì€ô<EFBFBD>Ý¥Ñ <EFBFBD>Á<EFBFBD>Ìì<EFBFBD>l(€€€€€<EFBFBD><EFBFBD>™œ¹Á…<EFBFBD>…<EFBFBD>”(€€€€€<EFBFBD>±¥‰É…ÍÁ‰•ÉÉåÁ¤€€€€€€Œ<EFBFBD>Áɽ٥‘•Ì<EFBFBD>Á¥¹<EFBFBD>Ñɰ(€€€<EFBFBD>tì((€€€€Œ<EFBFBD> ½½Ð<EFBFBD>É…¥°<EFBFBD>ÍåÍÑ•µ<EFBFBD><EFBFBD>½¹•Í¡½Ð<EFBFBD>Í•ÉÙ¥<EFBFBD>”(€€€<EFBFBD>ÍåÍÑ•µ<EFBFBD>¹Í•ÉÙ¥<EFBFBD>•̹…¥½ØÈµÉ…¥±Ìµ‰½½Ð€ô<EFBFBD>ì(€€€€€<EFBFBD>‘•Í<EFBFBD>É¥ÁÑ¥½¸€ô€‰ÁÁ±ä<EFBFBD>%<<EFBFBD>ØÈ<EFBFBD>A%<<EFBFBD>É…¥°<EFBFBD>‰½½Ð<EFBFBD>Íхѕ̈ì(€€€€€<EFBFBD>…™Ñ•È€ô<EFBFBD>l€‰±½<EFBFBD>…°µ™Ì¹Ñ…É<EFBFBD>•Ј<EFBFBD>tì(€€€€€<EFBFBD>Ý…¹ÑÌ€ô<EFBFBD>l€‰±½<EFBFBD>…°µ™Ì¹Ñ…É<EFBFBD>•Ј<EFBFBD>tì(€€€€€<EFBFBD>‰•™½É”€ô<EFBFBD>l€‰µÕ±Ñ¤µÕ͕ȹхÉ<EFBFBD>•Ј<EFBFBD>tì(€€€€€<EFBFBD>Ý…¹Ñ•‘ ä€ô<EFBFBD>l€‰µÕ±Ñ¤µÕ͕ȹхÉ<EFBFBD>•Ј<EFBFBD>tì(€€€€€<EFBFBD>Í•ÉÙ¥<EFBFBD>•
|
||
½¹™¥œ€ô<EFBFBD>ì(€€€€€€€<EFBFBD>QåÁ”€ô€‰½¹•Í¡½Ðˆì(€€€€€€€<EFBFBD>á•<EFBFBD>MÑ…ÉЀô€ˆ‘í…ÁÁ±åI…¥±ÍM<EFBFBD>É¥ÁÑôˆì(€€€€€€€<EFBFBD>I•µ…¥¹™Ñ•Éá¥Ð€ô<EFBFBD>ÑÉÕ”ì(€€€€€<EFBFBD>ôì(€€€<EFBFBD>ôì((€€€€Œ<EFBFBD>AL<EFBFBD><EFBFBD>½¹™¥<EFBFBD>ÕÉ…Ñ¥½¸(€€€<EFBFBD>‰½½Ð¹•ɹ•±A…É…µÌ€ô<EFBFBD>µ%˜<EFBFBD><EFBFBD>™œ¹•¹…‰±•AL<EFBFBD>l€‰Õ…ÉÐÀõ½¸ˆ<EFBFBD>tì((€€€<EFBFBD>ÕÍ•É̹ÕÍ•ÉÌ€ô<EFBFBD>µ%˜<EFBFBD><EFBFBD>™œ¹•¹…‰±•AL<EFBFBD>ì(€€€€€<EFBFBD><EFBFBD>½ÉÑ¥Õ´€ô<EFBFBD>ì(€€€€€€€<EFBFBD>•áÑɅɽÕÁÌ€ô<EFBFBD>l€‰‘¥…±½ÕЈ<EFBFBD>tì(€€€€€<EFBFBD>ôì(€€€<EFBFBD>ôì((€€€€Œ<EFBFBD>U$<EFBFBD>…ÕѽÍÑ…ÉЀ¡a¤(€€€<EFBFBD>ÍåÍÑ•µ<EFBFBD>¹Õ͕ȹ͕ÉÙ¥<EFBFBD>•̹…¥½ØÈµ<EFBFBD>Ѱµ<EFBFBD>Õ¤€ô<EFBFBD>µ%˜<EFBFBD><EFBFBD>™œ¹•¹…‰±•U$<EFBFBD>ì(€€€€€<EFBFBD>‘•Í<EFBFBD>É¥ÁÑ¥½¸€ô€‰%<<EFBFBD>ØÈ<EFBFBD>MåÍÑ•´<EFBFBD>QÉ…ä<EFBFBD>
|
||
½¹Ñɽ±±•Ȉì(€€€€€<EFBFBD>…™Ñ•È€ô<EFBFBD>l€‰<EFBFBD>É…Á¡¥<EFBFBD>…°µÍ•ÍÍ¥½¸¹Ñ…É<EFBFBD>•Ј<EFBFBD>tì(€€€€€<EFBFBD>Ý…¹ÑÌ€ô<EFBFBD>l€‰<EFBFBD>É…Á¡¥<EFBFBD>…°µÍ•ÍÍ¥½¸¹Ñ…É<EFBFBD>•Ј<EFBFBD>tì(€€€€€<EFBFBD>Ý…¹Ñ•‘ ä€ô<EFBFBD>l€‰<EFBFBD>É…Á¡¥<EFBFBD>…°µÍ•ÍÍ¥½¸¹Ñ…É<EFBFBD>•Ј<EFBFBD>tì(€€€€€<EFBFBD>Í•ÉÙ¥<EFBFBD>•
|
||
½¹™¥œ€ô<EFBFBD>ì(€€€€€€€<EFBFBD>QåÁ”€ô€‰Í¥µÁ±”ˆì(€€€€€€€<EFBFBD>á•<EFBFBD>MÑ…ÉЀô€ˆ‘í<EFBFBD>™œ¹Á…<EFBFBD>…<EFBFBD>•ô½‰¥¸½…¥½ØÉ}<EFBFBD>Ѱ€´µ<EFBFBD>Õ¤ˆì(€€€€€€€<EFBFBD>I•ÍÑ…ÉЀô€‰½¸µ™…¥±ÕÉ”ˆì(€€€€€€€<EFBFBD>I•ÍÑ…ÉÑM•Œ€ô€Ôì(€€€€€<EFBFBD>ôì(€€€€€<EFBFBD>•¹Ù¥É½¹µ•¹Ð€ô<EFBFBD>ì(€€€€€€€<EFBFBD>%=XÉ}
|
||
Q1} U€ô€ˆÀˆì(€€€€€<EFBFBD>ôì(€€€<EFBFBD>ôì(€<EFBFBD>ôì)ô |