* companion: new pref: path_hash_mode (0..2)
* companion: new field in CMD_SET_OTHER_PARAMS, path_hash_mode * companion: CMD_SEND_SELF_ADVERT, cmd_frame[1] now holds the path hash size (0 = zero hop, 1..3 = flood path hash size)
This commit is contained in:
@@ -222,7 +222,8 @@ void DataStore::loadPrefsInt(const char *filename, NodePrefs& _prefs, double& no
|
|||||||
file.read((uint8_t *)&_prefs.rx_delay_base, sizeof(_prefs.rx_delay_base)); // 72
|
file.read((uint8_t *)&_prefs.rx_delay_base, sizeof(_prefs.rx_delay_base)); // 72
|
||||||
file.read((uint8_t *)&_prefs.advert_loc_policy, sizeof(_prefs.advert_loc_policy)); // 76
|
file.read((uint8_t *)&_prefs.advert_loc_policy, sizeof(_prefs.advert_loc_policy)); // 76
|
||||||
file.read((uint8_t *)&_prefs.multi_acks, sizeof(_prefs.multi_acks)); // 77
|
file.read((uint8_t *)&_prefs.multi_acks, sizeof(_prefs.multi_acks)); // 77
|
||||||
file.read(pad, 2); // 78
|
file.read((uint8_t *)&_prefs.path_hash_mode, sizeof(_prefs.path_hash_mode)); // 78
|
||||||
|
file.read(pad, 1); // 79
|
||||||
file.read((uint8_t *)&_prefs.ble_pin, sizeof(_prefs.ble_pin)); // 80
|
file.read((uint8_t *)&_prefs.ble_pin, sizeof(_prefs.ble_pin)); // 80
|
||||||
file.read((uint8_t *)&_prefs.buzzer_quiet, sizeof(_prefs.buzzer_quiet)); // 84
|
file.read((uint8_t *)&_prefs.buzzer_quiet, sizeof(_prefs.buzzer_quiet)); // 84
|
||||||
file.read((uint8_t *)&_prefs.gps_enabled, sizeof(_prefs.gps_enabled)); // 85
|
file.read((uint8_t *)&_prefs.gps_enabled, sizeof(_prefs.gps_enabled)); // 85
|
||||||
@@ -257,7 +258,8 @@ void DataStore::savePrefs(const NodePrefs& _prefs, double node_lat, double node_
|
|||||||
file.write((uint8_t *)&_prefs.rx_delay_base, sizeof(_prefs.rx_delay_base)); // 72
|
file.write((uint8_t *)&_prefs.rx_delay_base, sizeof(_prefs.rx_delay_base)); // 72
|
||||||
file.write((uint8_t *)&_prefs.advert_loc_policy, sizeof(_prefs.advert_loc_policy)); // 76
|
file.write((uint8_t *)&_prefs.advert_loc_policy, sizeof(_prefs.advert_loc_policy)); // 76
|
||||||
file.write((uint8_t *)&_prefs.multi_acks, sizeof(_prefs.multi_acks)); // 77
|
file.write((uint8_t *)&_prefs.multi_acks, sizeof(_prefs.multi_acks)); // 77
|
||||||
file.write(pad, 2); // 78
|
file.write((uint8_t *)&_prefs.path_hash_mode, sizeof(_prefs.path_hash_mode)); // 78
|
||||||
|
file.write(pad, 1); // 79
|
||||||
file.write((uint8_t *)&_prefs.ble_pin, sizeof(_prefs.ble_pin)); // 80
|
file.write((uint8_t *)&_prefs.ble_pin, sizeof(_prefs.ble_pin)); // 80
|
||||||
file.write((uint8_t *)&_prefs.buzzer_quiet, sizeof(_prefs.buzzer_quiet)); // 84
|
file.write((uint8_t *)&_prefs.buzzer_quiet, sizeof(_prefs.buzzer_quiet)); // 84
|
||||||
file.write((uint8_t *)&_prefs.gps_enabled, sizeof(_prefs.gps_enabled)); // 85
|
file.write((uint8_t *)&_prefs.gps_enabled, sizeof(_prefs.gps_enabled)); // 85
|
||||||
|
|||||||
@@ -473,23 +473,23 @@ bool MyMesh::allowPacketForward(const mesh::Packet* packet) {
|
|||||||
void MyMesh::sendFloodScoped(const ContactInfo& recipient, mesh::Packet* pkt, uint32_t delay_millis) {
|
void MyMesh::sendFloodScoped(const ContactInfo& recipient, mesh::Packet* pkt, uint32_t delay_millis) {
|
||||||
// TODO: dynamic send_scope, depending on recipient and current 'home' Region
|
// TODO: dynamic send_scope, depending on recipient and current 'home' Region
|
||||||
if (send_scope.isNull()) {
|
if (send_scope.isNull()) {
|
||||||
sendFlood(pkt, delay_millis);
|
sendFlood(pkt, delay_millis, _prefs.path_hash_mode + 1);
|
||||||
} else {
|
} else {
|
||||||
uint16_t codes[2];
|
uint16_t codes[2];
|
||||||
codes[0] = send_scope.calcTransportCode(pkt);
|
codes[0] = send_scope.calcTransportCode(pkt);
|
||||||
codes[1] = 0; // REVISIT: set to 'home' Region, for sender/return region?
|
codes[1] = 0; // REVISIT: set to 'home' Region, for sender/return region?
|
||||||
sendFlood(pkt, codes, delay_millis);
|
sendFlood(pkt, codes, delay_millis, _prefs.path_hash_mode + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void MyMesh::sendFloodScoped(const mesh::GroupChannel& channel, mesh::Packet* pkt, uint32_t delay_millis) {
|
void MyMesh::sendFloodScoped(const mesh::GroupChannel& channel, mesh::Packet* pkt, uint32_t delay_millis) {
|
||||||
// TODO: have per-channel send_scope
|
// TODO: have per-channel send_scope
|
||||||
if (send_scope.isNull()) {
|
if (send_scope.isNull()) {
|
||||||
sendFlood(pkt, delay_millis);
|
sendFlood(pkt, delay_millis, _prefs.path_hash_mode + 1);
|
||||||
} else {
|
} else {
|
||||||
uint16_t codes[2];
|
uint16_t codes[2];
|
||||||
codes[0] = send_scope.calcTransportCode(pkt);
|
codes[0] = send_scope.calcTransportCode(pkt);
|
||||||
codes[1] = 0; // REVISIT: set to 'home' Region, for sender/return region?
|
codes[1] = 0; // REVISIT: set to 'home' Region, for sender/return region?
|
||||||
sendFlood(pkt, codes, delay_millis);
|
sendFlood(pkt, codes, delay_millis, _prefs.path_hash_mode + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -937,6 +937,7 @@ void MyMesh::handleCmdFrame(size_t len) {
|
|||||||
StrHelper::strzcpy((char *)&out_frame[i], FIRMWARE_VERSION, 20);
|
StrHelper::strzcpy((char *)&out_frame[i], FIRMWARE_VERSION, 20);
|
||||||
i += 20;
|
i += 20;
|
||||||
out_frame[i++] = _prefs.client_repeat; // v9+
|
out_frame[i++] = _prefs.client_repeat; // v9+
|
||||||
|
out_frame[i++] = _prefs.path_hash_mode; // v10+
|
||||||
_serial->writeFrame(out_frame, i);
|
_serial->writeFrame(out_frame, i);
|
||||||
} else if (cmd_frame[0] == CMD_APP_START &&
|
} else if (cmd_frame[0] == CMD_APP_START &&
|
||||||
len >= 8) { // sent when app establishes connection, respond with node ID
|
len >= 8) { // sent when app establishes connection, respond with node ID
|
||||||
@@ -1113,8 +1114,9 @@ void MyMesh::handleCmdFrame(size_t len) {
|
|||||||
pkt = createSelfAdvert(_prefs.node_name, sensors.node_lat, sensors.node_lon);
|
pkt = createSelfAdvert(_prefs.node_name, sensors.node_lat, sensors.node_lon);
|
||||||
}
|
}
|
||||||
if (pkt) {
|
if (pkt) {
|
||||||
if (len >= 2 && cmd_frame[1] == 1) { // optional param (1 = flood, 0 = zero hop)
|
if (len >= 2 && cmd_frame[1] >= 1 && cmd_frame[1] <= 3) { // optional param (1..3 = flood, 0 = zero hop)
|
||||||
sendFlood(pkt); // TODO: which path_hash_size to use??
|
unsigned long delay_millis = 0;
|
||||||
|
sendFlood(pkt, delay_millis, cmd_frame[1]);
|
||||||
} else {
|
} else {
|
||||||
sendZeroHop(pkt);
|
sendZeroHop(pkt);
|
||||||
}
|
}
|
||||||
@@ -1306,6 +1308,9 @@ void MyMesh::handleCmdFrame(size_t len) {
|
|||||||
_prefs.advert_loc_policy = cmd_frame[3];
|
_prefs.advert_loc_policy = cmd_frame[3];
|
||||||
if (len >= 5) {
|
if (len >= 5) {
|
||||||
_prefs.multi_acks = cmd_frame[4];
|
_prefs.multi_acks = cmd_frame[4];
|
||||||
|
if (len >= 6) {
|
||||||
|
_prefs.path_hash_mode = cmd_frame[5];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,4 +29,5 @@ struct NodePrefs { // persisted to file
|
|||||||
uint32_t gps_interval; // GPS read interval in seconds
|
uint32_t gps_interval; // GPS read interval in seconds
|
||||||
uint8_t autoadd_config; // bitmask for auto-add contacts config
|
uint8_t autoadd_config; // bitmask for auto-add contacts config
|
||||||
uint8_t client_repeat;
|
uint8_t client_repeat;
|
||||||
|
uint8_t path_hash_mode; // which path mode to use when sending
|
||||||
};
|
};
|
||||||
@@ -74,7 +74,8 @@ void MyMesh::pushPostToClient(ClientInfo *client, PostInfo &post) {
|
|||||||
auto reply = createDatagram(PAYLOAD_TYPE_TXT_MSG, client->id, client->shared_secret, reply_data, len);
|
auto reply = createDatagram(PAYLOAD_TYPE_TXT_MSG, client->id, client->shared_secret, reply_data, len);
|
||||||
if (reply) {
|
if (reply) {
|
||||||
if (client->out_path_len == OUT_PATH_UNKNOWN) {
|
if (client->out_path_len == OUT_PATH_UNKNOWN) {
|
||||||
sendFlood(reply); // TODO: which path_hash_size to use?
|
unsigned long delay_millis = 0;
|
||||||
|
sendFlood(reply, delay_millis, _prefs.path_hash_mode);
|
||||||
client->extra.room.ack_timeout = futureMillis(PUSH_ACK_TIMEOUT_FLOOD);
|
client->extra.room.ack_timeout = futureMillis(PUSH_ACK_TIMEOUT_FLOOD);
|
||||||
} else {
|
} else {
|
||||||
sendDirect(reply, client->out_path, client->out_path_len);
|
sendDirect(reply, client->out_path, client->out_path_len);
|
||||||
|
|||||||
Reference in New Issue
Block a user