public TickRecord(byte[] data, IDictionary <uint, DateTime> epochTimes) : this() { Debug.Assert(data != null); Debug.Assert(epochTimes != null); RawTickRecord rawTickRecord = Utility.BytesToStruct <RawTickRecord>(data); // Eitan, here we need to save the LemondTickRecord into a Database PopulateWithTickRecord(rawTickRecord, epochTimes); }
// 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 TickRecord(RawTickRecord rawTickRecord, IDictionary <uint, DateTime> epochTimes) { // Eitan, here we need to save the LemondTickRecord into a Database PopulateWithTickRecord(rawTickRecord, epochTimes); }