diff --git a/docs/software/TODO.md b/docs/software/TODO.md index 232ea212..c61ce095 100644 --- a/docs/software/TODO.md +++ b/docs/software/TODO.md @@ -15,11 +15,17 @@ You probably don't care about this section - skip to the next one. * DONE enable remote setttings access by moving settings operations into a regular plugin (move settings ops out of PhoneAPI) * DONE move portnum up? * DONE remove region specific builds from the firmware -* test single channel +* test single channel without python +* test single channel with python +* implement 'get channels' Admin operation +* use get-channels from python +* use set-channel from python * test multi channel +* pick default random admin key * restrict gpio & serial & settings operations to the admin channel (unless local to the current node) * add gui in android app for setting region -* make an alpha channel for the python API +* warn in python api if we are too new to talk to the device code +* make a post warning about 1.2, telling how to stay on old android & python clients. link to this from the android dialog message and python version warning. * "FIXME - move the radioconfig/user/channel READ operations into SettingsMessage as well" * DONE scrub protobufs to make sure they are absoloute minimum wiresize (in particular Data, ChannelSets and positions) * change syncword @@ -34,11 +40,10 @@ You probably don't care about this section - skip to the next one. * DONE make all subpackets different versions of data * DONE move routing control into a data packet * have phoneapi done via plugin -* figure out how to add micro_delta to position, make it so that phone apps don't need to understand it? +* DONE figure out how to add micro_delta to position, make it so that phone apps don't need to understand it? * only send battery updates a max of once a minute -* add multichannel support in python -* add channel selection for sending -* record recevied channel in meshpacket +* add python channel selection for sending +* DONE record recevied channel in meshpacket * test remote settings operations (confirm it works 3 hops away) * add channel restrictions for plugins (and restrict routing plugin to the "control" channel) * make a primaryChannel global and properly maintain it when the phone sends setChannel diff --git a/proto b/proto index f6ff4cc0..7a5875d9 160000 --- a/proto +++ b/proto @@ -1 +1 @@ -Subproject commit f6ff4cc0c98b201342c32776eeeb9ace83b450dd +Subproject commit 7a5875d9639a0682bd36d7e118bf26d7b4d733be diff --git a/src/mesh/MeshPlugin.cpp b/src/mesh/MeshPlugin.cpp index 763d4d46..76ac99b6 100644 --- a/src/mesh/MeshPlugin.cpp +++ b/src/mesh/MeshPlugin.cpp @@ -32,7 +32,8 @@ void MeshPlugin::callPlugins(const MeshPacket &mp) assert(mp.which_payloadVariant == MeshPacket_decoded_tag); // I think we are guarnteed the packet is decoded by this point? // Was this message directed to us specifically? Will be false if we are sniffing someone elses packets - bool toUs = mp.to == NODENUM_BROADCAST || mp.to == nodeDB.getNodeNum(); + auto ourNodeNum = nodeDB.getNodeNum(); + bool toUs = mp.to == NODENUM_BROADCAST || mp.to == ourNodeNum; for (auto i = plugins->begin(); i != plugins->end(); ++i) { auto &pi = **i; @@ -45,8 +46,8 @@ void MeshPlugin::callPlugins(const MeshPacket &mp) bool handled = pi.handleReceived(mp); - // Possibly send replies (but only if the message was directed to us specifically, i.e. not for promiscious sniffing) - if (mp.decoded.want_response && toUs) { + // Possibly send replies (but only if the message was directed to us specifically, i.e. not for promiscious sniffing), also not if we sent it + if (mp.decoded.want_response && toUs && mp.from != ourNodeNum) { pi.sendResponse(mp); DEBUG_MSG("Plugin %s sent a response\n", pi.name); } diff --git a/src/mesh/NodeDB.cpp b/src/mesh/NodeDB.cpp index 6e81acd7..876a66bc 100644 --- a/src/mesh/NodeDB.cpp +++ b/src/mesh/NodeDB.cpp @@ -148,7 +148,7 @@ void NodeDB::installDefaultDeviceState() // Restore region if possible if (oldRegionCode != RegionCode_Unset) radioConfig.preferences.region = oldRegionCode; - if (oldRegion.length()) + if (oldRegion.length()) // If the old style region was set, try to keep it up-to-date strcpy(myNodeInfo.region, oldRegion.c_str()); } @@ -400,7 +400,6 @@ void NodeDB::updateUser(uint32_t nodeId, const User &p) void NodeDB::updateFrom(const MeshPacket &mp) { if (mp.which_payloadVariant == MeshPacket_decoded_tag) { - const Data &p = mp.decoded; DEBUG_MSG("Update DB node 0x%x, rx_time=%u\n", mp.from, mp.rx_time); NodeInfo *info = getOrCreateNode(mp.from); diff --git a/src/mesh/PhoneAPI.h b/src/mesh/PhoneAPI.h index 6d4e8d62..19c5d058 100644 --- a/src/mesh/PhoneAPI.h +++ b/src/mesh/PhoneAPI.h @@ -101,10 +101,6 @@ class PhoneAPI */ virtual void onNowHasData(uint32_t fromRadioNum) {} - void handleSetOwner(const User &o); - void handleSetChannel(const Channel &cc); - void handleSetRadio(const RadioConfig &r); - private: /** * Handle a packet that the phone wants us to send. It is our responsibility to free the packet to the pool diff --git a/src/mesh/RadioLibInterface.cpp b/src/mesh/RadioLibInterface.cpp index ab172812..b3fac2ab 100644 --- a/src/mesh/RadioLibInterface.cpp +++ b/src/mesh/RadioLibInterface.cpp @@ -274,7 +274,7 @@ void RadioLibInterface::handleReceiveInterrupt() mp->from = h->from; mp->to = h->to; mp->id = h->id; - mp->channel = h->id; + mp->channel = h->channel; assert(HOP_MAX <= PACKET_FLAGS_HOP_MASK); // If hopmax changes, carefully check this code mp->hop_limit = h->flags & PACKET_FLAGS_HOP_MASK; mp->want_ack = !!(h->flags & PACKET_FLAGS_WANT_ACK_MASK); diff --git a/version.properties b/version.properties index 6c1503ac..c77424e6 100644 --- a/version.properties +++ b/version.properties @@ -1,4 +1,4 @@ [VERSION] major = 1 -minor = 1 -build = 48 +minor = 2 +build = 0