Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
P
PPSi
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
50
Issues
50
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Projects
PPSi
Commits
b76bc950
Commit
b76bc950
authored
Dec 16, 2014
by
Maciej Lipinski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
making use of the new get_backup_state communication with SoffPLL
parent
d9211696
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
39 additions
and
40 deletions
+39
-40
wr-api.h
proto-ext-whiterabbit/wr-api.h
+1
-1
wr-servo.c
proto-ext-whiterabbit/wr-servo.c
+38
-39
No files found.
proto-ext-whiterabbit/wr-api.h
View file @
b76bc950
...
...
@@ -126,7 +126,7 @@ struct wr_operations {
int
(
*
enable_timing_output
)(
struct
pp_instance
*
ppi
,
int
enable
);
int
(
*
active_poll
)(
void
);
int
(
*
backup_state
)(
int
channel
,
uint32_t
*
good_phase_val
,
int
*
swover_flag
,
int
*
resync_flag
)
int
*
resync_flag
)
;
};
...
...
proto-ext-whiterabbit/wr-servo.c
View file @
b76bc950
...
...
@@ -472,52 +472,51 @@ int wr_servo_update(struct pp_instance *ppi)
if
(
tracking_enabled
)
{
// just follow the changes of deltaMS
int32_t
offset_change
=
(
s
->
delta_ms
-
s
->
delta_ms_prev
);
ss
=
(
struct
wrs_socket
*
)
NP
(
ppi
)
->
ch
[
PP_NP_GEN
].
arch_data
;
pp_diag
(
ppi
,
servo
,
1
,
"in servo cur_setpoint(before update)=%d, "
"update =%d, cur_dmtd_phase = %d
\n
"
,
s
->
cur_setpoint
,
offset_change
,
ss
->
dmtd_phase
);
int
ret
=
0
;
pp_diag
(
ppi
,
servo
,
1
,
"in servo cur_setpoint(before update)=%d, "
"update =%d
\n
"
,
s
->
cur_setpoint
,
offset_change
);
///testing
int
tmp_phase
=
0
,
tmp_swover_flag
=
0
,
tmp_resync_flag
=
0
;
s
->
cur_setpoint
+=
offset_change
;
// (s->delta_ms - s->delta_ms_prev);
wrp
->
ops
->
backup_state
(
ppi
->
port_idx
,
&
tmp_phase
,
&
tmp_swover_flag
,
&
tmp_resync_flag
);
pp_diag
(
ppi
,
servo
,
1
,
"
\n\n
testing bkcup state func: good_phase=%d, swover=%d, resync=%d
\n\n
"
,
tmp_phase
,
tmp_swover_flag
,
tmp_resync_flag
);
//if ret is not zero, it means something is to be done for backup stuff
ret
=
wrp
->
ops
->
adjust_phase
(
s
->
cur_setpoint
,
ppi
->
port_idx
);
/// ////////////////////////////////////////////////////////////////////
s
->
cur_setpoint
+=
offset_change
;
// (s->delta_ms - s->delta_ms_prev);
tmp_setpoint
=
(
int32_t
)
wrp
->
ops
->
adjust_phase
(
s
->
cur_setpoint
,
ppi
->
port_idx
);
if
(
tmp_setpoint
>
0
)
// default, might change if resync requested from backup_state
s
->
next_state
=
WR_TRACK_PHASE
;
s
->
state
=
WR_WAIT_SYNC_IDLE
;
if
(
ret
)
// check what is up
{
pp_diag
(
ppi
,
servo
,
1
,
"@Switchover: good_phase_val=%d,"
" cur_setpoint=%d, ptp_offset: %d, ts_offset=%d
\n
"
,
(
int
)
tmp_setpoint
,(
int
)
s
->
cur_setpoint
,(
int
)(
s
->
delta_ms
-
s
->
delta_ms_prev
),
(
int
)
ts_offset_hw
.
phase
);
s
->
cur_setpoint
=
tmp_setpoint
+
ts_offset_hw
.
phase
;
pp_diag
(
ppi
,
servo
,
1
,
"@Switchover: cur_setpoint=%d
\n
"
,(
int
)
s
->
cur_setpoint
);
tmp_setpoint
=
wrp
->
ops
->
adjust_phase
(
s
->
cur_setpoint
,
ppi
->
port_idx
);
uint32_t
phase
=
0
;
int
swover
=
0
,
resync
=
0
;
ss
=
(
struct
wrs_socket
*
)
NP
(
ppi
)
->
ch
[
PP_NP_GEN
].
arch_data
;
s
->
next_state
=
WR_TRACK_PHASE
;
s
->
state
=
WR_WAIT_SYNC_IDLE
;
}
else
if
(
tmp_setpoint
<
0
)
{
pp_diag
(
ppi
,
servo
,
1
,
"@UpdateBackup: good_phase_val=%d,"
" cur_setpoint=%d, ptp_offset: %d, ts_offset=%d
\n
"
,
(
int
)
tmp_setpoint
,(
int
)
s
->
cur_setpoint
,(
int
)(
s
->
delta_ms
-
s
->
delta_ms_prev
),
(
int
)
ts_offset_hw
.
phase
);
s
->
state
=
WR_SYNC_PHASE
;
wrp
->
ops
->
backup_state
(
ppi
->
port_idx
,
&
phase
,
&
swover
,
&
resync
);
pp_diag
(
ppi
,
servo
,
1
,
"backup_state: good_phase_val=%d,"
" cur_setpoint=%d, offset_change: %d, ts_offset=%d, "
" dmtd_phase=%d
\n
"
,
phase
,
s
->
cur_setpoint
,
offset_change
,
ts_offset_hw
.
phase
,
ss
->
dmtd_phase
);
if
(
swover
)
// switchover occured and this is the new active channel
{
pp_diag
(
ppi
,
servo
,
1
,
"@Switchover
\n
"
);
if
(
s
->
cur_setpoint
<
0
)
{
pp_diag
(
ppi
,
servo
,
1
,
"we have a problem.. "
"setpoint is negative: %d
\n
"
,
s
->
cur_setpoint
);
}
else
s
->
cur_setpoint
=
phase
+
ts_offset_hw
.
phase
;
}
else
if
(
resync
)
// this is backup and needs resynchronization
{
pp_diag
(
ppi
,
servo
,
1
,
"@Resync
\n
"
);
s
->
state
=
WR_SYNC_PHASE
;
}
}
else
{
s
->
next_state
=
WR_TRACK_PHASE
;
s
->
state
=
WR_WAIT_SYNC_IDLE
;
}
s
->
delta_ms_prev
=
s
->
delta_ms
;
s
->
last_tics
=
tics
;
}
...
...
Write
Preview
Markdown
is supported
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