/*
- * This file is part of the sigrok project.
+ * This file is part of the libsigrok project.
*
* Copyright (C) 2010-2012 Bert Vermeulen <bert@biot.com>
* Copyright (C) 2011 HÃ¥vard Espeland <gus@ping.uio.no>
#include "libsigrok-internal.h"
#include "text.h"
-/* Message logging helpers with driver-specific prefix string. */
-#define DRIVER_LOG_DOMAIN "output/ascii: "
-#define sr_log(l, s, args...) sr_log(l, DRIVER_LOG_DOMAIN s, ## args)
-#define sr_spew(s, args...) sr_spew(DRIVER_LOG_DOMAIN s, ## args)
-#define sr_dbg(s, args...) sr_dbg(DRIVER_LOG_DOMAIN s, ## args)
-#define sr_info(s, args...) sr_info(DRIVER_LOG_DOMAIN s, ## args)
-#define sr_warn(s, args...) sr_warn(DRIVER_LOG_DOMAIN s, ## args)
-#define sr_err(s, args...) sr_err(DRIVER_LOG_DOMAIN s, ## args)
+#define LOG_PREFIX "output/ascii"
SR_PRIV int init_ascii(struct sr_output *o)
{
struct context *ctx;
unsigned int outsize, offset, p;
int max_linelen;
- uint64_t sample;
+ const uint8_t *sample;
uint8_t *outbuf;
ctx = o->internal;
* extra output, e.g. trigger.
*/
outsize = 512 + (1 + (length_in / ctx->unitsize) / ctx->samples_per_line)
- * (ctx->num_enabled_probes * max_linelen);
+ * (ctx->num_enabled_channels * max_linelen);
if (!(outbuf = g_try_malloc0(outsize + 1))) {
sr_err("%s: outbuf malloc failed", __func__);
if (length_in >= ctx->unitsize) {
for (offset = 0; offset <= length_in - ctx->unitsize;
offset += ctx->unitsize) {
- memcpy(&sample, data_in + offset, ctx->unitsize);
+ sample = data_in + offset;
- char tmpval[ctx->num_enabled_probes];
+ char tmpval[ctx->num_enabled_channels];
- for (p = 0; p < ctx->num_enabled_probes; p++) {
- uint64_t curbit = (sample & ((uint64_t) 1 << p));
- uint64_t prevbit = (ctx->prevsample &
- ((uint64_t) 1 << p));
+ for (p = 0; p < ctx->num_enabled_channels; p++) {
+ uint8_t curbit = (sample[p / 8] & ((uint8_t) 1 << (p % 8)));
+ uint8_t prevbit = (ctx->prevsample[p / 8] &
+ ((uint8_t) 1 << (p % 8)));
if (curbit < prevbit && ctx->line_offset > 0) {
ctx->linebuf[p * ctx->linebuf_len +
ctx->mark_trigger = -1;
}
- for (p = 0; p < ctx->num_enabled_probes; p++) {
+ for (p = 0; p < ctx->num_enabled_channels; p++) {
ctx->linebuf[p * ctx->linebuf_len +
ctx->line_offset] = tmpval[p];
}
ctx->line_offset++;
ctx->spl_cnt++;
- ctx->prevsample = sample;
+ memcpy(ctx->prevsample, sample, ctx->unitsize);
}
} else {
sr_info("Short buffer (length_in=%" PRIu64 ").", length_in);
.init = init_ascii,
.data = data_ascii,
.event = event,
+ .cleanup = text_cleanup,
};