2024-03-27 23:06:47 +08:00
|
|
|
/*
|
|
|
|
* 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 <stdbool.h>
|
|
|
|
|
|
|
|
#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);
|
|
|
|
|
2024-03-27 23:36:02 +08:00
|
|
|
/**
|
|
|
|
* @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);
|
|
|
|
|
2024-03-27 23:06:47 +08:00
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @}
|
|
|
|
*/
|
|
|
|
|
|
|
|
#endif /* ZEPHYR_INCLUDE_PTP_STATE_MACHINE_H_ */
|