예제 #1
0
        // Returns tick data size (excluding the header)
        public void PopulateWithTickRecord(RawTickRecord rawTickRecord, IDictionary <uint, DateTime> epochTimes)
        {
            int rawTickRecordSize = Marshal.SizeOf <RawTickRecord>();

            Debug.Assert(rawTickRecordSize == 13, "Tick Record Size Error");

            ulong tickData = rawTickRecord.Tick;

            EventSpecificFlags = (byte)Utility.GetULongBitfieldData(tickData, TickTypes.EVENT_DATA_FLAGS_OFFSET, TickTypes.EVENT_DATA_FLAGS_LEN);
            TickEventType      = (byte)Utility.GetULongBitfieldData(tickData, TickTypes.TICK_DATA_RECORD_TYPE_OFFSET, TickTypes.TICK_DATA_RECORD_TYPE_LEN);

            // Activity Data
            switch (TickEventType)
            {
            case 0x00:
                IsPossibleBandRemoved  = Utility.GetULongBitfieldData(tickData, TickTypes.TICK_DATA_BAND_REMOVED_OFFSET, TickTypes.TICK_DATA_BAND_REMOVED_LEN) != 0;
                IsBatteryCharging      = Utility.GetULongBitfieldData(tickData, TickTypes.TICK_DATA_BATTERY_CHARGING_OFFSET, TickTypes.TICK_DATA_BATTERY_CHARGING_LEN) != 0;
                TickEventType          = (byte)Utility.GetULongBitfieldData(tickData, TickTypes.TICK_DATA_RECORD_TYPE_OFFSET, TickTypes.TICK_DATA_RECORD_TYPE_LEN);
                PostProcessedStepCount = (int)Utility.GetULongBitfieldData(tickData, TickTypes.TICK_DATA_POST_PROCESSED_STEP_COUNT_OFFSET, TickTypes.TICK_DATA_POST_PROCESSED_STEP_COUNT_LEN);
                DistanceInMeters       = Utility.GetULongBitfieldData(tickData, TickTypes.TICK_DATA_DISTANCE_IN_METERS_OFFSET, TickTypes.TICK_DATA_DISTANCE_IN_METERS_LEN);
                ActiveTimeInSeconds    = (byte)Utility.GetULongBitfieldData(tickData, TickTypes.TICK_DATA_ACTIVE_TIME_IN_SECONDS_OFFSET, TickTypes.TICK_DATA_ACTIVE_TIME_IN_SECONDS_LEN);
                LocomotionMET0         = Utility.GetULongBitfieldData(tickData, TickTypes.TICK_DATA_LOCOMOTION_MET0_OFFSET, TickTypes.TICK_DATA_LOCOMOTION_MET0_LEN);
                LocomotionMET1         = Utility.GetULongBitfieldData(tickData, TickTypes.TICK_DATA_LOCOMOTION_MET1_OFFSET, TickTypes.TICK_DATA_LOCOMOTION_MET1_LEN);
                SleepStage0            = (SleepStage)Utility.GetULongBitfieldData(tickData, TickTypes.TICK_DATA_SLEEP_STAGE0_OFFSET, TickTypes.TICK_DATA_SLEEP_STAGE0_LEN);
                SleepStage1            = (SleepStage)Utility.GetULongBitfieldData(tickData, TickTypes.TICK_DATA_SLEEP_STAGE1_OFFSET, TickTypes.TICK_DATA_SLEEP_STAGE1_LEN);
                MeanHeartRate          = (byte)Utility.GetULongBitfieldData(tickData, TickTypes.TICK_DATA_MEAN_HEART_RATE_OFFSET, TickTypes.TICK_DATA_MEAN_HEART_RATE_LEN);
                break;

            case 0x01:
                EventType = (byte)Utility.GetULongBitfieldData(tickData, TickTypes.EVENT_DATA_TYPE_OFFSET, TickTypes.EVENT_DATA_TYPE_LEN);
                break;

            case 0x02:
                break;
            }

            DurationInSeconds = rawTickRecord.DurationInSeconds;
            RawTickRecord     = Utility.StructToBytes(rawTickRecord);

            Key = -1;
            uint epochKey = rawTickRecord.Timestamp.EpochId;

            if (epochTimes != null & epochTimes.Any() && epochTimes.ContainsKey(epochKey))
            {
                TickEndDate   = epochTimes[epochKey].AddSeconds(rawTickRecord.Timestamp.SecondsSinceEpoch);
                TickStartDate = TickEndDate.Subtract(new TimeSpan(0, 0, 0, rawTickRecord.DurationInSeconds));

                Key = TickStartDate.ToUnixTime();
            }
            else
            {
                Debug.Assert(Key == -1, "Key Error");
            }
        }
예제 #2
0
        public override string ToString()
        {
            var msg = new StringBuilder();

            if (TickEventType == 0x00)
            {
                // Primary Key
                msg.AppendFormat("        Tick Primary Key         = {0},\n", string.Format("{0:###,###,###,##0} - {1}", Key, "(Seconds since 1/1/1970)"));

                // Timestamp
                msg.AppendFormat("        Tick start date          = {0},\n", string.Format("UTC: {0} - Local: {1}", TickStartDate.ToUniversalTime(), TickStartDate.ToLocalTime()));
                msg.AppendFormat("        Tick end date            = {0},\n", string.Format("UTC: {0} - Local: {1}", TickEndDate.ToUniversalTime(), TickEndDate.ToLocalTime()));

                // Record Duration
                msg.AppendFormat("        Duration in seconds      = {0},\n", DurationInSeconds);

                // Event Data
                msg.AppendFormat("        IsPossibleBandRemoved    = {0},\n", IsPossibleBandRemoved);
                msg.AppendFormat("        IsBatteryCharging        = {0},\n", IsBatteryCharging);
                msg.AppendFormat("        TickEventType            = {0},\n", string.Format("0x{0}", Convert.ToString(TickEventType, 2).PadLeft(8, '0')));
                msg.AppendFormat("        PostProcessedStepCount   = {0},\n", PostProcessedStepCount);
                msg.AppendFormat("        Distance in meters       = {0},\n", DistanceInMeters);
                msg.AppendFormat("        Active time in secs      = {0},\n", string.Format("{0} - ({1})", ActiveTimeInSeconds, Utility.Seconds2String(ActiveTimeInSeconds)));
                msg.AppendFormat("        LocomotionMET0           = {0},\n", LocomotionMET0);
                msg.AppendFormat("        LocomotionMET1           = {0},\n", LocomotionMET1);
                msg.AppendFormat("        SleepStage0              = {0},\n", SleepStage0);
                msg.AppendFormat("        SleepStage1              = {0},\n", SleepStage1);
                msg.AppendFormat("        Mean heart rate          = {0},\n", MeanHeartRate);

                // Local Variables
                msg.AppendFormat("        IsReplayRecord           = {0},\n", IsReplayRecord);
                msg.AppendFormat("\n");
            }
            else if (TickEventType == 0x01)
            {
                msg.AppendFormat("        Event Type               = {0},\n", EventType);
            }
            else if (TickEventType == 0x02)
            {
            }

            return(msg.ToString());
        }