mirror of
https://github.com/meshtastic/firmware.git
synced 2025-06-17 18:42:10 +00:00
clean up nodeinfo broadcasts and move into plugin
This commit is contained in:
parent
71c35304d6
commit
e35f137986
@ -51,22 +51,7 @@ MeshService service;
|
|||||||
|
|
||||||
#include "Router.h"
|
#include "Router.h"
|
||||||
|
|
||||||
static int32_t sendOwnerCb()
|
|
||||||
{
|
|
||||||
static uint32_t currentGeneration;
|
|
||||||
|
|
||||||
// If we changed channels, ask everyone else for their latest info
|
|
||||||
bool requestReplies = currentGeneration != radioGeneration;
|
|
||||||
currentGeneration = radioGeneration;
|
|
||||||
|
|
||||||
DEBUG_MSG("Sending our nodeinfo to mesh (wantReplies=%d)\n", requestReplies);
|
|
||||||
assert(nodeInfoPlugin);
|
|
||||||
nodeInfoPlugin->sendOurNodeInfo(NODENUM_BROADCAST, requestReplies); // Send our info (don't request replies)
|
|
||||||
|
|
||||||
return getPref_send_owner_interval() * getPref_position_broadcast_secs() * 1000;
|
|
||||||
}
|
|
||||||
|
|
||||||
static concurrency::Periodic *sendOwnerPeriod;
|
|
||||||
|
|
||||||
MeshService::MeshService() : toPhoneQueue(MAX_RX_TOPHONE)
|
MeshService::MeshService() : toPhoneQueue(MAX_RX_TOPHONE)
|
||||||
{
|
{
|
||||||
@ -75,9 +60,6 @@ MeshService::MeshService() : toPhoneQueue(MAX_RX_TOPHONE)
|
|||||||
|
|
||||||
void MeshService::init()
|
void MeshService::init()
|
||||||
{
|
{
|
||||||
sendOwnerPeriod = new concurrency::Periodic("SendOwner", sendOwnerCb);
|
|
||||||
sendOwnerPeriod->setIntervalFromNow(30 * 1000); // Send our initial owner announcement 30 seconds after we start (to give network time to setup)
|
|
||||||
|
|
||||||
// moved much earlier in boot (called from setup())
|
// moved much earlier in boot (called from setup())
|
||||||
// nodeDB.init();
|
// nodeDB.init();
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ bool NodeInfoPlugin::handleReceivedProtobuf(const MeshPacket &mp, const User &p)
|
|||||||
void NodeInfoPlugin::sendOurNodeInfo(NodeNum dest, bool wantReplies)
|
void NodeInfoPlugin::sendOurNodeInfo(NodeNum dest, bool wantReplies)
|
||||||
{
|
{
|
||||||
// cancel any not yet sent (now stale) position packets
|
// cancel any not yet sent (now stale) position packets
|
||||||
if(prevPacketId) // if we wrap around to zero, we'll simply fail to cancel in that rare case (no big deal)
|
if (prevPacketId) // if we wrap around to zero, we'll simply fail to cancel in that rare case (no big deal)
|
||||||
service.cancelSending(prevPacketId);
|
service.cancelSending(prevPacketId);
|
||||||
|
|
||||||
MeshPacket *p = allocReply();
|
MeshPacket *p = allocReply();
|
||||||
@ -48,3 +48,26 @@ MeshPacket *NodeInfoPlugin::allocReply()
|
|||||||
DEBUG_MSG("sending owner %s/%s/%s\n", u.id, u.long_name, u.short_name);
|
DEBUG_MSG("sending owner %s/%s/%s\n", u.id, u.long_name, u.short_name);
|
||||||
return allocDataProtobuf(u);
|
return allocDataProtobuf(u);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NodeInfoPlugin::NodeInfoPlugin()
|
||||||
|
: ProtobufPlugin("nodeinfo", PortNum_NODEINFO_APP, User_fields), concurrency::OSThread("NodeInfoPlugin")
|
||||||
|
{
|
||||||
|
setIntervalFromNow(30 *
|
||||||
|
1000); // Send our initial owner announcement 30 seconds after we start (to give network time to setup)
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t NodeInfoPlugin::runOnce()
|
||||||
|
{
|
||||||
|
static uint32_t currentGeneration;
|
||||||
|
|
||||||
|
// If we changed channels, ask everyone else for their latest info
|
||||||
|
bool requestReplies = currentGeneration != radioGeneration;
|
||||||
|
currentGeneration = radioGeneration;
|
||||||
|
|
||||||
|
DEBUG_MSG("Sending our nodeinfo to mesh (wantReplies=%d)\n", requestReplies);
|
||||||
|
assert(nodeInfoPlugin);
|
||||||
|
nodeInfoPlugin->sendOurNodeInfo(NODENUM_BROADCAST, requestReplies); // Send our info (don't request replies)
|
||||||
|
|
||||||
|
return getPref_position_broadcast_secs() * 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -4,16 +4,17 @@
|
|||||||
/**
|
/**
|
||||||
* NodeInfo plugin for sending/receiving NodeInfos into the mesh
|
* NodeInfo plugin for sending/receiving NodeInfos into the mesh
|
||||||
*/
|
*/
|
||||||
class NodeInfoPlugin : public ProtobufPlugin<User>
|
class NodeInfoPlugin : public ProtobufPlugin<User>, private concurrency::OSThread
|
||||||
{
|
{
|
||||||
/// The id of the last packet we sent, to allow us to cancel it if we make something fresher
|
/// The id of the last packet we sent, to allow us to cancel it if we make something fresher
|
||||||
PacketId prevPacketId = 0;
|
PacketId prevPacketId = 0;
|
||||||
|
|
||||||
|
uint32_t currentGeneration = 0;
|
||||||
public:
|
public:
|
||||||
/** Constructor
|
/** Constructor
|
||||||
* name is for debugging output
|
* name is for debugging output
|
||||||
*/
|
*/
|
||||||
NodeInfoPlugin() : ProtobufPlugin("nodeinfo", PortNum_NODEINFO_APP, User_fields) {}
|
NodeInfoPlugin();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send our NodeInfo into the mesh
|
* Send our NodeInfo into the mesh
|
||||||
@ -30,6 +31,9 @@ class NodeInfoPlugin : public ProtobufPlugin<User>
|
|||||||
/** Messages can be received that have the want_response bit set. If set, this callback will be invoked
|
/** Messages can be received that have the want_response bit set. If set, this callback will be invoked
|
||||||
* so that subclasses can (optionally) send a response back to the original sender. */
|
* so that subclasses can (optionally) send a response back to the original sender. */
|
||||||
virtual MeshPacket *allocReply();
|
virtual MeshPacket *allocReply();
|
||||||
|
|
||||||
|
/** Does our periodic broadcast */
|
||||||
|
virtual int32_t runOnce();
|
||||||
};
|
};
|
||||||
|
|
||||||
extern NodeInfoPlugin *nodeInfoPlugin;
|
extern NodeInfoPlugin *nodeInfoPlugin;
|
Loading…
Reference in New Issue
Block a user