| /* |
| * 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_ */ |