summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/osmocom/gsm/gsm_utils.h3
-rw-r--r--src/gsm/gsm_utils.c11
-rw-r--r--src/gsm/libosmogsm.map1
3 files changed, 15 insertions, 0 deletions
diff --git a/include/osmocom/gsm/gsm_utils.h b/include/osmocom/gsm/gsm_utils.h
index 998f681e..a879d33c 100644
--- a/include/osmocom/gsm/gsm_utils.h
+++ b/include/osmocom/gsm/gsm_utils.h
@@ -168,6 +168,9 @@ void gsm_fn2gsmtime(struct gsm_time *time, uint32_t fn);
/* Convert from GSM time to frame number */
uint32_t gsm_gsmtime2fn(struct gsm_time *time);
+/* Returns static buffer with string representation of a GSM Time */
+char *osmo_dump_gsmtime(const struct gsm_time *tm);
+
/* GSM TS 03.03 Chapter 2.6 */
enum gprs_tlli_type {
TLLI_LOCAL,
diff --git a/src/gsm/gsm_utils.c b/src/gsm/gsm_utils.c
index 61d3f833..2c980d28 100644
--- a/src/gsm/gsm_utils.c
+++ b/src/gsm/gsm_utils.c
@@ -90,6 +90,7 @@
#include <stdio.h>
#include <errno.h>
#include <ctype.h>
+#include <inttypes.h>
#include "../../config.h"
@@ -758,6 +759,16 @@ uint32_t gsm_gsmtime2fn(struct gsm_time *time)
return (51 * ((time->t3 - time->t2 + 26) % 26) + time->t3 + (26 * 51 * time->t1));
}
+char *osmo_dump_gsmtime(const struct gsm_time *tm)
+{
+ static char buf[64];
+
+ snprintf(buf, sizeof(buf), "%06"PRIu32"/%02"PRIu16"/%02"PRIu8"/%02"PRIu8"/%02"PRIu8,
+ tm->fn, tm->t1, tm->t2, tm->t3, (uint8_t)tm->fn%52);
+ buf[sizeof(buf)-1] = '\0';
+ return buf;
+}
+
/*! append range1024 encoded data to bit vector
* \param[out] bv Caller-provided output bit-vector
* \param[in] r Input Range1024 sructure */
diff --git a/src/gsm/libosmogsm.map b/src/gsm/libosmogsm.map
index e992a4fc..ad7e0131 100644
--- a/src/gsm/libosmogsm.map
+++ b/src/gsm/libosmogsm.map
@@ -274,6 +274,7 @@ gsm_band_parse;
gsm_fn2gsmtime;
gsm_get_octet_len;
gsm_gsmtime2fn;
+osmo_dump_gsmtime;
gsm_milenage;
gsm_septet_encode;