Пример #1
0
        public override void Decode(byte[] payload)
        {
            if (payload[6] != _lastCount)
            {
                // It's new data
                SensorPayload p = new SensorPayload();
                ushort thisTick = BitConverter.ToUInt16(payload, 4);
                byte thisCount = payload[6];

                ushort h = (ushort)payload[7];
                ushort ht =  OverflowSubtract(thisTick, _lastTick);
                if (ht > 0)
                {

                    p.Data.Add("ht", ht);
                    p.Data.Add("h", h);
                    OnSensorMessage(p);
                    _zeroCount = 0;
                }
                else
                {
                    _zeroCount++;
                    if (_zeroCount > 8)  // Two seconds
                    {
                        p.Data.Add("ht", 1024);
                        p.Data.Add("h", 0);
                        OnSensorMessage(p);
                        _zeroCount = 0;
                    }
                }
                _lastCount = thisCount;
                _lastTick = thisTick;
            }
        }
Пример #2
0
        public void SensorMessageReceived(object sender, SensorPayload p)
        {
            try
            {
                _datumLock.EnterWriteLock();

                // New data
                _IsSent = false;

                 if(p.Data.ContainsKey("h")) {
                    _outputDatum.h = p.Data["h"];
                    _outputDatum.ht = p.Data["ht"];
                 }
                 if(p.Data.ContainsKey("p")) {
                    _outputDatum.p = p.Data["p"];
                    _outputDatum.pt = p.Data["pt"];
                 }
                 if(p.Data.ContainsKey("w")) {
                    _outputDatum.w = p.Data["w"];
                    _outputDatum.wt = p.Data["wt"];
                 }
                 if(p.Data.ContainsKey("e")) {
                    _outputDatum.e = p.Data["e"];
                    _outputDatum.ec = p.Data["ec"];
                 }

            }
            finally
            {
                _datumLock.ExitWriteLock();
            }
        }
Пример #3
0
        public override void Decode(byte[] payload)
        {
            SensorPayload pSpCd = new SensorPayload();
            ushort pedalTicks = BitConverter.ToUInt16(payload, 0);
            ushort pedalRotations = BitConverter.ToUInt16(payload, 2);
            ushort wheelTicks = BitConverter.ToUInt16(payload, 4);
            ushort wheelRotations = BitConverter.ToUInt16(payload, 6);

            ushort pt = OverflowSubtract(pedalTicks, _lastPedalTick);
            ushort p = OverflowSubtract(pedalRotations, _lastPedalRotation);

            if (pt > 0)
            {
                pSpCd.Data.Add("pt", pt);
                pSpCd.Data.Add("p", p);
                _pedalZeroCount = 0;
            }
            else
            {
                _pedalZeroCount++;
                if (_pedalZeroCount > 8) {
                    pSpCd.Data.Add("pt", 1024);
                    pSpCd.Data.Add("p", 0);
                    _pedalZeroCount = 0;

                }
            }

            ushort wt = OverflowSubtract(wheelTicks, _lastWheelTick);
            ushort w = OverflowSubtract(wheelRotations, _lastWheelRotation);
            if (wt > 0)
            {
                pSpCd.Data.Add("wt",wt );
                pSpCd.Data.Add("w", w);
                _wheelZeroCount = 0;
            }
            else
            {
                _wheelZeroCount++;
                if (_wheelZeroCount > 8)
                {
                    pSpCd.Data.Add("wt", 1024);
                    pSpCd.Data.Add("w", 0);
                    _wheelZeroCount = 0;
                }
            }
            if (pSpCd.Data.Count > 0)
            {
                OnSensorMessage(pSpCd);
            }

            _lastPedalRotation = pedalRotations;
            _lastPedalTick = pedalTicks;

            _lastWheelRotation = wheelRotations;
            _lastWheelTick = wheelTicks;

            Console.WriteLine(string.Format("*********     wt:{0}    w:{1}", pSpCd.Data["wt"], pSpCd.Data["w"]));
        }
Пример #4
0
 protected void OnSensorMessage(SensorPayload p)
 {
     SensorMessageHandler handler = SensorMessage;
     if (handler != null)
         handler(this, p);
 }
Пример #5
0
        public override void Decode(byte[] payload)
        {
            if (payload[0] == 0x10 && payload[1] != _lastPowerCount)
            {

                // It's new data
                SensorPayload p = new SensorPayload();
                // Decode the time
                byte cnt = payload[1];
                ushort thisPower = BitConverter.ToUInt16(payload, 4);
                ushort ec = (ushort)OverflowSubtractByte(cnt, _lastPowerCount);
                ushort e = (ushort)OverflowSubtract(thisPower, _lastPower);

                if (ec > 0)
                {
                    p.Data.Add("ec", (ushort)OverflowSubtractByte(cnt, _lastPowerCount));
                    p.Data.Add("e", OverflowSubtract(thisPower, _lastPower));
                    OnSensorMessage(p);
                    _PowerZeroCount = 0;
                }
                else
                {
                    _PowerZeroCount++;
                    if (_PowerZeroCount > 8)
                    {
                        p.Data.Add("ec", 1024);
                        p.Data.Add("e", 0);
                        OnSensorMessage(p);
                        _PowerZeroCount = 0;
                    }
                }
                _lastPowerCount = cnt;
                _lastPower = thisPower;
            }
            else if (payload[0] == 0x11 && payload[1] != _lastWheelUpdate)
            {

                SensorPayload p = new SensorPayload();
                byte wheelUpdate = payload[1];
                ushort wheelPeriod = BitConverter.ToUInt16(payload, 4);

                ushort w = (ushort)(OverflowSubtractByte(wheelUpdate, _lastWheelUpdate) << 1);
                ushort wt = OverflowSubtract(wheelPeriod, _lastWheelPeriod);
                if (wt > 0)
                {
                    p.Data.Add("w", w);
                    p.Data.Add("wt", wt);
                    OnSensorMessage(p);
                    _SpeedZeroCount = 0;
                }
                else
                {
                    _SpeedZeroCount++;
                    if (_SpeedZeroCount > 8)
                    {
                        p.Data.Add("w", 0);
                        p.Data.Add("wt",1024);
                        OnSensorMessage(p);
                        _SpeedZeroCount = 0;

                    }
                }
                    _lastWheelUpdate = wheelUpdate;
                _lastWheelPeriod = wheelPeriod;

            }
        }
Пример #6
0
 private void SensorMessageReceived(object sender, SensorPayload p)
 {
     if (string.IsNullOrEmpty(SensorCount))
     {
         SensorCount = "O";
     }
     else
     {
         SensorCount = "";
     }
 }