Commit 47d07f02 authored by Jean-Claude BAU's avatar Jean-Claude BAU

BMCA: New evaluation of ptpTimescale, frequencyTraceable...

The fields in timePropertiesDS are been reevaluated. The file bmc.c
contains a table showing the different use cases.
parent e8e31b38
...@@ -438,8 +438,8 @@ int main(int argc, char **argv) ...@@ -438,8 +438,8 @@ int main(int argc, char **argv)
*/ */
enablePPS=(WRS_ARCH_G(ppg)->timingModeLockingState== WRH_TM_LOCKING_STATE_LOCKED && enablePPS=(WRS_ARCH_G(ppg)->timingModeLockingState== WRH_TM_LOCKING_STATE_LOCKED &&
ppg->defaultDS->clockQuality.clockClass == PP_PTP_CLASS_GM_LOCKED) || ppg->defaultDS->clockQuality.clockClass == PP_PTP_CLASS_GM_LOCKED) ||
( ppg->defaultDS->clockQuality.clockClass == PP_PTP_CLASS_GM_UNLOCKED || ppg->defaultDS->clockQuality.clockClass == PP_PTP_CLASS_GM_UNLOCKED_A ||
GOPTS(ppg)->forcePpsGen); GOPTS(ppg)->forcePpsGen;
TOPS(ppi)->enable_timing_output(ppg,enablePPS); TOPS(ppi)->enable_timing_output(ppg,enablePPS);
} }
......
...@@ -75,14 +75,17 @@ ...@@ -75,14 +75,17 @@
/* Clock classes (pag 55, PTP-2008). See ppsi-manual for an explanation */ /* Clock classes (pag 55, PTP-2008). See ppsi-manual for an explanation */
#define PP_MIN_CLOCK_CLASS 0 #define PP_MIN_CLOCK_CLASS 0
#define PP_MAX_CLOCK_CLASS 255 #define PP_MAX_CLOCK_CLASS 255
#define PP_MAX_VALUE_GM 127
#define PP_CLASS_SLAVE_ONLY 255 #define PP_CLASS_SLAVE_ONLY 255
#define PP_CLASS_DEFAULT 248 #define PP_CLASS_DEFAULT 248
#define PP_PTP_CLASS_GM_LOCKED 6 #define PP_PTP_CLASS_GM_LOCKED 6
#define PP_PTP_CLASS_GM_HOLDOVER 7 #define PP_PTP_CLASS_GM_HOLDOVER 7
#define PP_PTP_CLASS_GM_UNLOCKED 52 #define PP_PTP_CLASS_GM_UNLOCKED_A 52 /* Path A */
#define PP_PTP_CLASS_GM_UNLOCKED_B 187 /* Path B */
#define PP_ARB_CLASS_GM_LOCKED 13 #define PP_ARB_CLASS_GM_LOCKED 13
#define PP_ARB_CLASS_GM_HOLDOVER 14 #define PP_ARB_CLASS_GM_HOLDOVER 14
#define PP_ARB_CLASS_GM_UNLOCKED 58 #define PP_ARB_CLASS_GM_UNLOCKED_A 58 /* Path A */
#define PP_ARB_CLASS_GM_UNLOCKED_B 193 /* Path B */
#define PP_MIN_CLOCK_ACCURACY 0 #define PP_MIN_CLOCK_ACCURACY 0
#define PP_MAX_CLOCK_ACCURACY 255 #define PP_MAX_CLOCK_ACCURACY 255
......
...@@ -27,10 +27,9 @@ void bmc_m1(struct pp_instance *ppi) ...@@ -27,10 +27,9 @@ void bmc_m1(struct pp_instance *ppi)
parentDS_t *parent = DSPAR(ppi); parentDS_t *parent = DSPAR(ppi);
defaultDS_t *defds = DSDEF(ppi); defaultDS_t *defds = DSDEF(ppi);
timePropertiesDS_t *prop = DSPRO(ppi); timePropertiesDS_t *prop = DSPRO(ppi);
UInteger8 clockClass;
int ret = 0; int ret = 0;
int offset, leap59, leap61; int offset, leap59, leap61;
Boolean ptpTimescale;
Enumeration8 timeSource;
/* Current data set update */ /* Current data set update */
DSCUR(ppi)->stepsRemoved = DSCUR(ppi)->stepsRemoved =
...@@ -50,35 +49,35 @@ void bmc_m1(struct pp_instance *ppi) ...@@ -50,35 +49,35 @@ void bmc_m1(struct pp_instance *ppi)
parent->grandmasterPriority1 = defds->priority1; parent->grandmasterPriority1 = defds->priority1;
parent->grandmasterPriority2 = defds->priority2; parent->grandmasterPriority2 = defds->priority2;
/* FIXME: if we don't know better we stay with theses values*/ /**
ptpTimescale=TRUE; /* Default value */ * This table describes how the time properties are set :
timeSource=INTERNAL_OSCILLATOR; /* Default value */ *
* field\clockClass | GM_LOCKED | GM_HOLDOVER | GM_UNLOCKED_A| DEFAULT
* ---------------------------------------------------------------------------
* ptpTimescale | TRUE | TRUE | TRUE | FALSE
* timeSource | GPS | INTERNAL_OSC | INTERNAL_OSC | INTERNAL_OSC
* frequencyTraceable | TRUE | TRUE | FALSE | FALSE
* timeTraceable | TRUE | TRUE | FALSE | FALSE
*/
clockClass=defds->clockQuality.clockClass;
prop->timeSource= clockClass==PP_PTP_CLASS_GM_LOCKED ?
GPS : INTERNAL_OSCILLATOR;
prop->ptpTimescale=
((clockClass== PP_PTP_CLASS_GM_LOCKED) ||
(clockClass== PP_PTP_CLASS_GM_HOLDOVER) ||
(clockClass== PP_PTP_CLASS_GM_UNLOCKED_A))
? TRUE : FALSE;
prop->frequencyTraceable= prop->frequencyTraceable=
prop->timeTraceable=FALSE; /* Default value */ prop->timeTraceable=
((clockClass== PP_PTP_CLASS_GM_LOCKED) ||
switch (defds->clockQuality.clockClass) { (clockClass== PP_PTP_CLASS_GM_HOLDOVER))
case PP_PTP_CLASS_GM_LOCKED: ? TRUE : FALSE;
case PP_PTP_CLASS_GM_HOLDOVER:
timeSource = GPS;
prop->frequencyTraceable=
prop->timeTraceable=TRUE;
break;
case PP_ARB_CLASS_GM_LOCKED:
case PP_ARB_CLASS_GM_HOLDOVER:
timeSource = GPS;
/* No break here */
case PP_ARB_CLASS_GM_UNLOCKED:
ptpTimescale= FALSE;
break;
case PP_PTP_CLASS_GM_UNLOCKED :
/* Take default values */
break;
}
prop->timeSource=timeSource;
prop->ptpTimescale=ptpTimescale;
if (ptpTimescale) { /* Set currentUtcOffset and currentUtcOffsetValid
* If they cannot be set properly, frequencyTraceable & timeTraceable are cleared
*/
if (prop->ptpTimescale) {
ret = TOPS(ppi)->get_utc_offset(ppi, &offset, &leap59, &leap61); ret = TOPS(ppi)->get_utc_offset(ppi, &offset, &leap59, &leap61);
if (ret) { if (ret) {
offset = PP_DEFAULT_UTC_OFFSET; offset = PP_DEFAULT_UTC_OFFSET;
...@@ -96,7 +95,8 @@ void bmc_m1(struct pp_instance *ppi) ...@@ -96,7 +95,8 @@ void bmc_m1(struct pp_instance *ppi)
if (ret) if (ret)
{ {
prop->timeTraceable = FALSE; /* Clear it if it was set */ prop->frequencyTraceable=
prop->timeTraceable = FALSE; /* Clear them if they were set */
prop->currentUtcOffsetValid = FALSE; prop->currentUtcOffsetValid = FALSE;
prop->leap59 = FALSE; prop->leap59 = FALSE;
prop->leap61 = FALSE; prop->leap61 = FALSE;
......
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