diff --git a/docs/software/TODO.md b/docs/software/TODO.md index 01ae40a4c..4108c4085 100644 --- a/docs/software/TODO.md +++ b/docs/software/TODO.md @@ -4,6 +4,19 @@ You probably don't care about this section - skip to the next one. ## before next release +* DONE @vfurman fixed android nrf52 problem +* probably fixed (stack overflow generating qr code) meshm reported a crash +* DONE @havealoha reported android overrides fixed positions +* @luxonn reports that after a while the android app stops showing new messages +* DONE android speed settings https://github.com/meshtastic/Meshtastic-Android/issues/271 +* add cloudflare +* fix heltec battery scaling +* check android 1.2.20 usage, possibly release to general +* release android APK + +* add rak4600 support (with rf95 radio and limited ram) + +* Switch to use https://github.com/adafruit/Adafruit_nRF52_Arduino.git when available (see arduino code for examples) * DONE remote admin busted? * DONE check android code - @havealoha comments about odd sleep behavior * ABANDONED test github actions locally on linux diff --git a/docs/software/rak-wizblock.md b/docs/software/rak-wizblock.md index 6580ac20d..10988b6ee 100644 --- a/docs/software/rak-wizblock.md +++ b/docs/software/rak-wizblock.md @@ -29,20 +29,22 @@ Set IO2=0, 3V3_S is off. * Fix android bug with detecting nrf52 BLE devices * Make this doc into a nice HOWTO: what to order, how to connect (which device in which slots), how to install software -* Setup battery voltage sensing +* Setup battery voltage sensing, Vbatt seems direct connected to AIN0 on RAK4631 carrier which is apparently P0.5/AIN3 on the RAK4630 module, per this schematic. https://docs.rakwireless.com/Product-Categories/WisBlock/RAK4631/Datasheet/#description But no voltage divider to be found, so ask them. * Set bluetooth PIN support * Confirm low power draw * Confirm that OLED works +* add purchash links * send in PR to https://github.com/geeksville/WisBlock for boards define ## Docs +Quickstart https://docs.rakwireless.com/Product-Categories/WisBlock/Quickstart/#wisblock-base-2 FIXME - list required, recommended and optional components GPS module: -Supposedly "Install in slot A only" but I think installing on the back would fit better with the OLED. FIXME. +Must be installed in "Slot A" https://docs.rakwireless.com/Product-Categories/WisBlock/RAK1910/Overview/#product-description ST LPS22HB diff --git a/platformio.ini b/platformio.ini index 98772be95..889ea5bae 100644 --- a/platformio.ini +++ b/platformio.ini @@ -9,7 +9,7 @@ ; https://docs.platformio.org/page/projectconf.html [platformio] -;default_envs = tbeam +default_envs = tbeam ;default_envs = tbeam0.7 ;default_envs = heltec ;default_envs = tlora-v1 @@ -19,7 +19,8 @@ ;default_envs = eink ;default_envs = nrf52840dk-geeksville ;default_envs = native # lora-relay-v1 # nrf52840dk-geeksville # linux # or if you'd like to change the default to something like lora-relay-v1 put that here -default_envs = rak4631 +;default_envs = rak4631 +;default_envs = rak4630 [common] ; common is not currently used @@ -194,7 +195,7 @@ src_filter = [nrf52_base] ; Instead of the standard nordicnrf52 platform, we use our fork which has our added variant files ; platform = nordicnrf52 -platform = https://github.com/meshtastic/platform-nordicnrf52.git#1a2639a6b0f79b5df66bea3e3089f0d5285fdc63 +platform = https://github.com/meshtastic/platform-nordicnrf52.git#merge extends = arduino_base build_type = debug ; I'm debugging with ICE a lot now ; note: liboberon provides the AES256 implementation for NRF52 (though not using the hardware acceleration of the NRF52840 - FIXME) @@ -241,6 +242,14 @@ debug_init_break = ;debug_init_break = tbreak loop ;debug_init_break = tbreak Reset_Handler +[nrf52840_base] +; Common base class for all nrf52840 based targets +extends = nrf52_base +lib_deps = + ${arduino_base.lib_deps} + Adafruit nRFCrypto + # add Adafruit nRFCrypto platform IO automated scan is broken + [env:lora_isp4520] extends = nrf52_base board = lora_isp4520 @@ -262,12 +271,12 @@ monitor_port = /dev/ttyUSB0 ; The NRF52840-dk development board ; Note: By default no lora device is created for this build - it uses a simulated interface [env:nrf52840dk] -extends = nrf52_base +extends = nrf52840_base board = nrf52840_dk ; The NRF52840-dk development board, but @geeksville's board - which has a busted oscilliator [env:nrf52840dk-geeksville] -extends = nrf52_base +extends = nrf52840_base board = nrf52840_dk_modified # add our variants files to the include and src paths build_flags = ${nrf52_base.build_flags} -Ivariants/pca10056-rc-clock @@ -290,17 +299,28 @@ monitor_speed = 115200 # For experimenting with RAM sizes # board_build.ldscript = linker/nrf52840_s140_sim832.ld +; The very slick RAK wireless RAK 4631 / 4630 board [env:rak4631] -extends = nrf52_base +extends = nrf52840_base board = wiscore_rak4631 # add our variants files to the include and src paths # define build flags for the TFT_eSPI library build_flags = ${nrf52_base.build_flags} -Ivariants/WisCore_RAK4631_Board -src_filter = ${nrf52_base.src_filter} +<../variants/eink> +src_filter = ${nrf52_base.src_filter} +<../variants/WisCore_RAK4631_Board> +debug_tool = jlink +; If not set we will default to uploading over serial (first it forces bootloader entry by talking 1200bps to cdcacm) +;upload_protocol = jlink + +; THIS IS UNTESTED (I don't have this board), but other developers can use it as a starting point +[env:rak4600] +extends = nrf52_base +board = wiscore_rak4600 +# add our variants files to the include and src paths +# define build flags for the TFT_eSPI library +build_flags = ${nrf52_base.build_flags} -Ivariants/WisCore_RAK4600_Board +src_filter = ${nrf52_base.src_filter} +<../variants/WisCore_RAK4600_Board> lib_deps = ${arduino_base.lib_deps} -debug_tool = jlink -upload_protocol = jlink ; The PPR board [env:ppr] @@ -321,7 +341,7 @@ lib_deps = ; First prototype eink/nrf52840/sx1262 device [env:eink] -extends = nrf52_base +extends = nrf52840_base board = eink # add our variants files to the include and src paths # define build flags for the TFT_eSPI library @@ -329,13 +349,13 @@ build_flags = ${nrf52_base.build_flags} -Ivariants/eink -DBUSY_PIN=3 -DRST_PIN=2 -DDC_PIN=28 -DCS_PIN=30 src_filter = ${nrf52_base.src_filter} +<../variants/eink> lib_deps = - ${arduino_base.lib_deps} + ${nrf52840_base.lib_deps} https://github.com/geeksville/EPD_Libraries.git TFT_eSPI ; First prototype eink/nrf52840/sx1262 device [env:eink0.1] -extends = nrf52_base +extends = nrf52840_base board = eink0.1 # add our variants files to the include and src paths # define build flags for the TFT_eSPI library @@ -343,13 +363,13 @@ build_flags = ${nrf52_base.build_flags} -Ivariants/eink0.1 -DBUSY_PIN=3 -DRST_PIN=2 -DDC_PIN=28 -DCS_PIN=30 src_filter = ${nrf52_base.src_filter} +<../variants/eink0.1> lib_deps = - ${arduino_base.lib_deps} + ${nrf52840_base.lib_deps} https://github.com/geeksville/EPD_Libraries.git TFT_eSPI ; The https://github.com/BigCorvus/SX1262-LoRa-BLE-Relay board by @BigCorvus [env:lora-relay-v1] -extends = nrf52_base +extends = nrf52840_base board = lora-relay-v1 # add our variants files to the include and src paths # define build flags for the TFT_eSPI library @@ -365,13 +385,13 @@ build_flags = ${nrf52_base.build_flags} -Ivariants/lora_relay_v1 -DSPI_FREQUENCY=27000000 src_filter = ${nrf52_base.src_filter} +<../variants/lora_relay_v1> lib_deps = - ${arduino_base.lib_deps} + ${nrf52840_base.lib_deps} SparkFun BQ27441 LiPo Fuel Gauge Arduino Library TFT_eSPI ; The https://github.com/BigCorvus/LoRa-BLE-Relay-v2 board by @BigCorvus [env:lora-relay-v2] -extends = nrf52_base +extends = nrf52840_base board = lora-relay-v2 # add our variants files to the include and src paths # define build flags for the TFT_eSPI library @@ -389,7 +409,7 @@ build_flags = ${nrf52_base.build_flags} -Ivariants/lora_relay_v2 -DTFT_SCLK=ST7735_SCK src_filter = ${nrf52_base.src_filter} +<../variants/lora_relay_v2> lib_deps = - ${arduino_base.lib_deps} + ${nrf52840_base.lib_deps} SparkFun BQ27441 LiPo Fuel Gauge Arduino Library TFT_eSPI diff --git a/variants/WisCore_RAK4600_Board/variant.cpp b/variants/WisCore_RAK4600_Board/variant.cpp new file mode 100644 index 000000000..f6d55f7d4 --- /dev/null +++ b/variants/WisCore_RAK4600_Board/variant.cpp @@ -0,0 +1,77 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + Copyright (c) 2016 Sandeep Mistry All right reserved. + Copyright (c) 2018, Adafruit Industries (adafruit.com) + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "variant.h" + +#include "wiring_constants.h" +#include "wiring_digital.h" +#include "nrf.h" + +const uint32_t g_ADigitalPinMap[] = { + // D0 - D7 + 0, // xtal 1 + 1, // xtal 2 + 2, // a0 + 3, // a1 + 4, // a2 + 5, // a3 + 6, // TXD + 7, // GPIO #7 + + // D8 - D13 + 8, // RXD + + 9, // NFC1 + 10, // NFC2 + + 11, // GPIO11 + + 12, // SCK + 13, // MOSI + 14, // MISO + + 15, // GPIO #15 + 16, // GPIO #16 + + // function set pins + 17, // LED #1 (red) + 18, // SWO + 19, // LED #2 (blue) + 20, // DFU + 21, // Reset + 22, // Factory Reset + 23, // N/A + 24, // N/A + + 25, // SDA + 26, // SCL + 27, // GPIO #27 + 28, // A4 + 29, // A5 + 30, // A6 + 31, // A7 +}; + +void initVariant() +{ + // LED1 & LED2 + pinMode(PIN_LED1, OUTPUT); + ledOff(PIN_LED1); + + pinMode(PIN_LED2, OUTPUT); + ledOff(PIN_LED2); +} \ No newline at end of file diff --git a/variants/WisCore_RAK4600_Board/variant.h b/variants/WisCore_RAK4600_Board/variant.h new file mode 100644 index 000000000..4eff0008a --- /dev/null +++ b/variants/WisCore_RAK4600_Board/variant.h @@ -0,0 +1,126 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + Copyright (c) 2016 Sandeep Mistry All right reserved. + Copyright (c) 2018, Adafruit Industries (adafruit.com) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef _VARIANT_RAK4600_ +#define _VARIANT_RAK4600_ + +#define RAK4600 + +/** Master clock frequency */ +#define VARIANT_MCK (64000000ul) + +#define USE_LFXO // Board uses 32khz crystal for LF +// define USE_LFRC // Board uses RC for LF + +/*---------------------------------------------------------------------------- + * Headers + *----------------------------------------------------------------------------*/ + +#include "WVariant.h" + +#ifdef __cplusplus +extern "C" +{ +#endif // __cplusplus + +// Number of pins defined in PinDescription array +#define PINS_COUNT (32u) +#define NUM_DIGITAL_PINS (32u) +#define NUM_ANALOG_INPUTS (8u) +#define NUM_ANALOG_OUTPUTS (0u) + +// LEDs +#define PIN_LED1 (17) +#define PIN_LED2 (19) + +#define LED_BUILTIN PIN_LED1 +#define LED_CONN PIN_LED2 + +#define LED_RED PIN_LED1 +#define LED_BLUE PIN_LED2 + +#define LED_STATE_ON 1 // State when LED is litted + +/* + * Analog pins + */ +#define PIN_A0 (2) +#define PIN_A1 (3) +#define PIN_A2 (4) +#define PIN_A3 (5) +#define PIN_A4 (28) +#define PIN_A5 (29) +#define PIN_A6 (30) +#define PIN_A7 (31) + + static const uint8_t A0 = PIN_A0; + static const uint8_t A1 = PIN_A1; + static const uint8_t A2 = PIN_A2; + static const uint8_t A3 = PIN_A3; + static const uint8_t A4 = PIN_A4; + static const uint8_t A5 = PIN_A5; + static const uint8_t A6 = PIN_A6; + static const uint8_t A7 = PIN_A7; +#define ADC_RESOLUTION 14 + +// Other pins +#define PIN_AREF (24) +#define PIN_VBAT PIN_A7 +#define PIN_NFC1 (9) +#define PIN_NFC2 (10) + + static const uint8_t AREF = PIN_AREF; + +/* + * Serial interfaces + */ +// Serial +#define PIN_SERIAL_RX (22) +#define PIN_SERIAL_TX (23) + +/* + * SPI Interfaces + */ +#define SPI_INTERFACES_COUNT 1 + +#define PIN_SPI_MISO (6) +#define PIN_SPI_MOSI (5) +#define PIN_SPI_SCK (7) + + static const uint8_t SS = 4; + static const uint8_t MOSI = PIN_SPI_MOSI; + static const uint8_t MISO = PIN_SPI_MISO; + static const uint8_t SCK = PIN_SPI_SCK; + +/* + * Wire Interfaces + */ +#define WIRE_INTERFACES_COUNT 1 + +#define PIN_WIRE_SDA (13u) +#define PIN_WIRE_SCL (12u) + +#ifdef __cplusplus +} +#endif + +/*---------------------------------------------------------------------------- + * Arduino objects - C++ only + *----------------------------------------------------------------------------*/ + +#endif \ No newline at end of file diff --git a/variants/WisCore_RAK4631_Board/variant.h b/variants/WisCore_RAK4631_Board/variant.h index 00016d24d..d882f80d4 100644 --- a/variants/WisCore_RAK4631_Board/variant.h +++ b/variants/WisCore_RAK4631_Board/variant.h @@ -171,6 +171,9 @@ static const uint8_t SCK = PIN_SPI_SCK; #define GPS_RX_PIN PIN_SERIAL1_RX #define GPS_TX_PIN PIN_SERIAL1_TX +// The battery sense is hooked to pin A0 +#define BATTERY_PIN PIN_A0 + #ifdef __cplusplus } #endif diff --git a/version.properties b/version.properties index 55d21ed69..d132579fb 100644 --- a/version.properties +++ b/version.properties @@ -1,4 +1,4 @@ [VERSION] major = 1 minor = 2 -build = 26 +build = 28