139 lines
2.8 KiB
C
139 lines
2.8 KiB
C
/*
|
|
* Copyright (c) 2024 BayLibre SAS
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
/**
|
|
* @file ddt.h
|
|
* @brief Derived data types.
|
|
*
|
|
* @note Based on IEEE 1588:2019 section 5.3 - Derived data types
|
|
*/
|
|
|
|
#ifndef ZEPHYR_INCLUDE_PTP_DDT_H_
|
|
#define ZEPHYR_INCLUDE_PTP_DDT_H_
|
|
|
|
#include <stdbool.h>
|
|
#include <stdint.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* @brief PTP time interval in nanoseconds.
|
|
* @note 5.3.2 - time interval expressed in nanoseconds multiplied by 2^16
|
|
*/
|
|
typedef int64_t ptp_timeinterval;
|
|
|
|
/**
|
|
* @brief Structure for storing PTP timestamp used in PTP Protocol.
|
|
* @note 5.3.3 - timestamp with respect to epoch
|
|
*/
|
|
struct ptp_timestamp {
|
|
/** Seconds encoded on 48 bits - high 16 bits. */
|
|
uint16_t seconds_high;
|
|
/** Seconds encoded on 48 bits - low 32 bits. */
|
|
uint32_t seconds_low;
|
|
/** Nanoseconds. */
|
|
uint32_t nanoseconds;
|
|
} __packed;
|
|
|
|
/**
|
|
* @brief PTP Clock Identity.
|
|
* @note 5.3.4 - identifies unique entities within a PTP network.
|
|
*/
|
|
typedef struct {
|
|
/** ID bytes. */
|
|
uint8_t id[8];
|
|
} ptp_clk_id;
|
|
|
|
/**
|
|
* @brief PTP Port Identity.
|
|
* @note 5.3.5 - identifies a PTP Port or a Link port.
|
|
*/
|
|
struct ptp_port_id {
|
|
/** PTP Clock ID. */
|
|
ptp_clk_id clk_id;
|
|
/** PTP Port number. */
|
|
uint16_t port_number;
|
|
} __packed;
|
|
|
|
/**
|
|
* @brief Structure represeniting address of a PTP Port.
|
|
* @note 5.3.6 - represents the protocol address of a PTP port
|
|
*/
|
|
struct ptp_port_addr {
|
|
/** PTP Port's protocol. */
|
|
uint16_t protocol;
|
|
/** Address length. */
|
|
uint16_t addr_len;
|
|
/** Address field. */
|
|
uint8_t address[];
|
|
} __packed;
|
|
|
|
/**
|
|
* @brief Structure for PTP Clock quality metrics.
|
|
* @note 5.3.7 - quality of a clock
|
|
*/
|
|
struct ptp_clk_quality {
|
|
/** PTP Clock's class */
|
|
uint8_t class;
|
|
/** Accuracy of the PTP Clock. */
|
|
uint8_t accuracy;
|
|
/** Value representing stability of the Local PTP Clock. */
|
|
uint16_t offset_scaled_log_variance;
|
|
} __packed;
|
|
|
|
/**
|
|
* @brief
|
|
* @note 5.3.8 - TLV (type, length, value) extension fields
|
|
*/
|
|
struct ptp_tlv {
|
|
/** Type of the TLV value. */
|
|
uint16_t type;
|
|
/** Length of the TLV value field. */
|
|
uint16_t length;
|
|
/** TLV's data field. */
|
|
uint8_t value[];
|
|
} __packed;
|
|
|
|
/**
|
|
* @brief Generic datatype for storing text in PTP messages.
|
|
* @note 5.3.9 - holds textual content in PTP messages
|
|
*/
|
|
struct ptp_text {
|
|
/** Length of the text field.
|
|
*
|
|
* @note Might be larger than number of symbols due to UTF-8 encoding.
|
|
*/
|
|
uint8_t length;
|
|
/** Text itself.
|
|
*
|
|
* @note Encoded as UTF-8, single symbol can be 1-4 bytes long
|
|
*/
|
|
uint8_t text[];
|
|
} __packed;
|
|
|
|
/**
|
|
* @brief Type holding difference between two numeric value
|
|
* @note 5.3.11 - relative difference between two numeric values.
|
|
* It's a dimensionless fraction and multiplied by 2^62.
|
|
*/
|
|
typedef int64_t ptp_relative_diff;
|
|
|
|
struct ptp_port;
|
|
|
|
struct ptp_clock;
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
#endif /* ZEPHYR_INCLUDE_PTP_PDT_H_ */
|