示例#1
0
        private static BMRecordCurrent GetAverageValue(List <BMRecordCurrent> records, int start, int bucketSize)
        {
            if (start >= records.Count || bucketSize <= 0)
            {
                return(new BMRecordCurrent());
            }

            BMRecordCurrent rec = new BMRecordCurrent(records[start]);

            if (bucketSize == 1)
            {
                return(rec);
            }

            int count = 1;

            for (int i = start + 1; i < records.Count && i < (start + bucketSize); i++, count++)
            {
                rec += records[i];
            }
            rec /= count;

            TimeSpan interval     = records[start + count - 1].Date - records[start].Date;
            TimeSpan halfInterval = TimeSpan.FromMilliseconds(interval.TotalMilliseconds / 2);

            rec.Date = records[start].Date + halfInterval;

            if (interval.TotalSeconds < 1.0)
            {
                Log.d("Interval is too small: idx: {0} count: {1} time: {2}", start, bucketSize, interval);
            }

            return(rec);
        }
        public static BMRecordCurrent operator /(BMRecordCurrent r1, double factor)
        {
            BMRecordCurrent rec = new BMRecordCurrent(r1);

            rec.Temperature /= factor;
            rec.AirHumidity /= factor;
            rec.AirPressure /= factor;
            return(rec);
        }
        public static BMRecordCurrent operator +(BMRecordCurrent r1, BMRecordCurrent r2)
        {
            BMRecordCurrent rec = new BMRecordCurrent(r2); //later one for time, battery level etc.

            rec.Temperature += r1.Temperature;
            rec.AirHumidity += r1.AirHumidity;
            rec.AirPressure += r1.AirPressure;
            return(rec);
        }
        //empty record for average, min, max
        public BMRecordCurrent(BMRecordCurrent r = null) : base(r)
        {
            if (r == null)
            {
                return;
            }

            BatteryLevel    = r.BatteryLevel;
            LoggingInterval = r.LoggingInterval;
            numBreach       = r.numBreach;
            _mode           = r._mode;
        }
示例#5
0
        public BMRecordCurrent AddRecord(BluetoothDevice device, short rssi, DateTime recordDate, byte[] data)
        {
            BMRecordCurrent record = new BMRecordCurrent(device, rssi, recordDate, data);

            lock (Records)
            {
                BMRecordCurrent last = Records.LastOrDefault();
                if (last != null && last == record) //not changed - update
                {
                    Records[Records.Count - 1] = record;
                }
                else //new record
                {
                    if (last == null)
                    {
                        last = record;
                    }

                    Records.Add(record);
                }
            }

            return(record);
        }
示例#6
0
        //assuming all DB are sorted by date
        public static List <BMRecordCurrent> MergeLinear(List <BMRecordCurrent> r1, List <BMRecordCurrent> r2)
        {
            if ((r1 == null || r1.Count == 0) && (r2 == null || r2.Count == 0))
            {
                return(new List <BMRecordCurrent>());
            }
            if (r1 == null || r1.Count == 0)
            {
                return(new List <BMRecordCurrent>(r2));
            }
            if (r2 == null || r2.Count == 0)
            {
                return(new List <BMRecordCurrent>(r1));
            }

            List <BMRecordCurrent> records = new List <BMRecordCurrent>(r1.Count);
            BMRecordCurrent        current = null, last = null;

            int i1 = 0, i2 = 0;

            while (i1 < r1.Count || i2 < r2.Count)
            {
                if (i1 < r1.Count && i2 < r2.Count)
                {
                    if (r1[i1].Date == r2[i2].Date)
                    {
                        current = r1[i1];
                        i1++;
                        i2++;
                    }
                    else if (r1[i1].Date < r2[i2].Date)
                    {
                        current = r1[i1];
                        i1++;
                    }
                    else
                    {
                        current = r2[i2];
                        i2++;
                    }
                }
                else if (i1 < r1.Count)
                {
                    current = r1[i1];
                    i1++;
                }
                else if (i2 < r2.Count)
                {
                    current = r2[i2];
                    i2++;
                }


                if (last == null || current.Date != last.Date)
                {
                    records.Add(current);
                    last = current;
                }
            }

            return(records);
        }