/* * Copyright (c) 2024 BayLibre SAS * * SPDX-License-Identifier: Apache-2.0 */ /** * @file state_machine.h * @brief Function and data structures used for state machine of the PTP Port. * * References are to version 2019 of IEEE 1588, ("PTP") */ #ifndef ZEPHYR_INCLUDE_PTP_STATE_MACHINE_H_ #define ZEPHYR_INCLUDE_PTP_STATE_MACHINE_H_ #include #ifdef __cplusplus extern "C" { #endif /** * @brief Enumeration of PTP Port States. */ enum ptp_port_state { PTP_PS_INITIALIZING = 1, PTP_PS_FAULTY, PTP_PS_DISABLED, PTP_PS_LISTENING, PTP_PS_PRE_TIME_TRANSMITTER, PTP_PS_TIME_TRANSMITTER, PTP_PS_GRAND_MASTER, PTP_PS_PASSIVE, PTP_PS_UNCALIBRATED, PTP_PS_TIME_RECEIVER, }; /** * @brief Enumeration of PTP events. */ enum ptp_port_event { PTP_EVT_NONE, PTP_EVT_POWERUP, PTP_EVT_INITIALIZE, PTP_EVT_INIT_COMPLETE, PTP_EVT_FAULT_DETECTED, PTP_EVT_FAULT_CLEARED, PTP_EVT_STATE_DECISION, PTP_EVT_ANNOUNCE_RECEIPT_TIMEOUT_EXPIRES, PTP_EVT_QUALIFICATION_TIMEOUT_EXPIRES, PTP_EVT_DESIGNATED_ENABLED, PTP_EVT_DESIGNATED_DISABLED, PTP_EVT_TIME_TRANSMITTER_CLOCK_SELECTED, PTP_EVT_SYNCHRONIZATION_FAULT, PTP_EVT_RS_TIME_TRANSMITTER, PTP_EVT_RS_GRAND_MASTER, PTP_EVT_RS_TIME_RECEIVER, PTP_EVT_RS_PASSIVE, }; /** * @brief Finite State Machine for PTP Port. * * @param[in] state A current state of the Port * @param[in] event An event that occurred for the port * @param[in] tt_diff True if Time Transmitter Clock has changed * * @return A new PTP Port state */ enum ptp_port_state ptp_state_machine(enum ptp_port_state state, enum ptp_port_event event, bool tt_diff); /** * @brief Finite State Machine for PTP Port that is configured as TimeReceiver-Only instance. * * @param[in] state A current state of the Port * @param[in] event An event that occurred for the port * @param[in] tt_diff True if Time Transmitter Clock has changed * * @return A new PTP Port state */ enum ptp_port_state ptp_tr_state_machine(enum ptp_port_state state, enum ptp_port_event event, bool tt_diff); #ifdef __cplusplus } #endif /** * @} */ #endif /* ZEPHYR_INCLUDE_PTP_STATE_MACHINE_H_ */