#include "aes67_ptp.h" #include "aes67_cfg.h" #include "ptp_clock.h" #include "ptp_hw.h" // Core defaults: Riedel SIC intervals, role auto with fallback priorities (docs/aes67-core-base.md). static const char PTP_DEFAULTS[] = "{\"mode\":\"multicast\",\"role\":\"auto\",\"domain\":0,\"priority1\":250,\"priority2\":250," "\"log_sync\":0,\"log_announce\":1,\"announce_timeout\":3,\"log_delay_req\":0," "\"dscp\":46,\"hw_ts\":true}"; static bool ptp_validate(const cJSON *g, char *err, size_t n) { static const char *const modes[] = { "multicast", "hybrid", NULL }; static const char *const roles[] = { "slave", "auto", "master", NULL }; return cfg_check_enum(g, "mode", modes, err, n) && cfg_check_enum(g, "role", roles, err, n) && cfg_check_int(g, "domain", 0, 127, err, n) && cfg_check_int(g, "priority1", 0, 255, err, n) && cfg_check_int(g, "priority2", 0, 255, err, n) && cfg_check_int(g, "log_sync", -4, 1, err, n) && cfg_check_int(g, "log_announce", 0, 4, err, n) && cfg_check_int(g, "announce_timeout", 2, 10, err, n) && cfg_check_int(g, "log_delay_req", -4, 1, err, n) && cfg_check_int(g, "dscp", 0, 63, err, n); } esp_err_t aes67_ptp_init(void) { return cfg_register("ptp", PTP_DEFAULTS, ptp_validate, NULL); } esp_err_t aes67_ptp_start(esp_eth_handle_t eth) { esp_netif_t *netif = esp_netif_get_handle_from_ifkey("ETH_DEF"); esp_err_t err = ptp_hw_init(eth, netif); if (err != ESP_OK) { return err; } return ptp_clock_start(netif); }