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); }
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; } }