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; } }
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(); } }
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"])); }
protected void OnSensorMessage(SensorPayload p) { SensorMessageHandler handler = SensorMessage; if (handler != null) handler(this, p); }
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; } }
private void SensorMessageReceived(object sender, SensorPayload p) { if (string.IsNullOrEmpty(SensorCount)) { SensorCount = "O"; } else { SensorCount = ""; } }