transform: Add struct sr_transform and struct sr_transform_module.

This commit is contained in:
Uwe Hermann 2015-02-10 20:42:50 +01:00
parent b595a45876
commit 790320f605
2 changed files with 89 additions and 0 deletions

View File

@ -515,6 +515,8 @@ struct sr_input;
struct sr_input_module;
struct sr_output;
struct sr_output_module;
struct sr_transform;
struct sr_transform_module;
/** Constants for channel type. */
enum sr_channeltype {

View File

@ -433,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 {