]> sigrok.org Git - libsigrok.git/blobdiff - output/chronovu_la8.c
analog: if no MQ unit was set of recognized, just print the value
[libsigrok.git] / output / chronovu_la8.c
index 6ef99dafbfc6621cb58d9f7c67385af8c840de16..688e1b54bd3f521e962a6c97036294d431d7bc1c 100644 (file)
@@ -21,8 +21,8 @@
 #include <stdlib.h>
 #include <string.h>
 #include <glib.h>
-#include "sigrok.h"
-#include "sigrok-internal.h"
+#include "libsigrok.h"
+#include "libsigrok-internal.h"
 
 struct context {
        unsigned int num_enabled_probes;
@@ -36,6 +36,7 @@ struct context {
  * Check if the given samplerate is supported by the LA8 hardware.
  *
  * @param samplerate The samplerate (in Hz) to check.
+ *
  * @return 1 if the samplerate is supported/valid, 0 otherwise.
  */
 static int is_valid_samplerate(uint64_t samplerate)
@@ -61,6 +62,7 @@ static int is_valid_samplerate(uint64_t samplerate)
  * Max. value for divcount: 0xfe (2550ns sample period, 392.15kHz samplerate).
  *
  * @param samplerate The samplerate in Hz.
+ *
  * @return The divcount value as needed by the hardware, or 0xff upon errors.
  */
 static uint8_t samplerate_to_divcount(uint64_t samplerate)
@@ -84,34 +86,32 @@ static int init(struct sr_output *o)
        struct context *ctx;
        struct sr_probe *probe;
        GSList *l;
-       int num_probes;
-       uint64_t samplerate;
+       uint64_t *samplerate;
 
        if (!o) {
                sr_warn("la8 out: %s: o was NULL", __func__);
                return SR_ERR_ARG;
        }
 
-       if (!o->device) {
-               sr_warn("la8 out: %s: o->device was NULL", __func__);
+       if (!o->sdi) {
+               sr_warn("la8 out: %s: o->sdi was NULL", __func__);
                return SR_ERR_ARG;
        }
 
-       if (!o->device->plugin) {
-               sr_warn("la8 out: %s: o->device->plugin was NULL", __func__);
+       if (!o->sdi->driver) {
+               sr_warn("la8 out: %s: o->sdi->driver was NULL", __func__);
                return SR_ERR_ARG;
        }
 
-       if (!(ctx = calloc(1, sizeof(struct context)))) {
-               sr_warn("la8 out: %s: ctx calloc failed", __func__);
+       if (!(ctx = g_try_malloc0(sizeof(struct context)))) {
+               sr_warn("la8 out: %s: ctx malloc failed", __func__);
                return SR_ERR_MALLOC;
        }
 
        o->internal = ctx;
 
-       /* Get the number of probes, their names, and the unitsize. */
-       /* TODO: Error handling. */
-       for (l = o->device->probes; l; l = l->next) {
+       /* Get the probe names and the unitsize. */
+       for (l = o->sdi->probes; l; l = l->next) {
                probe = l->data;
                if (!probe->enabled)
                        continue;
@@ -120,25 +120,21 @@ static int init(struct sr_output *o)
        ctx->probelist[ctx->num_enabled_probes] = 0;
        ctx->unitsize = (ctx->num_enabled_probes + 7) / 8;
 
-       num_probes = g_slist_length(o->device->probes);
+       if (sr_dev_has_hwcap(o->sdi, SR_HWCAP_SAMPLERATE)) {
+               o->sdi->driver->info_get(SR_DI_CUR_SAMPLERATE,
+                               (const void **)&samplerate, o->sdi);
+               ctx->samplerate = *samplerate;
+       } else
+               ctx->samplerate = 0;
 
-       if (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));
-               /* TODO: Error checks. */
-       } else {
-               samplerate = 0; /* TODO: Error or set some value? */
-       }
-       ctx->samplerate = samplerate;
-
-       return 0; /* TODO: SR_OK? */
+       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;
-       char *outbuf;
+       uint8_t *outbuf;
 
        if (!o) {
                sr_warn("la8 out: %s: o was NULL", __func__);
@@ -163,7 +159,7 @@ static int event(struct sr_output *o, int event_type, char **data_out,
                break;
        case SR_DF_END:
                sr_dbg("la8 out: %s: SR_DF_END event", __func__);
-               if (!(outbuf = malloc(4 + 1))) {
+               if (!(outbuf = g_try_malloc(4 + 1))) {
                        sr_warn("la8 out: %s: outbuf malloc failed", __func__);
                        return SR_ERR_MALLOC;
                }
@@ -183,7 +179,7 @@ static int event(struct sr_output *o, int event_type, char **data_out,
 
                *data_out = outbuf;
                *length_out = 4 + 1;
-               free(o->internal);
+               g_free(o->internal);
                o->internal = NULL;
                break;
        default:
@@ -197,11 +193,11 @@ static int event(struct sr_output *o, int event_type, char **data_out,
        return SR_OK;
 }
 
-static int data(struct sr_output *o, const char *data_in, uint64_t length_in,
-               char **data_out, uint64_t *length_out)
+static int data(struct sr_output *o, const uint8_t *data_in,
+               uint64_t length_in, uint8_t **data_out, uint64_t *length_out)
 {
        struct context *ctx;
-       char *outbuf;
+       uint8_t *outbuf;
 
        if (!o) {
                sr_warn("la8 out: %s: o was NULL", __func__);
@@ -218,8 +214,8 @@ static int data(struct sr_output *o, const char *data_in, uint64_t length_in,
                return SR_ERR_ARG;
        }
 
-       if (!(outbuf = calloc(1, length_in))) {
-               sr_warn("la8 out: %s: outbuf calloc failed", __func__);
+       if (!(outbuf = g_try_malloc0(length_in))) {
+               sr_warn("la8 out: %s: outbuf malloc failed", __func__);
                return SR_ERR_MALLOC;
        }