Beispiel #1
0
        // Overridden from IGaugeProtocol
        public override GaugePacket ParsePacket(byte[] packetIn)
        {
            byte[] packet = Trim(packetIn);
            using (BinaryReader r = new BinaryReader(new MemoryStream(packet))) {
                int len = packet.Length;

                if (len < 8 || len % 6 != 2)
                {
                    /////should not throw exeptions
                    //throw new ArgumentException("Cannot parse: bad packet size {" + len + "}");
                }

                var v = r.ReadByte();

                if (v != 1 && v != 2)
                {
                    /////should not throw exeptions
                    //throw new ArgumentException("Cannot parse: invalid version code");
                }

                int battery = r.ReadByte();

                int maxGaugeCount = (len - 2) / 6;
                var readings      = new List <GaugeReading>();

                for (int i = 0; i < maxGaugeCount; i++)
                {
                    int exponent       = r.ReadByte();
                    int encodedReading = r.ReadInt32BE();
                    int unitCode       = r.ReadByte();

                    if (unitCode == 0)
                    {
                        break;
                    }

                    Unit unit = UnitLookup.GetUnit(unitCode);

                    var gr = new GaugeReading()
                    {
                        removed    = removedGaugeValue == encodedReading,
                        sensorType = UnitLookup.GetSensorTypeFromCode(unitCode),
                        reading    = unit.OfScalar(encodedReading / System.Math.Pow(10, exponent)),
                    };

                    if (gr.removed)
                    {
                        gr.reading = unit.OfScalar(0);
                    }

                    readings.Add(gr);
                }

                return(new GaugePacket(version, battery, readings.ToArray()));
            }
        }
Beispiel #2
0
        /// <summary>
        /// Parses the provided packet. If the packet cannot be parsed, this method will
        /// throw an argument exception.
        /// </summary>
        /// <param name="packet">The packet to parse.</param>
        /// <returns></returns>
        /// <param name="packetIn">Packet in.</param>
        public GaugePacket ParsePacket(byte[] packetIn)
        {
            var packet = System.Text.Encoding.UTF8.GetString(packetIn, 0, packetIn.Length);

            packet = packet.Trim();

            var tokens = packet.Split(new char[] { ' ' });

            var          battery      = int.Parse(tokens[2]);
            var          serialNumber = GaugeSerialNumber.Parse(tokens[5]);
            var          meas         = double.Parse(tokens[8]);
            Unit         ru;
            GaugeReading gr;

            if (EDeviceModel.AV760 == serialNumber.deviceModel)
            {
                ru = vacuumUnitLookup[tokens[9].ToLower()];
                gr = new GaugeReading()
                {
                    removed    = false,
                    sensorType = ESensorType.Vacuum,
                    reading    = ru.OfScalar(meas),
                };
            }
            else
            {
                ru = pressureUnitLookup[tokens[9].ToLower()];
                gr = new GaugeReading()
                {
                    removed    = false,
                    sensorType = ESensorType.Pressure,
                    reading    = ru.OfScalar(meas),
                };
            }



            return(new GaugePacket(version, battery, new GaugeReading[] { gr }));
        }