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// IP address of PTP-IGMP groups
18#define PTP_IGMP_DEFAULT_STR ("224.0.1.129")
19#define PTP_IGMP_PEER_DELAY_STR ("224.0.0.107")
20
21#ifndef LWIP
22typedef ip4_addr ip_addr_t;
23typedef ip4_addr ip4_addr_t;
24#endif
25
26extern const ip_addr_t PTP_IGMP_PRIMARY;
27extern const ip_addr_t PTP_IGMP_PEER_DELAY;
28
29#define PTP_ETHERTYPE (0x88F7)
30#define ETHERTYPE_PTP (PTP_ETHERTYPE)
31
32// Ethernet address of PTP messages
33extern const uint8_t PTP_ETHERNET_PRIMARY[6];
34extern const uint8_t PTP_ETHERNET_PEER_DELAY[6];
35
36// PTP UDP ports
37#define PTP_PORT_EVENT (319)
38#define PTP_PORT_GENERAL (320)
39
40#define PTP_HEADER_LENGTH (34)
41#define PTP_TIMESTAMP_LENGTH (10)
42#define PTP_PORT_ID_LENGTH (10)
43#define PTP_ANNOUNCE_BODY_LENGTH (20)
44
45#define PTP_PCKT_SIZE_SYNC (PTP_HEADER_LENGTH + PTP_TIMESTAMP_LENGTH)
46#define PTP_PCKT_SIZE_FOLLOW_UP (PTP_HEADER_LENGTH + PTP_TIMESTAMP_LENGTH)
47#define PTP_PCKT_SIZE_DELAY_REQ (PTP_HEADER_LENGTH + PTP_TIMESTAMP_LENGTH)
48#define PTP_PCKT_SIZE_DELAY_RESP (PTP_HEADER_LENGTH + PTP_TIMESTAMP_LENGTH + PTP_PORT_ID_LENGTH)
49#define PTP_PCKT_PDELAY_RESERVED_END (10)
50#define PTP_PCKT_SIZE_PDELAY_REQ (PTP_HEADER_LENGTH + PTP_TIMESTAMP_LENGTH + PTP_PCKT_PDELAY_RESERVED_END)
51#define PTP_PCKT_SIZE_PDELAY_RESP (PTP_HEADER_LENGTH + PTP_TIMESTAMP_LENGTH + PTP_PORT_ID_LENGTH)
52#define PTP_PCKT_SIZE_PDELAY_RESP_FOLLOW_UP (PTP_HEADER_LENGTH + PTP_TIMESTAMP_LENGTH + PTP_PORT_ID_LENGTH)
53#define PTP_PCKT_SIZE_ANNOUNCE (PTP_HEADER_LENGTH + PTP_TIMESTAMP_LENGTH + PTP_ANNOUNCE_BODY_LENGTH)
54
55// ---------------------------
56
57#define PTP_MAX_PROFILE_NAME_LENGTH (7)
58#define PTP_MAX_TLV_PRESET_NAME_LENGTH PTP_MAX_PROFILE_NAME_LENGTH
59
60// ---- CALCULATED VALUES ----
61
62#define PTP_CLOCK_TICK_FREQ_HZ (1000000000 / PTP_INCREMENT_NSEC)
63#define PTP_ADDEND_INIT (((double)(0x100000000)) / (((double)(PTP_MAIN_OSCILLATOR_FREQ_HZ)) / ((double)(PTP_CLOCK_TICK_FREQ_HZ))))
64#define PTP_ADDEND_CORR_PER_PPB_F (((double)0x100000000) / ((double)PTP_INCREMENT_NSEC * PTP_MAIN_OSCILLATOR_FREQ_HZ))
65
66// ---- AUTODEFINES ----------
67
68#ifndef PTP_HEARTBEAT_TICKRATE_MS
69#define PTP_HEARTBEAT_TICKRATE_MS (125)
70#endif
71
72#ifndef PTP_PORT_ID
73#define PTP_PORT_ID (1)
74#endif
75
76#ifndef PTP_ACCURACY_LIMIT_NS
77#define PTP_ACCURACY_LIMIT_NS (100)
78#endif
79
80#ifndef PTP_DEFAULT_SERVO_OFFSET
81#define PTP_DEFAULT_SERVO_OFFSET (0)
82#endif
83
84#ifndef PTP_DEFAULT_COARSE_TRIGGER_NS
85#define PTP_DEFAULT_COARSE_TRIGGER_NS (20000000)
86#endif
87
88#ifndef PTP_BMCA_LISTENING_TIMEOUT_MS
89#define PTP_BMCA_LISTENING_TIMEOUT_MS (3000)
90#endif
91
92#ifndef PTP_MASTER_QUALIFICATION_TIMEOUT
93#define PTP_MASTER_QUALIFICATION_TIMEOUT (4)
94#endif
95
96#ifndef PTP_ANNOUNCE_RECEIPT_TIMEOUT
97#define PTP_ANNOUNCE_RECEIPT_TIMEOUT (3)
98#endif
99
100#ifndef PTP_ENABLE_MASTER_OPERATION
101#define PTP_ENABLE_MASTER_OPERATION (0)
102#endif
103
104#ifndef PTP_CLOCK_PRIORITY1
105#define PTP_CLOCK_PRIORITY1 (128)
106#endif
107
108#ifndef PTP_CLOCK_PRIORITY2
109#define PTP_CLOCK_PRIORITY2 (128)
110#endif
111
112// ---- CAPABILITIES AND ANNOUNCE DATASET -------
113
114#ifndef PTP_BEST_CLOCK_CLASS
115#define PTP_BEST_CLOCK_CLASS (PTP_CC_DEFAULT)
116#endif
117
118#ifndef PTP_WORST_ACCURACY
119#define PTP_WORST_ACCURACY (PTP_CA_UNKNOWN)
120#endif
121
122#ifndef PTP_TIME_SOURCE
123#define PTP_TIME_SOURCE (PTP_TSRC_INTERNAL_OSCILLATOR)
124#endif
125
126#ifndef PTP_FALLBACK_UTC_OFFSET
127#define PTP_FALLBACK_UTC_OFFSET (37)
128#endif
129
130// ---- MASTER P2P SLAVE HANDLING -----
131
132#ifndef PTP_PDELAY_SLAVE_QUALIFICATION
133#define PTP_PDELAY_SLAVE_QUALIFICATION (3)
134#endif
135
136#ifndef PTP_PDELAY_DROPOUT
137#define PTP_PDELAY_DROPOUT PTP_PDELAY_SLAVE_QUALIFICATION
138#endif
139
140// ---- TERMINAL COLORS -----
141
142// clang-format off
143
144#ifndef PTP_CUSTOM_COLORS
145#define PTP_COLOR_RED "\x1b[31m"
146#define PTP_COLOR_BRED "\x1b[91m"
147#define PTP_COLOR_GREEN "\x1b[32m"
148#define PTP_COLOR_BGREEN "\x1b[92m"
149#define PTP_COLOR_YELLOW "\x1b[33m"
150#define PTP_COLOR_BYELLOW "\x1b[93m"
151#define PTP_COLOR_BLUE "\x1b[34m"
152#define PTP_COLOR_MAGENTA "\x1b[35m"
153#define PTP_COLOR_BMAGENTA "\x1b[95m"
154#define PTP_COLOR_CYAN "\x1b[36m"
155#define PTP_COLOR_RESET "\x1b[0m"
156#endif
157
158// clang-format on
159
160// ---- NETWORK-HOST CONVERSIONS ----
161// -- These are STATICALLY COMPUTABLE macros! ---
162
163#define FLEXPTP_htonl(a) \
164 ((((a) >> 24) & 0x000000ff) | \
165 (((a) >> 8) & 0x0000ff00) | \
166 (((a) << 8) & 0x00ff0000) | \
167 (((a) << 24) & 0xff000000))
168
169#define FLEXPTP_ntohl(a) FLEXPTP_htonl((a))
170
171#define FLEXPTP_htons(a) \
172 ((((a) >> 8) & 0x00ff) | \
173 (((a) << 8) & 0xff00))
174
175#define FLEXPTP_ntohs(a) FLEXPTP_htons((a))
176
177#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:23
ip4_addr ip_addr_t
Definition: ptp_defs.h:22
const ip_addr_t PTP_IGMP_PEER_DELAY
Peer_Delay IGMP address.