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

Reply via email to