]> sigrok.org Git - libsigrok.git/blobdiff - src/libsigrok-internal.h
tests: cover length checking incrementing endianess readers
[libsigrok.git] / src / libsigrok-internal.h
index 8bd78eba3946f6f37954928a81ffe82339193212..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;