make nrf52dk build again

This commit is contained in:
geeksville 2020-05-21 20:31:22 -07:00
parent db72faca5e
commit 2dadb4d7a2
9 changed files with 60 additions and 27 deletions

View File

@ -4,36 +4,31 @@
Minimum items needed to make sure hardware is good. Minimum items needed to make sure hardware is good.
- test new bootloader on real hardware
- add a hard fault handler - add a hard fault handler
- Use the PMU driver on real hardware - Use the PMU driver on real hardware
- Use new radio driver on real hardware - Use new radio driver on real hardware
- Use UC1701 LCD driver on real hardware. Still need to create at startup and probe on SPI - Use UC1701 LCD driver on real hardware. Still need to create at startup and probe on SPI. Make sure SPI is atomic.
- test the LEDs - test the LEDs
- test the buttons - test the buttons
- make a new boarddef with a variant.h file. Fix pins in that file. In particular (at least): - DONE make a new boarddef with a variant.h file. Fix pins in that file.
#define PIN_SPI_MISO (46)
#define PIN_SPI_MOSI (45)
#define PIN_SPI_SCK (47)
#define PIN_WIRE_SDA (26)
#define PIN_WIRE_SCL (27)
## Secondary work items ## Secondary work items
Needed to be fully functional at least at the same level of the ESP32 boards. At this point users would probably want them. Needed to be fully functional at least at the same level of the ESP32 boards. At this point users would probably want them.
- stop polling for GPS characters, instead stay blocked on read in a thread - get full BLE api working
- increase preamble length? - will break other clients? so all devices must update - make a file system implementation (preferably one that can see the files the bootloader also sees) - use https://infocenter.nordicsemi.com/topic/com.nordic.infocenter.sdk5.v15.3.0/lib_fds_usage.html?cp=7_5_0_3_55_3
- enable BLE DFU somehow - make power management/sleep work properly
- make a settimeofday implementation
- DONE increase preamble length? - will break other clients? so all devices must update
- DONE enable BLE DFU somehow
- set appversion/hwversion - set appversion/hwversion
- report appversion/hwversion in BLE - report appversion/hwversion in BLE
- use new LCD driver from screen.cpp. Still need to hook it to a subclass of (poorly named) OLEDDisplay, and override display() to stream bytes out to the screen. - use new LCD driver from screen.cpp. Still need to hook it to a subclass of (poorly named) OLEDDisplay, and override display() to stream bytes out to the screen.
- get full BLE api working
- we need to enable the external xtal for the sx1262 (on dio3) - we need to enable the external xtal for the sx1262 (on dio3)
- figure out which regulator mode the sx1262 is operating in - figure out which regulator mode the sx1262 is operating in
- turn on security for BLE, make pairing work - turn on security for BLE, make pairing work
- make power management/sleep work properly
- make a settimeofday implementation
- make a file system implementation (preferably one that can see the files the bootloader also sees) - use https://infocenter.nordicsemi.com/topic/com.nordic.infocenter.sdk5.v15.3.0/lib_fds_usage.html?cp=7_5_0_3_55_3
- make ble endpoints not require "start config", just have them start in config mode - make ble endpoints not require "start config", just have them start in config mode
- measure power management and confirm battery life - measure power management and confirm battery life
- use new PMU to provide battery voltage/% full to app (both bluetooth and screen) - use new PMU to provide battery voltage/% full to app (both bluetooth and screen)
@ -41,6 +36,8 @@ Needed to be fully functional at least at the same level of the ESP32 boards. At
## Items to be 'feature complete' ## Items to be 'feature complete'
- check datasheet about sx1262 temperature compensation
- stop polling for GPS characters, instead stay blocked on read in a thread
- use SX126x::startReceiveDutyCycleAuto to save power by sleeping and briefly waking to check for preamble bits. Change xmit rules to have more preamble bits. - use SX126x::startReceiveDutyCycleAuto to save power by sleeping and briefly waking to check for preamble bits. Change xmit rules to have more preamble bits.
- turn back on in-radio destaddr checking for RF95 - turn back on in-radio destaddr checking for RF95
- remove the MeshRadio wrapper - we don't need it anymore, just do everythin in RadioInterface subclasses. - remove the MeshRadio wrapper - we don't need it anymore, just do everythin in RadioInterface subclasses.

View File

@ -9,7 +9,7 @@
; https://docs.platformio.org/page/projectconf.html ; https://docs.platformio.org/page/projectconf.html
[platformio] [platformio]
default_envs = tbeam ; Note: the github actions CI test build can't yet build NRF52 targets default_envs = nrf52dk ; Note: the github actions CI test build can't yet build NRF52 targets
[common] [common]
; common is not currently used ; common is not currently used

2
proto

@ -1 +1 @@
Subproject commit bc3ecd97e381b724c1a28acce0d12c688de73ba3 Subproject commit 2cb162a3036b8513c743f05bd4f06aacb0b0680d

View File

@ -1,5 +1,6 @@
#include "PacketHistory.h" #include "PacketHistory.h"
#include "configuration.h" #include "configuration.h"
#include "mesh-pb-constants.h"
/// We clear our old flood record five minute after we see the last of it /// We clear our old flood record five minute after we see the last of it
#define FLOOD_EXPIRE_TIME (5 * 60 * 1000L) #define FLOOD_EXPIRE_TIME (5 * 60 * 1000L)

View File

@ -298,7 +298,7 @@ void RadioLibInterface::handleReceiveInterrupt()
addReceiveMetadata(mp); addReceiveMetadata(mp);
mp->which_payload = MeshPacket_encrypted_tag; // Mark that the payload is still encrypted at this point mp->which_payload = MeshPacket_encrypted_tag; // Mark that the payload is still encrypted at this point
assert(payloadLen <= sizeof(mp->encrypted.bytes)); assert(payloadLen <= (int32_t)sizeof(mp->encrypted.bytes));
memcpy(mp->encrypted.bytes, payload, payloadLen); memcpy(mp->encrypted.bytes, payload, payloadLen);
mp->encrypted.size = payloadLen; mp->encrypted.size = payloadLen;

View File

@ -51,6 +51,9 @@ PB_BIND(FromRadio, FromRadio, 2)
PB_BIND(ToRadio, ToRadio, 2) PB_BIND(ToRadio, ToRadio, 2)
PB_BIND(ManufacturingData, ManufacturingData, AUTO)

View File

@ -50,8 +50,15 @@ typedef struct _DebugString {
char message[256]; char message[256];
} DebugString; } DebugString;
typedef struct _ManufacturingData {
uint32_t fradioFreq;
pb_callback_t hw_model;
pb_callback_t hw_version;
int32_t selftest_result;
} ManufacturingData;
typedef struct _MyNodeInfo { typedef struct _MyNodeInfo {
int32_t my_node_num; uint32_t my_node_num;
bool has_gps; bool has_gps;
int32_t num_channels; int32_t num_channels;
char region[12]; char region[12];
@ -146,6 +153,7 @@ typedef struct _MeshPacket {
float rx_snr; float rx_snr;
uint32_t rx_time; uint32_t rx_time;
uint32_t hop_limit; uint32_t hop_limit;
bool want_ack;
} MeshPacket; } MeshPacket;
typedef struct _DeviceState { typedef struct _DeviceState {
@ -209,7 +217,7 @@ typedef struct _ToRadio {
#define User_init_default {"", "", "", {0}} #define User_init_default {"", "", "", {0}}
#define RouteDiscovery_init_default {0, {0, 0, 0, 0, 0, 0, 0, 0}} #define RouteDiscovery_init_default {0, {0, 0, 0, 0, 0, 0, 0, 0}}
#define SubPacket_init_default {0, {Position_init_default}, 0, 0, 0, {0}} #define SubPacket_init_default {0, {Position_init_default}, 0, 0, 0, {0}}
#define MeshPacket_init_default {0, 0, 0, {SubPacket_init_default}, 0, 0, 0, 0} #define MeshPacket_init_default {0, 0, 0, {SubPacket_init_default}, 0, 0, 0, 0, 0}
#define ChannelSettings_init_default {0, _ChannelSettings_ModemConfig_MIN, {0, {0}}, ""} #define ChannelSettings_init_default {0, _ChannelSettings_ModemConfig_MIN, {0, {0}}, ""}
#define RadioConfig_init_default {false, RadioConfig_UserPreferences_init_default, false, ChannelSettings_init_default} #define RadioConfig_init_default {false, RadioConfig_UserPreferences_init_default, false, ChannelSettings_init_default}
#define RadioConfig_UserPreferences_init_default {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} #define RadioConfig_UserPreferences_init_default {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
@ -219,12 +227,13 @@ typedef struct _ToRadio {
#define DebugString_init_default {""} #define DebugString_init_default {""}
#define FromRadio_init_default {0, 0, {MeshPacket_init_default}} #define FromRadio_init_default {0, 0, {MeshPacket_init_default}}
#define ToRadio_init_default {0, {MeshPacket_init_default}} #define ToRadio_init_default {0, {MeshPacket_init_default}}
#define ManufacturingData_init_default {0, {{NULL}, NULL}, {{NULL}, NULL}, 0}
#define Position_init_zero {0, 0, 0, 0, 0} #define Position_init_zero {0, 0, 0, 0, 0}
#define Data_init_zero {_Data_Type_MIN, {0, {0}}} #define Data_init_zero {_Data_Type_MIN, {0, {0}}}
#define User_init_zero {"", "", "", {0}} #define User_init_zero {"", "", "", {0}}
#define RouteDiscovery_init_zero {0, {0, 0, 0, 0, 0, 0, 0, 0}} #define RouteDiscovery_init_zero {0, {0, 0, 0, 0, 0, 0, 0, 0}}
#define SubPacket_init_zero {0, {Position_init_zero}, 0, 0, 0, {0}} #define SubPacket_init_zero {0, {Position_init_zero}, 0, 0, 0, {0}}
#define MeshPacket_init_zero {0, 0, 0, {SubPacket_init_zero}, 0, 0, 0, 0} #define MeshPacket_init_zero {0, 0, 0, {SubPacket_init_zero}, 0, 0, 0, 0, 0}
#define ChannelSettings_init_zero {0, _ChannelSettings_ModemConfig_MIN, {0, {0}}, ""} #define ChannelSettings_init_zero {0, _ChannelSettings_ModemConfig_MIN, {0, {0}}, ""}
#define RadioConfig_init_zero {false, RadioConfig_UserPreferences_init_zero, false, ChannelSettings_init_zero} #define RadioConfig_init_zero {false, RadioConfig_UserPreferences_init_zero, false, ChannelSettings_init_zero}
#define RadioConfig_UserPreferences_init_zero {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} #define RadioConfig_UserPreferences_init_zero {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
@ -234,6 +243,7 @@ typedef struct _ToRadio {
#define DebugString_init_zero {""} #define DebugString_init_zero {""}
#define FromRadio_init_zero {0, 0, {MeshPacket_init_zero}} #define FromRadio_init_zero {0, 0, {MeshPacket_init_zero}}
#define ToRadio_init_zero {0, {MeshPacket_init_zero}} #define ToRadio_init_zero {0, {MeshPacket_init_zero}}
#define ManufacturingData_init_zero {0, {{NULL}, NULL}, {{NULL}, NULL}, 0}
/* Field tags (for use in manual encoding/decoding) */ /* Field tags (for use in manual encoding/decoding) */
#define ChannelSettings_tx_power_tag 1 #define ChannelSettings_tx_power_tag 1
@ -243,6 +253,10 @@ typedef struct _ToRadio {
#define Data_typ_tag 1 #define Data_typ_tag 1
#define Data_payload_tag 2 #define Data_payload_tag 2
#define DebugString_message_tag 1 #define DebugString_message_tag 1
#define ManufacturingData_fradioFreq_tag 1
#define ManufacturingData_hw_model_tag 2
#define ManufacturingData_hw_version_tag 3
#define ManufacturingData_selftest_result_tag 4
#define MyNodeInfo_my_node_num_tag 1 #define MyNodeInfo_my_node_num_tag 1
#define MyNodeInfo_has_gps_tag 2 #define MyNodeInfo_has_gps_tag 2
#define MyNodeInfo_num_channels_tag 3 #define MyNodeInfo_num_channels_tag 3
@ -299,6 +313,7 @@ typedef struct _ToRadio {
#define MeshPacket_rx_time_tag 9 #define MeshPacket_rx_time_tag 9
#define MeshPacket_rx_snr_tag 7 #define MeshPacket_rx_snr_tag 7
#define MeshPacket_hop_limit_tag 10 #define MeshPacket_hop_limit_tag 10
#define MeshPacket_want_ack_tag 11
#define DeviceState_radio_tag 1 #define DeviceState_radio_tag 1
#define DeviceState_my_node_tag 2 #define DeviceState_my_node_tag 2
#define DeviceState_owner_tag 3 #define DeviceState_owner_tag 3
@ -374,7 +389,8 @@ X(a, STATIC, ONEOF, BYTES, (payload,encrypted,encrypted), 8) \
X(a, STATIC, SINGULAR, UINT32, id, 6) \ X(a, STATIC, SINGULAR, UINT32, id, 6) \
X(a, STATIC, SINGULAR, FLOAT, rx_snr, 7) \ X(a, STATIC, SINGULAR, FLOAT, rx_snr, 7) \
X(a, STATIC, SINGULAR, FIXED32, rx_time, 9) \ X(a, STATIC, SINGULAR, FIXED32, rx_time, 9) \
X(a, STATIC, SINGULAR, UINT32, hop_limit, 10) X(a, STATIC, SINGULAR, UINT32, hop_limit, 10) \
X(a, STATIC, SINGULAR, BOOL, want_ack, 11)
#define MeshPacket_CALLBACK NULL #define MeshPacket_CALLBACK NULL
#define MeshPacket_DEFAULT NULL #define MeshPacket_DEFAULT NULL
#define MeshPacket_payload_decoded_MSGTYPE SubPacket #define MeshPacket_payload_decoded_MSGTYPE SubPacket
@ -424,7 +440,7 @@ X(a, STATIC, SINGULAR, FLOAT, snr, 7)
#define NodeInfo_position_MSGTYPE Position #define NodeInfo_position_MSGTYPE Position
#define MyNodeInfo_FIELDLIST(X, a) \ #define MyNodeInfo_FIELDLIST(X, a) \
X(a, STATIC, SINGULAR, INT32, my_node_num, 1) \ X(a, STATIC, SINGULAR, UINT32, my_node_num, 1) \
X(a, STATIC, SINGULAR, BOOL, has_gps, 2) \ X(a, STATIC, SINGULAR, BOOL, has_gps, 2) \
X(a, STATIC, SINGULAR, INT32, num_channels, 3) \ X(a, STATIC, SINGULAR, INT32, num_channels, 3) \
X(a, STATIC, SINGULAR, STRING, region, 4) \ X(a, STATIC, SINGULAR, STRING, region, 4) \
@ -486,6 +502,14 @@ X(a, STATIC, ONEOF, MESSAGE, (variant,set_owner,variant.set_owner), 102)
#define ToRadio_variant_set_radio_MSGTYPE RadioConfig #define ToRadio_variant_set_radio_MSGTYPE RadioConfig
#define ToRadio_variant_set_owner_MSGTYPE User #define ToRadio_variant_set_owner_MSGTYPE User
#define ManufacturingData_FIELDLIST(X, a) \
X(a, STATIC, SINGULAR, UINT32, fradioFreq, 1) \
X(a, CALLBACK, SINGULAR, STRING, hw_model, 2) \
X(a, CALLBACK, SINGULAR, STRING, hw_version, 3) \
X(a, STATIC, SINGULAR, SINT32, selftest_result, 4)
#define ManufacturingData_CALLBACK pb_default_field_callback
#define ManufacturingData_DEFAULT NULL
extern const pb_msgdesc_t Position_msg; extern const pb_msgdesc_t Position_msg;
extern const pb_msgdesc_t Data_msg; extern const pb_msgdesc_t Data_msg;
extern const pb_msgdesc_t User_msg; extern const pb_msgdesc_t User_msg;
@ -501,6 +525,7 @@ extern const pb_msgdesc_t DeviceState_msg;
extern const pb_msgdesc_t DebugString_msg; extern const pb_msgdesc_t DebugString_msg;
extern const pb_msgdesc_t FromRadio_msg; extern const pb_msgdesc_t FromRadio_msg;
extern const pb_msgdesc_t ToRadio_msg; extern const pb_msgdesc_t ToRadio_msg;
extern const pb_msgdesc_t ManufacturingData_msg;
/* Defines for backwards compatibility with code written before nanopb-0.4.0 */ /* Defines for backwards compatibility with code written before nanopb-0.4.0 */
#define Position_fields &Position_msg #define Position_fields &Position_msg
@ -518,6 +543,7 @@ extern const pb_msgdesc_t ToRadio_msg;
#define DebugString_fields &DebugString_msg #define DebugString_fields &DebugString_msg
#define FromRadio_fields &FromRadio_msg #define FromRadio_fields &FromRadio_msg
#define ToRadio_fields &ToRadio_msg #define ToRadio_fields &ToRadio_msg
#define ManufacturingData_fields &ManufacturingData_msg
/* Maximum encoded size of messages (where known) */ /* Maximum encoded size of messages (where known) */
#define Position_size 39 #define Position_size 39
@ -525,16 +551,17 @@ extern const pb_msgdesc_t ToRadio_msg;
#define User_size 72 #define User_size 72
#define RouteDiscovery_size 88 #define RouteDiscovery_size 88
#define SubPacket_size 273 #define SubPacket_size 273
#define MeshPacket_size 310 #define MeshPacket_size 312
#define ChannelSettings_size 60 #define ChannelSettings_size 60
#define RadioConfig_size 136 #define RadioConfig_size 136
#define RadioConfig_UserPreferences_size 72 #define RadioConfig_UserPreferences_size 72
#define NodeInfo_size 132 #define NodeInfo_size 132
#define MyNodeInfo_size 85 #define MyNodeInfo_size 80
#define DeviceState_size 14955 #define DeviceState_size 15016
#define DebugString_size 258 #define DebugString_size 258
#define FromRadio_size 319 #define FromRadio_size 321
#define ToRadio_size 313 #define ToRadio_size 315
/* ManufacturingData_size depends on runtime parameters */
#ifdef __cplusplus #ifdef __cplusplus
} /* extern "C" */ } /* extern "C" */

View File

@ -1,3 +1,4 @@
#ifdef ARDUINO_NRF52840_PPR
#include "PmuBQ25703A.h" #include "PmuBQ25703A.h"
#include <assert.h> #include <assert.h>
@ -36,6 +37,8 @@ void PmuBQ25703A::init()
delay(15); delay(15);
} }
#endif
/* /*

View File

@ -59,9 +59,11 @@ void setBluetoothEnable(bool on)
} }
} }
#ifdef ARDUINO_NRF52840_PPR
#include "PmuBQ25703A.h" #include "PmuBQ25703A.h"
PmuBQ25703A pmu; PmuBQ25703A pmu;
#endif
void nrf52Setup() void nrf52Setup()
{ {