X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Flibsigrok-internal.h;h=7a5b717d6d4c7482534a185fbb30ab67e48e2cb4;hb=0df44c768015107e1bcc40b65e6d7f96137be678;hp=9111bc37cb07eeff729ef5b6271745e501599f64;hpb=4c29bba1f076dd70fc3b6ad2eb950a555b612c06;p=libsigrok.git diff --git a/src/libsigrok-internal.h b/src/libsigrok-internal.h index 9111bc37..7a5b717d 100644 --- a/src/libsigrok-internal.h +++ b/src/libsigrok-internal.h @@ -475,6 +475,22 @@ static inline void write_u32le(uint8_t *p, uint32_t x) } #define WL32(p, x) write_u32le((uint8_t *)(p), (uint32_t)(x)) +/** + * Write a 48 bits unsigned integer to memory stored as little endian. + * @param p a pointer to the output memory + * @param x the input unsigned integer + */ +static inline void write_u48le(uint8_t *p, uint64_t x) +{ + p[0] = x & 0xff; x >>= 8; + p[1] = x & 0xff; x >>= 8; + p[2] = x & 0xff; x >>= 8; + p[3] = x & 0xff; x >>= 8; + p[4] = x & 0xff; x >>= 8; + p[5] = x & 0xff; x >>= 8; +} +#define WL48(p, x) write_u48le((uint8_t *)(p), (uint64_t)(x)) + /** * Write a 64 bits unsigned integer to memory stored as big endian. * @param p a pointer to the output memory @@ -905,6 +921,19 @@ static inline void write_u32le_inc(uint8_t **p, uint32_t x) *p += sizeof(x); } +/** + * Write unsigned 48bit little endian integer to raw memory, increment write position. + * @param[in, out] p Pointer into byte stream. + * @param[in] x Value to write. + */ +static inline void write_u48le_inc(uint8_t **p, uint64_t x) +{ + if (!p || !*p) + return; + write_u48le(*p, x); + *p += 48 / 8 * sizeof(uint8_t); +} + /** * Write unsigned 64bit little endian integer to raw memory, increment write position. * @param[in, out] p Pointer into byte stream. @@ -2642,6 +2671,9 @@ SR_PRIV int sr_sw_limits_config_set(struct sr_sw_limits *limits, uint32_t key, GVariant *data); SR_PRIV void sr_sw_limits_acquisition_start(struct sr_sw_limits *limits); SR_PRIV gboolean sr_sw_limits_check(struct sr_sw_limits *limits); +SR_PRIV int sr_sw_limits_get_remain(const struct sr_sw_limits *limits, + uint64_t *samples, uint64_t *frames, uint64_t *msecs, + gboolean *exceeded); SR_PRIV void sr_sw_limits_update_samples_read(struct sr_sw_limits *limits, uint64_t samples_read); SR_PRIV void sr_sw_limits_update_frames_read(struct sr_sw_limits *limits, @@ -2654,7 +2686,7 @@ struct feed_queue_logic; struct feed_queue_analog; SR_API struct feed_queue_logic *feed_queue_logic_alloc( - struct sr_dev_inst *sdi, + const struct sr_dev_inst *sdi, size_t sample_count, size_t unit_size); SR_API int feed_queue_logic_submit(struct feed_queue_logic *q, const uint8_t *data, size_t count); @@ -2662,7 +2694,7 @@ SR_API int feed_queue_logic_flush(struct feed_queue_logic *q); SR_API void feed_queue_logic_free(struct feed_queue_logic *q); SR_API struct feed_queue_analog *feed_queue_analog_alloc( - struct sr_dev_inst *sdi, + const struct sr_dev_inst *sdi, size_t sample_count, int digits, struct sr_channel *ch); SR_API int feed_queue_analog_submit(struct feed_queue_analog *q, float data, size_t count);