Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
LARN
PRRT
Commits
a0de0122
Commit
a0de0122
authored
Apr 08, 2016
by
Andreas Schmidt
Browse files
Fix clock problem.
parent
51c6a0b8
Pipeline
#143
passed with stage
Changes
3
Pipelines
1
Show whitespace changes
Inline
Side-by-side
src/prrt/clock.c
View file @
a0de0122
...
...
@@ -20,9 +20,9 @@ prrtTimestamp_t PrrtClock_get_prrt_time_us(PrrtClock *clock)
if
(
virtualTime
)
{
prrtTimestamp_t
lastMeasurement
=
clock
->
lastMeasurement
;
int32
_t
diff
=
diff_ts
(
currentTime
,
lastMeasurement
);
int32
_t
skew
=
(
diff
*
clock
->
skew
)
/
400
;
return
virtualTime
+
clock
->
meanDeviation
+
skew
;
prrtTimeDifference
_t
diff
=
diff_
abs_
ts
(
currentTime
,
lastMeasurement
);
prrtTimeDifference
_t
skew
=
(
diff
*
clock
->
skew
)
/
400
;
return
(
prrtTimestamp_t
)
virtualTime
+
clock
->
meanDeviation
+
skew
;
}
else
{
return
currentTime
;
}
...
...
@@ -33,10 +33,10 @@ bool PrrtClock_update(PrrtClock *clock, uint32_t referenceTime, uint32_t rtt)
{
prrtTimestamp_t
currentTime
=
PrrtClock_get_current_time_us
();
prrtTimestamp_t
virtualTime
=
clock
->
virtualTime
;
int32
_t
clockSkew
=
clock
->
skew
;
prrtTimeDifference
_t
clockSkew
=
clock
->
skew
;
prrtTimedelta_t
delay
=
rtt
/
2
;
// half the rtt
int32_t
phaseError
=
(
int32_t
)
diff_ts
(
referenceTime
,
virtualTime
)
+
delay
;
//
debug("V
irtual Time
: %u, C
urrent Time
: %u,
Phase Error
: %d,
Delay
: %u,
Skew: %d
", virtualTime, currentTime, phaseError, delay
, clockSkew
);
prrtTimeDifference_t
phaseError
=
referenceTime
-
virtualTime
+
delay
;
debug
(
"V: %
13
u, C: %
13
u,
S
: %
13
d,
R
: %
13
u,
E: %13d, D: %3u
"
,
virtualTime
,
currentTime
,
clockSkew
,
referenceTime
,
phaseError
,
delay
);
if
(
abs
(
phaseError
)
>
10000
)
{
clock
->
meanDeviation
=
0
;
...
...
@@ -45,13 +45,13 @@ bool PrrtClock_update(PrrtClock *clock, uint32_t referenceTime, uint32_t rtt)
clock
->
virtualTime
=
currentTime
;
}
int32_t
deviationSum
=
phaseError
+
3
*
clock
->
meanDeviation
;
// TODO: why 3?
int32
_t
meanDeviation
=
deviationSum
/
4
;
// TODO: find out why???
int32
_t
period
=
diff_ts
(
currentTime
,
clock
->
lastMeasurement
);
prrtTimeDifference_t
deviationSum
=
(
prrtTimeDifference_t
)
phaseError
+
3
*
clock
->
meanDeviation
;
// TODO: why 3?
prrtTimeDifference
_t
meanDeviation
=
(
prrtTimeDifference_t
)
(
deviationSum
/
4
)
;
// TODO: find out why???
prrtTimeDifference
_t
period
=
diff_
abs_
ts
(
currentTime
,
clock
->
lastMeasurement
);
if
(
period
>
0
)
{
clockSkew
=
(
meanDeviation
/
period
)
+
15
*
clock
->
skew
;
clockSkew
=
clockSkew
/
16
;
clockSkew
=
(
prrtTimeDifference_t
)
(
clockSkew
/
16
)
;
}
virtualTime
=
virtualTime
+
meanDeviation
+
period
*
clockSkew
/
400
;
...
...
@@ -61,7 +61,7 @@ bool PrrtClock_update(PrrtClock *clock, uint32_t referenceTime, uint32_t rtt)
clock
->
lastMeasurement
=
currentTime
;
clock
->
virtualTime
=
virtualTime
;
//debug("
Current Time: %u; Virtual Time %
u; S
kew
: %d; M
ean Deviation
: %u",
currentTime, virtual
Time, clockSkew, meanDeviation);
//debug("
V: %13u, C: %13
u; S: %
13
d; M: %
13
u",
virtualTime, current
Time, clockSkew, meanDeviation);
return
true
;
}
...
...
src/prrt/clock.h
View file @
a0de0122
...
...
@@ -10,8 +10,8 @@
typedef
struct
prrtClock
{
prrtTimestamp_t
lastMeasurement
;
prrtTime
delta
_t
meanDeviation
;
int32
_t
skew
;
prrtTime
Difference
_t
meanDeviation
;
prrtTimeDifference
_t
skew
;
prrtTimestamp_t
virtualTime
;
}
PrrtClock
;
...
...
@@ -25,6 +25,8 @@ prrtTimestamp_t PrrtClock_get_prrt_time_us(PrrtClock *clock);
bool
PrrtClock_update
(
PrrtClock
*
clock
,
prrtTimestamp_t
referenceTime
,
prrtTimedelta_t
rtt
);
#define diff_ts(timeA, timeB) abs(((int32_t) timeA) - ((int32_t)timeB))
#define diff_abs_ts(timeA, timeB) (prrtTimeDifference_t) abs(((prrtTimeDifference_t) timeA) - ((prrtTimeDifference_t)timeB))
#endif //PRRT_CLOCK_H
src/prrt/packet.h
View file @
a0de0122
...
...
@@ -18,6 +18,7 @@ typedef uint16_t prrtSequenceNumber_t;
typedef
uint8_t
prrtIndex_t
;
typedef
uint32_t
prrtTimestamp_t
;
typedef
uint32_t
prrtTimedelta_t
;
typedef
int32_t
prrtTimeDifference_t
;
typedef
uint32_t
prrtPacketLength_t
;
typedef
struct
prrtIncompleteBlock
{
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment