#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 {
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)
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);
}
}
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
};
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,