mirror of
https://github.com/meshtastic/firmware.git
synced 2025-08-02 11:55:56 +00:00
Merge branch 'master' into pref_defaults
This commit is contained in:
commit
f54f60c31c
@ -1 +1 @@
|
|||||||
Subproject commit d8213ad133c42fb59a052326659e2cbfde3db6d6
|
Subproject commit a72983993ccd9c2dabb1ef9e17b2fe79bd94d671
|
@ -45,7 +45,7 @@ uint8_t oled_probe(byte addr)
|
|||||||
|
|
||||||
if (r == 0x08 || r == 0x00) {
|
if (r == 0x08 || r == 0x00) {
|
||||||
o_probe = 2; // SH1106
|
o_probe = 2; // SH1106
|
||||||
} else if ( r == 0x03 || r == 0x06 || r == 0x07) {
|
} else if ( r == 0x03 || r == 0x04 || r == 0x06 || r == 0x07) {
|
||||||
o_probe = 1; // SSD1306
|
o_probe = 1; // SSD1306
|
||||||
}
|
}
|
||||||
c++;
|
c++;
|
||||||
|
@ -145,7 +145,7 @@ extern const pb_msgdesc_t LocalModuleConfig_msg;
|
|||||||
|
|
||||||
/* Maximum encoded size of messages (where known) */
|
/* Maximum encoded size of messages (where known) */
|
||||||
#define LocalConfig_size 333
|
#define LocalConfig_size 333
|
||||||
#define LocalModuleConfig_size 268
|
#define LocalModuleConfig_size 270
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
|
@ -76,6 +76,7 @@ typedef struct _ModuleConfig_MQTTConfig {
|
|||||||
char username[32];
|
char username[32];
|
||||||
char password[32];
|
char password[32];
|
||||||
bool encryption_enabled;
|
bool encryption_enabled;
|
||||||
|
bool json_enabled;
|
||||||
} ModuleConfig_MQTTConfig;
|
} ModuleConfig_MQTTConfig;
|
||||||
|
|
||||||
typedef struct _ModuleConfig_RangeTestConfig {
|
typedef struct _ModuleConfig_RangeTestConfig {
|
||||||
@ -152,7 +153,7 @@ extern "C" {
|
|||||||
|
|
||||||
/* Initializer values for message structs */
|
/* Initializer values for message structs */
|
||||||
#define ModuleConfig_init_default {0, {ModuleConfig_MQTTConfig_init_default}}
|
#define ModuleConfig_init_default {0, {ModuleConfig_MQTTConfig_init_default}}
|
||||||
#define ModuleConfig_MQTTConfig_init_default {0, "", "", "", 0}
|
#define ModuleConfig_MQTTConfig_init_default {0, "", "", "", 0, 0}
|
||||||
#define ModuleConfig_SerialConfig_init_default {0, 0, 0, 0, _ModuleConfig_SerialConfig_Serial_Baud_MIN, 0, _ModuleConfig_SerialConfig_Serial_Mode_MIN}
|
#define ModuleConfig_SerialConfig_init_default {0, 0, 0, 0, _ModuleConfig_SerialConfig_Serial_Baud_MIN, 0, _ModuleConfig_SerialConfig_Serial_Mode_MIN}
|
||||||
#define ModuleConfig_ExternalNotificationConfig_init_default {0, 0, 0, 0, 0, 0}
|
#define ModuleConfig_ExternalNotificationConfig_init_default {0, 0, 0, 0, 0, 0}
|
||||||
#define ModuleConfig_StoreForwardConfig_init_default {0, 0, 0, 0, 0}
|
#define ModuleConfig_StoreForwardConfig_init_default {0, 0, 0, 0, 0}
|
||||||
@ -160,7 +161,7 @@ extern "C" {
|
|||||||
#define ModuleConfig_TelemetryConfig_init_default {0, 0, 0, 0, 0}
|
#define ModuleConfig_TelemetryConfig_init_default {0, 0, 0, 0, 0}
|
||||||
#define ModuleConfig_CannedMessageConfig_init_default {0, 0, 0, 0, _ModuleConfig_CannedMessageConfig_InputEventChar_MIN, _ModuleConfig_CannedMessageConfig_InputEventChar_MIN, _ModuleConfig_CannedMessageConfig_InputEventChar_MIN, 0, 0, "", 0}
|
#define ModuleConfig_CannedMessageConfig_init_default {0, 0, 0, 0, _ModuleConfig_CannedMessageConfig_InputEventChar_MIN, _ModuleConfig_CannedMessageConfig_InputEventChar_MIN, _ModuleConfig_CannedMessageConfig_InputEventChar_MIN, 0, 0, "", 0}
|
||||||
#define ModuleConfig_init_zero {0, {ModuleConfig_MQTTConfig_init_zero}}
|
#define ModuleConfig_init_zero {0, {ModuleConfig_MQTTConfig_init_zero}}
|
||||||
#define ModuleConfig_MQTTConfig_init_zero {0, "", "", "", 0}
|
#define ModuleConfig_MQTTConfig_init_zero {0, "", "", "", 0, 0}
|
||||||
#define ModuleConfig_SerialConfig_init_zero {0, 0, 0, 0, _ModuleConfig_SerialConfig_Serial_Baud_MIN, 0, _ModuleConfig_SerialConfig_Serial_Mode_MIN}
|
#define ModuleConfig_SerialConfig_init_zero {0, 0, 0, 0, _ModuleConfig_SerialConfig_Serial_Baud_MIN, 0, _ModuleConfig_SerialConfig_Serial_Mode_MIN}
|
||||||
#define ModuleConfig_ExternalNotificationConfig_init_zero {0, 0, 0, 0, 0, 0}
|
#define ModuleConfig_ExternalNotificationConfig_init_zero {0, 0, 0, 0, 0, 0}
|
||||||
#define ModuleConfig_StoreForwardConfig_init_zero {0, 0, 0, 0, 0}
|
#define ModuleConfig_StoreForwardConfig_init_zero {0, 0, 0, 0, 0}
|
||||||
@ -191,6 +192,7 @@ extern "C" {
|
|||||||
#define ModuleConfig_MQTTConfig_username_tag 3
|
#define ModuleConfig_MQTTConfig_username_tag 3
|
||||||
#define ModuleConfig_MQTTConfig_password_tag 4
|
#define ModuleConfig_MQTTConfig_password_tag 4
|
||||||
#define ModuleConfig_MQTTConfig_encryption_enabled_tag 5
|
#define ModuleConfig_MQTTConfig_encryption_enabled_tag 5
|
||||||
|
#define ModuleConfig_MQTTConfig_json_enabled_tag 6
|
||||||
#define ModuleConfig_RangeTestConfig_enabled_tag 1
|
#define ModuleConfig_RangeTestConfig_enabled_tag 1
|
||||||
#define ModuleConfig_RangeTestConfig_sender_tag 2
|
#define ModuleConfig_RangeTestConfig_sender_tag 2
|
||||||
#define ModuleConfig_RangeTestConfig_save_tag 3
|
#define ModuleConfig_RangeTestConfig_save_tag 3
|
||||||
@ -243,7 +245,8 @@ X(a, STATIC, SINGULAR, BOOL, enabled, 1) \
|
|||||||
X(a, STATIC, SINGULAR, STRING, address, 2) \
|
X(a, STATIC, SINGULAR, STRING, address, 2) \
|
||||||
X(a, STATIC, SINGULAR, STRING, username, 3) \
|
X(a, STATIC, SINGULAR, STRING, username, 3) \
|
||||||
X(a, STATIC, SINGULAR, STRING, password, 4) \
|
X(a, STATIC, SINGULAR, STRING, password, 4) \
|
||||||
X(a, STATIC, SINGULAR, BOOL, encryption_enabled, 5)
|
X(a, STATIC, SINGULAR, BOOL, encryption_enabled, 5) \
|
||||||
|
X(a, STATIC, SINGULAR, BOOL, json_enabled, 6)
|
||||||
#define ModuleConfig_MQTTConfig_CALLBACK NULL
|
#define ModuleConfig_MQTTConfig_CALLBACK NULL
|
||||||
#define ModuleConfig_MQTTConfig_DEFAULT NULL
|
#define ModuleConfig_MQTTConfig_DEFAULT NULL
|
||||||
|
|
||||||
@ -330,12 +333,12 @@ extern const pb_msgdesc_t ModuleConfig_CannedMessageConfig_msg;
|
|||||||
/* Maximum encoded size of messages (where known) */
|
/* Maximum encoded size of messages (where known) */
|
||||||
#define ModuleConfig_CannedMessageConfig_size 49
|
#define ModuleConfig_CannedMessageConfig_size 49
|
||||||
#define ModuleConfig_ExternalNotificationConfig_size 20
|
#define ModuleConfig_ExternalNotificationConfig_size 20
|
||||||
#define ModuleConfig_MQTTConfig_size 103
|
#define ModuleConfig_MQTTConfig_size 105
|
||||||
#define ModuleConfig_RangeTestConfig_size 10
|
#define ModuleConfig_RangeTestConfig_size 10
|
||||||
#define ModuleConfig_SerialConfig_size 26
|
#define ModuleConfig_SerialConfig_size 26
|
||||||
#define ModuleConfig_StoreForwardConfig_size 22
|
#define ModuleConfig_StoreForwardConfig_size 22
|
||||||
#define ModuleConfig_TelemetryConfig_size 18
|
#define ModuleConfig_TelemetryConfig_size 18
|
||||||
#define ModuleConfig_size 105
|
#define ModuleConfig_size 107
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
|
@ -27,7 +27,7 @@ void MQTT::onPublish(char *topic, byte *payload, unsigned int length)
|
|||||||
{
|
{
|
||||||
// parsing ServiceEnvelope
|
// parsing ServiceEnvelope
|
||||||
ServiceEnvelope e = ServiceEnvelope_init_default;
|
ServiceEnvelope e = ServiceEnvelope_init_default;
|
||||||
if (!pb_decode_from_bytes(payload, length, ServiceEnvelope_fields, &e)) {
|
if (moduleConfig.mqtt.json_enabled && !pb_decode_from_bytes(payload, length, ServiceEnvelope_fields, &e)) {
|
||||||
|
|
||||||
// check if this is a json payload message
|
// check if this is a json payload message
|
||||||
using namespace json11;
|
using namespace json11;
|
||||||
@ -44,17 +44,18 @@ void MQTT::onPublish(char *topic, byte *payload, unsigned int length)
|
|||||||
if (json["sender"].string_value().compare(owner.id) != 0) {
|
if (json["sender"].string_value().compare(owner.id) != 0) {
|
||||||
std::string jsonPayloadStr = json["payload"].dump();
|
std::string jsonPayloadStr = json["payload"].dump();
|
||||||
DEBUG_MSG("Received json payload %s, length %u\n", jsonPayloadStr.c_str(), jsonPayloadStr.length());
|
DEBUG_MSG("Received json payload %s, length %u\n", jsonPayloadStr.c_str(), jsonPayloadStr.length());
|
||||||
|
// FIXME Not sure we need to be doing this
|
||||||
// construct protobuf data packet using TEXT_MESSAGE, send it to the mesh
|
// construct protobuf data packet using TEXT_MESSAGE, send it to the mesh
|
||||||
MeshPacket *p = router->allocForSending();
|
// MeshPacket *p = router->allocForSending();
|
||||||
p->decoded.portnum = PortNum_TEXT_MESSAGE_APP;
|
// p->decoded.portnum = PortNum_TEXT_MESSAGE_APP;
|
||||||
if (jsonPayloadStr.length() <= sizeof(p->decoded.payload.bytes)) {
|
// if (jsonPayloadStr.length() <= sizeof(p->decoded.payload.bytes)) {
|
||||||
memcpy(p->decoded.payload.bytes, jsonPayloadStr.c_str(), jsonPayloadStr.length());
|
// memcpy(p->decoded.payload.bytes, jsonPayloadStr.c_str(), jsonPayloadStr.length());
|
||||||
p->decoded.payload.size = jsonPayloadStr.length();
|
// p->decoded.payload.size = jsonPayloadStr.length();
|
||||||
MeshPacket *packet = packetPool.allocCopy(*p);
|
// MeshPacket *packet = packetPool.allocCopy(*p);
|
||||||
service.sendToMesh(packet, RX_SRC_LOCAL);
|
// service.sendToMesh(packet, RX_SRC_LOCAL);
|
||||||
} else {
|
// } else {
|
||||||
DEBUG_MSG("Received MQTT json payload too long, dropping\n");
|
// DEBUG_MSG("Received MQTT json payload too long, dropping\n");
|
||||||
}
|
// }
|
||||||
} else {
|
} else {
|
||||||
DEBUG_MSG("Ignoring downlink message we originally sent.\n");
|
DEBUG_MSG("Ignoring downlink message we originally sent.\n");
|
||||||
}
|
}
|
||||||
@ -237,13 +238,15 @@ void MQTT::onSend(const MeshPacket &mp, ChannelIndex chIndex)
|
|||||||
|
|
||||||
pubSub.publish(topic.c_str(), bytes, numBytes, false);
|
pubSub.publish(topic.c_str(), bytes, numBytes, false);
|
||||||
|
|
||||||
// handle json topic
|
if (moduleConfig.mqtt.json_enabled) {
|
||||||
using namespace json11;
|
// handle json topic
|
||||||
auto jsonString = this->downstreamPacketToJson((MeshPacket *)&mp);
|
using namespace json11;
|
||||||
if (jsonString.length() != 0) {
|
auto jsonString = this->downstreamPacketToJson((MeshPacket *)&mp);
|
||||||
String topicJson = jsonTopic + channelId + "/" + owner.id;
|
if (jsonString.length() != 0) {
|
||||||
DEBUG_MSG("publish json message to %s, %u bytes: %s\n", topicJson.c_str(), jsonString.length(), jsonString.c_str());
|
String topicJson = jsonTopic + channelId + "/" + owner.id;
|
||||||
pubSub.publish(topicJson.c_str(), jsonString.c_str(), false);
|
DEBUG_MSG("publish json message to %s, %u bytes: %s\n", topicJson.c_str(), jsonString.length(), jsonString.c_str());
|
||||||
|
pubSub.publish(topicJson.c_str(), jsonString.c_str(), false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -289,7 +292,14 @@ String MQTT::downstreamPacketToJson(MeshPacket *mp)
|
|||||||
memset(&scratch, 0, sizeof(scratch));
|
memset(&scratch, 0, sizeof(scratch));
|
||||||
if (pb_decode_from_bytes(mp->decoded.payload.bytes, mp->decoded.payload.size, &Telemetry_msg, &scratch)) {
|
if (pb_decode_from_bytes(mp->decoded.payload.bytes, mp->decoded.payload.size, &Telemetry_msg, &scratch)) {
|
||||||
decoded = &scratch;
|
decoded = &scratch;
|
||||||
if (decoded->which_variant == Telemetry_environment_metrics_tag) {
|
if (decoded->which_variant == Telemetry_device_metrics_tag) {
|
||||||
|
msgPayload = Json::object{
|
||||||
|
{"battery_level", (int)decoded->variant.device_metrics.battery_level},
|
||||||
|
{"voltage", decoded->variant.device_metrics.voltage},
|
||||||
|
{"channel_utilization", decoded->variant.device_metrics.channel_utilization},
|
||||||
|
{"air_util_tx", decoded->variant.device_metrics.air_util_tx},
|
||||||
|
};
|
||||||
|
} else if (decoded->which_variant == Telemetry_environment_metrics_tag) {
|
||||||
msgPayload = Json::object{
|
msgPayload = Json::object{
|
||||||
{"temperature", decoded->variant.environment_metrics.temperature},
|
{"temperature", decoded->variant.environment_metrics.temperature},
|
||||||
{"relative_humidity", decoded->variant.environment_metrics.relative_humidity},
|
{"relative_humidity", decoded->variant.environment_metrics.relative_humidity},
|
||||||
@ -312,10 +322,12 @@ String MQTT::downstreamPacketToJson(MeshPacket *mp)
|
|||||||
memset(&scratch, 0, sizeof(scratch));
|
memset(&scratch, 0, sizeof(scratch));
|
||||||
if (pb_decode_from_bytes(mp->decoded.payload.bytes, mp->decoded.payload.size, &User_msg, &scratch)) {
|
if (pb_decode_from_bytes(mp->decoded.payload.bytes, mp->decoded.payload.size, &User_msg, &scratch)) {
|
||||||
decoded = &scratch;
|
decoded = &scratch;
|
||||||
msgPayload = Json::object{{"id", decoded->id},
|
msgPayload = Json::object{
|
||||||
{"longname", decoded->long_name},
|
{"id", decoded->id},
|
||||||
{"shortname", decoded->short_name},
|
{"longname", decoded->long_name},
|
||||||
{"hardware", decoded->hw_model}};
|
{"shortname", decoded->short_name},
|
||||||
|
{"hardware", decoded->hw_model}
|
||||||
|
};
|
||||||
|
|
||||||
} else
|
} else
|
||||||
DEBUG_MSG("Error decoding protobuf for nodeinfo message!\n");
|
DEBUG_MSG("Error decoding protobuf for nodeinfo message!\n");
|
||||||
@ -331,7 +343,36 @@ String MQTT::downstreamPacketToJson(MeshPacket *mp)
|
|||||||
if (pb_decode_from_bytes(mp->decoded.payload.bytes, mp->decoded.payload.size, &Position_msg, &scratch)) {
|
if (pb_decode_from_bytes(mp->decoded.payload.bytes, mp->decoded.payload.size, &Position_msg, &scratch)) {
|
||||||
decoded = &scratch;
|
decoded = &scratch;
|
||||||
msgPayload = Json::object{
|
msgPayload = Json::object{
|
||||||
{"latitude_i", decoded->latitude_i}, {"longitude_i", decoded->longitude_i}, {"altitude", decoded->altitude}};
|
{"time", (int)decoded->time},
|
||||||
|
{"pos_timestamp", (int)decoded->pos_timestamp},
|
||||||
|
{"latitude_i", decoded->latitude_i},
|
||||||
|
{"longitude_i", decoded->longitude_i},
|
||||||
|
{"altitude", decoded->altitude}
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
DEBUG_MSG("Error decoding protobuf for position message!\n");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case PortNum_WAYPOINT_APP: {
|
||||||
|
msgType = "position";
|
||||||
|
Waypoint scratch;
|
||||||
|
Waypoint *decoded = NULL;
|
||||||
|
if (mp->which_payloadVariant == MeshPacket_decoded_tag) {
|
||||||
|
memset(&scratch, 0, sizeof(scratch));
|
||||||
|
if (pb_decode_from_bytes(mp->decoded.payload.bytes, mp->decoded.payload.size, &Waypoint_msg, &scratch)) {
|
||||||
|
decoded = &scratch;
|
||||||
|
msgPayload = Json::object{
|
||||||
|
{"id", (int)decoded->id},
|
||||||
|
{"name", decoded->name},
|
||||||
|
{"description", decoded->description},
|
||||||
|
{"expire", (int)decoded->expire},
|
||||||
|
{"locked", decoded->locked},
|
||||||
|
{"latitude_i", decoded->latitude_i},
|
||||||
|
{"longitude_i", decoded->longitude_i},
|
||||||
|
};
|
||||||
} else {
|
} else {
|
||||||
DEBUG_MSG("Error decoding protobuf for position message!\n");
|
DEBUG_MSG("Error decoding protobuf for position message!\n");
|
||||||
}
|
}
|
||||||
@ -344,14 +385,16 @@ String MQTT::downstreamPacketToJson(MeshPacket *mp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// assemble the final jsonObj
|
// assemble the final jsonObj
|
||||||
Json jsonObj = Json::object{{"id", Json((int)mp->id)},
|
Json jsonObj = Json::object{
|
||||||
{"timestamp", Json((int)mp->rx_time)},
|
{"id", Json((int)mp->id)},
|
||||||
{"to", Json((int)mp->to)},
|
{"timestamp", Json((int)mp->rx_time)},
|
||||||
{"from", Json((int)mp->from)},
|
{"to", Json((int)mp->to)},
|
||||||
{"channel", Json((int)mp->channel)},
|
{"from", Json((int)mp->from)},
|
||||||
{"type", msgType.c_str()},
|
{"channel", Json((int)mp->channel)},
|
||||||
{"sender", owner.id},
|
{"type", msgType.c_str()},
|
||||||
{"payload", msgPayload}};
|
{"sender", owner.id},
|
||||||
|
{"payload", msgPayload}
|
||||||
|
};
|
||||||
|
|
||||||
// serialize and return it
|
// serialize and return it
|
||||||
static std::string jsonStr = jsonObj.dump();
|
static std::string jsonStr = jsonObj.dump();
|
||||||
|
@ -28,3 +28,5 @@
|
|||||||
// code)
|
// code)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// different screen
|
||||||
|
#define USE_SH1106
|
||||||
|
Loading…
Reference in New Issue
Block a user