Completed compression. Tested between two devices.

raytac-diy
Jm Casler 2022-05-24 17:42:46 -07:00
rodzic e218bba87e
commit f3c15eb6cc
4 zmienionych plików z 28 dodań i 41 usunięć

Wyświetl plik

@ -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

Wyświetl plik

@ -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;

Wyświetl plik

@ -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);
} }
} }

Wyświetl plik

@ -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