From 37efd5c5f95e7dc066462d297947b06587ffbdde Mon Sep 17 00:00:00 2001 From: Nils Tonnaett Date: Tue, 21 Apr 2026 17:13:44 -0700 Subject: [PATCH] module-avb: emit gm_changed event --- src/modules/module-avb/gptp.c | 7 +++++++ src/modules/module-avb/internal.h | 2 ++ 2 files changed, 9 insertions(+) diff --git a/src/modules/module-avb/gptp.c b/src/modules/module-avb/gptp.c index 0d44278bd..1a0297c16 100644 --- a/src/modules/module-avb/gptp.c +++ b/src/modules/module-avb/gptp.c @@ -18,6 +18,8 @@ #include #include +#define server_emit(s,m,v,...) spa_hook_list_call(&s->listener_list, struct server_events, m, v, ##__VA_ARGS__) +#define server_emit_gm_changed(s, n, g) server_emit(s, gm_changed, 0, n, g) struct gptp { struct server *server; @@ -207,8 +209,13 @@ static bool update_ts_refclk(struct gptp *gptp) { // When GM is not equal to own clock we are clocked by external master pw_log_debug("Synced to GM: %s", (memcmp(cid, gmid, 8) != 0) ? "true" : "false"); + struct timespec now; memcpy(gptp->clock_id, cid, 8); memcpy(gptp->gm_id, gmid, 8); + + clock_gettime(CLOCK_REALTIME, &now); + server_emit_gm_changed(gptp->server, SPA_TIMESPEC_TO_NSEC(&now), gmid); + return gmid_changed; } diff --git a/src/modules/module-avb/internal.h b/src/modules/module-avb/internal.h index a9a38d0c6..4fe8e7e75 100644 --- a/src/modules/module-avb/internal.h +++ b/src/modules/module-avb/internal.h @@ -61,6 +61,8 @@ struct server_events { void (*periodic) (void *data, uint64_t now); int (*command) (void *data, uint64_t now, const char *command, const char *args, FILE *out); + + void (*gm_changed) (void *data, uint64_t now, uint8_t gm_id[8]); }; struct descriptor {