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