X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=libsigrok-internal.h;h=61978c297911b73a91c4f7bce4f98058d06eadf6;hb=170fbcb3f769e89a9f1d1d2394986dbc5a78ec21;hp=d19f3670426279f4a9bee3ce890345e8be5cf6ea;hpb=04cb915716ecdc1ee26440b4c09bc2f2de183631;p=libsigrok.git diff --git a/libsigrok-internal.h b/libsigrok-internal.h index d19f3670..61978c29 100644 --- a/libsigrok-internal.h +++ b/libsigrok-internal.h @@ -21,8 +21,8 @@ * @internal */ -#ifndef LIBSIGROK_SIGROK_INTERNAL_H -#define LIBSIGROK_SIGROK_INTERNAL_H +#ifndef LIBSIGROK_LIBSIGROK_INTERNAL_H +#define LIBSIGROK_LIBSIGROK_INTERNAL_H #include #include @@ -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,15 +96,28 @@ 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 }; #ifdef HAVE_LIBUSB_1_0 /** USB device instance */ struct sr_usb_dev_inst { - uint8_t bus; /**< USB bus */ - uint8_t address; /**< Device address on USB bus */ - struct libusb_device_handle *devhdl; /**< libusb device handle */ + /** USB bus */ + uint8_t bus; + /** Device address on USB bus */ + uint8_t address; + /** libusb device handle */ + struct libusb_device_handle *devhdl; }; #endif @@ -77,10 +126,18 @@ struct sr_usb_dev_inst { #define SERIAL_PARITY_EVEN SP_PARITY_EVEN #define SERIAL_PARITY_ODD SP_PARITY_ODD struct sr_serial_dev_inst { - char *port; /**< Port name, e.g. '/dev/tty42'. */ - char *serialcomm; /**< Comm params for serial_set_paramstr(). */ + /** Port name, e.g. '/dev/tty42'. */ + char *port; + /** Comm params for serial_set_paramstr(). */ + char *serialcomm; + /** Port is non-blocking. */ int nonblocking; - struct sp_port *data; /**< libserialport port handle */ + /** libserialport port handle */ + struct sp_port *data; + /** libserialport event set */ + struct sp_event_set *event_set; + /** GPollFDs for event polling */ + GPollFD *pollfds; }; #endif @@ -91,7 +148,8 @@ struct sr_usbtmc_dev_inst { /* Private driver context. */ struct drv_context { - struct sr_context *sr_ctx; /**< sigrok context */ + /** sigrok context */ + struct sr_context *sr_ctx; GSList *instances; }; @@ -104,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, @@ -169,9 +237,10 @@ struct sr_session { * an async fashion. We need to make sure the session is stopped from * within the session thread itself. */ - GMutex stop_mutex; /**< Mutex protecting access to abort_session. */ + /** Mutex protecting access to abort_session. */ + GMutex stop_mutex; + /** Abort current session. See sr_session_stop(). */ gboolean abort_session; - /**< Abort current session. See sr_session_stop(). */ }; SR_PRIV int sr_session_send(const struct sr_dev_inst *sdi, @@ -255,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 ------------------------------------------------*/ @@ -451,6 +523,14 @@ SR_PRIV void sr_fs9721_01_temp_c(struct sr_datafeed_analog *analog, void *info); SR_PRIV void sr_fs9721_10_temp_c(struct sr_datafeed_analog *analog, void *info); SR_PRIV void sr_fs9721_01_10_temp_f_c(struct sr_datafeed_analog *analog, void *info); +/*--- hardware/common/dmm/m2110.c -----------------------------------------*/ + +#define BBCGM_M2110_PACKET_SIZE 9 + +SR_PRIV gboolean sr_m2110_packet_valid(const uint8_t *buf); +SR_PRIV int sr_m2110_parse(const uint8_t *buf, float *floatval, + struct sr_datafeed_analog *analog, void *info); + /*--- hardware/common/dmm/metex14.c -----------------------------------------*/ #define METEX14_PACKET_SIZE 14