]> sigrok.org Git - libsigrok.git/blobdiff - src/libsigrok-internal.h
libsigrok-internal.h: add helper macro to read floats from unaligend memory.
[libsigrok.git] / src / libsigrok-internal.h
index a12b8d535d33633c26023a6471eb988e7e396d29..aff0fea690809b2b9c8da8db90d1c384c445272a 100644 (file)
                   ((unsigned)((const uint8_t*)(x))[1] <<  8) |  \
                    (unsigned)((const uint8_t*)(x))[0]))
 
+/**
+ * Read a 32 bits big endian float out of memory.
+ * @param x a pointer to the input memory
+ * @return the corresponding float
+ */
+#define RBFL(x)  ((union { uint32_t u; float f; }) { .u = RB32(x) }.f)
+
+/**
+ * Read a 32 bits little endian float out of memory.
+ * @param x a pointer to the input memory
+ * @return the corresponding float
+ */
+#define RLFL(x)  ((union { uint32_t u; float f; }) { .u = RL32(x) }.f)
+
 /**
  * Write a 8 bits unsigned integer to memory.
  * @param p a pointer to the output memory
                          ((uint8_t*)(p))[2] = (uint8_t)((x)>>16); \
                          ((uint8_t*)(p))[3] = (uint8_t)((x)>>24); } while (0)
 
+/**
+ * Write a 32 bits float to memory stored as big endian.
+ * @param p a pointer to the output memory
+ * @param x the input float
+ */
+#define WBFL(p, x)  WB32(p, (union { uint32_t u; float f; }) { .f = x }.u)
+
+/**
+ * Write a 32 bits float to memory stored as little endian.
+ * @param p a pointer to the output memory
+ * @param x the input float
+ */
+#define WLFL(p, x)  WL32(p, (union { uint32_t u; float f; }) { .f = x }.u)
+
 /* Portability fixes for FreeBSD. */
 #ifdef __FreeBSD__
 #define LIBUSB_CLASS_APPLICATION 0xfe
 #endif
 
 struct sr_context {
+       struct sr_dev_driver **driver_list;
 #ifdef HAVE_LIBUSB_1_0
        libusb_context *libusb_ctx;
        gboolean usb_source_present;
@@ -645,9 +674,11 @@ SR_PRIV void sr_usbtmc_dev_inst_free(struct sr_usbtmc_dev_inst *usbtmc);
 
 /*--- hwdriver.c ------------------------------------------------------------*/
 
+extern SR_PRIV struct sr_dev_driver **drivers_lists[];
+
 SR_PRIV const GVariantType *sr_variant_type_get(int datatype);
 SR_PRIV int sr_variant_type_check(uint32_t key, GVariant *data);
-SR_PRIV void sr_hw_cleanup_all(void);
+SR_PRIV void sr_hw_cleanup_all(const struct sr_context *ctx);
 SR_PRIV struct sr_config *sr_config_new(uint32_t key, GVariant *data);
 SR_PRIV void sr_config_free(struct sr_config *src);
 SR_PRIV int sr_source_remove(int fd);
@@ -663,6 +694,8 @@ SR_PRIV int sr_source_add_channel(GIOChannel *channel, int events, int timeout,
 /*--- session.c -------------------------------------------------------------*/
 
 struct sr_session {
+       /** Context this session exists in. */
+       struct sr_context *ctx;
        /** List of struct sr_dev_inst pointers. */
        GSList *devs;
        /** List of struct sr_dev_inst pointers owned by this session. */