Beispiel #1
0
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;
}
Beispiel #2
0
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();

}