kopia lustrzana https://github.com/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
 | 
			
		||||
 | 
			
		||||
// Disable the welcome screen and allow 
 | 
			
		||||
 #define DISABLE_WELCOME_UNSET
 | 
			
		||||
//#define DISABLE_WELCOME_UNSET
 | 
			
		||||
 | 
			
		||||
// -----------------------------------------------------------------------------
 | 
			
		||||
// OLED & Input
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -179,9 +179,6 @@ size_t PhoneAPI::getFromRadio(uint8_t *buf)
 | 
			
		|||
            // Encapsulate as a FromRadio packet
 | 
			
		||||
            fromRadioScratch.which_payloadVariant = FromRadio_packet_tag;
 | 
			
		||||
            fromRadioScratch.packet = *packetForPhone;
 | 
			
		||||
 | 
			
		||||
            // TODO: Remove with compression rework
 | 
			
		||||
            fromRadioScratch.packet.decoded.which_payloadVariant = Data_payload_tag;
 | 
			
		||||
        }
 | 
			
		||||
        releasePhonePacket();
 | 
			
		||||
        break;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -275,7 +275,7 @@ void Router::sniffReceived(const MeshPacket *p, const Routing *c)
 | 
			
		|||
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)
 | 
			
		||||
        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->channel = chIndex;                             // change to store the index instead of the hash
 | 
			
		||||
 | 
			
		||||
                /*
 | 
			
		||||
                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
 | 
			
		||||
                if (p->decoded.portnum == PortNum_TEXT_MESSAGE_APP) {
 | 
			
		||||
                    if (p->decoded.which_payloadVariant == Data_payload_compressed_tag) {
 | 
			
		||||
                        // Decompress the payload
 | 
			
		||||
                        char compressed_in[Constants_DATA_PAYLOAD_LEN] = {};
 | 
			
		||||
                        char decompressed_out[Constants_DATA_PAYLOAD_LEN] = {};
 | 
			
		||||
                        int decompressed_len;
 | 
			
		||||
                if (p->decoded.portnum == PortNum_TEXT_MESSAGE_COMPRESSED_APP) {
 | 
			
		||||
                    // Decompress the payload
 | 
			
		||||
                    char compressed_in[Constants_DATA_PAYLOAD_LEN] = {};
 | 
			
		||||
                    char decompressed_out[Constants_DATA_PAYLOAD_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);
 | 
			
		||||
                        // Serial.println(p->decoded.payload.bytes);
 | 
			
		||||
                        Serial.println(decompressed_out);
 | 
			
		||||
                    // DEBUG_MSG("\n\n**\n\nDecompressed length - %d \n", decompressed_len);
 | 
			
		||||
 | 
			
		||||
                        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);
 | 
			
		||||
| 
						 | 
				
			
			@ -364,38 +368,24 @@ Routing_Error perhapsEncode(MeshPacket *p)
 | 
			
		|||
 | 
			
		||||
            DEBUG_MSG("Original length - %d \n", p->decoded.payload.size);
 | 
			
		||||
            DEBUG_MSG("Compressed length - %d \n", compressed_len);
 | 
			
		||||
 | 
			
		||||
            // Serial.println(compressed_out);
 | 
			
		||||
            DEBUG_MSG("Original message - %s \n", p->decoded.payload.bytes);
 | 
			
		||||
 | 
			
		||||
            // 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) {
 | 
			
		||||
 | 
			
		||||
                DEBUG_MSG("Not using compressing message.\n");
 | 
			
		||||
                // 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
 | 
			
		||||
            } else {
 | 
			
		||||
                DEBUG_MSG("Using compressed message.\n");
 | 
			
		||||
                // 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.which_payloadVariant = Data_payload_compressed_tag;
 | 
			
		||||
                DEBUG_MSG("\n\n** TEXT_MESSAGE_APP payloadVariant - %d\n\n", p->decoded.which_payloadVariant);
 | 
			
		||||
            }
 | 
			
		||||
                p->decoded.payload.size = compressed_len;
 | 
			
		||||
                memcpy(p->decoded.payload.bytes, compressed_out, compressed_len);
 | 
			
		||||
 | 
			
		||||
            if (0) {
 | 
			
		||||
                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);
 | 
			
		||||
                p->decoded.portnum = PortNum_TEXT_MESSAGE_COMPRESSED_APP;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,8 +36,8 @@ int32_t RangeTestModule::runOnce()
 | 
			
		|||
        without having to configure it from the PythonAPI or WebUI.
 | 
			
		||||
    */
 | 
			
		||||
 | 
			
		||||
    // moduleConfig.range_test.enabled = 1;
 | 
			
		||||
    // moduleConfig.range_test.sender = 45;
 | 
			
		||||
    //moduleConfig.range_test.enabled = 1;
 | 
			
		||||
    //moduleConfig.range_test.sender = 30;
 | 
			
		||||
    // moduleConfig.range_test.save = 1;
 | 
			
		||||
 | 
			
		||||
    // Fixed position is useful when testing indoors.
 | 
			
		||||
| 
						 | 
				
			
			@ -115,7 +115,7 @@ void RangeTestModuleRadio::sendPayload(NodeNum dest, bool wantReplies)
 | 
			
		|||
 | 
			
		||||
    packetSequence++;
 | 
			
		||||
 | 
			
		||||
    static char heartbeatString[20];
 | 
			
		||||
    static char heartbeatString[MAX_RHPACKETLEN];
 | 
			
		||||
    snprintf(heartbeatString, sizeof(heartbeatString), "seq %u", packetSequence);
 | 
			
		||||
 | 
			
		||||
    p->decoded.payload.size = strlen(heartbeatString); // You must specify how many bytes are in the reply
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue