Signed-off-by: Martin Pecka <pecka...@fel.cvut.cz> --- clock.c | 7 +++++++ pmc.c | 6 ++++++ pmc_common.c | 1 + tlv.h | 5 +++++ util.c | 16 ++++++++++++++++ util.h | 8 ++++++++ 6 files changed, 43 insertions(+)
diff --git a/clock.c b/clock.c index bbfd1a8..cd46b06 100644 --- a/clock.c +++ b/clock.c @@ -346,6 +346,7 @@ static int clock_management_fill_response(struct clock *c, struct port *p, struct grandmaster_settings_np *gsn; struct management_tlv_datum *mtd; struct subscribe_events_np *sen; + struct servo_state_np *servo; struct management_tlv *tlv; struct time_status_np *tsn; struct tlv_extra *extra; @@ -462,6 +463,11 @@ static int clock_management_fill_response(struct clock *c, struct port *p, mtd->val = c->local_sync_uncertain; datalen = sizeof(*mtd); break; + case MID_SERVO_STATE_NP: + servo = (struct servo_state_np *) tlv->data; + servo->state = c->servo_state; + datalen = sizeof(*servo); + break; default: /* The caller should *not* respond to this message. */ tlv_extra_recycle(extra); @@ -1524,6 +1530,7 @@ int clock_manage(struct clock *c, struct port *p, struct ptp_message *msg) case MID_GRANDMASTER_SETTINGS_NP: case MID_SUBSCRIBE_EVENTS_NP: case MID_SYNCHRONIZATION_UNCERTAIN_NP: + case MID_SERVO_STATE_NP: clock_management_send_error(p, msg, MID_NOT_SUPPORTED); break; default: diff --git a/pmc.c b/pmc.c index 7916153..a3dcf44 100644 --- a/pmc.c +++ b/pmc.c @@ -165,6 +165,7 @@ static void pmc_show(struct ptp_message *msg, FILE *fp) struct unicast_master_entry *ume; struct subscribe_events_np *sen; struct port_properties_np *ppn; + struct servo_state_np *servo; struct timePropertiesDS *tp; struct management_tlv *mgt; struct time_status_np *tsn; @@ -425,6 +426,11 @@ static void pmc_show(struct ptp_message *msg, FILE *fp) fprintf(fp, "SYNCHRONIZATION_UNCERTAIN_NP " IFMT "uncertain %hhu", mtd->val); break; + case MID_SERVO_STATE_NP: + servo = (struct servo_state_np *) mgt->data; + fprintf(fp, "SERVO_STATE_NP " + IFMT "state %s", servo_state2str(servo->state)); + break; case MID_PORT_DATA_SET: p = (struct portDS *) mgt->data; if (p->portState > PS_SLAVE) { diff --git a/pmc_common.c b/pmc_common.c index 017a4f7..a2fee8b 100644 --- a/pmc_common.c +++ b/pmc_common.c @@ -111,6 +111,7 @@ struct management_id idtab[] = { { "GRANDMASTER_SETTINGS_NP", MID_GRANDMASTER_SETTINGS_NP, do_set_action }, { "SUBSCRIBE_EVENTS_NP", MID_SUBSCRIBE_EVENTS_NP, do_set_action }, { "SYNCHRONIZATION_UNCERTAIN_NP", MID_SYNCHRONIZATION_UNCERTAIN_NP, do_set_action }, + { "SERVO_STATE_NP", MID_SERVO_STATE_NP, do_get_action }, /* Port management ID values */ { "NULL_MANAGEMENT", MID_NULL_MANAGEMENT, null_management }, { "CLOCK_DESCRIPTION", MID_CLOCK_DESCRIPTION, do_get_action }, diff --git a/tlv.h b/tlv.h index 915b9fc..fe7b1f8 100644 --- a/tlv.h +++ b/tlv.h @@ -100,6 +100,7 @@ enum management_action { #define MID_GRANDMASTER_SETTINGS_NP 0xC001 #define MID_SUBSCRIBE_EVENTS_NP 0xC003 #define MID_SYNCHRONIZATION_UNCERTAIN_NP 0xC006 +#define MID_SERVO_STATE_NP 0xC009 /* Port management ID values */ #define MID_NULL_MANAGEMENT 0x0000 @@ -331,6 +332,10 @@ struct port_ds_np { Integer32 asCapable; } PACKED; +struct servo_state_np { + uint8_t state; +} PACKED; + #define EVENT_BITMASK_CNT 64 diff --git a/util.c b/util.c index a59b559..f045543 100644 --- a/util.c +++ b/util.c @@ -207,6 +207,22 @@ const char *ustate2str(enum unicast_state ustate) return "???"; } +const char *servo_state2str(enum servo_state sstate) +{ + switch (sstate) { + case SERVO_UNLOCKED: + return "UNLOCKED"; + case SERVO_JUMP: + return "JUMP"; + case SERVO_LOCKED: + return "LOCKED"; + case SERVO_LOCKED_STABLE: + return "LOCKED_STABLE"; + } + + return "???"; +} + void posix_clock_close(clockid_t clock) { if (clock == CLOCK_REALTIME) { diff --git a/util.h b/util.h index 558a675..6e7abe4 100644 --- a/util.h +++ b/util.h @@ -26,6 +26,7 @@ #include "address.h" #include "ddt.h" #include "ether.h" +#include "servo.h" #include "transport.h" #include "unicast_fsm.h" @@ -113,6 +114,13 @@ char *portaddr2str(struct PortAddress *addr); const char *ustate2str(enum unicast_state ustate); +/** + * Convert servo state to a human readable string. + * @param sstate The state to show. + * @return The string representing the state. + */ +const char *servo_state2str(enum servo_state sstate); + /** * Closes a dynamic posix clock. * @param clock A clock ID obtained via posix_clock_close(). -- 2.17.1 _______________________________________________ Linuxptp-devel mailing list Linuxptp-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxptp-devel