X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=output%2Fanalog.c;h=9029f099d3f9e51ddb60d0ea2da24ef2dc31b67f;hb=3b533202c8b32fbe785906e9930959aae077aeff;hp=c59399a27847167a1bb2335732d876643809a15d;hpb=133a37bfba1a7e1423716b2b872d3bb82a2e64d9;p=libsigrok.git diff --git a/output/analog.c b/output/analog.c index c59399a2..9029f099 100644 --- a/output/analog.c +++ b/output/analog.c @@ -1,7 +1,7 @@ /* * This file is part of the sigrok project. * - * Copyright (C) 2010 Bert Vermeulen + * Copyright (C) 2010-2012 Bert Vermeulen * Copyright (C) 2011 HÃ¥vard Espeland * Copyright (C) 2011 Daniel Ribeiro * @@ -41,8 +41,8 @@ struct context { unsigned int unitsize; int line_offset; int linebuf_len; - char *probelist[65]; - char *linebuf; + char *probelist[SR_MAX_NUM_PROBES + 1]; + uint8_t *linebuf; int spl_cnt; uint8_t *linevalues; char *header; @@ -51,7 +51,7 @@ struct context { enum outputmode mode; }; -static void flush_linebufs(struct context *ctx, char *outbuf) +static void flush_linebufs(struct context *ctx, uint8_t *outbuf) { static int max_probename_len = 0; int len, i; @@ -105,7 +105,7 @@ static int init(struct sr_output *o, int default_spl, enum outputmode mode) o->internal = ctx; ctx->num_enabled_probes = 0; - for (l = o->device->probes; l; l = l->next) { + for (l = o->dev->probes; l; l = l->next) { probe = l->data; if (!probe->enabled) continue; @@ -134,10 +134,10 @@ static int init(struct sr_output *o, int default_spl, enum outputmode mode) } snprintf(ctx->header, 511, "%s\n", PACKAGE_STRING); - num_probes = g_slist_length(o->device->probes); - if (o->device->plugin && sr_device_has_hwcap(o->device, SR_HWCAP_SAMPLERATE)) { - samplerate = *((uint64_t *) o->device->plugin->get_device_info( - o->device->plugin_index, SR_DI_CUR_SAMPLERATE)); + num_probes = g_slist_length(o->dev->probes); + if (o->dev->driver && sr_dev_has_hwcap(o->dev, SR_HWCAP_SAMPLERATE)) { + samplerate = *((uint64_t *) o->dev->driver->dev_info_get( + o->dev->driver_index, SR_DI_CUR_SAMPLERATE)); if (!(samplerate_s = sr_samplerate_string(samplerate))) { g_free(ctx->header); g_free(ctx); @@ -168,12 +168,12 @@ static int init(struct sr_output *o, int default_spl, enum outputmode mode) return SR_OK; } -static int event(struct sr_output *o, int event_type, char **data_out, +static int event(struct sr_output *o, int event_type, uint8_t **data_out, uint64_t *length_out) { struct context *ctx; int outsize; - char *outbuf; + uint8_t *outbuf; ctx = o->internal; switch (event_type) { @@ -210,14 +210,15 @@ static int init_bits(struct sr_output *o) return init(o, DEFAULT_BPL_BITS, MODE_BITS); } -static int data_bits(struct sr_output *o, const char *data_in, - uint64_t length_in, char **data_out, uint64_t *length_out) +static int data_bits(struct sr_output *o, const uint8_t *data_in, + uint64_t length_in, uint8_t **data_out, + uint64_t *length_out) { struct context *ctx; unsigned int outsize, offset, p; int max_linelen; struct sr_analog_sample *sample; - char *outbuf, c; + uint8_t *outbuf, c; ctx = o->internal; max_linelen = SR_MAX_PROBENAME_LEN + 3 + ctx->samples_per_line @@ -284,7 +285,8 @@ static int data_bits(struct sr_output *o, const char *data_in, } } } else { - sr_info("short buffer (length_in=%" PRIu64 ")", length_in); + sr_info("analog out: short buffer (length_in=%" PRIu64 ")", + length_in); } *data_out = outbuf; @@ -298,14 +300,15 @@ static int init_hex(struct sr_output *o) return init(o, DEFAULT_BPL_HEX, MODE_HEX); } -static int data_hex(struct sr_output *o, const char *data_in, - uint64_t length_in, char **data_out, uint64_t *length_out) +static int data_hex(struct sr_output *o, const uint8_t *data_in, + uint64_t length_in, uint8_t **data_out, + uint64_t *length_out) { struct context *ctx; unsigned int outsize, offset, p; int max_linelen; uint64_t sample; - char *outbuf; + uint8_t *outbuf; ctx = o->internal; max_linelen = SR_MAX_PROBENAME_LEN + 3 + ctx->samples_per_line @@ -365,14 +368,15 @@ static int init_ascii(struct sr_output *o) return init(o, DEFAULT_BPL_ASCII, MODE_ASCII); } -static int data_ascii(struct sr_output *o, const char *data_in, - uint64_t length_in, char **data_out, uint64_t *length_out) +static int data_ascii(struct sr_output *o, const uint8_t *data_in, + uint64_t length_in, uint8_t **data_out, + uint64_t *length_out) { struct context *ctx; unsigned int outsize, offset, p; int max_linelen; uint64_t sample; - char *outbuf; + uint8_t *outbuf; ctx = o->internal; max_linelen = SR_MAX_PROBENAME_LEN + 3 + ctx->samples_per_line @@ -442,7 +446,8 @@ static int data_ascii(struct sr_output *o, const char *data_in, ctx->prevsample = sample; } } else { - sr_info("short buffer (length_in=%" PRIu64 ")", length_in); + sr_info("analog out: short buffer (length_in=%" PRIu64 ")", + length_in); } *data_out = outbuf; @@ -454,7 +459,7 @@ static int data_ascii(struct sr_output *o, const char *data_in, SR_PRIV struct sr_output_format output_analog_bits = { .id = "analog_bits", - .description = "Bits (takes argument, default 64)", + .description = "Bits", .df_type = SR_DF_ANALOG, .init = init_bits, .data = data_bits, @@ -464,7 +469,7 @@ SR_PRIV struct sr_output_format output_analog_bits = { #if 0 struct sr_output_format output_analog_hex = { .id = "analog_hex", - .description = "Hexadecimal (takes argument, default 192)", + .description = "Hexadecimal", .df_type = SR_DF_ANALOG, .init = init_hex, .data = data_hex, @@ -473,7 +478,7 @@ struct sr_output_format output_analog_hex = { struct sr_output_format output_analog_ascii = { .id = "analog_ascii", - .description = "ASCII (takes argument, default 74)", + .description = "ASCII", .df_type = SR_DF_ANALOG, .init = init_ascii, .data = data_ascii,