* @param p a pointer to the output memory
* @param x the input unsigned integer
*/
-#define W8(p, x) do { ((uint8_t*)(p))[0] = (uint8_t) (x); } while(0)
+#define W8(p, x) do { ((uint8_t*)(p))[0] = (uint8_t) (x); } while (0)
/**
* Write a 16 bits unsigned integer to memory stored as big endian.
* @param x the input unsigned integer
*/
#define WB16(p, x) do { ((uint8_t*)(p))[1] = (uint8_t) (x); \
- ((uint8_t*)(p))[0] = (uint8_t)((x)>>8); } while(0)
+ ((uint8_t*)(p))[0] = (uint8_t)((x)>>8); } while (0)
/**
* Write a 16 bits unsigned integer to memory stored as little endian.
* @param x the input unsigned integer
*/
#define WL16(p, x) do { ((uint8_t*)(p))[0] = (uint8_t) (x); \
- ((uint8_t*)(p))[1] = (uint8_t)((x)>>8); } while(0)
+ ((uint8_t*)(p))[1] = (uint8_t)((x)>>8); } while (0)
/**
* Write a 32 bits unsigned integer to memory stored as big endian.
#define WB32(p, x) do { ((uint8_t*)(p))[3] = (uint8_t) (x); \
((uint8_t*)(p))[2] = (uint8_t)((x)>>8); \
((uint8_t*)(p))[1] = (uint8_t)((x)>>16); \
- ((uint8_t*)(p))[0] = (uint8_t)((x)>>24); } while(0)
+ ((uint8_t*)(p))[0] = (uint8_t)((x)>>24); } while (0)
/**
* Write a 32 bits unsigned integer to memory stored as little endian.
#define WL32(p, x) do { ((uint8_t*)(p))[0] = (uint8_t) (x); \
((uint8_t*)(p))[1] = (uint8_t)((x)>>8); \
((uint8_t*)(p))[2] = (uint8_t)((x)>>16); \
- ((uint8_t*)(p))[3] = (uint8_t)((x)>>24); } while(0)
+ ((uint8_t*)(p))[3] = (uint8_t)((x)>>24); } while (0)
/* Portability fixes for FreeBSD. */
#ifdef __FreeBSD__
#endif
struct sr_context {
+ struct sr_dev_driver **driver_list;
#ifdef HAVE_LIBUSB_1_0
libusb_context *libusb_ctx;
gboolean usb_source_present;
#ifdef _WIN32
GThread *usb_thread;
gboolean usb_thread_running;
- GMutex usb_mutex;
- HANDLE usb_event;
+ HANDLE usb_wait_request_event;
+ HANDLE usb_wait_complete_event;
GPollFD usb_pollfd;
sr_receive_data_callback usb_cb;
void *usb_cb_data;
int (*init) (struct sr_output *o, GHashTable *options);
/**
- * This function is passed a copy of every packed in the data feed.
+ * This function is passed a copy of every packet in the data feed.
* Any output generated by the output module in response to the
* packet should be returned in a newly allocated GString
* <code>out</code>, which will be freed by the caller.
/*--- 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);
/*--- 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. */