flexPTP 1.0
An IEEE 1588 PTP implementation designed for microcontrollers
Loading...
Searching...
No Matches
config.c
Go to the documentation of this file.
1#include "config.h"
2
3#include <stdbool.h>
4#include <string.h>
5
6#include "ptp_core.h"
7
9#define S (gPtpCoreState)
11
12// -------------
13
14// config logging flags
15#define CONFIG_LOG_DEF (0x01)
16#define CONFIG_LOG_INFO (0x02)
17#define CONFIG_LOG_CORR (0x04)
18#define CONFIG_LOG_TIMESTAMPS (0x08)
19#define CONFIG_LOG_LOCKED (0x10)
20#define CONFIG_LOG_BMCA (0x20)
21#define CONFIG_LOG_TRANSMISSION (0x40)
22#define CONFIG_LOG_ALL (0x7F)
23
25#define CONFIG_ADD_LOGGING(c, f) (((c) ? (f) : 0))
27
28// -----------
29
31 pConfig->profile = S.profile;
32 pConfig->offset = S.hwoptions.offset;
33 pConfig->logging = CONFIG_ADD_LOGGING(S.logging.def, CONFIG_LOG_DEF) |
34 CONFIG_ADD_LOGGING(S.logging.info, CONFIG_LOG_INFO) |
35 CONFIG_ADD_LOGGING(S.logging.corr, CONFIG_LOG_CORR) |
36 CONFIG_ADD_LOGGING(S.logging.timestamps, CONFIG_LOG_TIMESTAMPS) |
37 CONFIG_ADD_LOGGING(S.logging.locked, CONFIG_LOG_LOCKED) |
38 CONFIG_ADD_LOGGING(S.logging.bmca, CONFIG_LOG_BMCA) |
39 CONFIG_ADD_LOGGING(S.logging.transmission, CONFIG_LOG_TRANSMISSION);
40 pConfig->priority1 = S.capabilities.priority1;
41 pConfig->priority2 = S.capabilities.priority2;
42}
43
44void ptp_load_config(const PtpConfig *pConfig) {
45 // validate fields
46 bool invalid = false;
47 invalid |= pConfig->logging & (~CONFIG_LOG_ALL); // if at least a flag not corresponding to any kind of logging is set
48
50 invalid |= (dm != PTP_DM_E2E) && (dm != PTP_DM_P2P);
51
53 invalid |= ((logmp > PTP_LOGPER_MAX) && (logmp != PTP_LOGPER_SYNCMATCHED)) || (logmp < PTP_LOGPER_MIN);
54
56 invalid |= (tps != PTP_TSPEC_UNKNOWN_DEF) && (tps != PTP_TSPEC_GPTP_8021AS);
57
59 invalid |= (tpt != PTP_TP_IPv4) && (tpt != PTP_TP_802_3);
60
61 // check validity
62 if (invalid) {
63 MSG("The retained flexPTP configuration got corrupted, loading aborted!\n");
64 return;
65 }
66
67 // load config if all fields are valid
68 S.profile = pConfig->profile;
69 S.hwoptions.offset = pConfig->offset;
70 S.capabilities.priority1 = pConfig->priority1;
71 S.capabilities.priority2 = pConfig->priority2;
72
73 S.logging.def = (pConfig->logging & CONFIG_LOG_DEF) != 0;
74 S.logging.info = (pConfig->logging & CONFIG_LOG_INFO) != 0;
75 S.logging.corr = (pConfig->logging & CONFIG_LOG_CORR) != 0;
76 S.logging.timestamps = (pConfig->logging & CONFIG_LOG_TIMESTAMPS) != 0;
77 S.logging.locked = (pConfig->logging & CONFIG_LOG_LOCKED) != 0;
78 S.logging.bmca = (pConfig->logging & CONFIG_LOG_BMCA) != 0;
79 S.logging.transmission = (pConfig->logging & CONFIG_LOG_TRANSMISSION) != 0;
80}
81
82void ptp_load_config_from_dump(const void *pDump) {
83 PtpConfig config;
84 memcpy(&config, pDump, sizeof(PtpConfig));
85 ptp_load_config(&config);
86 ptp_reset();
87}
#define CONFIG_LOG_LOCKED
Inform the user if the clock diverges or locks.
Definition: config.c:19
#define CONFIG_LOG_BMCA
Peek BMCA state changes.
Definition: config.c:20
#define CONFIG_LOG_CORR
Correction field logging.
Definition: config.c:17
#define CONFIG_LOG_TIMESTAMPS
Timestamp logging.
Definition: config.c:18
void ptp_store_config(PtpConfig *pConfig)
Definition: config.c:30
#define CONFIG_LOG_INFO
General info logging.
Definition: config.c:16
void ptp_load_config_from_dump(const void *pDump)
Definition: config.c:82
void ptp_load_config(const PtpConfig *pConfig)
Definition: config.c:44
#define CONFIG_LOG_DEF
Default logging.
Definition: config.c:15
#define CONFIG_LOG_TRANSMISSION
Log transmission events.
Definition: config.c:21
This module defines functions for storing and loading flexPTP configurations.
void ptp_reset()
Definition: ptp_core.c:234
Core of the PTP implementation. Defines functions for message processing, clock tuning,...
PtpTransportType
PTP transport type enumeration.
Definition: ptp_types.h:136
@ PTP_TP_IPv4
IPv4 Transport Type.
Definition: ptp_types.h:137
@ PTP_TP_802_3
Ethernet Transport Type.
Definition: ptp_types.h:138
PtpLogMsgPeriods
Enumeration for logarithmic message period boundaries.
Definition: ptp_types.h:303
@ PTP_LOGPER_MAX
Maximal logarithmic messaging period.
Definition: ptp_types.h:305
@ PTP_LOGPER_MIN
Minimal logarithmic messaging period.
Definition: ptp_types.h:304
@ PTP_LOGPER_SYNCMATCHED
Messaging occurs whenever a Sync arrives.
Definition: ptp_types.h:306
PtpDelayMechanism
PTP Delay mechanism enumeration.
Definition: ptp_types.h:144
@ PTP_DM_E2E
End-to-End Delay Mechanism.
Definition: ptp_types.h:145
@ PTP_DM_P2P
Peer-to-Peer Delay Mechanism.
Definition: ptp_types.h:146
PtpTransportSpecific
PTP transport specific enumeration.
Definition: ptp_types.h:152
@ PTP_TSPEC_GPTP_8021AS
802.1AS Transport Specific Flag
Definition: ptp_types.h:154
@ PTP_TSPEC_UNKNOWN_DEF
Unkown Transport Specific Flag (default)
Definition: ptp_types.h:153
Global storable-loadable configuration.
Definition: config.h:22
TimestampI offset
PPS signal offset.
Definition: config.h:24
PtpProfile profile
PTP-profile.
Definition: config.h:23
uint32_t logging
logging compressed into a single bitfield
Definition: config.h:25
uint8_t priority2
Clock priority fields.
Definition: config.h:26
uint8_t priority1
Definition: config.h:26
PtpDelayMechanism delayMechanism
delay mechanism
Definition: ptp_types.h:359
PtpTransportSpecific transportSpecific
majorSdoId ('transportSpecific')
Definition: ptp_types.h:358
int8_t logDelayReqPeriod
logarithm of (P)DelayReq period (SLAVE and MASTER)
Definition: ptp_types.h:360
PtpTransportType transportType
transport layer
Definition: ptp_types.h:357