Merge remote-tracking branch 'root/master' into eink

This commit is contained in:
geeksville 2020-09-24 15:13:08 -07:00
commit 86d6f88787
13 changed files with 61 additions and 27 deletions

View File

@ -23,4 +23,4 @@ jobs:
run: |
pip install -U adafruit-nrfutil
- name: Build
run: platformio run -e tbeam -e heltec -e lora-relay-v1
run: platformio run -e tbeam -e heltec -e lora-relay-v1 -e linux

View File

@ -4,7 +4,7 @@ set -e
source bin/version.sh
COUNTRIES="US EU433 EU865 CN JP"
COUNTRIES="US EU433 EU865 CN JP ANZ KR"
#COUNTRIES=US
#COUNTRIES=CN

View File

@ -1,3 +1,3 @@
export VERSION=1.0.0
export VERSION=1.1.0

View File

@ -196,7 +196,7 @@ Nice ideas worth considering someday...
- DONE neg 7 error code from receive
- DONE remove unused sx1262 lib from github
- at boot we are starting our message IDs at 1, rather we should start them at a random number. also, seed random based on timer. this could be the cause of our first message not seen bug.
- add a NEMA based GPS driver to test GPS
- add a NMEA based GPS driver to test GPS
- DONE use "variants" to get all gpio bindings
- DONE plug in correct variants for the real board
- turn on DFU assistance in the appload using the nordic DFU helper lib call

View File

@ -5,5 +5,5 @@ This is a mini design doc for developing the meshtastic software.
* Our [project board](https://github.com/orgs/meshtastic/projects/1) - shows what things we are currently working on and remaining work items for the current release.
* [Power Management](power.md)
* [Mesh algorithm](mesh-alg.md)
* [Bluetooth API](bluetooth-api.md) and porting guide for new clients (iOS, python, etc...)
* [Device API](device-api.md) and porting guide for new clients (iOS, python, etc...)
* TODO: how to port the device code to a new device.

View File

@ -58,7 +58,7 @@ lib_deps =
1202 ; CRC32, explicitly needed because dependency is missing in the ble ota update lib
https://github.com/meshtastic/arduino-fsm.git
https://github.com/meshtastic/SparkFun_Ublox_Arduino_Library.git
https://github.com/meshtastic/RadioLib.git#7989a269be590a5d4914ac04069b58f4930c45c1
https://github.com/meshtastic/RadioLib.git#ac7feac00f5e0bd95a3ac5d5852b4cc7344cf95c
https://github.com/meshtastic/TinyGPSPlus.git
https://github.com/meshtastic/AXP202X_Library.git#8404abb6d4b486748636bc6ad72d2a47baaf5460
Wire ; explicitly needed here because the AXP202 library forgets to add it

View File

@ -1,4 +1,4 @@
#include "NEMAGPS.h"
#include "NMEAGPS.h"
#include "configuration.h"
static int32_t toDegInt(RawDegrees d)
@ -10,7 +10,7 @@ static int32_t toDegInt(RawDegrees d)
return r;
}
void NEMAGPS::loop()
void NMEAGPS::loop()
{
while (_serial_gps->available() > 0) {
int c = _serial_gps->read();
@ -43,6 +43,9 @@ void NEMAGPS::loop()
isConnected = true; // we seem to have a real GPS (but not necessarily a lock)
}
uint8_t fixtype = reader.fixQuality();
hasValidLocation = ((fixtype >= 1) && (fixtype <= 5));
if (reader.location.isUpdated()) {
if (reader.altitude.isValid())
altitude = reader.altitude.meters();
@ -57,18 +60,21 @@ void NEMAGPS::loop()
dop = reader.hdop.value();
}
if (reader.course.isValid()) {
heading = reader.course.value() * 1e3; //Scale the heading (in degrees * 10^-2) to match the expected degrees * 10^-5
heading =
reader.course.value() * 1e3; // Scale the heading (in degrees * 10^-2) to match the expected degrees * 10^-5
}
if (reader.satellites.isValid()) {
numSatellites = reader.satellites.value();
}
// expect gps pos lat=37.520825, lon=-122.309162, alt=158
DEBUG_MSG("new NEMA GPS pos lat=%f, lon=%f, alt=%d, hdop=%f, heading=%f\n", latitude * 1e-7, longitude * 1e-7, altitude, dop * 1e-2, heading * 1e-5);
DEBUG_MSG("new NMEA GPS pos lat=%f, lon=%f, alt=%d, hdop=%f, heading=%f\n", latitude * 1e-7, longitude * 1e-7,
altitude, dop * 1e-2, heading * 1e-5);
}
// Notify any status instances that are observing us
const meshtastic::GPSStatus status = meshtastic::GPSStatus(hasLock(), isConnected, latitude, longitude, altitude, dop, heading, numSatellites);
const meshtastic::GPSStatus status =
meshtastic::GPSStatus(hasLock(), isConnected, latitude, longitude, altitude, dop, heading, numSatellites);
newStatus.notifyObservers(&status);
}
}

View File

@ -1,16 +1,16 @@
#pragma once
#include "../concurrency/PeriodicTask.h"
#include "GPS.h"
#include "Observer.h"
#include "../concurrency/PeriodicTask.h"
#include "TinyGPS++.h"
/**
* A gps class thatreads from a NEMA GPS stream (and FIXME - eventually keeps the gps powered down except when reading)
* A gps class thatreads from a NMEA GPS stream (and FIXME - eventually keeps the gps powered down except when reading)
*
* When new data is available it will notify observers.
*/
class NEMAGPS : public GPS
class NMEAGPS : public GPS
{
TinyGPSPlus reader;

View File

@ -103,7 +103,7 @@ bool UBloxGPS::factoryReset()
{
bool ok = false;
// It is useful to force back into factory defaults (9600baud, NEMA to test the behavior of boards that don't have
// It is useful to force back into factory defaults (9600baud, NMEA to test the behavior of boards that don't have
// GPS_TX connected)
ublox.factoryReset();
delay(5000);

View File

@ -23,7 +23,7 @@
#include "MeshRadio.h"
#include "MeshService.h"
#include "NEMAGPS.h"
#include "NMEAGPS.h"
#include "NodeDB.h"
#include "PowerFSM.h"
#include "UBloxGPS.h"
@ -256,16 +256,16 @@ void setup()
if (GPS::_serial_gps) {
// Some boards might have only the TX line from the GPS connected, in that case, we can't configure it at all. Just
// assume NEMA at 9600 baud.
DEBUG_MSG("Hoping that NEMA might work\n");
// assume NMEA at 9600 baud.
DEBUG_MSG("Hoping that NMEA might work\n");
// dumb NEMA access only work for serial GPSes)
gps = new NEMAGPS();
// dumb NMEA access only work for serial GPSes)
gps = new NMEAGPS();
gps->setup();
}
}
#else
gps = new NEMAGPS();
gps = new NMEAGPS();
gps->setup();
#endif
if (gps)

View File

@ -36,6 +36,17 @@
#define CH_SPACING_TW 0.2
#define NUM_CHANNELS_TW 10
// AU/NZ channel settings 915-928MHz
#define CH0_ANZ 916.0f // MHz - avoid overcrowding on 915.0
#define CH_SPACING_ANZ 0.5f
#define NUM_CHANNELS_ANZ 20
// KR channel settings (KR920-923)
// Start from TTN download channel freq. (921.9f is for download, others are for uplink)
#define CH0_KR 921.9f // MHz
#define CH_SPACING_KR 0.2f
#define NUM_CHANNELS_KR 8
// FIXME add defs for other regions and use them here
#ifdef HW_VERSION_US
#define CH0 CH0_US
@ -63,6 +74,16 @@
#define CH0 CH0_TW
#define CH_SPACING CH_SPACING_TW
#define NUM_CHANNELS NUM_CHANNELS_TW
#elif defined(HW_VERSION_ANZ)
// Australia and NZ
#define CH0 CH0_ANZ
#define CH_SPACING CH_SPACING_ANZ
#define NUM_CHANNELS NUM_CHANNELS_ANZ
#elif defined(HW_VERSION_KR)
// Republic of Korea
#define CH0 CH0_KR
#define CH_SPACING CH_SPACING_KR
#define NUM_CHANNELS NUM_CHANNELS_KR
#else
// HW version not set - assume US
#define CH0 CH0_US

View File

@ -205,6 +205,13 @@ void MeshService::reloadConfig()
nodeDB.saveToDisk();
}
/// The owner User record just got updated, update our node DB and broadcast the info into the mesh
void MeshService::reloadOwner()
{
sendOurOwner();
nodeDB.saveToDisk();
}
/**
* Given a ToRadio buffer parse it and properly handle it (setup radio, owner or send packet into the mesh)
* Called by PhoneAPI.handleToRadio. Note: p is a scratch buffer, this function is allowed to write to it but it can not keep a
@ -291,8 +298,8 @@ int MeshService::onGPSChanged(const meshtastic::GPSStatus *unused)
p->decoded.which_payload = SubPacket_position_tag;
Position &pos = p->decoded.position;
// !zero or !zero lat/long means valid
if (gps->latitude != 0 || gps->longitude != 0) {
if (gps->hasLock()) {
if (gps->altitude != 0)
pos.altitude = gps->altitude;
pos.latitude_i = gps->latitude;

View File

@ -67,7 +67,7 @@ class MeshService
void reloadConfig();
/// The owner User record just got updated, update our node DB and broadcast the info into the mesh
void reloadOwner() { sendOurOwner(); }
void reloadOwner();
/// Called when the user wakes up our GUI, normally sends our latest location to the mesh (if we have it), otherwise at least
/// sends our owner