Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 9 additions & 6 deletions examples/companion_radio/MyMesh.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1111,11 +1111,12 @@ void MyMesh::handleCmdFrame(size_t len) {
writeErrFrame(ERR_CODE_ILLEGAL_ARG);
}
} else if (cmd_frame[0] == CMD_SEND_SELF_ADVERT) {
uint16_t caps = _prefs.client_repeat ? ADVERT_CAP_REPEAT : 0;
mesh::Packet* pkt;
if (_prefs.advert_loc_policy == ADVERT_LOC_NONE) {
pkt = createSelfAdvert(_prefs.node_name);
pkt = createSelfAdvert(_prefs.node_name, caps);
} else {
pkt = createSelfAdvert(_prefs.node_name, sensors.node_lat, sensors.node_lon);
pkt = createSelfAdvert(_prefs.node_name, sensors.node_lat, sensors.node_lon, caps);
}
if (pkt) {
if (len >= 2 && cmd_frame[1] == 1) { // optional param (1 = flood, 0 = zero hop)
Expand Down Expand Up @@ -1193,11 +1194,12 @@ void MyMesh::handleCmdFrame(size_t len) {
} else if (cmd_frame[0] == CMD_EXPORT_CONTACT) {
if (len < 1 + PUB_KEY_SIZE) {
// export SELF
uint16_t caps = _prefs.client_repeat ? ADVERT_CAP_REPEAT : 0;
mesh::Packet* pkt;
if (_prefs.advert_loc_policy == ADVERT_LOC_NONE) {
pkt = createSelfAdvert(_prefs.node_name);
pkt = createSelfAdvert(_prefs.node_name, caps);
} else {
pkt = createSelfAdvert(_prefs.node_name, sensors.node_lat, sensors.node_lon);
pkt = createSelfAdvert(_prefs.node_name, sensors.node_lat, sensors.node_lon, caps);
}
if (pkt) {
pkt->header |= ROUTE_TYPE_FLOOD; // would normally be sent in this mode
Expand Down Expand Up @@ -2041,11 +2043,12 @@ void MyMesh::loop() {
}

bool MyMesh::advert() {
uint16_t caps = _prefs.client_repeat ? ADVERT_CAP_REPEAT : 0;
mesh::Packet* pkt;
if (_prefs.advert_loc_policy == ADVERT_LOC_NONE) {
pkt = createSelfAdvert(_prefs.node_name);
pkt = createSelfAdvert(_prefs.node_name, caps);
} else {
pkt = createSelfAdvert(_prefs.node_name, sensors.node_lat, sensors.node_lon);
pkt = createSelfAdvert(_prefs.node_name, sensors.node_lat, sensors.node_lon, caps);
}
if (pkt) {
sendZeroHop(pkt);
Expand Down
3 changes: 2 additions & 1 deletion examples/simple_repeater/MyMesh.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -381,7 +381,8 @@ int MyMesh::handleRequest(ClientInfo *sender, uint32_t sender_timestamp, uint8_t

mesh::Packet *MyMesh::createSelfAdvert() {
uint8_t app_data[MAX_ADVERT_DATA_SIZE];
uint8_t app_data_len = _cli.buildAdvertData(ADV_TYPE_REPEATER, app_data);
uint16_t caps = _prefs.disable_fwd ? 0 : ADVERT_CAP_REPEAT;
uint8_t app_data_len = _cli.buildAdvertData(ADV_TYPE_REPEATER, app_data, caps);

return createAdvert(self_id, app_data, app_data_len);
}
Expand Down
3 changes: 2 additions & 1 deletion examples/simple_room_server/MyMesh.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,8 @@ bool MyMesh::processAck(const uint8_t *data) {

mesh::Packet *MyMesh::createSelfAdvert() {
uint8_t app_data[MAX_ADVERT_DATA_SIZE];
uint8_t app_data_len = _cli.buildAdvertData(ADV_TYPE_ROOM, app_data);
uint16_t caps = _prefs.disable_fwd ? 0 : ADVERT_CAP_REPEAT;
uint8_t app_data_len = _cli.buildAdvertData(ADV_TYPE_ROOM, app_data, caps);

return createAdvert(self_id, app_data, app_data_len);
}
Expand Down
7 changes: 5 additions & 2 deletions src/helpers/AdvertDataHelpers.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,13 @@
//FUTURE: 5..15

#define ADV_LATLON_MASK 0x10
#define ADV_FEAT1_MASK 0x20 // FUTURE
#define ADV_FEAT1_MASK 0x20
#define ADV_FEAT2_MASK 0x40 // FUTURE
#define ADV_NAME_MASK 0x80

// FEAT1 bits
#define ADVERT_CAP_REPEAT 0x0001 // node forwards packets

class AdvertDataBuilder {
uint8_t _type;
bool _has_loc;
Expand All @@ -26,7 +29,7 @@ class AdvertDataBuilder {
public:
AdvertDataBuilder(uint8_t adv_type) : _type(adv_type), _name(NULL), _has_loc(false) { }
AdvertDataBuilder(uint8_t adv_type, const char* name) : _type(adv_type), _name(name), _has_loc(false) { }
AdvertDataBuilder(uint8_t adv_type, const char* name, double lat, double lon) :
AdvertDataBuilder(uint8_t adv_type, const char* name, double lat, double lon) :
_type(adv_type), _name(name), _has_loc(true), _lat(lat * 1E6), _lon(lon * 1E6) { }

void setFeat1(uint16_t extra) { _extra1 = extra; }
Expand Down
6 changes: 4 additions & 2 deletions src/helpers/BaseChatMesh.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,22 +16,24 @@ void BaseChatMesh::sendFloodScoped(const mesh::GroupChannel& channel, mesh::Pack
sendFlood(pkt, delay_millis);
}

mesh::Packet* BaseChatMesh::createSelfAdvert(const char* name) {
mesh::Packet* BaseChatMesh::createSelfAdvert(const char* name, uint16_t feat1) {
uint8_t app_data[MAX_ADVERT_DATA_SIZE];
uint8_t app_data_len;
{
AdvertDataBuilder builder(ADV_TYPE_CHAT, name);
if (feat1) builder.setFeat1(feat1);
app_data_len = builder.encodeTo(app_data);
}

return createAdvert(self_id, app_data, app_data_len);
}

mesh::Packet* BaseChatMesh::createSelfAdvert(const char* name, double lat, double lon) {
mesh::Packet* BaseChatMesh::createSelfAdvert(const char* name, double lat, double lon, uint16_t feat1) {
uint8_t app_data[MAX_ADVERT_DATA_SIZE];
uint8_t app_data_len;
{
AdvertDataBuilder builder(ADV_TYPE_CHAT, name, lat, lon);
if (feat1) builder.setFeat1(feat1);
app_data_len = builder.encodeTo(app_data);
}

Expand Down
4 changes: 2 additions & 2 deletions src/helpers/BaseChatMesh.h
Original file line number Diff line number Diff line change
Expand Up @@ -143,8 +143,8 @@ class BaseChatMesh : public mesh::Mesh {
void checkConnections();

public:
mesh::Packet* createSelfAdvert(const char* name);
mesh::Packet* createSelfAdvert(const char* name, double lat, double lon);
mesh::Packet* createSelfAdvert(const char* name, uint16_t feat1 = 0);
mesh::Packet* createSelfAdvert(const char* name, double lat, double lon, uint16_t feat1 = 0);
int sendMessage(const ContactInfo& recipient, uint32_t timestamp, uint8_t attempt, const char* text, uint32_t& expected_ack, uint32_t& est_timeout);
int sendCommandData(const ContactInfo& recipient, uint32_t timestamp, uint8_t attempt, const char* text, uint32_t& est_timeout);
bool sendGroupMessage(uint32_t timestamp, mesh::GroupChannel& channel, const char* sender_name, const char* text, int text_len);
Expand Down
5 changes: 4 additions & 1 deletion src/helpers/CommonCLI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -183,15 +183,18 @@ void CommonCLI::savePrefs() {
_callbacks->savePrefs();
}

uint8_t CommonCLI::buildAdvertData(uint8_t node_type, uint8_t* app_data) {
uint8_t CommonCLI::buildAdvertData(uint8_t node_type, uint8_t* app_data, uint16_t feat1) {
if (_prefs->advert_loc_policy == ADVERT_LOC_NONE) {
AdvertDataBuilder builder(node_type, _prefs->node_name);
if (feat1) builder.setFeat1(feat1);
return builder.encodeTo(app_data);
} else if (_prefs->advert_loc_policy == ADVERT_LOC_SHARE) {
AdvertDataBuilder builder(node_type, _prefs->node_name, _sensors->node_lat, _sensors->node_lon);
if (feat1) builder.setFeat1(feat1);
return builder.encodeTo(app_data);
} else {
AdvertDataBuilder builder(node_type, _prefs->node_name, _prefs->node_lat, _prefs->node_lon);
if (feat1) builder.setFeat1(feat1);
return builder.encodeTo(app_data);
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/helpers/CommonCLI.h
Original file line number Diff line number Diff line change
Expand Up @@ -110,5 +110,5 @@ class CommonCLI {
void loadPrefs(FILESYSTEM* _fs);
void savePrefs(FILESYSTEM* _fs);
void handleCommand(uint32_t sender_timestamp, const char* command, char* reply);
uint8_t buildAdvertData(uint8_t node_type, uint8_t* app_data);
uint8_t buildAdvertData(uint8_t node_type, uint8_t* app_data, uint16_t feat1 = 0);
};