X13.Periphery.TWIDriver.BME280.Recv C# (CSharp) Method

Recv() public method

public Recv ( byte buf ) : bool
buf byte
return bool
      public override bool Recv(byte[] buf) {
        //int oldSt=_st;
        if(buf[0]==ADDR) {
          if(buf[1]==0x10) {
            if(_st==-3 && buf.Length==30) {
              _dig_T1=(ushort)(buf[4] | (buf[5]<<8));
              _dig_T2=(short)(buf[6] | (buf[7]<<8));
              _dig_T3=(short)(buf[8] | (buf[9]<<8));
              _dig_P1=(ushort)(buf[10] | (buf[11]<<8));
              _dig_P2=(short)(buf[12] | (buf[13]<<8));
              _dig_P3=(short)(buf[14] | (buf[15]<<8));
              _dig_P4=(short)(buf[16] | (buf[17]<<8));
              _dig_P5=(short)(buf[18] | (buf[19]<<8));
              _dig_P6=(short)(buf[20] | (buf[21]<<8));
              _dig_P7=(short)(buf[22] | (buf[23]<<8));
              _dig_P8=(short)(buf[24] | (buf[25]<<8));
              _dig_P9=(short)(buf[26] | (buf[27]<<8));
              _dig_H1=buf[29];
              _pt=DateTime.Now;
              _st=-2;
            } else if(_st==-1 && buf.Length==11) {
              _dig_H2=(short)(buf[4] | (buf[5]<<8));
              _dig_H3=buf[6];
              _dig_H4=(short)((buf[7] << 4) | (buf[8] & 0x0F));
              _dig_H5=(short)((buf[8] >> 4) | (buf[9]<<4));
              _dig_H6=(sbyte)buf[10];
              _pt=DateTime.Now;
              _st=0;
            } else if(_st==3 && buf.Length==12) {
              uint adc_H = (uint)(buf[11] | (buf[10] << 8));
              uint adc_T = (uint)((buf[9]>>4) | (buf[8]<<4) | (buf[7]<<12));
              uint adc_P=(uint)((buf[6]>>4) | (buf[5]<<4) | (buf[4]<<12));

              double  var1, var2, t_fine;

              var1=(adc_T/16384.0 - _dig_T1/1024.0) * _dig_T2;
              var2=((adc_T/131072.0 - _dig_T1/8192.0) * (adc_T/131072.0 - _dig_T1/8192.0)) * _dig_T3;
              t_fine = (int)(var1 + var2);
              _T.value=Math.Round((var1 + var2) / 5120.0, 2);

              var1 = t_fine/2.0 - 64000.0;
              var2 = var1 * var1 * _dig_P6 / 32768.0;
              var2 = var2 + var1 * _dig_P5 * 2.0;
              var2 = var2/4.0+_dig_P4 * 65536.0;
              var1 = (_dig_P3 * var1 * var1 / 524288.0 + _dig_P2 * var1) / 524288.0;
              var1 = (1.0 + var1 / 32768.0)*_dig_P1;
              if(var1 != 0.0) {
                double p = 1048576.0 - (double)adc_P;
                p = (p - (var2 / 4096.0)) * 6250.0 / var1;
                var1 = _dig_P9 * p * p / 2147483648.0;
                var2 = p * _dig_P8 / 32768.0;
                p = p + (var1 + var2 + _dig_P7) / 16.0;
                _P.value=(long)p;
              }

              var1 = t_fine - 76800.0;
              var1 = (adc_H - (_dig_H4 * 64.0 + _dig_H5 / 16384.0 * var1)) * (_dig_H2 / 65536.0 * (1.0 + _dig_H6 / 67108864.0 * var1 * (1.0 + _dig_H3 / 67108864.0 * var1)));
              var1 = var1 * (1.0 - _dig_H1 * var1 / 524288.0);
              if(var1 > 100.0)
                var1 = 100.0;
              else if(var1 < 0.0)
                var1 = 0.0;
              _H.value=Math.Round(var1, 1);


              //Log.Debug("{0} T={1}, H={2}, P={3}", _T.parent.path, _T.value, _H.value, _P.value);
              _present.value=true;
              _pt=DateTime.Now.AddSeconds(_rand.Next(45, 75));
              _st=1;
            } else {
              _present.value=false;
              Reset();
            }
            //if(oldSt!=_st) {
            //  Log.Debug("{0} st={1}", _T.parent.path, _st);
            //}
          } else {
            _present.value=false;
            if(TWIDriver._verbose) {
              Log.Error("{0}.recv - {1}", _T.path, (AckFlags)buf[1]);
            }
            _pt=DateTime.Now.AddSeconds(_rand.Next(135, 165));
            _st=-4;
          }
          return true;
        }
        return false;
      }
      public override bool Poll(out byte[] buf) {