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
Hide 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)
...
@@ -20,9 +20,9 @@ prrtTimestamp_t PrrtClock_get_prrt_time_us(PrrtClock *clock)
if
(
virtualTime
)
{
if
(
virtualTime
)
{
prrtTimestamp_t
lastMeasurement
=
clock
->
lastMeasurement
;
prrtTimestamp_t
lastMeasurement
=
clock
->
lastMeasurement
;
int32
_t
diff
=
diff_ts
(
currentTime
,
lastMeasurement
);
prrtTimeDifference
_t
diff
=
diff_
abs_
ts
(
currentTime
,
lastMeasurement
);
int32
_t
skew
=
(
diff
*
clock
->
skew
)
/
400
;
prrtTimeDifference
_t
skew
=
(
diff
*
clock
->
skew
)
/
400
;
return
virtualTime
+
clock
->
meanDeviation
+
skew
;
return
(
prrtTimestamp_t
)
virtualTime
+
clock
->
meanDeviation
+
skew
;
}
else
{
}
else
{
return
currentTime
;
return
currentTime
;
}
}
...
@@ -33,10 +33,10 @@ bool PrrtClock_update(PrrtClock *clock, uint32_t referenceTime, uint32_t rtt)
...
@@ -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
currentTime
=
PrrtClock_get_current_time_us
();
prrtTimestamp_t
virtualTime
=
clock
->
virtualTime
;
prrtTimestamp_t
virtualTime
=
clock
->
virtualTime
;
int32
_t
clockSkew
=
clock
->
skew
;
prrtTimeDifference
_t
clockSkew
=
clock
->
skew
;
prrtTimedelta_t
delay
=
rtt
/
2
;
// half the rtt
prrtTimedelta_t
delay
=
rtt
/
2
;
// half the rtt
int32_t
phaseError
=
(
int32_t
)
diff_ts
(
referenceTime
,
virtualTime
)
+
delay
;
prrtTimeDifference_t
phaseError
=
referenceTime
-
virtualTime
+
delay
;
//
debug("V
irtual Time
: %u, C
urrent Time
: %u,
Phase Error
: %d,
Delay
: %u,
Skew: %d
", virtualTime, currentTime, phaseError, delay
, clockSkew
);
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
)
{
if
(
abs
(
phaseError
)
>
10000
)
{
clock
->
meanDeviation
=
0
;
clock
->
meanDeviation
=
0
;
...
@@ -45,13 +45,13 @@ bool PrrtClock_update(PrrtClock *clock, uint32_t referenceTime, uint32_t rtt)
...
@@ -45,13 +45,13 @@ bool PrrtClock_update(PrrtClock *clock, uint32_t referenceTime, uint32_t rtt)
clock
->
virtualTime
=
currentTime
;
clock
->
virtualTime
=
currentTime
;
}
}
int32_t
deviationSum
=
phaseError
+
3
*
clock
->
meanDeviation
;
// TODO: why 3?
prrtTimeDifference_t
deviationSum
=
(
prrtTimeDifference_t
)
phaseError
+
3
*
clock
->
meanDeviation
;
// TODO: why 3?
int32
_t
meanDeviation
=
deviationSum
/
4
;
// TODO: find out why???
prrtTimeDifference
_t
meanDeviation
=
(
prrtTimeDifference_t
)
(
deviationSum
/
4
)
;
// TODO: find out why???
int32
_t
period
=
diff_ts
(
currentTime
,
clock
->
lastMeasurement
);
prrtTimeDifference
_t
period
=
diff_
abs_
ts
(
currentTime
,
clock
->
lastMeasurement
);
if
(
period
>
0
)
{
if
(
period
>
0
)
{
clockSkew
=
(
meanDeviation
/
period
)
+
15
*
clock
->
skew
;
clockSkew
=
(
meanDeviation
/
period
)
+
15
*
clock
->
skew
;
clockSkew
=
clockSkew
/
16
;
clockSkew
=
(
prrtTimeDifference_t
)
(
clockSkew
/
16
)
;
}
}
virtualTime
=
virtualTime
+
meanDeviation
+
period
*
clockSkew
/
400
;
virtualTime
=
virtualTime
+
meanDeviation
+
period
*
clockSkew
/
400
;
...
@@ -61,7 +61,7 @@ bool PrrtClock_update(PrrtClock *clock, uint32_t referenceTime, uint32_t rtt)
...
@@ -61,7 +61,7 @@ bool PrrtClock_update(PrrtClock *clock, uint32_t referenceTime, uint32_t rtt)
clock
->
lastMeasurement
=
currentTime
;
clock
->
lastMeasurement
=
currentTime
;
clock
->
virtualTime
=
virtualTime
;
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
;
return
true
;
}
}
...
...
src/prrt/clock.h
View file @
a0de0122
...
@@ -10,8 +10,8 @@
...
@@ -10,8 +10,8 @@
typedef
struct
prrtClock
{
typedef
struct
prrtClock
{
prrtTimestamp_t
lastMeasurement
;
prrtTimestamp_t
lastMeasurement
;
prrtTime
delta
_t
meanDeviation
;
prrtTime
Difference
_t
meanDeviation
;
int32
_t
skew
;
prrtTimeDifference
_t
skew
;
prrtTimestamp_t
virtualTime
;
prrtTimestamp_t
virtualTime
;
}
PrrtClock
;
}
PrrtClock
;
...
@@ -25,6 +25,8 @@ prrtTimestamp_t PrrtClock_get_prrt_time_us(PrrtClock *clock);
...
@@ -25,6 +25,8 @@ prrtTimestamp_t PrrtClock_get_prrt_time_us(PrrtClock *clock);
bool
PrrtClock_update
(
PrrtClock
*
clock
,
prrtTimestamp_t
referenceTime
,
prrtTimedelta_t
rtt
);
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
#endif //PRRT_CLOCK_H
src/prrt/packet.h
View file @
a0de0122
...
@@ -18,6 +18,7 @@ typedef uint16_t prrtSequenceNumber_t;
...
@@ -18,6 +18,7 @@ typedef uint16_t prrtSequenceNumber_t;
typedef
uint8_t
prrtIndex_t
;
typedef
uint8_t
prrtIndex_t
;
typedef
uint32_t
prrtTimestamp_t
;
typedef
uint32_t
prrtTimestamp_t
;
typedef
uint32_t
prrtTimedelta_t
;
typedef
uint32_t
prrtTimedelta_t
;
typedef
int32_t
prrtTimeDifference_t
;
typedef
uint32_t
prrtPacketLength_t
;
typedef
uint32_t
prrtPacketLength_t
;
typedef
struct
prrtIncompleteBlock
{
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