public void GPSOriginTimeToDateTime() { DateTime dateTime = GPS.GPSOriginTimeToDateTime(10000, 10000000); GPS.DateTimeToGPSOriginTime(dateTime, out uint GPSWeek, out uint GPSWeekMilliseconds); Assert.True(GPSWeek == 10000 && GPSWeekMilliseconds == 10000000, "Round trip conversion of GPS date failed"); }
public override bool ProcessUnsignedIntegerValue(TAGValueMatcherState state, TAGProcessorStateBase valueSink, TAGDictionaryItem valueType, uint value) { bool result = false; if (valueType.Name == TAGValueNames.kTagFileTimeTag) { // Every time record marks the end of the collected data for an epoch // Thus, we instruct the value sink to process its context whenever we receive // a time value. if (state.HaveSeenATimeValue) { valueSink.ProcessEpochContext(); } switch (valueType.Type) { case TAGDataType.t32bitUInt: // {$IFDEF DENSE_TAG_FILE_LOGGING} // SIGLogProcessMessage.Publish(Self, Format('Time Origin Update: Incremented Time: %d, new Origin: %d, Delta: %d', { SKIP} // [FValueSink.GPSWeekTime, Value, Value - FValueSink.GPSWeekTime]), slpmcMessage); // {$ENDIF} valueSink.GPSWeekTime = value; // Time value is GPS milliseconds since start of week state.HaveSeenATimeValue = true; result = true; break; case TAGDataType.t4bitUInt: valueSink.GPSWeekTime = valueSink.GPSWeekTime + 100 * value; // Time value is tenths of seconds delta from previous time state.HaveSeenATimeValue = true; result = true; break; } } else if (valueType.Name == TAGValueNames.kTagFileWeekTag) { if (valueType.Type == TAGDataType.t16bitUInt) { valueSink.GPSWeekNumber = (short)value; state.HaveSeenAWeekValue = true; result = true; } } // if we have seen both a GPS week and time then we can compute the DataTime // value for the value sink if (state.HaveSeenATimeValue && state.HaveSeenAWeekValue) { valueSink.DataTime = GPS.GPSOriginTimeToDateTime(valueSink.GPSWeekNumber, valueSink.GPSWeekTime); } return(result); }
public override bool ProcessUnsignedIntegerValue(TAGValueMatcherState state, TAGProcessorStateBase valueSink, TAGDictionaryItem valueType, uint value) { bool result = false; if (valueType.Name == TAGValueNames.kTagFileStartProofingTimeTag) { // Every time record marks the end of the collected data for an epoch // Thus, we instruct the value sink to process its context whenever we receive a time value. if (state.HaveSeenAProofingRunTimeValue && !valueSink.ProcessEpochContext()) { return(false); } if (valueType.Type == TAGDataType.t32bitUInt) { valueSink.StartProofingTime = value; // Time value is GPS milliseconds since start of week state.HaveSeenAProofingRunTimeValue = true; result = true; } } if (valueType.Name == TAGValueNames.kTagFileStartProofingWeekTag) { if (valueType.Type == TAGDataType.t16bitUInt) { valueSink.StartProofingWeek = (short)value; state.HaveSeenAProofingRunWeekValue = true; result = true; } } // if we have seen both a GPS week and time then we can compute the DataTime // value for the value sink if (result && state.HaveSeenAProofingRunTimeValue && state.HaveSeenAProofingRunWeekValue) { valueSink.StartProofingDataTime = GPS.GPSOriginTimeToDateTime(valueSink.StartProofingWeek, valueSink.StartProofingTime); } return(result); }
public void GPSOriginTimeToDateTime_Invalid_MilliSecondsInWeek() { Action act = () => GPS.GPSOriginTimeToDateTime(1000, 1_000_000_000); act.Should().Throw <TRexException>().WithMessage("GPS millisecondsInWeek: * not in range 0*"); }