X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Flibsigrok-internal.h;h=fc436014fb6f13a3807773387c0b5f0a70c16950;hb=c2bf5506ee7864975917a7b6e7e93b78226887ce;hp=4b3daf441151c9d5ed1cfef08c83a4855febc77d;hpb=5a1afc0907abfee5848484f944789213d6be9752;p=libsigrok.git diff --git a/src/libsigrok-internal.h b/src/libsigrok-internal.h index 4b3daf44..fc436014 100644 --- a/src/libsigrok-internal.h +++ b/src/libsigrok-internal.h @@ -205,16 +205,6 @@ 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; - HANDLE usb_wait_request_event; - HANDLE usb_wait_complete_event; - GPollFD usb_pollfd; - sr_receive_data_callback usb_cb; - void *usb_cb_data; -#endif #endif }; @@ -632,6 +622,8 @@ enum { SR_PRIV struct sr_channel *sr_channel_new(struct sr_dev_inst *sdi, int index, int type, gboolean enabled, const char *name); +SR_PRIV struct sr_channel *sr_next_enabled_channel(const struct sr_dev_inst *sdi, + struct sr_channel *cur_channel); /** Device instance data */ struct sr_dev_inst { @@ -716,35 +708,31 @@ struct sr_session { GSList *datafeed_callbacks; GSList *transforms; struct sr_trigger *trigger; - GTimeVal starttime; - gboolean running; - unsigned int num_sources; + /** Mutex protecting the main context pointer and ownership flag. */ + GMutex main_mutex; + /** Context of the session main loop. */ + GMainContext *main_context; + /** Whether we are using the thread's default context. */ + gboolean main_context_is_default; - /* - * Both "sources" and "pollfds" are of the same size and contain pairs - * of descriptor and callback function. We can not embed the GPollFD - * into the source struct since we want to be able to pass the array - * of all poll descriptors to g_poll(). - */ - struct source *sources; - GPollFD *pollfds; - int source_timeout; + /** Whether the session has been started. */ + gboolean running; - /* - * These are our synchronization primitives for stopping the session in - * an async fashion. We need to make sure the session is stopped from - * within the session thread itself. - */ - /** Mutex protecting access to abort_session. */ - GMutex stop_mutex; - /** Abort current session. See sr_session_stop(). */ - gboolean abort_session; + /** Registered event sources for this session. */ + GHashTable *event_sources; + /** Session main loop. */ + GMainLoop *main_loop; }; +SR_PRIV int sr_session_source_add_internal(struct sr_session *session, + void *key, GSource *source); +SR_PRIV int sr_session_source_remove_internal(struct sr_session *session, + void *key); +SR_PRIV int sr_session_source_destroyed(struct sr_session *session, + void *key, GSource *source); SR_PRIV int sr_session_send(const struct sr_dev_inst *sdi, const struct sr_datafeed_packet *packet); -SR_PRIV int sr_session_stop_sync(struct sr_session *session); SR_PRIV int sr_sessionfile_check(const char *filename); SR_PRIV int sr_packet_copy(const struct sr_datafeed_packet *packet, struct sr_datafeed_packet **copy); @@ -866,6 +854,7 @@ 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 void sr_usb_close(struct sr_usb_dev_inst *usb); SR_PRIV int usb_source_add(struct sr_session *session, struct sr_context *ctx, int timeout, sr_receive_data_callback cb, void *cb_data); SR_PRIV int usb_source_remove(struct sr_session *session, struct sr_context *ctx); @@ -1126,4 +1115,17 @@ SR_PRIV gboolean sr_ut372_packet_valid(const uint8_t *buf); SR_PRIV int sr_ut372_parse(const uint8_t *buf, float *floatval, struct sr_datafeed_analog *analog, void *info); +/*--- hardware/scale/kern.c -------------------------------------------------*/ + +struct kern_info { + gboolean is_gram, is_carat, is_ounce, is_pound, is_troy_ounce; + gboolean is_pennyweight, is_grain, is_tael, is_momme, is_tola; + gboolean is_percentage, is_piece, is_unstable, is_stable, is_error; + int buflen; +}; + +SR_PRIV gboolean sr_kern_packet_valid(const uint8_t *buf); +SR_PRIV int sr_kern_parse(const uint8_t *buf, float *floatval, + struct sr_datafeed_analog *analog, void *info); + #endif