229 lines
6.2 KiB
C
229 lines
6.2 KiB
C
/*
|
|
* Copyright (c) 2024 BayLibre SAS
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
/**
|
|
* @file ds.h
|
|
* @brief Datasets types.
|
|
*
|
|
* References are to version 2019 of IEEE 1588, ("PTP")
|
|
*/
|
|
|
|
#ifndef ZEPHYR_INCLUDE_PTP_DS_H_
|
|
#define ZEPHYR_INCLUDE_PTP_DS_H_
|
|
|
|
#include <zephyr/net/ptp_time.h>
|
|
|
|
#include "ddt.h"
|
|
#include "state_machine.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* @brief PTP Default Dataset.
|
|
* @note 8.2.1 - defaultDS data set member specification
|
|
*/
|
|
struct ptp_default_ds {
|
|
/* static */
|
|
/** Clock ID */
|
|
ptp_clk_id clk_id;
|
|
/** Indicates number of ptp ports on the PTP Instance. */
|
|
uint16_t n_ports;
|
|
/* dynamic */
|
|
/** Quality of a clock. */
|
|
struct ptp_clk_quality clk_quality;
|
|
/** Parameter used in the execution BTCA. */
|
|
uint8_t priority1;
|
|
/** Parameter used in the execution BTCA. */
|
|
uint8_t priority2;
|
|
/** ID number of the instance in a domain. */
|
|
uint8_t domain;
|
|
/** sdoId attribute. */
|
|
uint16_t sdo_id: 12;
|
|
/** Flag indicating timeReceiver mode. */
|
|
bool time_receiver_only;
|
|
/* optional */
|
|
/** Current value of the PTP Instance Time. */
|
|
struct net_ptp_time current_time;
|
|
/** Enable flag. */
|
|
bool enable;
|
|
/** Flag indication if external port configuration option is enabled. */
|
|
bool external_port_conf_en;
|
|
/** Maximum value of steps removed of an Announce messages to be considered in BTCA. */
|
|
uint8_t max_steps_rm;
|
|
/** PTP Instance type. */
|
|
uint8_t type;
|
|
};
|
|
|
|
/**
|
|
* @brief PTP Current Dataset.
|
|
* @note 8.2.2 - currentDS data set member specification
|
|
*/
|
|
struct ptp_current_ds {
|
|
/** Number of PTP Communication Paths traversed between PTP Instance and the GM. */
|
|
uint16_t steps_rm;
|
|
/** Current value of time difference between a Transmitter and Receiver.
|
|
*
|
|
* @note it is computed as <time on the Receiver> - <time on the Transmitter>
|
|
*/
|
|
ptp_timeinterval offset_from_tt;
|
|
/** Mean propagation time. */
|
|
ptp_timeinterval mean_delay;
|
|
/* optional */
|
|
/** Flag inticating if port is synchronized. */
|
|
bool sync_uncertain;
|
|
};
|
|
|
|
/**
|
|
* @brief PTP Parent Dataset.
|
|
* @note 8.2.3 - parentDS data set member specification
|
|
*/
|
|
struct ptp_parent_ds {
|
|
/** PTP Port's ID */
|
|
struct ptp_port_id port_id;
|
|
/** Flag indication if the Instance has a Port in Receiver state or has estimates
|
|
* of obsreved_parent_offset_scaled_log_variance or obsreved_parent_clk_phase_change_rate.
|
|
*/
|
|
bool stats;
|
|
/** Estimate of the variance of the phase offset. */
|
|
uint16_t obsreved_parent_offset_scaled_log_variance;
|
|
/** Estimate of the phase change rate. */
|
|
int32_t obsreved_parent_clk_phase_change_rate;
|
|
/** Grandmaster's ID. */
|
|
ptp_clk_id gm_id;
|
|
/** Grandmaster's Clock quality. */
|
|
struct ptp_clk_quality gm_clk_quality;
|
|
/** Value of Grandmaster's priority1 attribute. */
|
|
uint8_t gm_priority1;
|
|
/** Value of Grandmaster's priority2 attribute. */
|
|
uint8_t gm_priority2;
|
|
/** Address of the PTP Port issuing sync messages used to synchronize this PTP Instance. */
|
|
struct ptp_port_addr protocol_addr;
|
|
/** Flag inticating use of sync_uncertain flag in Announce message. */
|
|
bool sync_uncertain;
|
|
};
|
|
|
|
/**
|
|
* @brief PTP Time Properties Dataset.
|
|
* @note 8.2.4 - timePropertiesDS data set member specification
|
|
*/
|
|
struct ptp_time_prop_ds {
|
|
/** Value of dLS received from Grandmaster */
|
|
int16_t current_utc_offset;
|
|
/** Flags used for operation of time received from Grandmaster PTP Instance. */
|
|
uint8_t flags;
|
|
/** Source of time used by Grandmaster PTP Instance. */
|
|
uint8_t time_src;
|
|
};
|
|
|
|
/**
|
|
* @brief PTP Non-volatile Storage Dataset.
|
|
* @note 8.2.7 - nonvolatileStorageDS
|
|
*/
|
|
struct ptp_nvs_ds {
|
|
/** Reset non-volatile storage. */
|
|
bool reset;
|
|
/** Save current values of applicable dynamic or configurable data set members
|
|
* to non-volatile storage.
|
|
*/
|
|
bool save;
|
|
};
|
|
|
|
/**
|
|
* @brief Enumeration for types of delay mechanisms for PTP Clock.
|
|
*/
|
|
enum ptp_delay_mechanism {
|
|
PTP_DM_E2E = 1,
|
|
PTP_DM_P2P,
|
|
PTP_DM_COMMON_P2P,
|
|
PTP_DM_SPECIAL,
|
|
PTP_DM_NO_MECHANISM = 0xFE
|
|
};
|
|
|
|
/**
|
|
* @brief PTP Port Dataset
|
|
* @note 8.2.15 - portDS data set member specification
|
|
*/
|
|
struct ptp_port_ds {
|
|
/* static */
|
|
/** PTP Port's ID. */
|
|
struct ptp_port_id id;
|
|
/* dynamic */
|
|
/** State of a PTP Port. */
|
|
enum ptp_port_state state;
|
|
/** Logarithm to the base 2 minimal Delay_Req interval in nanoseconds. */
|
|
int8_t log_min_delay_req_interval;
|
|
/** Current one-way propagation delay. */
|
|
ptp_timeinterval mean_link_delay;
|
|
/* configurable */
|
|
/** Logarithm to the base 2 Announce interval in nanoseconds. */
|
|
int8_t log_announce_interval;
|
|
/** Number of Announce intervals before timeout. */
|
|
uint8_t announce_receipt_timeout;
|
|
/** Logarithm to the base 2 Sync interval in nanoseconds. */
|
|
int8_t log_sync_interval;
|
|
/** Delay mechanism used by the PTP Port. */
|
|
enum ptp_delay_mechanism delay_mechanism;
|
|
/** Logarithm to the base 2 minimal Pdelay_Req interval in nanoseconds. */
|
|
int8_t log_min_pdelay_req_interval;
|
|
/** Version of supported PTP standard. */
|
|
uint8_t version;
|
|
/** Value of delay asymmetry. */
|
|
ptp_timeinterval delay_asymmetry;
|
|
/* optional */
|
|
/** Enable flag. */
|
|
bool enable;
|
|
/** Flag setting PTP Port in timeTransmitter mode. */
|
|
bool time_transmitter_only;
|
|
};
|
|
|
|
/**
|
|
* @brief PTP Description Port Dataset.
|
|
* @note 8.2.18 - descriptionPortDS
|
|
*/
|
|
struct ptp_dest_port_ds {
|
|
/** PTP profile identifier for the PTP Port. */
|
|
union {
|
|
struct {
|
|
uint8_t byte[6];
|
|
};
|
|
uint64_t id: 48;
|
|
} profile_id;
|
|
/** Protocol address of the PTP Port */
|
|
struct ptp_port_addr protocol_addr;
|
|
};
|
|
|
|
/**
|
|
* @brief Generic Data set type used for dataset comparison algorithm.
|
|
*/
|
|
struct ptp_dataset {
|
|
/** Parameter used in the execution BTCA. */
|
|
uint8_t priority1;
|
|
/** PTP Clock's ID. */
|
|
ptp_clk_id clk_id;
|
|
/** PTP Clock's quality. */
|
|
struct ptp_clk_quality clk_quality;
|
|
/** Parameter used in the execution BTCA. */
|
|
uint8_t priority2;
|
|
/** Number of PTP Communication Paths traversed between PTP Instance and the GM. */
|
|
uint16_t steps_rm;
|
|
/** timeTransmitter ID. */
|
|
struct ptp_port_id sender;
|
|
/** timeReceiver ID. */
|
|
struct ptp_port_id receiver;
|
|
};
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
#endif /* ZEPHYR_INCLUDE_PTP_DS_H_ */
|