Commit 68222d7e authored by Jean-Claude BAU's avatar Jean-Claude BAU Committed by Adam Wujek

HA - Servo DS moved on each pp_instance

Conflicts:
	userspace/ppsi
	userspace/tools/wrs_dump_shmem.c
parent 8044c8cc
......@@ -4,7 +4,8 @@
#include <stdio.h>
#include <stdlib.h>
#define PTPDEXP_COMMAND_TRACKING 1
#define PTPDEXP_COMMAND_WR_TRACKING 1
#define PTPDEXP_COMMAND_L1SYNC_TRACKING 2
extern int ptpdexp_cmd(int cmd, int value);
......
Subproject commit c0a1b72beea9ed5ad9a9f16856aa3900ba9fa5c6
Subproject commit f7c9ea6583b60b726a9f33251de7fb8a969b809d
......@@ -10,7 +10,8 @@ int hal_nports_local;
/* PPSI */
struct wrs_shm_head *ppsi_head;
static struct pp_globals *ppg;
struct wr_servo_state *ppsi_servo;
struct pp_servo *ppsi_servo;
struct wr_servo_state *ppsi_wr_servo;
struct pp_instance *ppsi_ppi;
int *ppsi_ppi_nlinks;
......@@ -111,11 +112,13 @@ static int init_shm_ppsi(void)
}
ppg = (void *)ppsi_head + ppsi_head->data_off;
ppsi_servo = wrs_shm_follow(ppsi_head, ppg->global_ext_data);
if (!ppsi_servo) {
snmp_log(LOG_ERR, "Cannot follow ppsi_servo in shmem.\n");
return 4;
}
/* TODO JCB Servo is part of an instance now */
ppsi_servo=NULL;
// ppsi_servo = wrs_shm_follow(ppsi_head, ppg->servo);
// if (!ppsi_servo) {
// snmp_log(LOG_ERR, "Cannot follow ppsi_servo in shmem.\n");
// return 4;
// }
ppsi_ppi = wrs_shm_follow(ppsi_head, ppg->pp_instances);
if (!ppsi_ppi) {
......
......@@ -15,7 +15,7 @@ extern int hal_nports_local;
/* PPSI */
extern struct wrs_shm_head *ppsi_head;
extern struct wr_servo_state *ppsi_servo;
extern struct pp_servo *ppsi_servo;
extern struct pp_instance *ppsi_ppi;
extern int *ppsi_ppi_nlinks;
......
......@@ -83,34 +83,32 @@ time_t wrsPtpDataTable_data_fill(unsigned int *n_rows)
while (1) {
ii = wrs_shm_seqbegin(ppsi_head);
strncpy(wrsPtpDataTable_array[0].wrsPtpServoState,
ppsi_servo->servo_state_name,
sizeof(ppsi_servo->servo_state_name));
wrsPtpDataTable_array[0].wrsPtpServoStateN = ppsi_servo->state;
/* Keep value 0 for Not available */
wrsPtpDataTable_array[0].wrsPtpPhaseTracking =
1 + ppsi_servo->tracking_enabled;
wrsPtpDataTable_array[0].wrsPtpRTT = ppsi_servo->picos_mu;
wrsPtpDataTable_array[0].wrsPtpClockOffsetPs =
ppsi_servo->offset;
wrsPtpDataTable_array[0].wrsPtpClockOffsetPsHR =
int_saturate(ppsi_servo->offset);
wrsPtpDataTable_array[0].wrsPtpSkew =
int_saturate(ppsi_servo->skew);
wrsPtpDataTable_array[0].wrsPtpLinkLength =
(uint32_t)(ppsi_servo->delta_ms/1e12 * 300e6 / 1.55);
wrsPtpDataTable_array[0].wrsPtpServoUpdates =
ppsi_servo->update_count;
wrsPtpDataTable_array[0].wrsPtpDeltaTxM = ppsi_servo->delta_tx_m;
wrsPtpDataTable_array[0].wrsPtpDeltaRxM = ppsi_servo->delta_rx_m;
wrsPtpDataTable_array[0].wrsPtpDeltaTxS = ppsi_servo->delta_tx_s;
wrsPtpDataTable_array[0].wrsPtpDeltaRxS = ppsi_servo->delta_rx_s;
wrsPtpDataTable_array[0].wrsPtpServoStateErrCnt = ppsi_servo->n_err_state;
wrsPtpDataTable_array[0].wrsPtpClockOffsetErrCnt = ppsi_servo->n_err_offset;
wrsPtpDataTable_array[0].wrsPtpRTTErrCnt = ppsi_servo->n_err_delta_rtt;
wrsPtpDataTable_array[0].wrsPtpServoUpdateTime =
ppsi_servo->update_time.secs * 1000 * 1000 * 1000
+ (ppsi_servo->update_time.scaled_nsecs >> 16);
//TODO JCB : Search servo instance to display
// strncpy(wrsPtpDataTable_array[0].wrsPtpServoState,
// ppsi_servo->servo_state_name,
// sizeof(ppsi_servo->servo_state_name));
// wrsPtpDataTable_array[0].wrsPtpServoStateN = ppsi_servo->state;
// /* Keep value 0 for Not available */
// wrsPtpDataTable_array[0].wrsPtpPhaseTracking = 0; //JCB TODO 1 + ppsi_servo->tracking_enabled;
// wrsPtpDataTable_array[0].wrsPtpRTT = 0; //JCB TODO ppsi_servo->picos_mu;
// wrsPtpDataTable_array[0].wrsPtpClockOffsetPs = pp_time_to_picos(&ppsi_servo->offsetFromMaster);
// wrsPtpDataTable_array[0].wrsPtpClockOffsetPsHR =
// int_saturate(wrsPtpDataTable_array[0].wrsPtpClockOffsetPs);
// wrsPtpDataTable_array[0].wrsPtpSkew = 0; //JCB TODO int_saturate(ppsi_servo->skew);
// wrsPtpDataTable_array[0].wrsPtpLinkLength =
// (uint32_t)(pp_time_to_picos(&ppsi_servo->delayMS)/1e12 * 300e6 / 1.55);
// wrsPtpDataTable_array[0].wrsPtpServoUpdates =
// ppsi_servo->update_count;
// wrsPtpDataTable_array[0].wrsPtpDeltaTxM = 0;//JCB TODO ppsi_servo->delta_txm_ps;
// wrsPtpDataTable_array[0].wrsPtpDeltaRxM = 0;//JCB TODO ppsi_servo->delta_rxm_ps;
// wrsPtpDataTable_array[0].wrsPtpDeltaTxS = 0;//JCB TODO ppsi_servo->delta_txs_ps;
// wrsPtpDataTable_array[0].wrsPtpDeltaRxS = 0;//JCB TODO ppsi_servo->delta_rxs_ps;
// wrsPtpDataTable_array[0].wrsPtpServoStateErrCnt = 0;//JCB TODO ppsi_servo->n_err_state;
// wrsPtpDataTable_array[0].wrsPtpClockOffsetErrCnt = 0;//JCB TODO ppsi_servo->n_err_offset;
// wrsPtpDataTable_array[0].wrsPtpRTTErrCnt = 0;//JCB TODO ppsi_servo->n_err_delta_rtt;
// wrsPtpDataTable_array[0].wrsPtpServoUpdateTime = 0;
// //JCB TODO ppsi_servo->update_time.secs * 1000 * 1000 * 1000
// //JCB TODO + (ppsi_servo->update_time.scaled_nsecs >> 16);
retries++;
if (retries > 100) {
snmp_log(LOG_ERR, "%s: too many retries to read PPSI\n",
......
......@@ -307,7 +307,7 @@ int read_servo(void){
struct pp_servo *ppsi_servo;
/* Copy common data */
if ( !(ppsi_servo = wrs_shm_follow(ppsi_head, ppg->servo)) )
if ( !(ppsi_servo = wrs_shm_follow(ppsi_head, ppi->servo)) )
break;
memcpy(&servo->servo_snapshot, ppsi_servo, sizeof(struct pp_servo));
......
......@@ -43,7 +43,6 @@ typedef struct {
} inst_servo_t ;
static inst_servo_t servo;
struct pp_servo *ppsi_servo;
extern struct hal_shmem_header *hal_shmem;
extern struct wrs_shm_head *hal_shmem_hdr;
......@@ -992,6 +991,12 @@ static int read_servo(void){
/* we are only interested on instances in SLAVE state */
if (ppi->state == PPS_SLAVE ) {
/* ppsi-servo points to instance servo data */
struct pp_servo *ppsi_servo = wrs_shm_follow(ppsi_head, ppi->servo);
if (!ppsi_servo) {
return -1; /* Cannot access servo data */
}
while (1) {
unsigned ii = wrs_shm_seqbegin(ppsi_head);
unsigned retries = 0;
......@@ -1017,7 +1022,7 @@ static int try_open_ppsi_shmem(void)
int ret;
static int open_error;
if (ppsi_servo && ppsi_instances) {
if (ppsi_instances) {
/* shmem already opened */
return 1;
}
......@@ -1050,13 +1055,6 @@ static int try_open_ppsi_shmem(void)
}
ppg = (void *)ppsi_head + ppsi_head->data_off;
/* ppsi-servo points to the common servo data */
ppsi_servo = wrs_shm_follow(ppsi_head, ppg->servo);
if (!ppsi_servo) {
pr_error("Cannot follow ppsi_servo in shmem.\n");
return 0;
}
ppsi_instances = wrs_shm_follow(ppsi_head, ppg->pp_instances);
if (!ppsi_instances) {
pr_error("Cannot follow pp_instances in shmem.\n");
......
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