mirror of
https://github.com/meshtastic/firmware.git
synced 2025-06-16 10:02:05 +00:00
impl get channels/get radio remote api
This commit is contained in:
parent
5ae4edf8fd
commit
c7c8b34adf
2
proto
2
proto
@ -1 +1 @@
|
|||||||
Subproject commit 75ae9929a22a0cfa65059f30b27485f2ae8f3a63
|
Subproject commit 6bb139c0a43825d868a5e78c07c443f8e9e80b55
|
@ -17,8 +17,10 @@ typedef struct _AdminMessage {
|
|||||||
RadioConfig set_radio;
|
RadioConfig set_radio;
|
||||||
User set_owner;
|
User set_owner;
|
||||||
Channel set_channel;
|
Channel set_channel;
|
||||||
bool get_radio;
|
bool get_radio_request;
|
||||||
uint32_t get_channel;
|
RadioConfig get_radio_response;
|
||||||
|
uint32_t get_channel_request;
|
||||||
|
Channel get_channel_response;
|
||||||
};
|
};
|
||||||
} AdminMessage;
|
} AdminMessage;
|
||||||
|
|
||||||
@ -35,21 +37,27 @@ extern "C" {
|
|||||||
#define AdminMessage_set_radio_tag 1
|
#define AdminMessage_set_radio_tag 1
|
||||||
#define AdminMessage_set_owner_tag 2
|
#define AdminMessage_set_owner_tag 2
|
||||||
#define AdminMessage_set_channel_tag 3
|
#define AdminMessage_set_channel_tag 3
|
||||||
#define AdminMessage_get_radio_tag 4
|
#define AdminMessage_get_radio_request_tag 4
|
||||||
#define AdminMessage_get_channel_tag 5
|
#define AdminMessage_get_radio_response_tag 5
|
||||||
|
#define AdminMessage_get_channel_request_tag 6
|
||||||
|
#define AdminMessage_get_channel_response_tag 7
|
||||||
|
|
||||||
/* Struct field encoding specification for nanopb */
|
/* Struct field encoding specification for nanopb */
|
||||||
#define AdminMessage_FIELDLIST(X, a) \
|
#define AdminMessage_FIELDLIST(X, a) \
|
||||||
X(a, STATIC, ONEOF, MESSAGE, (variant,set_radio,set_radio), 1) \
|
X(a, STATIC, ONEOF, MESSAGE, (variant,set_radio,set_radio), 1) \
|
||||||
X(a, STATIC, ONEOF, MESSAGE, (variant,set_owner,set_owner), 2) \
|
X(a, STATIC, ONEOF, MESSAGE, (variant,set_owner,set_owner), 2) \
|
||||||
X(a, STATIC, ONEOF, MESSAGE, (variant,set_channel,set_channel), 3) \
|
X(a, STATIC, ONEOF, MESSAGE, (variant,set_channel,set_channel), 3) \
|
||||||
X(a, STATIC, ONEOF, BOOL, (variant,get_radio,get_radio), 4) \
|
X(a, STATIC, ONEOF, BOOL, (variant,get_radio_request,get_radio_request), 4) \
|
||||||
X(a, STATIC, ONEOF, UINT32, (variant,get_channel,get_channel), 5)
|
X(a, STATIC, ONEOF, MESSAGE, (variant,get_radio_response,get_radio_response), 5) \
|
||||||
|
X(a, STATIC, ONEOF, UINT32, (variant,get_channel_request,get_channel_request), 6) \
|
||||||
|
X(a, STATIC, ONEOF, MESSAGE, (variant,get_channel_response,get_channel_response), 7)
|
||||||
#define AdminMessage_CALLBACK NULL
|
#define AdminMessage_CALLBACK NULL
|
||||||
#define AdminMessage_DEFAULT NULL
|
#define AdminMessage_DEFAULT NULL
|
||||||
#define AdminMessage_variant_set_radio_MSGTYPE RadioConfig
|
#define AdminMessage_variant_set_radio_MSGTYPE RadioConfig
|
||||||
#define AdminMessage_variant_set_owner_MSGTYPE User
|
#define AdminMessage_variant_set_owner_MSGTYPE User
|
||||||
#define AdminMessage_variant_set_channel_MSGTYPE Channel
|
#define AdminMessage_variant_set_channel_MSGTYPE Channel
|
||||||
|
#define AdminMessage_variant_get_radio_response_MSGTYPE RadioConfig
|
||||||
|
#define AdminMessage_variant_get_channel_response_MSGTYPE Channel
|
||||||
|
|
||||||
extern const pb_msgdesc_t AdminMessage_msg;
|
extern const pb_msgdesc_t AdminMessage_msg;
|
||||||
|
|
||||||
|
@ -1,13 +1,32 @@
|
|||||||
#include "AdminPlugin.h"
|
#include "AdminPlugin.h"
|
||||||
|
#include "Channels.h"
|
||||||
#include "MeshService.h"
|
#include "MeshService.h"
|
||||||
#include "NodeDB.h"
|
#include "NodeDB.h"
|
||||||
#include "Router.h"
|
#include "Router.h"
|
||||||
#include "configuration.h"
|
#include "configuration.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "Channels.h"
|
|
||||||
|
|
||||||
AdminPlugin *adminPlugin;
|
AdminPlugin *adminPlugin;
|
||||||
|
|
||||||
|
void AdminPlugin::handleGetChannel(const MeshPacket &req, uint32_t channelIndex) {
|
||||||
|
if (req.decoded.want_response) {
|
||||||
|
// We create the reply here
|
||||||
|
AdminMessage r = AdminMessage_init_default;
|
||||||
|
r.get_channel_response = channels.getByIndex(channelIndex);
|
||||||
|
reply = allocDataProtobuf(r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void AdminPlugin::handleGetRadio(const MeshPacket &req)
|
||||||
|
{
|
||||||
|
if (req.decoded.want_response) {
|
||||||
|
// We create the reply here
|
||||||
|
AdminMessage r = AdminMessage_init_default;
|
||||||
|
r.get_radio_response = devicestate.radio;
|
||||||
|
reply = allocDataProtobuf(r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool AdminPlugin::handleReceivedProtobuf(const MeshPacket &mp, const AdminMessage *r)
|
bool AdminPlugin::handleReceivedProtobuf(const MeshPacket &mp, const AdminMessage *r)
|
||||||
{
|
{
|
||||||
assert(r);
|
assert(r);
|
||||||
@ -26,12 +45,23 @@ bool AdminPlugin::handleReceivedProtobuf(const MeshPacket &mp, const AdminMessag
|
|||||||
DEBUG_MSG("Client is setting channel\n");
|
DEBUG_MSG("Client is setting channel\n");
|
||||||
handleSetChannel(r->set_channel);
|
handleSetChannel(r->set_channel);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case AdminMessage_get_channel_request_tag:
|
||||||
|
DEBUG_MSG("Client is getting channel %d\n", r->get_channel_request);
|
||||||
|
handleGetChannel(mp, r->get_channel_request);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case AdminMessage_get_radio_request_tag:
|
||||||
|
DEBUG_MSG("Client is getting radio\n");
|
||||||
|
handleGetRadio(mp);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return false; // Let others look at this message also if they want
|
return false; // Let others look at this message also if they want
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void AdminPlugin::handleSetOwner(const User &o)
|
void AdminPlugin::handleSetOwner(const User &o)
|
||||||
{
|
{
|
||||||
int changed = 0;
|
int changed = 0;
|
||||||
@ -62,7 +92,6 @@ void AdminPlugin::handleSetChannel(const Channel &cc)
|
|||||||
if (didReset) {
|
if (didReset) {
|
||||||
state = STATE_SEND_MY_INFO; // Squirt a completely new set of configs to the client
|
state = STATE_SEND_MY_INFO; // Squirt a completely new set of configs to the client
|
||||||
} */
|
} */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AdminPlugin::handleSetRadio(const RadioConfig &r)
|
void AdminPlugin::handleSetRadio(const RadioConfig &r)
|
||||||
@ -75,19 +104,14 @@ void AdminPlugin::handleSetRadio(const RadioConfig &r)
|
|||||||
} */
|
} */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
MeshPacket *AdminPlugin::allocReply()
|
MeshPacket *AdminPlugin::allocReply()
|
||||||
{
|
{
|
||||||
assert(0); // 1.2 refactoring fixme, Not sure if anything needs this yet?
|
auto r = reply;
|
||||||
// return allocDataProtobuf(u);
|
reply = NULL; // Only use each reply once
|
||||||
return NULL;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
AdminPlugin::AdminPlugin()
|
AdminPlugin::AdminPlugin() : ProtobufPlugin("Admin", PortNum_ADMIN_APP, AdminMessage_fields)
|
||||||
: ProtobufPlugin("Admin", PortNum_ADMIN_APP, AdminMessage_fields)
|
|
||||||
{
|
{
|
||||||
// FIXME, restrict to the admin channel for rx
|
// FIXME, restrict to the admin channel for rx
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,6 +6,8 @@
|
|||||||
*/
|
*/
|
||||||
class AdminPlugin : public ProtobufPlugin<AdminMessage>
|
class AdminPlugin : public ProtobufPlugin<AdminMessage>
|
||||||
{
|
{
|
||||||
|
MeshPacket *reply = NULL;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/** Constructor
|
/** Constructor
|
||||||
* name is for debugging output
|
* name is for debugging output
|
||||||
@ -27,6 +29,9 @@ class AdminPlugin : public ProtobufPlugin<AdminMessage>
|
|||||||
void handleSetOwner(const User &o);
|
void handleSetOwner(const User &o);
|
||||||
void handleSetChannel(const Channel &cc);
|
void handleSetChannel(const Channel &cc);
|
||||||
void handleSetRadio(const RadioConfig &r);
|
void handleSetRadio(const RadioConfig &r);
|
||||||
|
|
||||||
|
void handleGetChannel(const MeshPacket &req, uint32_t channelIndex);
|
||||||
|
void handleGetRadio(const MeshPacket &req);
|
||||||
};
|
};
|
||||||
|
|
||||||
extern AdminPlugin *adminPlugin;
|
extern AdminPlugin *adminPlugin;
|
Loading…
Reference in New Issue
Block a user