]> sigrok.org Git - libsigrok.git/blobdiff - libsigrok-internal.h
A few more random 'probe' to 'channel' changes.
[libsigrok.git] / libsigrok-internal.h
index df9bc0aa239563729bfcfb7290aacba15bd098de..89bedde1dabb6c5b3f4cdd9f5241f3ff3cae72e5 100644 (file)
 #define ARRAY_AND_SIZE(a) (a), ARRAY_SIZE(a)
 #endif
 
+/**
+ * Read a 8 bits integer out of memory.
+ * @param x a pointer to the input memory
+ * @return the corresponding integer
+ */
+#define R8(x)     ((unsigned)((const uint8_t*)(x))[0])
+
 /**
  * Read a 16 bits big endian integer out of memory.
  * @param x a pointer to the input memory
                   ((unsigned)((const uint8_t*)(x))[1] <<  8) |  \
                    (unsigned)((const uint8_t*)(x))[0])
 
+/**
+ * Write a 8 bits integer to memory.
+ * @param p a pointer to the output memory
+ * @param x the input integer
+ */
+#define W8(p, x)    do { ((uint8_t*)(p))[0] = (uint8_t) (x);      } while(0)
+
+/**
+ * Write a 16 bits integer to memory stored as big endian.
+ * @param p a pointer to the output memory
+ * @param x the input integer
+ */
+#define WB16(p, x)  do { ((uint8_t*)(p))[1] = (uint8_t) (x);      \
+                         ((uint8_t*)(p))[0] = (uint8_t)((x)>>8);  } while(0)
+
+/**
+ * Write a 16 bits integer to memory stored as little endian.
+ * @param p a pointer to the output memory
+ * @param x the input integer
+ */
+#define WL16(p, x)  do { ((uint8_t*)(p))[0] = (uint8_t) (x);      \
+                         ((uint8_t*)(p))[1] = (uint8_t)((x)>>8);  } while(0)
+
+/**
+ * Write a 32 bits integer to memory stored as big endian.
+ * @param p a pointer to the output memory
+ * @param x the input integer
+ */
+#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)
+
+/**
+ * Write a 32 bits integer to memory stored as little endian.
+ * @param p a pointer to the output memory
+ * @param x the input integer
+ */
+#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)
+
 /* Portability fixes for FreeBSD. */
 #ifdef __FreeBSD__
 #define LIBUSB_CLASS_APPLICATION 0xfe
@@ -174,7 +224,15 @@ SR_PRIV int sr_err(const char *format, ...);
 
 /*--- device.c --------------------------------------------------------------*/
 
-SR_PRIV struct sr_probe *sr_probe_new(int index, int type,
+/** Values for the changes argument of sr_dev_driver.config_channel_set. */
+enum {
+       /** The enabled state of the channel has been changed. */
+       SR_CHANNEL_SET_ENABLED = 1 << 0,
+       /** The trigger setup of the channel has been changed. */
+       SR_CHANNEL_SET_TRIGGER = 1 << 1,
+};
+
+SR_PRIV struct sr_channel *sr_channel_new(int index, int type,
                gboolean enabled, const char *name);
 
 /* Generic device instances */
@@ -186,7 +244,6 @@ SR_PRIV void sr_dev_inst_free(struct sr_dev_inst *sdi);
 /* USB-specific instances */
 SR_PRIV struct sr_usb_dev_inst *sr_usb_dev_inst_new(uint8_t bus,
                uint8_t address, struct libusb_device_handle *hdl);
-SR_PRIV GSList *sr_usb_find_usbtmc(libusb_context *usb_ctx);
 SR_PRIV void sr_usb_dev_inst_free(struct sr_usb_dev_inst *usb);
 #endif
 
@@ -316,6 +373,7 @@ SR_PRIV int sr_serial_extract_options(GSList *options, const char **serial_devic
 SR_PRIV int serial_source_add(struct sr_serial_dev_inst *serial, int events,
                int timeout, sr_receive_data_callback_t cb, void *cb_data);
 SR_PRIV int serial_source_remove(struct sr_serial_dev_inst *serial);
+SR_PRIV GSList *sr_serial_find_usb(uint16_t vendor_id, uint16_t product_id);
 #endif
 
 /*--- hardware/common/ezusb.c -----------------------------------------------*/
@@ -365,6 +423,8 @@ enum {
        SCPI_CMD_SET_DIG_POD_STATE,
        SCPI_CMD_GET_ANALOG_DATA,
        SCPI_CMD_GET_DIG_DATA,
+       SCPI_CMD_GET_SAMPLE_RATE,
+       SCPI_CMD_GET_SAMPLE_RATE_LIVE,
 };
 
 struct sr_scpi_hw_info {
@@ -378,8 +438,9 @@ struct sr_scpi_dev_inst {
        const char *name;
        const char *prefix;
        int priv_size;
-       int (*dev_inst_new)(void *priv, const char *resource, char **params,
-               const char *serialcomm);
+       GSList *(*scan)(struct drv_context *drvc);
+       int (*dev_inst_new)(void *priv, struct drv_context *drvc,
+               const char *resource, char **params, const char *serialcomm);
        int (*open)(void *priv);
        int (*source_add)(void *priv, int events,
                int timeout, sr_receive_data_callback_t cb, void *cb_data);
@@ -393,8 +454,10 @@ struct sr_scpi_dev_inst {
        void *priv;
 };
 
-SR_PRIV struct sr_scpi_dev_inst *scpi_dev_inst_new(const char *resource,
-               const char *serialcomm);
+SR_PRIV GSList *sr_scpi_scan(struct drv_context *drvc, GSList *options,
+               struct sr_dev_inst *(*probe_device)(struct sr_scpi_dev_inst *scpi));
+SR_PRIV struct sr_scpi_dev_inst *scpi_dev_inst_new(struct drv_context *drvc,
+               const char *resource, const char *serialcomm);
 SR_PRIV int sr_scpi_open(struct sr_scpi_dev_inst *scpi);
 SR_PRIV int sr_scpi_source_add(struct sr_scpi_dev_inst *scpi, int events,
                int timeout, sr_receive_data_callback_t cb, void *cb_data);
@@ -528,7 +591,7 @@ struct metex14_info {
        gboolean is_diode, is_frequency, is_ampere, is_volt, is_farad;
        gboolean is_hertz, is_ohm, is_celsius, is_pico, is_nano, is_micro;
        gboolean is_milli, is_kilo, is_mega, is_gain, is_decibel, is_hfe;
-       gboolean is_unitless;
+       gboolean is_unitless, is_logic;
 };
 
 #ifdef HAVE_LIBSERIALPORT