diff --git a/makefile b/makefile index a3cccb0..21ec67a 100644 --- a/makefile +++ b/makefile @@ -24,7 +24,7 @@ CFLAGS = -Wall $(INC) $(DEBUG) LDFLAGS = LDLIBS = -lm -lrt PRG = linuxptp -OBJ = bmc.o fsm.o phc.o print.o +OBJ = bmc.o fsm.o phc.o print.o util.o SRC = $(OBJ:.o=.c) DEPEND = $(OBJ:.o=.d) diff --git a/util.c b/util.c new file mode 100644 index 0000000..0e01e21 --- /dev/null +++ b/util.c @@ -0,0 +1,74 @@ +/** + * @file util.c + * @note Copyright (C) 2011 Richard Cochran + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ +#include + +#include "util.h" + +char *ps_str[] = { + "NONE", + "INITIALIZING", + "FAULTY", + "DISABLED", + "LISTENING", + "PRE_MASTER", + "MASTER", + "GRAND_MASTER", + "PASSIVE", + "UNCALIBRATED", + "SLAVE", +}; + +char *ev_str[] = { + "NONE", + "POWERUP", + "INITIALIZE", + "DESIGNATED_ENABLED", + "DESIGNATED_DISABLED", + "FAULT_CLEARED", + "FAULT_DETECTED", + "STATE_DECISION_EVENT", + "QUALIFICATION_TIMEOUT_EXPIRES", + "ANNOUNCE_RECEIPT_TIMEOUT_EXPIRES", + "SYNCHRONIZATION_FAULT", + "MASTER_CLOCK_SELECTED", + "RS_MASTER", + "RS_SLAVE", + "RS_PASSIVE", +}; + +char *cid2str(struct ClockIdentity *id) +{ + static char buf[64]; + unsigned char *ptr = id->id; + snprintf(buf, sizeof(buf), "%02x%02x%02x.%02x%02x.%02x%02x%02x", + ptr[0], ptr[1], ptr[2], ptr[3], + ptr[4], ptr[5], ptr[6], ptr[7]); + return buf; +} + +char *pid2str(struct PortIdentity *id) +{ + static char buf[64]; + unsigned char *ptr = id->clockIdentity.id; + snprintf(buf, sizeof(buf), "%02x%02x%02x.%02x%02x.%02x%02x%02x-%hu", + ptr[0], ptr[1], ptr[2], ptr[3], + ptr[4], ptr[5], ptr[6], ptr[7], + id->portNumber); + return buf; +} diff --git a/util.h b/util.h new file mode 100644 index 0000000..50b9c7c --- /dev/null +++ b/util.h @@ -0,0 +1,57 @@ +/** + * @file util.h + * @brief Various little utility functions that do not fit in elsewhere. + * @note Copyright (C) 2011 Richard Cochran + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ +#ifndef HAVE_UTIL_H +#define HAVE_UTIL_H + +#include "ddt.h" + +/** + * Table of human readable strings, one for each port state. + */ +extern char *ps_str[]; + +/** + * Table of human readable strings, one for each port event. + */ +extern char *ev_str[]; + +/** + * Convert a clock identity into a human readable string. + * + * Note that this function uses a static global variable to store the + * result and therefore is not reentrant. + * + * @param id Clock idendtity to show. + * @return Pointer to a static global buffer holding the result. + */ +char *cid2str(struct ClockIdentity *id); + +/** + * Convert a port identity into a human readable string. + * + * Note that this function uses a static global variable to store the + * result and therefore is not reentrant. + * + * @param id Port idendtity to show. + * @return Pointer to a static global buffer holding the result. + */ +char *pid2str(struct PortIdentity *id); + +#endif