Merge pull request #460 from geeksville/dev

Dev
This commit is contained in:
Kevin Hester 2020-10-08 19:09:12 -07:00 committed by GitHub
commit 514ebdf013
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 15 additions and 13 deletions

View File

@ -71,7 +71,7 @@ uint32_t getTime()
return ((millis() - timeStartMsec) / 1000) + zeroOffsetSecs; return ((millis() - timeStartMsec) / 1000) + zeroOffsetSecs;
} }
uint32_t getValidTime() uint32_t getValidTime(RTCQuality minQuality)
{ {
return (currentQuality >= RTCQualityFromNet) ? getTime() : 0; return (currentQuality >= minQuality) ? getTime() : 0;
} }

View File

@ -25,6 +25,6 @@ bool perhapsSetRTC(RTCQuality q, struct tm &t);
uint32_t getTime(); uint32_t getTime();
/// Return time since 1970 in secs. If quality is RTCQualityNone return zero /// Return time since 1970 in secs. If quality is RTCQualityNone return zero
uint32_t getValidTime(); uint32_t getValidTime(RTCQuality minQuality);
void readFromRTC(); void readFromRTC();

View File

@ -151,7 +151,7 @@ int MeshService::handleFromRadio(const MeshPacket *mp)
{ {
powerFSM.trigger(EVENT_RECEIVED_PACKET); // Possibly keep the node from sleeping powerFSM.trigger(EVENT_RECEIVED_PACKET); // Possibly keep the node from sleeping
// If it is a position packet, perhaps set our clock // If it is a position packet, perhaps set our clock - this must be before nodeDB.updateFrom
handleIncomingPosition(mp); handleIncomingPosition(mp);
if (mp->which_payload == MeshPacket_decoded_tag && mp->decoded.which_payload == SubPacket_user_tag) { if (mp->which_payload == MeshPacket_decoded_tag && mp->decoded.which_payload == SubPacket_user_tag) {
@ -226,7 +226,7 @@ void MeshService::handleToRadio(MeshPacket &p)
if (p.id == 0) if (p.id == 0)
p.id = generatePacketId(); // If the phone didn't supply one, then pick one p.id = generatePacketId(); // If the phone didn't supply one, then pick one
p.rx_time = getValidTime(); // Record the time the packet arrived from the phone p.rx_time = getValidTime(RTCQualityFromNet); // Record the time the packet arrived from the phone
// (so we update our nodedb for the local node) // (so we update our nodedb for the local node)
// Send the packet into the mesh // Send the packet into the mesh
@ -285,7 +285,7 @@ void MeshService::sendOurPosition(NodeNum dest, bool wantReplies)
p->decoded.which_payload = SubPacket_position_tag; p->decoded.which_payload = SubPacket_position_tag;
p->decoded.position = node->position; p->decoded.position = node->position;
p->decoded.want_response = wantReplies; p->decoded.want_response = wantReplies;
p->decoded.position.time = getValidTime(); // This nodedb timestamp might be stale, so update it if our clock is valid. p->decoded.position.time = getValidTime(RTCQualityGPS); // This nodedb timestamp might be stale, so update it if our clock is valid.
sendToMesh(p); sendToMesh(p);
} }
@ -303,9 +303,10 @@ int MeshService::onGPSChanged(const meshtastic::GPSStatus *unused)
pos.altitude = gps->altitude; pos.altitude = gps->altitude;
pos.latitude_i = gps->latitude; pos.latitude_i = gps->latitude;
pos.longitude_i = gps->longitude; pos.longitude_i = gps->longitude;
pos.time = getValidTime();
} }
pos.time = getValidTime(RTCQualityGPS);
// Include our current battery voltage in our position announcement // Include our current battery voltage in our position announcement
pos.battery_level = powerStatus->getBatteryChargePercent(); pos.battery_level = powerStatus->getBatteryChargePercent();
updateBatteryLevel(pos.battery_level); updateBatteryLevel(pos.battery_level);

View File

@ -415,10 +415,10 @@ void NodeDB::updateFrom(const MeshPacket &mp)
switch (p.which_payload) { switch (p.which_payload) {
case SubPacket_position_tag: { case SubPacket_position_tag: {
// we carefully preserve the old time, because we always trust our local timestamps more // we always trust our local timestamps more
uint32_t oldtime = info->position.time;
info->position = p.position; info->position = p.position;
info->position.time = oldtime; if (mp.rx_time)
info->position.time = mp.rx_time;
info->has_position = true; info->has_position = true;
updateGUIforNode = info; updateGUIforNode = info;
notifyObservers(true); // Force an update whether or not our node counts have changed notifyObservers(true); // Force an update whether or not our node counts have changed

View File

@ -5,6 +5,8 @@
#define MAX_POWER 20 #define MAX_POWER 20
// if we use 20 we are limited to 1% duty cycle or hw might overheat. For continuous operation set a limit of 17 // if we use 20 we are limited to 1% duty cycle or hw might overheat. For continuous operation set a limit of 17
// In theory up to 27 dBm is possible, but the modules installed in most radios can cope with a max of 20. So BIG WARNING
// if you set power to something higher than 17 or 20 you might fry your board.
#define POWER_DEFAULT 17 // How much power to use if the user hasn't set a power level #define POWER_DEFAULT 17 // How much power to use if the user hasn't set a power level

View File

@ -89,7 +89,7 @@ MeshPacket *Router::allocForSending()
p->to = NODENUM_BROADCAST; p->to = NODENUM_BROADCAST;
p->hop_limit = HOP_RELIABLE; p->hop_limit = HOP_RELIABLE;
p->id = generatePacketId(); p->id = generatePacketId();
p->rx_time = getValidTime(); // Just in case we process the packet locally - make sure it has a valid timestamp p->rx_time = getValidTime(RTCQualityFromNet); // Just in case we process the packet locally - make sure it has a valid timestamp
return p; return p;
} }
@ -198,9 +198,8 @@ NodeNum Router::getNodeNum()
*/ */
void Router::handleReceived(MeshPacket *p) void Router::handleReceived(MeshPacket *p)
{ {
// FIXME, this class shouldn't EVER need to know about the GPS, move getValidTime() into a non gps dependent function
// Also, we should set the time from the ISR and it should have msec level resolution // Also, we should set the time from the ISR and it should have msec level resolution
p->rx_time = getValidTime(); // store the arrival timestamp for the phone p->rx_time = getValidTime(RTCQualityFromNet); // store the arrival timestamp for the phone
// Take those raw bytes and convert them back into a well structured protobuf we can understand // Take those raw bytes and convert them back into a well structured protobuf we can understand
if (perhapsDecode(p)) { if (perhapsDecode(p)) {