X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=sigrok.h;h=20bd59430a9df6c08bd4634c9162162348a3f967;hb=5c2d46d1dbfa636fb3cdbeaffdc0e9ca77c66ee1;hp=26bf9fcc089bf0068e135027fc83d5cd76c159ee;hpb=c2bd92ec0867eff49ee58b557d6fb9aec2b63357;p=libsigrok.git diff --git a/sigrok.h b/sigrok.h index 26bf9fcc..20bd5943 100644 --- a/sigrok.h +++ b/sigrok.h @@ -27,6 +27,9 @@ #include #include +#ifdef __cplusplus +extern "C" { +#endif /* * Status/error codes returned by libsigrok functions. @@ -45,16 +48,15 @@ * or reused for different #defines later. You can only add new #defines and * return codes, but never remove or redefine existing ones. */ -#define SIGROK_OK 0 /* No error */ -#define SIGROK_ERR -1 /* Generic/unspecified error */ -#define SIGROK_ERR_MALLOC -2 /* Malloc/calloc/realloc error */ -#define SIGROK_ERR_SAMPLERATE -3 /* Incorrect samplerate */ +#define SR_OK 0 /* No error */ +#define SR_ERR -1 /* Generic/unspecified error */ +#define SR_ERR_MALLOC -2 /* Malloc/calloc/realloc error */ +#define SR_ERR_SAMPLERATE -3 /* Incorrect samplerate */ /* limited by uint64_t */ #define MAX_NUM_PROBES 64 #define MAX_PROBENAME_LEN 32 - /* Handy little macros */ #define KHZ(n) ((n) * 1000) #define MHZ(n) ((n) * 1000000) @@ -70,14 +72,13 @@ #define ARRAY_AND_SIZE(a) (a), ARRAY_SIZE(a) #endif - typedef int (*receive_data_callback) (int fd, int revents, void *user_data); - /* Data types used by hardware plugins for set_configuration() */ enum { T_UINT64, T_CHAR, + T_NULL, }; enum { @@ -91,9 +92,7 @@ struct protocol { int stackindex; }; - - -/* datafeed_packet.type values */ +/* sr_datafeed_packet.type values */ enum { DF_HEADER, DF_END, @@ -103,14 +102,14 @@ enum { DF_PD, }; -struct datafeed_packet { +struct sr_datafeed_packet { uint16_t type; uint64_t length; uint16_t unitsize; void *payload; }; -struct datafeed_header { +struct sr_datafeed_header { int feed_version; struct timeval starttime; uint64_t samplerate; @@ -119,43 +118,49 @@ struct datafeed_header { int num_logic_probes; }; +struct analog_probe { + uint8_t att; + uint8_t res; /* Needs to be a power of 2, FIXME */ + uint16_t val; /* Max hardware ADC width is 16bits */ +}; +struct analog_sample { + uint8_t num_probes; /* Max hardware probes is 256 */ + struct analog_probe probes[]; +}; -struct input { - struct input_format *format; +struct sr_input { + struct sr_input_format *format; char *param; - struct device *vdevice; + struct sr_device *vdevice; }; -struct input_format { +struct sr_input_format { char *extension; char *description; int (*format_match) (const char *filename); - int (*init) (struct input *in); - int (*loadfile) (struct input *in, const char *filename); + int (*init) (struct sr_input *in); + int (*loadfile) (struct sr_input *in, const char *filename); }; - - -struct output { - struct output_format *format; - struct device *device; +struct sr_output { + struct sr_output_format *format; + struct sr_device *device; char *param; void *internal; }; -struct output_format { +struct sr_output_format { char *extension; char *description; int df_type; - int (*init) (struct output *o); - int (*data) (struct output *o, char *data_in, uint64_t length_in, + int (*init) (struct sr_output *o); + int (*data) (struct sr_output *o, char *data_in, uint64_t length_in, char **data_out, uint64_t *length_out); - int (*event) (struct output *o, int event_type, char **data_out, + int (*event) (struct sr_output *o, int event_type, char **data_out, uint64_t *length_out); }; - struct analyzer { char *name; char *filename; @@ -165,7 +170,6 @@ struct analyzer { */ }; - /* Size of a chunk in units */ #define DATASTORE_CHUNKSIZE 512000 @@ -176,16 +180,15 @@ struct datastore { GSList *chunklist; }; - /* * This represents a generic device connected to the system. * For device-specific information, ask the plugin. The plugin_index refers * to the device index within that plugin; it may be handling more than one * device. All relevant plugin calls take a device_index parameter for this. */ -struct device { +struct sr_device { /* Which plugin handles this device */ - struct device_plugin *plugin; + struct sr_device_plugin *plugin; /* A plugin may handle multiple devices of the same type */ int plugin_index; /* List of struct probe* */ @@ -209,7 +212,6 @@ struct probe { extern GSList *devices; - /* Hardware plugin capabilities */ enum { HWCAP_DUMMY, /* Used to terminate lists */ @@ -235,8 +237,7 @@ struct hwcap_option { char *shortname; }; - -struct sigrok_device_instance { +struct sr_device_instance { int index; int status; int instance_type; @@ -250,7 +251,7 @@ struct sigrok_device_instance { }; }; -/* sigrok_device_instance types */ +/* sr_device_instance types */ enum { USB_INSTANCE, SERIAL_INSTANCE, @@ -285,7 +286,7 @@ enum { /* Device info IDs */ enum { - /* struct sigrok_device_instance for this specific device */ + /* struct sr_device_instance for this specific device */ DI_INSTANCE, /* The number of probes connected to this device */ DI_NUM_PROBES, @@ -311,9 +312,10 @@ struct samplerates { uint64_t *list; }; -struct device_plugin { +struct sr_device_plugin { /* Plugin-specific */ char *name; + char *longname; int api_version; int (*init) (char *deviceinfo); void (*cleanup) (void); @@ -337,15 +339,20 @@ struct gsource_fd { }; struct session { - /* List of struct device* */ + /* List of struct sr_device* */ GSList *devices; /* List of struct analyzer* */ GSList *analyzers; - /* Datafeed callbacks */ + /* list of receive_data_callback */ GSList *datafeed_callbacks; GTimeVal starttime; + gboolean running; }; #include "sigrok-proto.h" +#ifdef __cplusplus +} +#endif + #endif