public void BitVector_conversion_gets_correct_array_length() { BitVector v = new BitVector(40); uint[] value = v.ToUintValues(); Assert.AreEqual(2, value.Length); Assert.AreEqual((uint)0, value[0]); ulong[] longvalues = v.ToULongValues(); Assert.AreEqual(1, longvalues.Length); Assert.AreEqual((ulong)0, longvalues[0]); }
public void BitVector_any_bit_is_set_and_reset() { BitVector v = new BitVector(40); for (uint i = 1; i < 40; i++) { v[i] = true; Assert.IsTrue(v[i]); } for (uint i = 1; i < 40; i++) { v[i] = false; Assert.IsFalse(v[i]); } }
public void BitVector_conversion_gets_correct_long_values() { BitVector v = new BitVector(40); v[0] = true; Assert.AreEqual((ulong)1, v.ToULongValues()[0]); v[1] = true; Assert.AreEqual((ulong)3, v.ToULongValues()[0]); v[0] = false; Assert.AreEqual((ulong)2, v.ToULongValues()[0]); v[1] = false; v[32] = true; Assert.AreEqual((ulong)4294967296, v.ToULongValues()[0]); }
public void BitVector_conversion_gets_correct_int_values() { BitVector v = new BitVector(40); v[0] = true; Assert.AreEqual((uint)1, v.ToUintValues()[0]); v[1] = true; Assert.AreEqual((uint)3, v.ToUintValues()[0]); v[0] = false; Assert.AreEqual((uint)2, v.ToUintValues()[0]); v[1] = false; v[32] = true; Assert.AreEqual((uint)0, v.ToUintValues()[0]); Assert.AreEqual((uint)1, v.ToUintValues()[1]); }
public void BitVector_starts_in_false() { BitVector v = new BitVector(40); for (uint i = 0; i < 40; i++) { Assert.IsFalse(v[i]); } }
public void BitVector_the_bit_is_set() { BitVector v = new BitVector(40); v[0] = true; Assert.IsTrue(v[0]); for (uint i = 1; i < 40; i++) { Assert.IsFalse(v[i]); } }
public Dht11Reading Sample() { BitVector bits = new BitVector(40); // Latch low value onto pin pin.Write(GpioPinValue.Low); // Set pin as output pin.SetDriveMode(GpioPinDriveMode.Output); // Wait for at least 18 ms Task.Delay(sampleHoldLowMillis).Wait(); // Set pin back to input pin.SetDriveMode(inputDriveMode); GpioPinValue previousValue = pin.Read(); // catch the first rising edge var stopwatch = Stopwatch.StartNew(); for (;;) { if (stopwatch.ElapsedMilliseconds > initialRisingEdgeTimeoutMillis) { throw new TimeoutException("Initial Rising Timeout Exception"); } GpioPinValue value = pin.Read(); if (value != previousValue) { // rising edge? if (value == GpioPinValue.High) { break; } previousValue = value; } } long prevTime = 0; stopwatch.Restart(); // capture every falling edge until all bits are received or // timeout occurs for (uint i = 0; i < (bits.Length + 1);) { if (stopwatch.ElapsedMilliseconds > sampleTimeoutMillis) { throw new TimeoutException("Bits reading Timeout Exception"); } GpioPinValue value = pin.Read(); if ((previousValue == GpioPinValue.High) && (value == GpioPinValue.Low)) { // A falling edge was detected // Calculate the microseconds in a fractional second long now = (long)(stopwatch.Elapsed.TotalSeconds * 1000000); if (i != 0) { var difference = now - prevTime; bits[bits.Length - i] = difference > oneThresholdMicroseconds; } prevTime = now; ++i; } previousValue = value; } var reading = new Dht11Reading(bits.ToULongValues()[0]); if (!reading.IsValid) { // checksum mismatch throw new InvalidOperationException("invalid checksum"); } return reading; }