bool ON_BinaryArchive::CompressionInit() { // inflateInit() and deflateInit() are in zlib 1.3.3 bool rc = false; if ( WriteMode() ) { rc = ( m_zlib.mode == ON::write ) ? true : false; if ( !rc ) { CompressionEnd(); if ( Z_OK == deflateInit( &m_zlib.strm, Z_BEST_COMPRESSION ) ) { m_zlib.mode = ON::write; rc = true; } else { memset(&m_zlib.strm,0,sizeof(m_zlib.strm)); } } } else if ( ReadMode() ) { rc = ( m_zlib.mode == ON::read ) ? true : false; if ( !rc ) { CompressionEnd(); if ( Z_OK == inflateInit( &m_zlib.strm ) ) { m_zlib.mode = ON::read; rc = true; } else { memset(&m_zlib.strm,0,sizeof(m_zlib.strm)); } } } else { CompressionEnd(); } return rc; }
bool ON_BinaryArchive::WriteCompressedBuffer( size_t sizeof__inbuffer, // sizeof uncompressed input data const void* inbuffer // uncompressed input data ) { size_t compressed_size = 0; bool rc = false; if ( !WriteMode() ) return false; if ( sizeof__inbuffer > 0 && 0 == inbuffer ) return false; // number of bytes of uncompressed data if (!WriteSize(sizeof__inbuffer)) return false; if ( 0 == sizeof__inbuffer ) return true; // 32 bit crc of uncompressed data const unsigned int buffer_crc = ON_CRC32( 0, sizeof__inbuffer, inbuffer ); if (!WriteInt(buffer_crc)) return false; unsigned char method = (sizeof__inbuffer > 128) ? 1 : 0; if ( method ) { if ( !CompressionInit() ) { CompressionEnd(); method = 0; } } if ( !WriteChar(method) ) return false; switch ( method ) { case 0: // uncompressed rc = WriteByte(sizeof__inbuffer, inbuffer); if ( rc ) { compressed_size = sizeof__inbuffer; } break; case 1: // compressed compressed_size = WriteDeflate( sizeof__inbuffer, inbuffer ); rc = ( compressed_size > 0 ) ? true : false; CompressionEnd(); break; } return rc; }
void iFrogLabLoRaLibrary::Write16bytesBroadcast(byte iData[],byte len){ WriteMode(); byte t2[16+1+3]; byte CRC = 0; // byte len=sizeof(iData) / sizeof(byte); // sizeof(iData); //(byte)(iStr.length()); //byte len1=len+1; if(len==0) return; // 定義碼 byte t1[] = {0xc1,0x05,len}; char charBuf[len*2+10]; Fun_AddArray(t1,t2,3,0); // 字串轉char //char charBuf2[len*2]; //iStr.toCharArray(charBuf2,len*2); //複製字串 t2[2]=len; Fun_AddArray(iData,t2,(len*2)+2,3); //算CRC CRC=Fun_CRC(t2,3+len); t2[3+len] = CRC; mySerial->write(t2,3+(len)+1); Fun_PrintArray(t2,3+(len)+1); if(m_Debug==1) Serial.print("Recive: "); i=0; for(int j=0;j<999999;j++){ if (mySerial->available()) { byte t1=mySerial->read(); if(m_Debug==1){ Serial.print(t1, HEX); Serial.print(","); } i=i+1; if(i>=5){ if(m_Debug==1){ if(data[1]==0xAA ) { Serial.println("\n OK"); } else { Serial.println("\n Error!"); } } return; } } } Message_error(); }