utils: add function gsm_fn_as_gsmtime_str()

Convert a given frame number into a printable string that displays
the sub components of the frame number.

Change-Id: I8015d2ded3940b01b35df7b72fc35c70c25e9926
diff --git a/include/osmocom/gsm/gsm_utils.h b/include/osmocom/gsm/gsm_utils.h
index a879d33..bfcef08 100644
--- a/include/osmocom/gsm/gsm_utils.h
+++ b/include/osmocom/gsm/gsm_utils.h
@@ -165,6 +165,9 @@
 /* Convert from frame number to GSM time */
 void gsm_fn2gsmtime(struct gsm_time *time, uint32_t fn);
 
+/* Parse GSM Frame Number into printable string */
+char *gsm_fn_as_gsmtime_str(uint32_t fn);
+
 /* Convert from GSM time to frame number */
 uint32_t gsm_gsmtime2fn(struct gsm_time *time);
 
diff --git a/src/gsm/gsm_utils.c b/src/gsm/gsm_utils.c
index 2c980d2..477f076 100644
--- a/src/gsm/gsm_utils.c
+++ b/src/gsm/gsm_utils.c
@@ -750,6 +750,17 @@
 	time->tc = (time->fn / 51) % 8;
 }
 
+/*! Parse GSM Frame Number into printable string
+ *  \param[in] fn GSM Frame Number
+ *  \returns pointer to printable string */
+char *gsm_fn_as_gsmtime_str(uint32_t fn)
+{
+	struct gsm_time time;
+
+	gsm_fn2gsmtime(&time, fn);
+	return osmo_dump_gsmtime(&time);
+}
+
 /*! Encode decoded \ref gsm_time to Frame Number
  *  \param[in] time GSM Time in decoded structure
  *  \returns GSM Frame Number */
diff --git a/src/gsm/libosmogsm.map b/src/gsm/libosmogsm.map
index ad7e013..714cb25 100644
--- a/src/gsm/libosmogsm.map
+++ b/src/gsm/libosmogsm.map
@@ -272,6 +272,7 @@
 gsm_band_name;
 gsm_band_parse;
 gsm_fn2gsmtime;
+gsm_fn_as_gsmtime_str;
 gsm_get_octet_len;
 gsm_gsmtime2fn;
 osmo_dump_gsmtime;