X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=libsigrok-internal.h;h=61978c297911b73a91c4f7bce4f98058d06eadf6;hb=170fbcb3f769e89a9f1d1d2394986dbc5a78ec21;hp=d9def32e034adfc2c977870fde2373ff0de5bbee;hpb=ba1949f583de322e74f43eb880529155a763a84f;p=libsigrok.git diff --git a/libsigrok-internal.h b/libsigrok-internal.h index d9def32e..61978c29 100644 --- a/libsigrok-internal.h +++ b/libsigrok-internal.h @@ -50,6 +50,42 @@ #define ARRAY_AND_SIZE(a) (a), ARRAY_SIZE(a) #endif +/** + * Read a 16 bits big endian integer out of memory. + * @param x a pointer to the input memory + * @return the corresponding integer + */ +#define RB16(x) ((((const uint8_t*)(x))[0] << 8) | \ + ((const uint8_t*)(x))[1]) + +/** + * Read a 16 bits little endian integer out of memory. + * @param x a pointer to the input memory + * @return the corresponding integer + */ +#define RL16(x) ((((const uint8_t*)(x))[1] << 8) | \ + ((const uint8_t*)(x))[0]) + +/** + * Read a 32 bits big endian integer out of memory. + * @param x a pointer to the input memory + * @return the corresponding integer + */ +#define RB32(x) ((((const uint8_t*)(x))[0] << 24) | \ + (((const uint8_t*)(x))[1] << 16) | \ + (((const uint8_t*)(x))[2] << 8) | \ + ((const uint8_t*)(x))[3]) + +/** + * Read a 32 bits little endian integer out of memory. + * @param x a pointer to the input memory + * @return the corresponding integer + */ +#define RL32(x) ((((const uint8_t*)(x))[3] << 24) | \ + (((const uint8_t*)(x))[2] << 16) | \ + (((const uint8_t*)(x))[1] << 8) | \ + ((const uint8_t*)(x))[0]) + /* Portability fixes for FreeBSD. */ #ifdef __FreeBSD__ #define LIBUSB_CLASS_APPLICATION 0xfe @@ -60,6 +96,16 @@ struct sr_context { #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; + GPollFD usb_pollfd; + sr_receive_data_callback_t usb_cb; + void *usb_cb_data; +#endif #endif }; @@ -116,6 +162,16 @@ SR_PRIV int sr_info(const char *format, ...); SR_PRIV int sr_warn(const char *format, ...); SR_PRIV int sr_err(const char *format, ...); +/* Message logging helpers with subsystem-specific prefix string. */ +#ifndef NO_LOG_WRAPPERS +#define sr_log(l, s, args...) sr_log(l, "%s: " s, LOG_PREFIX, ## args) +#define sr_spew(s, args...) sr_spew("%s: " s, LOG_PREFIX, ## args) +#define sr_dbg(s, args...) sr_dbg("%s: " s, LOG_PREFIX, ## args) +#define sr_info(s, args...) sr_info("%s: " s, LOG_PREFIX, ## args) +#define sr_warn(s, args...) sr_warn("%s: " s, LOG_PREFIX, ## args) +#define sr_err(s, args...) sr_err("%s: " s, LOG_PREFIX, ## args) +#endif + /*--- device.c --------------------------------------------------------------*/ SR_PRIV struct sr_probe *sr_probe_new(int index, int type, @@ -268,6 +324,9 @@ SR_PRIV int ezusb_upload_firmware(libusb_device *dev, int configuration, #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); +SR_PRIV int usb_source_add(struct sr_context *ctx, int timeout, + sr_receive_data_callback_t cb, void *cb_data); +SR_PRIV int usb_source_remove(struct sr_context *ctx); #endif /*--- hardware/common/scpi.c ------------------------------------------------*/