/*
 * Copyright (c) 2017 Intel Corporation.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/**
 * @file
 * @brief GPTP Media Dependent interface for full duplex and point to point
 *
 * This is not to be included by the application.
 */

#ifndef __GPTP_MD_H
#define __GPTP_MD_H

#include <zephyr/net/gptp.h>

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief Media Dependent Sync Information.
 *
 * This structure applies for MDSyncReceive as well as MDSyncSend.
 */
struct gptp_md_sync_info {
	/* Time of the current grandmaster compared to the previous. */
	struct gptp_scaled_ns last_gm_phase_change;

	/** Most recent preciseOriginTimestamp from the PortSyncSync. */
	struct net_ptp_time precise_orig_ts;

	/** Most recent followupCorrectionField from the PortSyncSync. */
	int64_t follow_up_correction_field;

	/** Most recent upstreamTxTime from the PortSyncSync. */
	uint64_t upstream_tx_time;

	/* Frequency of the current grandmaster compared to the previous. */
	double last_gm_freq_change;

	/** Most recent rateRatio from the PortSyncSync. */
	double rate_ratio;

	/** PortIdentity of this port. */
	struct gptp_port_identity src_port_id;

	/* Time Base Indicator of the current Grand Master. */
	uint16_t gm_time_base_indicator;

	/** Current Log Sync Interval for this port. */
	int8_t log_msg_interval;
};

/**
 * @brief Initialize all Media Dependent State Machines.
 */
void gptp_md_init_state_machine(void);

/**
 * @brief Run all Media Dependent State Machines.
 *
 * @param port Number of the port the State Machines needs to be run on.
 */
void gptp_md_state_machines(int port);

#ifdef __cplusplus
}
#endif

#endif /* __GPTP_MD_H */
