]> sigrok.org Git - libsigrok.git/blobdiff - src/libsigrok-internal.h
tests: cover length checking incrementing endianess readers
[libsigrok.git] / src / libsigrok-internal.h
index db74dcc27e515f04b364c9425b9c5b48a5cb7f9a..06c227bb5b4ceb2d150b8cd06ffc2db4364f7cda 100644 (file)
@@ -615,6 +615,30 @@ static inline uint8_t read_u8_inc(const uint8_t **p)
        return v;
 }
 
+/**
+ * Read unsigned 8bit integer, check length, increment read position.
+ * @param[in, out] p Pointer into byte stream.
+ * @param[in, out] l Remaining input payload length.
+ * @return Retrieved integer value, unsigned.
+ */
+static inline uint8_t read_u8_inc_len(const uint8_t **p, size_t *l)
+{
+       uint8_t v;
+
+       if (!p || !*p)
+               return 0;
+       if (l && *l < sizeof(v)) {
+               *l = 0;
+               return 0;
+       }
+       v = read_u8(*p);
+       *p += sizeof(v);
+       if (l)
+               *l -= sizeof(v);
+
+       return v;
+}
+
 /**
  * Read signed 8bit integer from raw memory, increment read position.
  * @param[in, out] p Pointer into byte stream.
@@ -666,6 +690,30 @@ static inline uint16_t read_u16le_inc(const uint8_t **p)
        return v;
 }
 
+/**
+ * Read unsigned 16bit integer (LE format), check length, increment position.
+ * @param[in, out] p Pointer into byte stream.
+ * @param[in, out] l Remaining input payload length.
+ * @return Retrieved integer value, unsigned.
+ */
+static inline uint16_t read_u16le_inc_len(const uint8_t **p, size_t *l)
+{
+       uint16_t v;
+
+       if (!p || !*p)
+               return 0;
+       if (l && *l < sizeof(v)) {
+               *l = 0;
+               return 0;
+       }
+       v = read_u16le(*p);
+       *p += sizeof(v);
+       if (l)
+               *l -= sizeof(v);
+
+       return v;
+}
+
 /**
  * Read signed 16bit integer from raw memory (big endian format), increment read position.
  * @param[in, out] p Pointer into byte stream.
@@ -1572,6 +1620,7 @@ struct sr_serial_dev_inst {
                SER_BT_CONN_BLE122,     /**!< BLE, BLE122 module, indications */
                SER_BT_CONN_NRF51,      /**!< BLE, Nordic nRF51, notifications */
                SER_BT_CONN_CC254x,     /**!< BLE, TI CC254x, notifications */
+               SER_BT_CONN_AC6328,     /**!< BLE, JL AC6328B, notifications */
                SER_BT_CONN_MAX,        /**!< sentinel */
        } bt_conn_type;
        char *bt_addr_local;
@@ -2126,6 +2175,8 @@ SR_PRIV int ezusb_upload_firmware(struct sr_context *ctx, libusb_device *dev,
 
 /*--- usb.c -----------------------------------------------------------------*/
 
+SR_PRIV int sr_usb_split_conn(const char *conn,
+       uint16_t *vid, uint16_t *pid, uint8_t *bus, uint8_t *addr);
 #ifdef HAVE_LIBUSB_1_0
 SR_PRIV GSList *sr_usb_find(libusb_context *usb_ctx, const char *conn);
 SR_PRIV int sr_usb_open(libusb_context *usb_ctx, struct sr_usb_dev_inst *usb);
@@ -2161,52 +2212,23 @@ enum binary_value_type {
 
 /** Binary value specification */
 struct binary_value_spec {
-       /** Offset into binary blob */
-       size_t offset;
-       /** Data type to decode */
-       enum binary_value_type type;
-       /** Scale factor to get native units */
-       float scale;
-};
-
-/** Binary channel definition */
-struct binary_analog_channel {
-       /** Channel name */
-       const char *name;
-       /** Binary value in data stream */
-       struct binary_value_spec spec;
-       /** Significant digits */
-       int digits;
-       /** Measured quantity */
-       enum sr_mq mq;
-       /** Measured unit */
-       enum sr_unit unit;
+       size_t offset;                  /**!< Offset into binary image */
+       enum binary_value_type type;    /**!< Data type to decode */
+       float scale;                    /**!< Scale factor to native units */
 };
 
 /**
- * Read extract a value from a binary blob.
+ * Read extract a value from a binary data image.
  *
- * @param out Pointer to output buffer.
- * @param spec Binary value specification
- * @param data Pointer to binary blob
- * @param length Size of binary blob
- * @return SR_OK on success, SR_ERR_* error code on failure.
- */
-SR_PRIV int bv_get_value(float *out, const struct binary_value_spec *spec, const void *data, size_t length);
-
-/**
- * Send an analog channel packet based on a binary analog channel
- * specification.
+ * @param[out] out Pointer to output buffer (conversion result)
+ * @param[in] spec Binary value specification
+ * @param[in] data Pointer to binary input data
+ * @param[in] length Size of binary input data
  *
- * @param sdi Device instance
- * @param ch Sigrok channel
- * @param spec Channel specification
- * @param data Pointer to binary blob
- * @param length Size of binary blob
  * @return SR_OK on success, SR_ERR_* error code on failure.
  */
-SR_PRIV int bv_send_analog_channel(const struct sr_dev_inst *sdi, struct sr_channel *ch,
-                                  const struct binary_analog_channel *spec, const void *data, size_t length);
+SR_PRIV int bv_get_value(float *out, const struct binary_value_spec *spec,
+       const void *data, size_t length);
 
 /*--- crc.c -----------------------------------------------------------------*/
 
@@ -2778,6 +2800,10 @@ SR_API void feed_queue_logic_free(struct feed_queue_logic *q);
 SR_API struct feed_queue_analog *feed_queue_analog_alloc(
        const struct sr_dev_inst *sdi,
        size_t sample_count, int digits, struct sr_channel *ch);
+SR_API int feed_queue_analog_mq_unit(struct feed_queue_analog *q,
+       enum sr_mq mq, enum sr_mqflag mq_flag, enum sr_unit unit);
+SR_API int feed_queue_analog_scale_offset(struct feed_queue_analog *q,
+       const struct sr_rational *scale, const struct sr_rational *offset);
 SR_API int feed_queue_analog_submit(struct feed_queue_analog *q,
        float data, size_t count);
 SR_API int feed_queue_analog_flush(struct feed_queue_analog *q);