示例#1
0
文件: UnitTest.cs 项目: BeRoces/iot
        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]);
        }
示例#2
0
文件: UnitTest.cs 项目: BeRoces/iot
        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]);
            }
        }
示例#3
0
文件: UnitTest.cs 项目: BeRoces/iot
        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]);
        }
示例#4
0
文件: UnitTest.cs 项目: BeRoces/iot
        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]);
        }
示例#5
0
文件: UnitTest.cs 项目: BeRoces/iot
 public void BitVector_starts_in_false()
 {
     BitVector v = new BitVector(40);
     for (uint i = 0; i < 40; i++)
     {
         Assert.IsFalse(v[i]);
     }
 }
示例#6
0
文件: UnitTest.cs 项目: BeRoces/iot
 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]);
     }
 }
示例#7
0
文件: Dht11.cs 项目: BeRoces/iot
        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;
        }