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::ReadCompressedBuffer( // read and uncompress size_t sizeof__outbuffer, // sizeof of uncompressed buffer to read void* outbuffer, // uncompressed output data returned here int* bFailedCRC ) { bool rc = false; unsigned int buffer_crc0 = 0; unsigned int buffer_crc1 = 0; char method = 0; if ( bFailedCRC) *bFailedCRC = false; if ( !ReadMode() ) return false; if ( 0 == sizeof__outbuffer ) return true; if ( 0 == outbuffer ) return false; if ( !ReadInt(&buffer_crc0) ) // 32 bit crc of uncompressed buffer return false; if ( !ReadChar(&method) ) return false; if ( method != 0 && method != 1 ) return false; switch(method) { case 0: // uncompressed rc = ReadByte(sizeof__outbuffer, outbuffer); break; case 1: // compressed rc = CompressionInit(); if (rc) rc = ReadInflate( sizeof__outbuffer, outbuffer ); CompressionEnd(); break; } if (rc ) { buffer_crc1 = ON_CRC32( 0, sizeof__outbuffer, outbuffer ); if ( buffer_crc1 != buffer_crc0 ) { ON_ERROR("ON_BinaryArchive::ReadCompressedBuffer() crc error"); if ( bFailedCRC ) *bFailedCRC = true; } } return rc; }
byte* iFrogLabLoRaLibrary::Read16bytesBroadcast(){ m_Debug=1; ReadMode(); ReadClear(); //byte t2[16+1+3]; byte CRC = 0; byte readLen=0; // byte len=sizeof(iData) / sizeof(byte); // sizeof(iData); //(byte)(iStr.length()); //byte len1=len+1; //if(len==0) return; // 定義碼 byte t1[] = {0xc1,0x06,0x00,CRC}; CRC=Fun_CRC(t1,3); t1[3] = CRC; mySerial->write(t1,4); Fun_PrintArray(t1,4); if(m_Debug==1) Serial.print("Recive: "); /* for(int j=0;j<DeTimeout;j++){ if (mySerial->available()) { byte t1=mySerial->read(); if(m_Debug==1) { Serial.print(t1, HEX); Serial.print(","); } } } */ i=0; int k=0; for(int j=0;j<DeTimeout;j++){ if (mySerial->available()) { byte t1=mySerial->read(); if(m_Debug==1) { Serial.print(t1, HEX); Serial.print(","); } data[i]=t1; i=i+1; if(i>=2){ if(i>=3) { if(data[0]==0xc1 && data[1]==0x86){ int tlen=data[2]; /*Serial.print("("); Serial.print(tlen, HEX); Serial.print("-"); Serial.print(i, HEX); Serial.print(")");*/ if(i>=2+1+tlen+1){ for(int x=0;x<tlen;x++){ data2[x]=data[3+x]; } ReadClear(); return data2; } }else{ Serial.println(""); Serial.println("Error!"); ReadClear(); return; } } } } } Serial.println(""); Message_error(); }
static int ReadConfigFile(CurPos &cp) { unsigned char obj; unsigned short len; { const char *p; obj = GetObj(cp, len); assert(obj == CF_STRING); if ((p = GetCharStr(cp, len)) == 0) return -1; if (ConfigSourcePath) free(ConfigSourcePath); ConfigSourcePath = strdup(p); } while ((obj = GetObj(cp, len)) != 0xFF) { switch (obj) { case CF_SUB: { const char *CmdName = GetCharStr(cp, len); if (ReadCommands(cp, CmdName) == -1) return -1; } break; case CF_MENU: { const char *MenuName = GetCharStr(cp, len); if (ReadMenu(cp, MenuName) == -1) return -1; } break; case CF_EVENTMAP: { EEventMap *EventMap = 0; const char *MapName = GetCharStr(cp, len); const char *UpMap = 0; if ((obj = GetObj(cp, len)) != CF_PARENT) return -1; if (len > 0) if ((UpMap = GetCharStr(cp, len)) == 0) return -1; // add new mode if ((EventMap = FindEventMap(MapName)) == 0) { EEventMap *OrgMap = 0; if (strcmp(UpMap, "") != 0) OrgMap = FindEventMap(UpMap); EventMap = new EEventMap(MapName, OrgMap); } else { if (EventMap->Parent == 0) EventMap->Parent = FindEventMap(UpMap); } if (ReadEventMap(cp, EventMap, MapName) == -1) return -1; } break; case CF_COLORIZE: { EColorize *Mode = 0; const char *ModeName = GetCharStr(cp, len); const char *UpMode = 0; if ((obj = GetObj(cp, len)) != CF_PARENT) return -1; if (len > 0) if ((UpMode = GetCharStr(cp, len)) == 0) return -1; // add new mode if ((Mode = FindColorizer(ModeName)) == 0) Mode = new EColorize(ModeName, UpMode); else { if (Mode->Parent == 0) Mode->Parent = FindColorizer(UpMode); } if (ReadColorize(cp, Mode, ModeName) == -1) return -1; } break; case CF_MODE: { EMode *Mode = 0; const char *ModeName = GetCharStr(cp, len); const char *UpMode = 0; if ((obj = GetObj(cp, len)) != CF_PARENT) return -1; if (len > 0) if ((UpMode = GetCharStr(cp, len)) == 0) return -1; // add new mode if ((Mode = FindMode(ModeName)) == 0) { EMode *OrgMode = 0; EEventMap *Map; if (strcmp(UpMode, "") != 0) OrgMode = FindMode(UpMode); Map = FindEventMap(ModeName); if (Map == 0) { EEventMap *OrgMap = 0; if (strcmp(UpMode, "") != 0) OrgMap = FindEventMap(UpMode); Map = new EEventMap(ModeName, OrgMap); } Mode = new EMode(OrgMode, Map, ModeName); Mode->fNext = Modes; Modes = Mode; } else { if (Mode->fParent == 0) Mode->fParent = FindMode(UpMode); } if (ReadMode(cp, Mode, ModeName) == -1) return -1; } break; case CF_OBJECT: { const char *ObjName; if ((ObjName = GetCharStr(cp, len)) == 0) return -1; if (ReadObject(cp, ObjName) == -1) return -1; } break; case CF_EOF: return 0; default: return -1; } } return -1; }