X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Flibsigrok-internal.h;h=6617e7ae6fb167b63e99cc01702c385149980045;hb=c36f78f7728e8b5263bed440530a61caa6e30a26;hp=debd27719a69a45da99b198a43639d9c64b7c25e;hpb=c7bc82ffa1b09a228a8395049e2b691cd7bd85f8;p=libsigrok.git diff --git a/src/libsigrok-internal.h b/src/libsigrok-internal.h index debd2771..6617e7ae 100644 --- a/src/libsigrok-internal.h +++ b/src/libsigrok-internal.h @@ -371,6 +371,13 @@ struct sr_output_module { */ char *desc; + /** + * A NULL terminated array of strings containing a list of file name + * extensions typical for the input file format, or NULL if there is + * no typical extension for this file format. + */ + const char *const *exts; + /** * Returns a NULL-terminated list of options this module can take. * Can be NULL, if the module has no options. @@ -426,6 +433,93 @@ struct sr_output_module { int (*cleanup) (struct sr_output *o); }; +/** Transform module instance. */ +struct sr_transform { + /** A pointer to this transform's module. */ + const struct sr_transform_module *module; + + /** + * The device for which this transform module is used. This + * can be used by the module to find out channel names and numbers. + */ + const struct sr_dev_inst *sdi; + + /** + * A generic pointer which can be used by the module to keep internal + * state between calls into its callback functions. + */ + void *priv; +}; + +struct sr_transform_module { + /** + * A unique ID for this transform module, suitable for use in + * command-line clients, [a-z0-9-]. Must not be NULL. + */ + char *id; + + /** + * A unique name for this transform module, suitable for use in GUI + * clients, can contain UTF-8. Must not be NULL. + */ + const char *name; + + /** + * A short description of the transform module. Must not be NULL. + * + * This can be displayed by frontends, e.g. when selecting + * which transform module(s) to add. + */ + char *desc; + + /** + * Returns a NULL-terminated list of options this transform module + * can take. Can be NULL, if the transform module has no options. + */ + const struct sr_option *(*options) (void); + + /** + * This function is called once, at the beginning of a stream. + * + * @param t Pointer to the respective 'struct sr_transform'. + * @param options Hash table of options for this transform module. + * Can be NULL if no options are to be used. + * + * @retval SR_OK Success + * @retval other Negative error code. + */ + int (*init) (struct sr_transform *t, GHashTable *options); + + /** + * This function is passed a pointer to every packet in the data feed. + * + * It can either return (in packet_out) a pointer to another packet + * (possibly the exact same packet it got as input), or NULL. + * + * @param t Pointer to the respective 'struct sr_transform'. + * @param packet_in Pointer to a datafeed packet. + * @param packet_out Pointer to the resulting datafeed packet after + * this function was run. If NULL, the transform + * module intentionally didn't output a new packet. + * + * @retval SR_OK Success + * @retval other Negative error code. + */ + int (*receive) (const struct sr_transform *t, + struct sr_datafeed_packet *packet_in, + struct sr_datafeed_packet **packet_out); + + /** + * This function is called after the caller is finished using + * the transform module, and can be used to free any internal + * resources the module may keep. + * + * @retval SR_OK Success + * @retval other Negative error code. + */ + int (*cleanup) (struct sr_transform *t); +}; + #ifdef HAVE_LIBUSB_1_0 /** USB device instance */ struct sr_usb_dev_inst { @@ -495,8 +589,8 @@ enum { SR_CHANNEL_SET_ENABLED = 1 << 0, }; -SR_PRIV struct sr_channel *sr_channel_new(int index, int type, - gboolean enabled, const char *name); +SR_PRIV struct sr_channel *sr_channel_new(struct sr_dev_inst *sdi, + int index, int type, gboolean enabled, const char *name); /** Device instance data */ struct sr_dev_inst { @@ -575,6 +669,7 @@ struct sr_session { GSList *owned_devs; /** List of struct datafeed_callback pointers. */ GSList *datafeed_callbacks; + GSList *transforms; struct sr_trigger *trigger; GTimeVal starttime; gboolean running; @@ -977,6 +1072,27 @@ SR_PRIV gboolean sr_ut71x_packet_valid(const uint8_t *buf); SR_PRIV int sr_ut71x_parse(const uint8_t *buf, float *floatval, struct sr_datafeed_analog *analog, void *info); +/*--- hardware/dmm/vc870.c --------------------------------------------------*/ + +#define VC870_PACKET_SIZE 23 + +struct vc870_info { + gboolean is_voltage, is_dc, is_ac, is_temperature, is_resistance; + gboolean is_continuity, is_capacitance, is_diode, is_loop_current; + gboolean is_current, is_micro, is_milli, is_power; + gboolean is_power_factor_freq, is_power_apparent_power, is_v_a_eff_value; + gboolean is_sign2, is_sign1, is_batt, is_ol1, is_max, is_min; + gboolean is_maxmin, is_rel, is_ol2, is_open, is_manu, is_hold; + gboolean is_light, is_usb, is_warning, is_auto_power, is_misplug_warn; + gboolean is_lo, is_hi, is_open2; + + gboolean is_frequency, is_dual_display, is_auto, is_rms; +}; + +SR_PRIV gboolean sr_vc870_packet_valid(const uint8_t *buf); +SR_PRIV int sr_vc870_parse(const uint8_t *buf, float *floatval, + struct sr_datafeed_analog *analog, void *info); + /*--- hardware/lcr/es51919.c ------------------------------------------------*/ SR_PRIV void es51919_serial_clean(void *priv); @@ -997,4 +1113,16 @@ SR_PRIV int es51919_serial_acquisition_start(const struct sr_dev_inst *sdi, SR_PRIV int es51919_serial_acquisition_stop(struct sr_dev_inst *sdi, void *cb_data); +/*--- hardware/dmm/ut372.c --------------------------------------------------*/ + +#define UT372_PACKET_SIZE 27 + +struct ut372_info { + int dummy; +}; + +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); + #endif