// 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"); } }
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()); }