flexPTP 1.0
An IEEE 1588 PTP implementation designed for microcontrollers
Loading...
Searching...
No Matches
ptp_defs.h
Go to the documentation of this file.
1
10#ifndef FLEXPTP_PTP_DEFS_H_
11#define FLEXPTP_PTP_DEFS_H_
12
13#include <stdint.h>
14
15#include <flexptp_options.h>
16
17#ifdef __cplusplus
18extern "C" {
19#endif
20
21// IP address of PTP-IGMP groups
22#define PTP_IGMP_DEFAULT_STR ("224.0.1.129")
23#define PTP_IGMP_PEER_DELAY_STR ("224.0.0.107")
24
25#if defined(__linux__)
26#include <netinet/in.h>
27typedef in_addr_t ip_addr_t;
28typedef in_addr_t ip4_addr_t;
29#elif !defined(LWIP)
30typedef ip4_addr ip_addr_t;
31typedef ip4_addr ip4_addr_t;
32#endif
33
34extern const ip_addr_t PTP_IGMP_PRIMARY;
35extern const ip_addr_t PTP_IGMP_PEER_DELAY;
36
37#define PTP_ETHERTYPE (0x88F7)
38#define ETHERTYPE_PTP (PTP_ETHERTYPE)
39
40// Ethernet address of PTP messages
41extern const uint8_t PTP_ETHERNET_PRIMARY[6];
42extern const uint8_t PTP_ETHERNET_PEER_DELAY[6];
43
44// PTP UDP ports
45#define PTP_PORT_EVENT (319)
46#define PTP_PORT_GENERAL (320)
47
48#define PTP_HEADER_LENGTH (34)
49#define PTP_TIMESTAMP_LENGTH (10)
50#define PTP_PORT_ID_LENGTH (10)
51#define PTP_ANNOUNCE_BODY_LENGTH (20)
52
53#define PTP_PCKT_SIZE_SYNC (PTP_HEADER_LENGTH + PTP_TIMESTAMP_LENGTH)
54#define PTP_PCKT_SIZE_FOLLOW_UP (PTP_HEADER_LENGTH + PTP_TIMESTAMP_LENGTH)
55#define PTP_PCKT_SIZE_DELAY_REQ (PTP_HEADER_LENGTH + PTP_TIMESTAMP_LENGTH)
56#define PTP_PCKT_SIZE_DELAY_RESP (PTP_HEADER_LENGTH + PTP_TIMESTAMP_LENGTH + PTP_PORT_ID_LENGTH)
57#define PTP_PCKT_PDELAY_RESERVED_END (10)
58#define PTP_PCKT_SIZE_PDELAY_REQ (PTP_HEADER_LENGTH + PTP_TIMESTAMP_LENGTH + PTP_PCKT_PDELAY_RESERVED_END)
59#define PTP_PCKT_SIZE_PDELAY_RESP (PTP_HEADER_LENGTH + PTP_TIMESTAMP_LENGTH + PTP_PORT_ID_LENGTH)
60#define PTP_PCKT_SIZE_PDELAY_RESP_FOLLOW_UP (PTP_HEADER_LENGTH + PTP_TIMESTAMP_LENGTH + PTP_PORT_ID_LENGTH)
61#define PTP_PCKT_SIZE_ANNOUNCE (PTP_HEADER_LENGTH + PTP_TIMESTAMP_LENGTH + PTP_ANNOUNCE_BODY_LENGTH)
62
63// ---------------------------
64
65#define PTP_MAX_PROFILE_NAME_LENGTH (7)
66#define PTP_MAX_TLV_PRESET_NAME_LENGTH PTP_MAX_PROFILE_NAME_LENGTH
67
68// ---- CALCULATED VALUES ----
69
70// automatically select the ADDEND interface if nothing was specified
71#if !defined(PTP_ADDEND_INTERFACE) && !defined(PTP_HLT_INTERFACE)
72#define PTP_ADDEND_INTERFACE
73#endif
74
75// ADDEND interface parameter calculation
76#if defined(PTP_ADDEND_INTERFACE)
77#define PTP_ADDEND_INIT (((double)(0x100000000)) / (((double)(PTP_MAIN_OSCILLATOR_FREQ_HZ)) / ((double)(PTP_CLOCK_TICK_FREQ_HZ))))
78#define PTP_ADDEND_CORR_PER_PPB_F (((double)0x100000000) / ((double)PTP_INCREMENT_NSEC * PTP_MAIN_OSCILLATOR_FREQ_HZ))
79#endif
80
81#define PTP_CLOCK_TICK_FREQ_HZ (1000000000 / PTP_INCREMENT_NSEC)
82
83// ---- AUTODEFINES ----------
84
85#if !defined(FLEXPTP_FREERTOS) && !defined(FLEXPTP_CMSIS_OS2) && !defined(FLEXPTP_LINUX) && !defined(FLEXPTP_OSLESS)
86#define FLEXPTP_FREERTOS (1)
87#endif
88
89#ifdef FLEXPTP_FREERTOS
90#include "FreeRTOS.h"
91#include "queue.h"
92#include "task.h"
93#include "timers.h"
94#elif defined(FLEXPTP_CMSIS_OS2)
95#include <cmsis_compiler.h>
96#include <cmsis_os2.h>
97#elif defined(FLEXPTP_LINUX)
98#include <poll.h>
99#include <pthread.h>
100#include <semaphore.h>
101#include <signal.h>
102#include <unistd.h>
103#elif defined(FLEXPTP_OSLESS)
104#include "port/osless/fifo.h"
105#endif
106
107#if defined(FLEXPTP_FREERTOS) || defined(FLEXPTP_CMSIS_OS2)
108#define FLEXPTP_NON_LINUX_OS (1)
109#endif
110
111#if defined(FLEXPTP_OSLESS) && !defined(FLEXPTP_OSLESS_LOCK)
112#error "FLEXPTP_OSLESS_LOCK must be defined to use FLEXPTP_OSLESS mode!"
113#endif
114
115#ifndef FLEXPTP_TASK_PRIORITY
116#ifdef FLEXPTP_FREERTOS
117#define FLEXPTP_TASK_PRIORITY (configMAX_PRIORITIES / 2)
118#elif defined(FLEXPTP_CMSIS_OS2)
119#define FLEXPTP_TASK_PRIORITY osPriorityNormal
120#endif
121#endif
122
123#ifndef FLEXPTP_TASK_STASK_SIZE
124#define FLEXPTP_TASK_STACK_SIZE (2048)
125#endif
126
127#ifndef PTP_HEARTBEAT_TICKRATE_MS
128#define PTP_HEARTBEAT_TICKRATE_MS (62)
129#endif
130
131#ifndef PTP_PORT_ID
132#define PTP_PORT_ID (1)
133#endif
134
135#ifndef PTP_ACCURACY_LIMIT_NS
136#define PTP_ACCURACY_LIMIT_NS (100)
137#endif
138
139#ifndef PTP_DEFAULT_SERVO_OFFSET
140#define PTP_DEFAULT_SERVO_OFFSET (0)
141#endif
142
143#ifndef PTP_DEFAULT_COARSE_TRIGGER_NS
144#define PTP_DEFAULT_COARSE_TRIGGER_NS (20000000)
145#endif
146
147#ifndef PTP_BMCA_LISTENING_TIMEOUT_MS
148#define PTP_BMCA_LISTENING_TIMEOUT_MS (3000)
149#endif
150
151#ifndef PTP_MASTER_QUALIFICATION_TIMEOUT
152#define PTP_MASTER_QUALIFICATION_TIMEOUT (4)
153#endif
154
155#ifndef PTP_ANNOUNCE_RECEIPT_TIMEOUT
156#define PTP_ANNOUNCE_RECEIPT_TIMEOUT (3)
157#endif
158
159#ifndef PTP_ENABLE_MASTER_OPERATION
160#define PTP_ENABLE_MASTER_OPERATION (0)
161#endif
162
163#ifndef PTP_CLOCK_PRIORITY1
164#define PTP_CLOCK_PRIORITY1 (128)
165#endif
166
167#ifndef PTP_CLOCK_PRIORITY2
168#define PTP_CLOCK_PRIORITY2 (128)
169#endif
170
171// ---- CAPABILITIES AND ANNOUNCE DATASET -------
172
173#ifndef PTP_BEST_CLOCK_CLASS
174#define PTP_BEST_CLOCK_CLASS (PTP_CC_DEFAULT)
175#endif
176
177#ifndef PTP_WORST_ACCURACY
178#define PTP_WORST_ACCURACY (PTP_CA_UNKNOWN)
179#endif
180
181#ifndef PTP_TIME_SOURCE
182#define PTP_TIME_SOURCE (PTP_TSRC_INTERNAL_OSCILLATOR)
183#endif
184
185#ifndef PTP_FALLBACK_UTC_OFFSET
186#define PTP_FALLBACK_UTC_OFFSET (37)
187#endif
188
189// ---- MASTER P2P SLAVE HANDLING -----
190
191#ifndef PTP_PDELAY_SLAVE_QUALIFICATION
192#define PTP_PDELAY_SLAVE_QUALIFICATION (3)
193#endif
194
195#ifndef PTP_PDELAY_DROPOUT
196#define PTP_PDELAY_DROPOUT PTP_PDELAY_SLAVE_QUALIFICATION
197#endif
198
199// ---- TERMINAL COLORS -----
200
201// clang-format off
202
203#ifndef PTP_CUSTOM_COLORS
204#define PTP_COLOR_RED "\x1b[31m"
205#define PTP_COLOR_BRED "\x1b[91m"
206#define PTP_COLOR_GREEN "\x1b[32m"
207#define PTP_COLOR_BGREEN "\x1b[92m"
208#define PTP_COLOR_YELLOW "\x1b[33m"
209#define PTP_COLOR_BYELLOW "\x1b[93m"
210#define PTP_COLOR_BLUE "\x1b[34m"
211#define PTP_COLOR_MAGENTA "\x1b[35m"
212#define PTP_COLOR_BMAGENTA "\x1b[95m"
213#define PTP_COLOR_CYAN "\x1b[36m"
214#define PTP_COLOR_RESET "\x1b[0m"
215#endif
216
217// clang-format on
218
219// ---- NETWORK-HOST CONVERSIONS ----
220// -- These are STATICALLY COMPUTABLE macros! ---
221
222#define FLEXPTP_htonl(a) \
223 ((((a) >> 24) & 0x000000ff) | \
224 (((a) >> 8) & 0x0000ff00) | \
225 (((a) << 8) & 0x00ff0000) | \
226 (((a) << 24) & 0xff000000))
227
228#define FLEXPTP_ntohl(a) FLEXPTP_htonl((a))
229
230#define FLEXPTP_htons(a) \
231 ((((a) >> 8) & 0x00ff) | \
232 (((a) << 8) & 0xff00))
233
234#define FLEXPTP_ntohs(a) FLEXPTP_htons((a))
235
236// ----------------
237
238#define FLEXPTP_MS_TO_TICKS(ms) ((ms + (PTP_HEARTBEAT_TICKRATE_MS - 1)) / PTP_HEARTBEAT_TICKRATE_MS)
239
240#define FLEXPTP_RANDOM_TAGGED_MESSAGE_TTL_TICKS (20)
241
242#ifdef __cplusplus
243}
244#endif
245
246#endif /* FLEXPTP_PTP_DEFS_H_ */
const ip_addr_t PTP_IGMP_PRIMARY
Primary IGMP address.
const uint8_t PTP_ETHERNET_PEER_DELAY[6]
PTP's L2 Peer_Delay Ethernet address.
Definition: ptp_defs.c:4
const uint8_t PTP_ETHERNET_PRIMARY[6]
PTP's L2 Primary Ethernet address.
Definition: ptp_defs.c:3
ip4_addr ip4_addr_t
Definition: ptp_defs.h:31
ip4_addr ip_addr_t
Definition: ptp_defs.h:30
const ip_addr_t PTP_IGMP_PEER_DELAY
Peer_Delay IGMP address.