On Tue, 8 Mar 2022 at 16:18, Martin Pecka <pecka...@fel.cvut.cz> wrote:
> 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; > Please use the clock_servo_state() function. + 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; > TLV managment messages must be aligned to 2. Please add a reserved octet. > +} 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 >
_______________________________________________ Linuxptp-devel mailing list Linuxptp-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxptp-devel