]> sigrok.org Git - libsigrok.git/blobdiff - src/input/chronovu_la8.c
input/chronovu_la8: address file size data type nits
[libsigrok.git] / src / input / chronovu_la8.c
index 531258ff947835a425a5105b33e7827b7f6f2ea4..e83d58229118c5503a16d07bd3afa4d91cb7fd13 100644 (file)
@@ -29,7 +29,7 @@
 
 #define DEFAULT_NUM_CHANNELS    8
 #define DEFAULT_SAMPLERATE      SR_MHZ(100)
-#define MAX_CHUNK_SIZE          (4 * 1024)
+#define CHUNK_SIZE              (4 * 1024 * 1024)
 #define CHRONOVU_LA8_FILESIZE   ((8 * 1024 * 1024) + 5)
 
 struct context {
@@ -37,16 +37,23 @@ struct context {
        uint64_t samplerate;
 };
 
-static int format_match(GHashTable *metadata)
+static int format_match(GHashTable *metadata, unsigned int *confidence)
 {
-       int size;
-
-       size = GPOINTER_TO_INT(g_hash_table_lookup(metadata,
+       uint64_t size;
+
+       /*
+        * In the absence of a reliable condition like magic strings,
+        * we can only guess based on the file size. Since this is
+        * rather weak a condition, signal "little confidence" and
+        * optionally give precedence to better matches.
+        */
+       size = GPOINTER_TO_SIZE(g_hash_table_lookup(metadata,
                        GINT_TO_POINTER(SR_INPUT_META_FILESIZE)));
-       if (size == CHRONOVU_LA8_FILESIZE)
-               return SR_OK;
+       if (size != CHRONOVU_LA8_FILESIZE)
+               return SR_ERR;
+       *confidence = 100;
 
-       return SR_ERR;
+       return SR_OK;
 }
 
 static int init(struct sr_input *in, GHashTable *options)
@@ -110,7 +117,7 @@ static int process_buffer(struct sr_input *in)
 
        for (i = 0; i < chunk_size; i += chunk) {
                logic.data = in->buf->str + i;
-               chunk = MIN(MAX_CHUNK_SIZE, chunk_size - i);
+               chunk = MIN(CHUNK_SIZE, chunk_size - i);
                logic.length = chunk;
                sr_session_send(in->sdi, &packet);
        }
@@ -164,8 +171,8 @@ static int reset(struct sr_input *in)
 }
 
 static struct sr_option options[] = {
-       { "numchannels", "Number of channels", "Number of channels", NULL, NULL },
-       { "samplerate", "Sample rate", "Sample rate", NULL, NULL },
+       { "numchannels", "Number of logic channels", "The number of (logic) channels in the data", NULL, NULL },
+       { "samplerate", "Sample rate (Hz)", "The sample rate of the (logic) data in Hz", NULL, NULL },
        ALL_ZERO
 };
 
@@ -181,8 +188,8 @@ static const struct sr_option *get_options(void)
 
 SR_PRIV struct sr_input_module input_chronovu_la8 = {
        .id = "chronovu-la8",
-       .name = "Chronovu-LA8",
-       .desc = "ChronoVu LA8",
+       .name = "ChronoVu LA8",
+       .desc = "ChronoVu LA8 native file format data",
        .exts = (const char*[]){"kdt", NULL},
        .metadata = { SR_INPUT_META_FILESIZE | SR_INPUT_META_REQUIRED },
        .options = get_options,