Esempio n. 1
0
        private DaqStatusValues QueryStatus()
        {
            var status = DaqStatusValues.Default;

            using (IsolateConnection()) {
                System.Diagnostics.Debug.Write("Status");
                ConnectIfRequired();
                var queryPacket = GenerateQueryDaqStatusPacketData();
                if (null != UsbConn && UsbConn.WritePacket(queryPacket))
                {
                    queryPacket = UsbConn.ReadPacket(QuarterSecond);
                    if (null != queryPacket)
                    {
                        var volUsbRaw = (ushort)(queryPacket[2] | (queryPacket[3] << 8));
                        var volBatRaw = (ushort)(queryPacket[4] | (queryPacket[5] << 8));
                        var tmpDaqRaw = (ushort)(queryPacket[7] | (queryPacket[6] << 8));

                        var temp   = (tmpDaqRaw / 10.0) - 40.0;
                        var volUsb = (volUsbRaw / 1024.0) * 6.4;
                        var volBat = (volBatRaw / 1024.0) * 6.4;

                        status = new DaqStatusValues(volBat, volUsb, temp);
                        System.Diagnostics.Debug.WriteLine(": " + status);
                    }
                }
                if (status == DaqStatusValues.Default)
                {
                    System.Diagnostics.Debug.WriteLine(": FAIL!");
                }
            }
            return(status);
        }
Esempio n. 2
0
        private void QueryThreadBody()
        {
            if (!_queryActive)
            {
                return;
            }

            int  networkSize  = 4;
            var  values       = new PackedReadingValues[networkSize];
            bool?usingDaqTemp = null;
            int  highestValid = -1;
            var  now          = DateTime.Now;
            var  daqSafeTime  = UnitUtility.StripToSecond(now);

            for (int i = 0; i < values.Length; i++)
            {
                values[i] = QueryValues(i);
            }

            for (int i = 0; i < values.Length; i++)
            {
                if (!values[i].IsValid)
                {
                    continue;
                }

                if (PackedValuesFlags.AnemTemperatureSource != (values[i].RawFlags & PackedValuesFlags.AnemTemperatureSource))
                {
                    usingDaqTemp = true;
                }
                else if (!usingDaqTemp.HasValue)
                {
                    usingDaqTemp = false;
                }

                highestValid = Math.Max(highestValid, i);
            }

            if (highestValid < 0)
            {
                highestValid = 3;
            }

            networkSize = highestValid + 1;
            _lastClock  = QueryAdjustedClock(0);
            _daqStat    = _lastDaqStatusQuery >= now?QueryStatus() : DaqStatusValues.Default;

            for (int i = 0; i < values.Length; i++)
            {
                _sensors[i].HandleObservation(values[i], networkSize, daqSafeTime);
            }

            _networkSize = networkSize;
            if (!_usingDaqTempUntil.HasValue || _usingDaqTempUntil.Value <= DateTime.Now)
            {
                _usingDaqTemp      = usingDaqTemp;
                _usingDaqTempUntil = null;
            }
        }