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

/**
 * @file
 * @brief Public functions for the Precision Time Protocol time specification.
 *
 */

#ifndef ZEPHYR_INCLUDE_NET_PTP_TIME_H_
#define ZEPHYR_INCLUDE_NET_PTP_TIME_H_

/**
 * @brief Precision Time Protocol time specification
 * @defgroup ptp_time PTP time
 * @ingroup networking
 * @{
 */

#include <net/net_core.h>

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief Precision Time Protocol Timestamp format.
 *
 * This structure represents a timestamp according
 * to the Precision Time Protocol standard.
 *
 * Seconds are encoded as a 48 bits unsigned integer.
 * Nanoseconds are encoded as a 32 bits unsigned integer.
 */
struct net_ptp_time {
	/** Seconds encoded on 48 bits. */
	union {
		struct {
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
			u32_t low;
			u16_t high;
			u16_t unused;
#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
			u16_t unused;
			u16_t high;
			u32_t low;
#else
#error "Unknown byte order"
#endif
		} _sec;
		u64_t second;
	};

	/** Nanoseconds. */
	u32_t nanosecond;
};

#ifdef __cplusplus
}
#endif

/**
 * @brief Precision Time Protocol Extended Timestamp format.
 *
 * This structure represents an extended timestamp according
 * to the Precision Time Protocol standard.
 *
 * Seconds are encoded as 48 bits unsigned integer.
 * Fractional nanoseconds are encoded as 48 bits, their unit
 * is 2*(-16) ns.
 */
struct net_ptp_extended_time {
	/** Seconds encoded on 48 bits. */
	union {
		struct {
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
			u32_t low;
			u16_t high;
			u16_t unused;
#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
			u16_t unused;
			u16_t high;
			u32_t low;
#else
#error "Unknown byte order"
#endif
		} _sec;
		u64_t second;
	};

	/** Fractional nanoseconds on 48 bits. */
	union {
		struct {
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
			u32_t low;
			u16_t high;
			u16_t unused;
#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
			u16_t unused;
			u16_t high;
			u32_t low;
#else
#error "Unknown byte order"
#endif
		} _fns;
		u64_t fract_nsecond;
	};
} __packed;

/**
 * @}
 */

#endif /* ZEPHYR_INCLUDE_NET_PTP_TIME_H_ */
