diff --git a/README.md b/README.md index 4cfc0f28..7f591cc6 100644 --- a/README.md +++ b/README.md @@ -55,6 +55,8 @@ cd basicstation make platform=rpi variant=std ``` +If you're running a 64-bit Raspbian, substitute `platform=rpi` with `platform=rpi64`. + The build process consists of the following steps: * Fetch and build dependencies, namely [mbedTLS](https://github.com/ARMmbed/mbedtls) and [libloragw](https://github.com/Lora-net/lora_gateway) diff --git a/deps/lgw/prep.sh b/deps/lgw/prep.sh index bd4d54ff..2d2cb7c4 100755 --- a/deps/lgw/prep.sh +++ b/deps/lgw/prep.sh @@ -49,4 +49,13 @@ if [[ ! -d platform-${platform} ]]; then echo "Applying ${lgwversion}-${platform}.patch ..." git apply ../${lgwversion}-${platform}.patch fi + + # share the same patch set for rpi and rpi64 platforms. + if [ "${platform}" = "rpi64" ]; then + echo "Treating rpi64 platform as rpi for patching/dependency purposes..." + if [ -f ../${lgwversion}-rpi.patch ]; then + echo "Applying ${lgwversion}-rpi.patch ..." + git apply ../${lgwversion}-rpi.patch + fi + fi fi diff --git a/deps/lgw1302/prep.sh b/deps/lgw1302/prep.sh index 011ac9d3..be349b0f 100755 --- a/deps/lgw1302/prep.sh +++ b/deps/lgw1302/prep.sh @@ -50,4 +50,12 @@ if [[ ! -d platform-${platform} ]]; then echo "Applying ${lgwversion}-${platform}.patch ..." git apply ../${lgwversion}-${platform}.patch fi + # share the same patch set for rpi and rpi64 platforms. + if [ "${platform}" = "rpi64" ]; then + echo "Treating rpi64 platform as rpi for patching/dependency purposes..." + if [ -f ../${lgwversion}-rpi.patch ]; then + echo "Applying ${lgwversion}-rpi.patch ..." + git apply ../${lgwversion}-rpi.patch + fi + fi fi diff --git a/examples/sensecap-m1/README.md b/examples/sensecap-m1/README.md new file mode 100644 index 00000000..692ee938 --- /dev/null +++ b/examples/sensecap-m1/README.md @@ -0,0 +1,5 @@ +These are the configuration files needed for the Sensecap M1 Helium miner. + +To build for this platform, please `make platform=rpi64 variant=std` first. + +Two variants of the LNS configuration folder are provided - one for the EU server, one for the US server. Only the EU version sees regular testing. diff --git a/examples/sensecap-m1/lns-ttn-eu/.gitignore b/examples/sensecap-m1/lns-ttn-eu/.gitignore new file mode 100644 index 00000000..cc6ee022 --- /dev/null +++ b/examples/sensecap-m1/lns-ttn-eu/.gitignore @@ -0,0 +1,4 @@ +tc-bak.* +station.log +station.pid + diff --git a/examples/sensecap-m1/lns-ttn-eu/station.conf b/examples/sensecap-m1/lns-ttn-eu/station.conf new file mode 100644 index 00000000..4618940f --- /dev/null +++ b/examples/sensecap-m1/lns-ttn-eu/station.conf @@ -0,0 +1,53 @@ +{ + /* If slave-X.conf present this acts as default settings */ + "SX1302_conf": { /* Actual channel plan is controlled by server */ + "device": "/dev/spidev0.0", + "lorawan_public": true, /* is default */ + "clksrc": 0, /* radio_0 provides clock to concentrator */ + "full_duplex": false, + "radio_0": { + /* freq/enable provided by LNS - only HW specific settings listed here */ + "type": "SX1250", + "rssi_offset": -215.4, + "rssi_tcomp": {"coeff_a": 0, "coeff_b": 0, "coeff_c": 20.41, "coeff_d": 2162.56, "coeff_e": 0}, + "tx_enable": true, + "antenna_gain": 0, /* antenna gain, in dBi */ + "tx_gain_lut":[ + {"rf_power": 12, "pa_gain": 0, "pwr_idx": 15}, + {"rf_power": 13, "pa_gain": 0, "pwr_idx": 16}, + {"rf_power": 14, "pa_gain": 0, "pwr_idx": 17}, + {"rf_power": 15, "pa_gain": 0, "pwr_idx": 19}, + {"rf_power": 16, "pa_gain": 0, "pwr_idx": 20}, + {"rf_power": 17, "pa_gain": 0, "pwr_idx": 22}, + {"rf_power": 18, "pa_gain": 1, "pwr_idx": 1}, + {"rf_power": 19, "pa_gain": 1, "pwr_idx": 2}, + {"rf_power": 20, "pa_gain": 1, "pwr_idx": 3}, + {"rf_power": 21, "pa_gain": 1, "pwr_idx": 4}, + {"rf_power": 22, "pa_gain": 1, "pwr_idx": 5}, + {"rf_power": 23, "pa_gain": 1, "pwr_idx": 6}, + {"rf_power": 24, "pa_gain": 1, "pwr_idx": 7}, + {"rf_power": 25, "pa_gain": 1, "pwr_idx": 9}, + {"rf_power": 26, "pa_gain": 1, "pwr_idx": 11}, + {"rf_power": 27, "pa_gain": 1, "pwr_idx": 14} + ] + }, + "radio_1": { + "type": "SX1250", + "rssi_offset": -215.4, + "rssi_tcomp": {"coeff_a": 0, "coeff_b": 0, "coeff_c": 20.41, "coeff_d": 2162.56, "coeff_e": 0}, + "tx_enable": false + } + /* chan_multiSF_X, chan_Lora_std, chan_FSK provided by LNS */ + }, + "station_conf": { + "radio_init": "rinit.sh", + "RADIO_INIT_WAIT": "5s", + "RX_POLL_INTV": "10ms", + "TC_TIMEOUT": "360s", + "log_file": "stderr", /* "station.log" */ + "log_level": "DEBUG", /* XDEBUG,DEBUG,VERBOSE,INFO,NOTICE,WARNING,ERROR,CRITICAL */ + "log_size": 10000000, + "log_rotate": 3 + } +} + diff --git a/examples/sensecap-m1/lns-ttn-eu/tc.trust b/examples/sensecap-m1/lns-ttn-eu/tc.trust new file mode 100644 index 00000000..43b222a6 --- /dev/null +++ b/examples/sensecap-m1/lns-ttn-eu/tc.trust @@ -0,0 +1,30 @@ +-----BEGIN CERTIFICATE----- +MIIFFjCCAv6gAwIBAgIRAJErCErPDBinU/bWLiWnX1owDQYJKoZIhvcNAQELBQAw +TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh +cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjAwOTA0MDAwMDAw +WhcNMjUwOTE1MTYwMDAwWjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg +RW5jcnlwdDELMAkGA1UEAxMCUjMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQC7AhUozPaglNMPEuyNVZLD+ILxmaZ6QoinXSaqtSu5xUyxr45r+XXIo9cP +R5QUVTVXjJ6oojkZ9YI8QqlObvU7wy7bjcCwXPNZOOftz2nwWgsbvsCUJCWH+jdx +sxPnHKzhm+/b5DtFUkWWqcFTzjTIUu61ru2P3mBw4qVUq7ZtDpelQDRrK9O8Zutm +NHz6a4uPVymZ+DAXXbpyb/uBxa3Shlg9F8fnCbvxK/eG3MHacV3URuPMrSXBiLxg +Z3Vms/EY96Jc5lP/Ooi2R6X/ExjqmAl3P51T+c8B5fWmcBcUr2Ok/5mzk53cU6cG +/kiFHaFpriV1uxPMUgP17VGhi9sVAgMBAAGjggEIMIIBBDAOBgNVHQ8BAf8EBAMC +AYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMBIGA1UdEwEB/wQIMAYB +Af8CAQAwHQYDVR0OBBYEFBQusxe3WFbLrlAJQOYfr52LFMLGMB8GA1UdIwQYMBaA +FHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcw +AoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzAnBgNVHR8EIDAeMBygGqAYhhZodHRw +Oi8veDEuYy5sZW5jci5vcmcvMCIGA1UdIAQbMBkwCAYGZ4EMAQIBMA0GCysGAQQB +gt8TAQEBMA0GCSqGSIb3DQEBCwUAA4ICAQCFyk5HPqP3hUSFvNVneLKYY611TR6W +PTNlclQtgaDqw+34IL9fzLdwALduO/ZelN7kIJ+m74uyA+eitRY8kc607TkC53wl +ikfmZW4/RvTZ8M6UK+5UzhK8jCdLuMGYL6KvzXGRSgi3yLgjewQtCPkIVz6D2QQz +CkcheAmCJ8MqyJu5zlzyZMjAvnnAT45tRAxekrsu94sQ4egdRCnbWSDtY7kh+BIm +lJNXoB1lBMEKIq4QDUOXoRgffuDghje1WrG9ML+Hbisq/yFOGwXD9RiX8F6sw6W4 +avAuvDszue5L3sz85K+EC4Y/wFVDNvZo4TYXao6Z0f+lQKc0t8DQYzk1OXVu8rp2 +yJMC6alLbBfODALZvYH7n7do1AZls4I9d1P4jnkDrQoxB3UqQ9hVl3LEKQ73xF1O +yK5GhDDX8oVfGKF5u+decIsH4YaTw7mP3GFxJSqv3+0lUFJoi5Lc5da149p90Ids +hCExroL1+7mryIkXPeFM5TgO9r0rvZaBFOvV2z0gp35Z0+L4WPlbuEjN/lxPFin+ +HlUjr8gRsI3qfJOQFy/9rKIJR0Y/8Omwt/8oTWgy1mdeHmmjk7j1nYsvC9JSQ6Zv +MldlTTKB3zhThV1+XWYp6rjd5JW1zbVWEkLNxE7GJThEUG3szgBVGP7pSWTUTsqX +nLRbwHOoq7hHwg== +-----END CERTIFICATE----- diff --git a/examples/sensecap-m1/lns-ttn-eu/tc.uri b/examples/sensecap-m1/lns-ttn-eu/tc.uri new file mode 100644 index 00000000..d2a23b5c --- /dev/null +++ b/examples/sensecap-m1/lns-ttn-eu/tc.uri @@ -0,0 +1 @@ +wss://lns.eu.thethings.network:443 diff --git a/examples/sensecap-m1/lns-ttn-eu/version.txt b/examples/sensecap-m1/lns-ttn-eu/version.txt new file mode 100644 index 00000000..2165f8f9 --- /dev/null +++ b/examples/sensecap-m1/lns-ttn-eu/version.txt @@ -0,0 +1 @@ +2.0.4 diff --git a/examples/sensecap-m1/lns-ttn-us/.gitignore b/examples/sensecap-m1/lns-ttn-us/.gitignore new file mode 100644 index 00000000..cc6ee022 --- /dev/null +++ b/examples/sensecap-m1/lns-ttn-us/.gitignore @@ -0,0 +1,4 @@ +tc-bak.* +station.log +station.pid + diff --git a/examples/sensecap-m1/lns-ttn-us/station.conf b/examples/sensecap-m1/lns-ttn-us/station.conf new file mode 100644 index 00000000..4618940f --- /dev/null +++ b/examples/sensecap-m1/lns-ttn-us/station.conf @@ -0,0 +1,53 @@ +{ + /* If slave-X.conf present this acts as default settings */ + "SX1302_conf": { /* Actual channel plan is controlled by server */ + "device": "/dev/spidev0.0", + "lorawan_public": true, /* is default */ + "clksrc": 0, /* radio_0 provides clock to concentrator */ + "full_duplex": false, + "radio_0": { + /* freq/enable provided by LNS - only HW specific settings listed here */ + "type": "SX1250", + "rssi_offset": -215.4, + "rssi_tcomp": {"coeff_a": 0, "coeff_b": 0, "coeff_c": 20.41, "coeff_d": 2162.56, "coeff_e": 0}, + "tx_enable": true, + "antenna_gain": 0, /* antenna gain, in dBi */ + "tx_gain_lut":[ + {"rf_power": 12, "pa_gain": 0, "pwr_idx": 15}, + {"rf_power": 13, "pa_gain": 0, "pwr_idx": 16}, + {"rf_power": 14, "pa_gain": 0, "pwr_idx": 17}, + {"rf_power": 15, "pa_gain": 0, "pwr_idx": 19}, + {"rf_power": 16, "pa_gain": 0, "pwr_idx": 20}, + {"rf_power": 17, "pa_gain": 0, "pwr_idx": 22}, + {"rf_power": 18, "pa_gain": 1, "pwr_idx": 1}, + {"rf_power": 19, "pa_gain": 1, "pwr_idx": 2}, + {"rf_power": 20, "pa_gain": 1, "pwr_idx": 3}, + {"rf_power": 21, "pa_gain": 1, "pwr_idx": 4}, + {"rf_power": 22, "pa_gain": 1, "pwr_idx": 5}, + {"rf_power": 23, "pa_gain": 1, "pwr_idx": 6}, + {"rf_power": 24, "pa_gain": 1, "pwr_idx": 7}, + {"rf_power": 25, "pa_gain": 1, "pwr_idx": 9}, + {"rf_power": 26, "pa_gain": 1, "pwr_idx": 11}, + {"rf_power": 27, "pa_gain": 1, "pwr_idx": 14} + ] + }, + "radio_1": { + "type": "SX1250", + "rssi_offset": -215.4, + "rssi_tcomp": {"coeff_a": 0, "coeff_b": 0, "coeff_c": 20.41, "coeff_d": 2162.56, "coeff_e": 0}, + "tx_enable": false + } + /* chan_multiSF_X, chan_Lora_std, chan_FSK provided by LNS */ + }, + "station_conf": { + "radio_init": "rinit.sh", + "RADIO_INIT_WAIT": "5s", + "RX_POLL_INTV": "10ms", + "TC_TIMEOUT": "360s", + "log_file": "stderr", /* "station.log" */ + "log_level": "DEBUG", /* XDEBUG,DEBUG,VERBOSE,INFO,NOTICE,WARNING,ERROR,CRITICAL */ + "log_size": 10000000, + "log_rotate": 3 + } +} + diff --git a/examples/sensecap-m1/lns-ttn-us/tc.trust b/examples/sensecap-m1/lns-ttn-us/tc.trust new file mode 100644 index 00000000..43b222a6 --- /dev/null +++ b/examples/sensecap-m1/lns-ttn-us/tc.trust @@ -0,0 +1,30 @@ +-----BEGIN CERTIFICATE----- +MIIFFjCCAv6gAwIBAgIRAJErCErPDBinU/bWLiWnX1owDQYJKoZIhvcNAQELBQAw +TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh +cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjAwOTA0MDAwMDAw +WhcNMjUwOTE1MTYwMDAwWjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg +RW5jcnlwdDELMAkGA1UEAxMCUjMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQC7AhUozPaglNMPEuyNVZLD+ILxmaZ6QoinXSaqtSu5xUyxr45r+XXIo9cP +R5QUVTVXjJ6oojkZ9YI8QqlObvU7wy7bjcCwXPNZOOftz2nwWgsbvsCUJCWH+jdx +sxPnHKzhm+/b5DtFUkWWqcFTzjTIUu61ru2P3mBw4qVUq7ZtDpelQDRrK9O8Zutm +NHz6a4uPVymZ+DAXXbpyb/uBxa3Shlg9F8fnCbvxK/eG3MHacV3URuPMrSXBiLxg +Z3Vms/EY96Jc5lP/Ooi2R6X/ExjqmAl3P51T+c8B5fWmcBcUr2Ok/5mzk53cU6cG +/kiFHaFpriV1uxPMUgP17VGhi9sVAgMBAAGjggEIMIIBBDAOBgNVHQ8BAf8EBAMC +AYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMBIGA1UdEwEB/wQIMAYB +Af8CAQAwHQYDVR0OBBYEFBQusxe3WFbLrlAJQOYfr52LFMLGMB8GA1UdIwQYMBaA +FHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcw +AoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzAnBgNVHR8EIDAeMBygGqAYhhZodHRw +Oi8veDEuYy5sZW5jci5vcmcvMCIGA1UdIAQbMBkwCAYGZ4EMAQIBMA0GCysGAQQB +gt8TAQEBMA0GCSqGSIb3DQEBCwUAA4ICAQCFyk5HPqP3hUSFvNVneLKYY611TR6W +PTNlclQtgaDqw+34IL9fzLdwALduO/ZelN7kIJ+m74uyA+eitRY8kc607TkC53wl +ikfmZW4/RvTZ8M6UK+5UzhK8jCdLuMGYL6KvzXGRSgi3yLgjewQtCPkIVz6D2QQz +CkcheAmCJ8MqyJu5zlzyZMjAvnnAT45tRAxekrsu94sQ4egdRCnbWSDtY7kh+BIm +lJNXoB1lBMEKIq4QDUOXoRgffuDghje1WrG9ML+Hbisq/yFOGwXD9RiX8F6sw6W4 +avAuvDszue5L3sz85K+EC4Y/wFVDNvZo4TYXao6Z0f+lQKc0t8DQYzk1OXVu8rp2 +yJMC6alLbBfODALZvYH7n7do1AZls4I9d1P4jnkDrQoxB3UqQ9hVl3LEKQ73xF1O +yK5GhDDX8oVfGKF5u+decIsH4YaTw7mP3GFxJSqv3+0lUFJoi5Lc5da149p90Ids +hCExroL1+7mryIkXPeFM5TgO9r0rvZaBFOvV2z0gp35Z0+L4WPlbuEjN/lxPFin+ +HlUjr8gRsI3qfJOQFy/9rKIJR0Y/8Omwt/8oTWgy1mdeHmmjk7j1nYsvC9JSQ6Zv +MldlTTKB3zhThV1+XWYp6rjd5JW1zbVWEkLNxE7GJThEUG3szgBVGP7pSWTUTsqX +nLRbwHOoq7hHwg== +-----END CERTIFICATE----- diff --git a/examples/sensecap-m1/lns-ttn-us/tc.uri b/examples/sensecap-m1/lns-ttn-us/tc.uri new file mode 100644 index 00000000..48d6f831 --- /dev/null +++ b/examples/sensecap-m1/lns-ttn-us/tc.uri @@ -0,0 +1 @@ +wss://lns.us.thethings.network:443 diff --git a/examples/sensecap-m1/lns-ttn-us/version.txt b/examples/sensecap-m1/lns-ttn-us/version.txt new file mode 100644 index 00000000..2165f8f9 --- /dev/null +++ b/examples/sensecap-m1/lns-ttn-us/version.txt @@ -0,0 +1 @@ +2.0.4 diff --git a/examples/sensecap-m1/reset_lgw.sh b/examples/sensecap-m1/reset_lgw.sh new file mode 100755 index 00000000..d2c7be3a --- /dev/null +++ b/examples/sensecap-m1/reset_lgw.sh @@ -0,0 +1,69 @@ +#!/bin/sh + +# This script has been modified from the CoreCell platform script to work on the Sensecap M1 Helium hotspot. +# +# +# Usage examples: +# ./reset_lgw.sh stop +# ./reset_lgw.sh start + +# GPIO mapping has to be adapted with HW +# + +SX1302_RESET_PIN=23 +SX1302_POWER_EN_PIN=18 + +WAIT_GPIO() { + sleep 0.1 +} + +init() { + # setup GPIOs + echo "$SX1302_RESET_PIN" > /sys/class/gpio/export; WAIT_GPIO + echo "$SX1302_POWER_EN_PIN" > /sys/class/gpio/export; WAIT_GPIO + + # set GPIOs as output + echo "out" > /sys/class/gpio/gpio$SX1302_RESET_PIN/direction; WAIT_GPIO + echo "out" > /sys/class/gpio/gpio$SX1302_POWER_EN_PIN/direction; WAIT_GPIO +} + +reset() { + echo "Sensecap M1 reset through GPIO$SX1302_RESET_PIN..." + echo "Sensecap M1 power enable through GPIO$SX1302_POWER_EN_PIN..." + + # write output for SX1302 CoreCell power_enable and reset + echo "1" > /sys/class/gpio/gpio$SX1302_POWER_EN_PIN/value; WAIT_GPIO + + echo "1" > /sys/class/gpio/gpio$SX1302_RESET_PIN/value; WAIT_GPIO + echo "0" > /sys/class/gpio/gpio$SX1302_RESET_PIN/value; WAIT_GPIO +} + +term() { + # cleanup all GPIOs + if [ -d /sys/class/gpio/gpio$SX1302_RESET_PIN ] + then + echo "$SX1302_RESET_PIN" > /sys/class/gpio/unexport; WAIT_GPIO + fi + if [ -d /sys/class/gpio/gpio$SX1302_POWER_EN_PIN ] + then + echo "$SX1302_POWER_EN_PIN" > /sys/class/gpio/unexport; WAIT_GPIO + fi +} + +case "$1" in + start) + term # just in case + init + reset + ;; + stop) + reset + term + ;; + *) + echo "Usage: $0 {start|stop}" + exit 1 + ;; +esac + +exit 0 diff --git a/examples/sensecap-m1/start-station.sh b/examples/sensecap-m1/start-station.sh new file mode 100755 index 00000000..34d21410 --- /dev/null +++ b/examples/sensecap-m1/start-station.sh @@ -0,0 +1,88 @@ +#!/bin/sh + +# --- Revised 3-Clause BSD License --- +# Copyright Semtech Corporation 2022. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# * Neither the name of the Semtech corporation nor the names of its +# contributors may be used to endorse or promote products derived from this +# software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL SEMTECH CORPORATION. BE LIABLE FOR ANY DIRECT, +# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +RED='\033[0;31m' +GREEN='\033[0;32m' +NC='\033[0m' # No Color + +# A POSIX variable +OPTIND=1 # Reset in case getopts has been used previously in the shell. + +# Initialize our own variables: +lns_config="" +variant=std + +show_help() +{ + printf "$GREEN" + printf "\tUsage: ./start-station.sh -l {lns-home} -d\n" + printf "\t-l : LNS configuration folder \n" + printf "\t-d : To run debug variant of station\n" + printf "$NC" + printf "\t\t e.g: ./start-station.sh -l ./lns-ttn\n" + printf "\t\t ./start-station.sh -dl ./lns-ttn\n" + exit +} + + +while getopts "h?dl:" opt; do + case "$opt" in + h|\?) + show_help + exit 0 + ;; + d) variant=debug + ;; + l) lns_config=$OPTARG + ;; + esac +done + +shift $((OPTIND-1)) + +[ "${1:-}" = "--" ] && shift + + +if [ -z "$lns_config" ]; then + printf "$RED" + printf "$RED \tError: No LNS home folder provided$NC\n" + printf "$NC" + show_help +fi + +STATION_BIN="../../build-rpi64-$variant/bin/station" + + +if [ -f "$STATION_BIN" ]; then + printf "Using variant=$variant, lns_config='$lns_config'\n" + printf "$GREEN Starting Station ... $NC\n" + $STATION_BIN -h $lns_config +else + printf "$RED [ERROR]: Binary not found @ $STATION_BIN $NC\n" +fi diff --git a/setup.gmk b/setup.gmk index d7c43636..08e0dbed 100644 --- a/setup.gmk +++ b/setup.gmk @@ -45,6 +45,7 @@ ARCH.linuxV2 = x86_64-linux-gnu ARCH.linuxpico = x86_64-linux-gnu ARCH.corecell = arm-linux-gnueabihf ARCH.rpi = arm-linux-gnueabihf +ARCH.rpi64 = aarch64-linux-gnu ARCH.kerlink = arm-klk-linux-gnueabi ARCH=${ARCH.${platform}} @@ -82,6 +83,7 @@ BD=build-${platform}-${variant} # -- Architecture specific CFG.arm-linux-gnueabihf = linux +CFG.aarch64-linux-gnu = linux # CFG.x86_64-linux-gnu = linux # -- Variant specific @@ -102,6 +104,7 @@ CFG.linuxpico = linux lgw1 no_leds smtcpico CFG.linuxV2 = linux lgw2 no_leds lgw2genkey CFG.corecell = linux lgw1 no_leds sx1302 CFG.rpi = linux lgw1 no_leds +CFG.rpi64 = linux lgw1 no_leds CFG.kerlink = linux lgw1 no_leds SD.default = src-linux @@ -113,6 +116,7 @@ DEPS.linuxpico = mbedtls smtcpico DEPS.linuxV2 = mbedtls lgw2 DEPS.corecell = mbedtls lgw1302 DEPS.rpi = mbedtls lgw +DEPS.rpi64 = mbedtls lgw DEPS = $(or ${DEPS.${platform}}, ${DEPS.default}) @@ -142,6 +146,7 @@ LIBS.linuxV2 = -llgw2 ${MBEDLIBS} -lrt -lpthread -lspi LIBS.linuxpico = -llgw ${MBEDLIBS} -lpthread LIBS.corecell = -llgw1302 ${MBEDLIBS} -lpthread -lrt LIBS.rpi = -llgw ${MBEDLIBS} -lpthread +LIBS.rpi64 = -llgw ${MBEDLIBS} -lpthread LIBS.kerlink = -llgw ${MBEDLIBS} -lrt -lpthread xCFG = ${CFG.${ARCH}} ${CFG.${platform}} ${CFG.${variant}} ${CFG.${platform}.${variant}}