X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fbinary_helpers.c;h=e8547a01103686260714fc6094f41d64c8a3a57d;hb=1fa04876398ded830b40e44c8055e01c5e2fb977;hp=a15f5cfba8acf978697096b0258961918409fb27;hpb=01671e567e50a716b5368d68055fc63684ec9fbf;p=libsigrok.git diff --git a/src/binary_helpers.c b/src/binary_helpers.c index a15f5cfb..e8547a01 100644 --- a/src/binary_helpers.c +++ b/src/binary_helpers.c @@ -23,7 +23,7 @@ #include "libsigrok-internal.h" SR_PRIV int bv_get_value(float *out, const struct binary_value_spec *spec, - const void *data, size_t length) + const uint8_t *data, size_t length) { float value; @@ -38,17 +38,19 @@ SR_PRIV int bv_get_value(float *out, const struct binary_value_spec *spec, break switch (spec->type) { - VALUE_TYPE(BVT_UINT8, R8, sizeof(uint8_t)); + VALUE_TYPE(BVT_UINT8, read_u8, sizeof(uint8_t)); - VALUE_TYPE(BVT_BE_UINT16, RB16, sizeof(uint16_t)); - VALUE_TYPE(BVT_BE_UINT32, RB32, sizeof(uint32_t)); - VALUE_TYPE(BVT_BE_UINT64, RB64, sizeof(uint64_t)); - VALUE_TYPE(BVT_BE_FLOAT, RBFL, sizeof(float)); + VALUE_TYPE(BVT_BE_UINT16, read_u16be, sizeof(uint16_t)); + VALUE_TYPE(BVT_BE_UINT24, read_u24be, 3 * sizeof(uint8_t)); + VALUE_TYPE(BVT_BE_UINT32, read_u32be, sizeof(uint32_t)); + VALUE_TYPE(BVT_BE_UINT64, read_u64be, sizeof(uint64_t)); + VALUE_TYPE(BVT_BE_FLOAT, read_fltbe, sizeof(float)); - VALUE_TYPE(BVT_LE_UINT16, RL16, sizeof(uint16_t)); - VALUE_TYPE(BVT_LE_UINT32, RL32, sizeof(uint32_t)); - VALUE_TYPE(BVT_LE_UINT64, RL64, sizeof(uint64_t)); - VALUE_TYPE(BVT_LE_FLOAT, RLFL, sizeof(float)); + VALUE_TYPE(BVT_LE_UINT16, read_u16le, sizeof(uint16_t)); + VALUE_TYPE(BVT_LE_UINT24, read_u24le, 3 * sizeof(uint8_t)); + VALUE_TYPE(BVT_LE_UINT32, read_u32le, sizeof(uint32_t)); + VALUE_TYPE(BVT_LE_UINT64, read_u64le, sizeof(uint64_t)); + VALUE_TYPE(BVT_LE_FLOAT, read_fltle, sizeof(float)); default: return SR_ERR_ARG; @@ -56,52 +58,7 @@ SR_PRIV int bv_get_value(float *out, const struct binary_value_spec *spec, #undef VALUE_TYPE - *out = value * spec->scale; + if (out) + *out = value; return SR_OK; } - -SR_PRIV int bv_send_analog_channel(const struct sr_dev_inst *sdi, - struct sr_channel *ch, const struct binary_analog_channel *bac, - const void *data, size_t length) -{ - int err; - struct sr_analog_encoding encoding; - struct sr_analog_meaning meaning; - struct sr_analog_spec spec; - struct sr_datafeed_analog analog; - struct sr_datafeed_packet packet = { - .type = SR_DF_ANALOG, - .payload = &analog, - }; - float value; - - err = bv_get_value(&value, &bac->spec, data, length); - if (err != SR_OK) - goto err_out; - - err = sr_analog_init(&analog, &encoding, &meaning, &spec, bac->digits); - if (err != SR_OK) - goto err_out; - - meaning.mq = bac->mq; - meaning.unit = bac->unit; - meaning.mqflags = 0; - meaning.channels = g_slist_append(NULL, ch); - - spec.spec_digits = bac->digits; - - analog.data = &value; - analog.num_samples = 1; - - err = sr_session_send(sdi, &packet); - if (err != SR_OK) - goto err_free; - - return SR_OK; - -err_free: - g_slist_free(meaning.channels); - -err_out: - return err; -}