offsetBetweenExtendedReadings returns estimated difference between two PHC SYS_OFFSET_EXTENDED readings
(extendedA, extendedB *PTPSysOffsetExtended)
| 163 | } |
| 164 | |
| 165 | // generics in standard library can't come soon enough... |
| 166 | func abs(value time.Duration) time.Duration { |
| 167 | if value < 0 { |
| 168 | return -value |
| 169 | } |
| 170 | return value |
| 171 | } |
| 172 | |
| 173 | // Sub returns the estimated difference between two PHC SYS_OFFSET_EXTENDED readings |
| 174 | func (extended *PTPSysOffsetExtended) Sub(a *PTPSysOffsetExtended) (time.Duration, error) { |
| 175 | return offsetBetweenExtendedReadings(a, extended) |
| 176 | } |
| 177 | |
| 178 | // Sub returns the estimated difference between two PHC SYS_OFFSET_PRECISE readings |
| 179 | func (precise *PTPSysOffsetPrecise) Sub(a *PTPSysOffsetPrecise) time.Duration { |
| 180 | return offsetBetweenPreciseReadings(a, precise) |
| 181 | } |
| 182 | |
| 183 | // offsetBetweenExtendedReadings returns estimated difference between two PHC SYS_OFFSET_EXTENDED readings |
| 184 | func offsetBetweenExtendedReadings(extendedA, extendedB *PTPSysOffsetExtended) (time.Duration, error) { |
| 185 | // SYS_OFFSET_EXTENDED can provide different system clock, we can compare samples with same system clock id |
| 186 | if extendedA.ClockID != extendedB.ClockID { |
| 187 | return 0, fmt.Errorf("different system clock ids") |
| 188 | } |
| 189 | // we expect both probes to have same number of measures |
| 190 | numProbes := min(int(extendedB.Samples), int(extendedA.Samples)) |
| 191 | // calculate sys time midpoint from both samples |
| 192 | sysoffA := sysoffFromExtendedTS(extendedA.Ts[0]) |
| 193 | sysoffB := sysoffFromExtendedTS(extendedB.Ts[0]) |
| 194 | // offset between sys time midpoints |
| 195 | sysOffset := sysoffB.SysTime.Sub(sysoffA.SysTime) |
no test coverage detected
searching dependent graphs…