sforkowany z mirror/meshtastic-firmware
Completed compression. Tested between two devices.
rodzic
e218bba87e
commit
f3c15eb6cc
|
@ -144,7 +144,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
//#define DISABLE_NTP
|
//#define DISABLE_NTP
|
||||||
|
|
||||||
// Disable the welcome screen and allow
|
// Disable the welcome screen and allow
|
||||||
#define DISABLE_WELCOME_UNSET
|
//#define DISABLE_WELCOME_UNSET
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// OLED & Input
|
// OLED & Input
|
||||||
|
|
|
@ -179,9 +179,6 @@ size_t PhoneAPI::getFromRadio(uint8_t *buf)
|
||||||
// Encapsulate as a FromRadio packet
|
// Encapsulate as a FromRadio packet
|
||||||
fromRadioScratch.which_payloadVariant = FromRadio_packet_tag;
|
fromRadioScratch.which_payloadVariant = FromRadio_packet_tag;
|
||||||
fromRadioScratch.packet = *packetForPhone;
|
fromRadioScratch.packet = *packetForPhone;
|
||||||
|
|
||||||
// TODO: Remove with compression rework
|
|
||||||
fromRadioScratch.packet.decoded.which_payloadVariant = Data_payload_tag;
|
|
||||||
}
|
}
|
||||||
releasePhonePacket();
|
releasePhonePacket();
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -275,7 +275,7 @@ void Router::sniffReceived(const MeshPacket *p, const Routing *c)
|
||||||
bool perhapsDecode(MeshPacket *p)
|
bool perhapsDecode(MeshPacket *p)
|
||||||
{
|
{
|
||||||
|
|
||||||
//DEBUG_MSG("\n\n** perhapsDecode payloadVariant - %d\n\n", p->which_payloadVariant);
|
// DEBUG_MSG("\n\n** perhapsDecode payloadVariant - %d\n\n", p->which_payloadVariant);
|
||||||
|
|
||||||
if (p->which_payloadVariant == MeshPacket_decoded_tag)
|
if (p->which_payloadVariant == MeshPacket_decoded_tag)
|
||||||
return true; // If packet was already decoded just return
|
return true; // If packet was already decoded just return
|
||||||
|
@ -307,27 +307,31 @@ bool perhapsDecode(MeshPacket *p)
|
||||||
p->which_payloadVariant = MeshPacket_decoded_tag; // change type to decoded
|
p->which_payloadVariant = MeshPacket_decoded_tag; // change type to decoded
|
||||||
p->channel = chIndex; // change to store the index instead of the hash
|
p->channel = chIndex; // change to store the index instead of the hash
|
||||||
|
|
||||||
|
/*
|
||||||
if (p->decoded.portnum == PortNum_TEXT_MESSAGE_APP) {
|
if (p->decoded.portnum == PortNum_TEXT_MESSAGE_APP) {
|
||||||
DEBUG_MSG("\n\n** TEXT_MESSAGE_APP payloadVariant - %d\n\n", p->decoded.which_payloadVariant);
|
DEBUG_MSG("\n\n** TEXT_MESSAGE_APP\n");
|
||||||
|
} else if (p->decoded.portnum == PortNum_TEXT_MESSAGE_COMPRESSED_APP) {
|
||||||
|
DEBUG_MSG("\n\n** PortNum_TEXT_MESSAGE_COMPRESSED_APP\n");
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
// Decompress if needed. jm
|
// Decompress if needed. jm
|
||||||
if (p->decoded.portnum == PortNum_TEXT_MESSAGE_APP) {
|
if (p->decoded.portnum == PortNum_TEXT_MESSAGE_COMPRESSED_APP) {
|
||||||
if (p->decoded.which_payloadVariant == Data_payload_compressed_tag) {
|
// Decompress the payload
|
||||||
// Decompress the payload
|
char compressed_in[Constants_DATA_PAYLOAD_LEN] = {};
|
||||||
char compressed_in[Constants_DATA_PAYLOAD_LEN] = {};
|
char decompressed_out[Constants_DATA_PAYLOAD_LEN] = {};
|
||||||
char decompressed_out[Constants_DATA_PAYLOAD_LEN] = {};
|
int decompressed_len;
|
||||||
int decompressed_len;
|
|
||||||
|
|
||||||
memcpy(compressed_in, p->decoded.payload.bytes, p->decoded.payload.size);
|
memcpy(compressed_in, p->decoded.payload.bytes, p->decoded.payload.size);
|
||||||
|
|
||||||
decompressed_len = unishox2_decompress_simple(compressed_in, p->decoded.payload.size, decompressed_out);
|
decompressed_len = unishox2_decompress_simple(compressed_in, p->decoded.payload.size, decompressed_out);
|
||||||
|
|
||||||
DEBUG_MSG("\n\n**\n\nDecompressed length - %d \n", decompressed_len);
|
// DEBUG_MSG("\n\n**\n\nDecompressed length - %d \n", decompressed_len);
|
||||||
// Serial.println(p->decoded.payload.bytes);
|
|
||||||
Serial.println(decompressed_out);
|
|
||||||
|
|
||||||
p->decoded.which_payloadVariant = Data_payload_tag;
|
memcpy(p->decoded.payload.bytes, decompressed_out, decompressed_len);
|
||||||
}
|
|
||||||
|
// Switch the port from PortNum_TEXT_MESSAGE_COMPRESSED_APP to PortNum_TEXT_MESSAGE_APP
|
||||||
|
p->decoded.portnum = PortNum_TEXT_MESSAGE_APP;
|
||||||
}
|
}
|
||||||
|
|
||||||
printPacket("decoded message", p);
|
printPacket("decoded message", p);
|
||||||
|
@ -364,38 +368,24 @@ Routing_Error perhapsEncode(MeshPacket *p)
|
||||||
|
|
||||||
DEBUG_MSG("Original length - %d \n", p->decoded.payload.size);
|
DEBUG_MSG("Original length - %d \n", p->decoded.payload.size);
|
||||||
DEBUG_MSG("Compressed length - %d \n", compressed_len);
|
DEBUG_MSG("Compressed length - %d \n", compressed_len);
|
||||||
|
DEBUG_MSG("Original message - %s \n", p->decoded.payload.bytes);
|
||||||
// Serial.println(compressed_out);
|
|
||||||
|
|
||||||
// If the compressed length is greater than or equal to the original size, don't use the compressed form
|
// If the compressed length is greater than or equal to the original size, don't use the compressed form
|
||||||
if (compressed_len >= p->decoded.payload.size) {
|
if (compressed_len >= p->decoded.payload.size) {
|
||||||
|
|
||||||
DEBUG_MSG("Not using compressing message.\n");
|
DEBUG_MSG("Not using compressing message.\n");
|
||||||
// Set the uncompressed payload varient anyway. Shouldn't hurt?
|
// Set the uncompressed payload varient anyway. Shouldn't hurt?
|
||||||
p->decoded.which_payloadVariant = Data_payload_tag;
|
// p->decoded.which_payloadVariant = Data_payload_tag;
|
||||||
|
|
||||||
// Otherwise we use the compressor
|
// Otherwise we use the compressor
|
||||||
} else {
|
} else {
|
||||||
DEBUG_MSG("Using compressed message.\n");
|
DEBUG_MSG("Using compressed message.\n");
|
||||||
// Copy the compressed data into the meshpacket
|
// Copy the compressed data into the meshpacket
|
||||||
|
|
||||||
p->decoded.payload_compressed.size = compressed_len;
|
|
||||||
memcpy(p->decoded.payload_compressed.bytes, compressed_out, compressed_len);
|
|
||||||
|
|
||||||
DEBUG_MSG("\n\n** TEXT_MESSAGE_APP payloadVariant - %d\n\n", p->decoded.which_payloadVariant);
|
p->decoded.payload.size = compressed_len;
|
||||||
p->decoded.which_payloadVariant = Data_payload_compressed_tag;
|
memcpy(p->decoded.payload.bytes, compressed_out, compressed_len);
|
||||||
DEBUG_MSG("\n\n** TEXT_MESSAGE_APP payloadVariant - %d\n\n", p->decoded.which_payloadVariant);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (0) {
|
p->decoded.portnum = PortNum_TEXT_MESSAGE_COMPRESSED_APP;
|
||||||
char decompressed_out[Constants_DATA_PAYLOAD_LEN] = {};
|
|
||||||
int decompressed_len;
|
|
||||||
|
|
||||||
decompressed_len = unishox2_decompress_simple(compressed_out, compressed_len, decompressed_out);
|
|
||||||
|
|
||||||
Serial.print("Decompressed length - ");
|
|
||||||
Serial.println(decompressed_len);
|
|
||||||
Serial.println(decompressed_out);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,8 +36,8 @@ int32_t RangeTestModule::runOnce()
|
||||||
without having to configure it from the PythonAPI or WebUI.
|
without having to configure it from the PythonAPI or WebUI.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// moduleConfig.range_test.enabled = 1;
|
//moduleConfig.range_test.enabled = 1;
|
||||||
// moduleConfig.range_test.sender = 45;
|
//moduleConfig.range_test.sender = 30;
|
||||||
// moduleConfig.range_test.save = 1;
|
// moduleConfig.range_test.save = 1;
|
||||||
|
|
||||||
// Fixed position is useful when testing indoors.
|
// Fixed position is useful when testing indoors.
|
||||||
|
@ -115,7 +115,7 @@ void RangeTestModuleRadio::sendPayload(NodeNum dest, bool wantReplies)
|
||||||
|
|
||||||
packetSequence++;
|
packetSequence++;
|
||||||
|
|
||||||
static char heartbeatString[20];
|
static char heartbeatString[MAX_RHPACKETLEN];
|
||||||
snprintf(heartbeatString, sizeof(heartbeatString), "seq %u", packetSequence);
|
snprintf(heartbeatString, sizeof(heartbeatString), "seq %u", packetSequence);
|
||||||
|
|
||||||
p->decoded.payload.size = strlen(heartbeatString); // You must specify how many bytes are in the reply
|
p->decoded.payload.size = strlen(heartbeatString); // You must specify how many bytes are in the reply
|
||||||
|
|
Ładowanie…
Reference in New Issue