multichannel send/rx kinda works

pull/706/head
Kevin Hester 2021-02-23 11:43:30 +08:00
rodzic ae6b7e7259
commit aa8b86c6b2
7 zmienionych plików z 20 dodań i 19 usunięć

Wyświetl plik

@ -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

2
proto

@ -1 +1 @@
Subproject commit f6ff4cc0c98b201342c32776eeeb9ace83b450dd
Subproject commit 7a5875d9639a0682bd36d7e118bf26d7b4d733be

Wyświetl plik

@ -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);
}

Wyświetl plik

@ -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);

Wyświetl plik

@ -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

Wyświetl plik

@ -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);

Wyświetl plik

@ -1,4 +1,4 @@
[VERSION]
major = 1
minor = 1
build = 48
minor = 2
build = 0