blob: 9a2d8feb2582677cfdebb39ec8c286c152c136a2 [file] [log] [blame]
/*
* 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);
/**
* @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_ */