[PATCH 1/2] Suunto EON Steel: add descriptor debugging output

Linus Torvalds torvalds at linux-foundation.org
Tue Jun 21 12:37:13 PDT 2016


From: Linus Torvalds <torvalds at linux-foundation.org>
Date: Mon, 20 Jun 2016 22:04:27 -0700
Subject: [PATCH 1/2] Suunto EON Steel: add descriptor debugging output

.. every time I look for a new feature I add debug code to print out all
the descriptors.  So let's just do it once and for all.

Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
---

This literally just dumps out the EON Steel type descriptor information 
that we have parsed to the logfile. So you end up with something like

  ..
  DEBUG: Descriptor 39: 'sml.DeviceLog.Samples.Sample.Events.SetPoint.PO2', size 4 bytes
  DEBUG:     format 'uint32'
  ..

in the debug logs for each data descriptor.

 src/suunto_eonsteel_parser.c | 37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/src/suunto_eonsteel_parser.c b/src/suunto_eonsteel_parser.c
index 276eaa247363..bc40f491890f 100644
--- a/src/suunto_eonsteel_parser.c
+++ b/src/suunto_eonsteel_parser.c
@@ -101,6 +101,7 @@ static const struct {
 	const char *name;
 	enum eon_sample type;
 } type_translation[] = {
+	{ "+Time",				ES_dtime },
 	{ "Depth",				ES_depth },
 	{ "Temperature",			ES_temp },
 	{ "NoDecTime",				ES_ndl },
@@ -158,6 +159,16 @@ static enum eon_sample lookup_descriptor_type(suunto_eonsteel_parser_t *eon, str
 	return ES_none;
 }
 
+static const char *desc_type_name(enum eon_sample type)
+{
+	int i;
+	for (i = 0; i < C_ARRAY_SIZE(type_translation); i++) {
+		if (type == type_translation[i].type)
+			return type_translation[i].name;
+	}
+	return "Unknown";
+}
+
 static int lookup_descriptor_size(suunto_eonsteel_parser_t *eon, struct type_desc *desc)
 {
 	const char *format = desc->format;
@@ -1286,6 +1297,31 @@ static void initialize_field_caches(suunto_eonsteel_parser_t *eon)
 	eon->cache.divetime /= 1000;
 }
 
+static void show_descriptor(suunto_eonsteel_parser_t *eon, int nr, struct type_desc *desc)
+{
+	int i;
+
+	if (!desc->desc)
+		return;
+	DEBUG(eon->base.context, "Descriptor %d: '%s', size %d bytes", nr, desc->desc, desc->size);
+	if (desc->format)
+		DEBUG(eon->base.context, "    format '%s'", desc->format);
+	if (desc->mod)
+		DEBUG(eon->base.context, "    mod '%s'", desc->mod);
+	for (i = 0; i < EON_MAX_GROUP; i++) {
+		enum eon_sample type = desc->type[i];
+		if (!type)
+			continue;
+		DEBUG(eon->base.context, "    %d: %d (%s)", i, type, desc_type_name(type));
+	}
+}
+
+static void show_all_descriptors(suunto_eonsteel_parser_t *eon)
+{
+	for (unsigned int i = 0; i < MAXTYPE; ++i)
+		show_descriptor(eon, i, eon->type_desc+i);
+}
+
 static dc_status_t
 suunto_eonsteel_parser_set_data(dc_parser_t *parser, const unsigned char *data, unsigned int size)
 {
@@ -1294,6 +1330,7 @@ suunto_eonsteel_parser_set_data(dc_parser_t *parser, const unsigned char *data,
 	desc_free(eon->type_desc, MAXTYPE);
 	memset(eon->type_desc, 0, sizeof(eon->type_desc));
 	initialize_field_caches(eon);
+	show_all_descriptors(eon);
 	return DC_STATUS_SUCCESS;
 }
 
-- 
2.9.0.rc1.20.g6326f19



More information about the subsurface mailing list