Commit a148cb45 authored by José Luis  Gutiérrez's avatar José Luis Gutiérrez

HSR: Redbox behaviour

Trying to make it work as a redbox for PTP
parent b7437664
......@@ -220,7 +220,7 @@ int main(int argc, char **argv)
// ppi->slave_prio = 0; /*ML: by default primary slave*/
if((i==0 || i==1) && ppg->rt_opts->wr_hsr == PPSI_EXT_HSR_ENA)
if((i==0 || i==1 || i==2) && ppg->rt_opts->wr_hsr == PPSI_EXT_HSR_ENA) // i==2 added for HSR in HSR1 and HSR2 new change.
ppi->is_HSR=1;
else
ppi->is_HSR=0;
......
......@@ -22,12 +22,12 @@ int wr_link_on(struct pp_instance *ppi, unsigned char *pkt, int plen)
// if(ppi->slave_prio == 0)
wrp->ops->enable_ptracker(ppi); // might need change
if (wrp->wrMode == WR_MASTER) {
e = msg_issue_wrsig(ppi, WR_MODE_ON);
ppi->master_only = 0;
ppi->slave_only = 0;
ppi->backup_only = 1;
}
//if (wrp->wrMode == WR_MASTER) {
//e = msg_issue_wrsig(ppi, WR_MODE_ON);
//ppi->master_only = 0;
//ppi->slave_only = 0;
//ppi->backup_only = 1;
//}
wrp->parentWrModeOn = TRUE;
wrp->wrPortState = WRS_WR_LINK_ON;
......
......@@ -379,7 +379,7 @@ int wr_servo_update(struct pp_instance *ppi)
s->t3.correct, s->t4.correct,
s->t5.correct, s->t6.correct);
return 0; /* GUTI HACK: removing it, sometimes fixes some stuff
swithover related to mErr & bErr*/
//swithover related to mErr & bErr*/
}
errcount = 0;
......@@ -401,7 +401,8 @@ int wr_servo_update(struct pp_instance *ppi)
+ s->delta_tx_m + s->delta_rx_s + ph_adjust;
ppi->link_delay = (int64_t)((delay_ms_fix));
pp_printf("port %d delay = %d\n", ppi->port_idx, ppi->link_delay);
//pp_printf("port %d delay = %d\n", ppi->port_idx, ppi->link_delay);
pp_diag(ppi, servo, 1, "port %d delay = %d\n", ppi->port_idx, ppi->link_delay);
if (__PP_DIAG_ALLOW_FLAGS(pp_global_flags, pp_dt_servo, 1)) {
dump_timestamp(ppi, "servo:t1", s->t1);
......@@ -414,11 +415,12 @@ int wr_servo_update(struct pp_instance *ppi)
ts_offset = ts_add(ts_sub(s->t1, s->t2), ts_add(ppi->p2p_cField, picos_to_ts(delay_ms_fix)));
//pp_printf("port %d ts_offset = %d:%d:%d\n",ppi->port_idx, ts_offset.seconds, ts_offset.nanoseconds, ts_offset.phase);
pp_printf("port %d cField = %d:%d:%d\n",ppi->port_idx, ppi->p2p_cField.seconds, ppi->p2p_cField.nanoseconds, ppi->p2p_cField.phase);
//if((ts_offset.seconds<0) || (ts_offset.nanoseconds == 999999999)) {
//pp_printf("ts_offset %d:%d\n", ts_offset.seconds, ts_offset.nanoseconds );
//pp_printf("port %d cField = %d:%d:%d\n",ppi->port_idx, ppi->p2p_cField.seconds, ppi->p2p_cField.nanoseconds, ppi->p2p_cField.phase);
pp_diag(ppi, servo, 1, "port %d cField = %d:%d:%d\n", ppi->port_idx, ppi->p2p_cField.seconds, ppi->p2p_cField.nanoseconds, ppi->p2p_cField.phase);
if((ts_offset.seconds<0) || (ts_offset.nanoseconds == 999999999)) {
pp_diag(ppi, servo, "ts_offset %d:%d\n", ts_offset.seconds, ts_offset.nanoseconds);
//return -1;
//}
}
ts_offset_hw = ts_hardwarize(ts_offset, s->clock_period_ps);
pp_diag(ppi, servo, 1, "offset: %d [hw:%d]\n",
(ts_offset.phase + ts_offset.nanoseconds * 1000),
......@@ -575,7 +577,7 @@ int wr_servo_update(struct pp_instance *ppi)
s->missed_iters++;
}
if (s->missed_iters >= 10)
if (s->missed_iters >= 5) // <- orig. 10
s->state = WR_SYNC_TAI;
break;
}
......@@ -589,8 +591,8 @@ int wr_servo_update(struct pp_instance *ppi)
cur_servo_state.cur_skew = s->delta_ms - s->delta_ms_prev;
}
if (ts_offset_hw.seconds !=0 || ts_offset_hw.nanoseconds != 0)
s->state = WR_SYNC_TAI;
//if (ts_offset_hw.seconds !=0 || ts_offset_hw.nanoseconds != 0) // jlgr
//s->state = WR_SYNC_TAI;
if(tracking_enabled) {
// just follow the changes of deltaMS
......
......@@ -17,11 +17,11 @@ int pp_listening(struct pp_instance *ppi, unsigned char *pkt, int plen)
struct wr_dsport *wrp_hsr1 = WR_DSPOR(INST(ppi->glbs, 1));
struct wr_dsport *wrp_hsr2 = WR_DSPOR(INST(ppi->glbs, 2));
if(wrp_hsr0->wrModeOn || wrp_hsr1->wrModeOn || wrp_hsr2->wrModeOn) {
ppi->master_only = 1;
ppi->slave_only = 0;
ppi->backup_only = 0;
}
//if(wrp_hsr0->wrModeOn || wrp_hsr1->wrModeOn || wrp_hsr2->wrModeOn) {
//ppi->master_only = 1;
//ppi->slave_only = 0;
//ppi->backup_only = 0;
//}
if (pp_hooks.listening)
e = pp_hooks.listening(ppi, pkt, plen);
......
......@@ -19,7 +19,15 @@ int pp_pmaster(struct pp_instance *ppi, unsigned char *pkt, int plen)
struct wr_dsport *wrp_hsr1 = WR_DSPOR(INST(ppi->glbs, 1));
struct wr_dsport *wrp_hsr2 = WR_DSPOR(INST(ppi->glbs, 2));
if((wrp_hsr0->wrModeOn || wrp_hsr1->wrModeOn || wrp_hsr2->wrModeOn)
/* for HSR nodes.
* If we are a HSR-PTP-Redbox we are:
* **** PORT **** MODE ****
* **** 0 **** slave ****
* **** 1 **** master ****
* **** 2 **** master ****
* FIXME: Same code for HSR-PTP-Node and HSR-PTP-Redbox
* /
/*if((wrp_hsr0->wrModeOn || wrp_hsr1->wrModeOn || wrp_hsr2->wrModeOn)
&& ppi->is_HSR){
ppi->master_only = 0;
ppi->slave_only = 0;
......@@ -27,7 +35,8 @@ int pp_pmaster(struct pp_instance *ppi, unsigned char *pkt, int plen)
ppi->slave_prio = 0;
ppi->next_state = PPS_SLAVE;
return 0;
}
}*/
ppi->next_state = PPS_MASTER; // FIXME: same as above...
/* TO BE CHECK */
if (!ppi->is_HSR && ppi->master_only){
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment