From: Martin Ling Date: Mon, 16 Dec 2013 02:11:42 +0000 (+0000) Subject: python: Finish input format support. X-Git-Tag: libsigrok-0.3.0~439 X-Git-Url: http://sigrok.org/gitweb/?p=libsigrok.git;a=commitdiff_plain;h=f0e764de7babf8004169732749040d9a2fc4ad71 python: Finish input format support. --- diff --git a/bindings/python/sigrok/core/classes.py b/bindings/python/sigrok/core/classes.py index 6b55eb3f..15bfc937 100644 --- a/bindings/python/sigrok/core/classes.py +++ b/bindings/python/sigrok/core/classes.py @@ -25,7 +25,8 @@ import itertools __all__ = ['Error', 'Context', 'Driver', 'Device', 'Session', 'Packet', 'Log', 'LogLevel', 'PacketType', 'Quantity', 'Unit', 'QuantityFlag', 'ConfigKey', - 'ProbeType', 'Probe', 'ProbeGroup'] + 'ProbeType', 'Probe', 'ProbeGroup', 'InputFormat', 'OutputFormat', + 'InputFile'] class Error(Exception): @@ -434,6 +435,28 @@ class InputFormat(object): def description(self): return self.struct.description + def format_match(self, filename): + return bool(self.struct.call_format_match(filename)) + +class InputFile(object): + + def __init__(self, format, filename, **kwargs): + self.format = format + self.filename = filename + self.struct = sr_input() + self.struct.format = self.format.struct + self.struct.param = g_hash_table_new_full( + g_str_hash, g_str_equal, g_free, g_free) + for key, value in kwargs.items(): + g_hash_table_insert(self.struct.param, g_strdup(key), g_strdup(str(value))) + check(self.format.struct.call_init(self.struct, self.filename)) + + def load(self): + check(self.format.struct.call_loadfile(self.struct, self.filename)) + + def __del__(self): + g_hash_table_destroy(self.struct.param) + class OutputFormat(object): def __init__(self, context, struct): diff --git a/bindings/swig/libsigrok.i b/bindings/swig/libsigrok.i index 9adb153f..773bb947 100644 --- a/bindings/swig/libsigrok.i +++ b/bindings/swig/libsigrok.i @@ -49,6 +49,21 @@ double g_variant_get_double(GVariant *value); char *g_variant_get_string(GVariant *value, unsigned long *length); GVariant *g_variant_get_child_value(GVariant *value, unsigned long index); +typedef guint (*GHashFunc)(gconstpointer key); +typedef gboolean (*GEqualFunc)(gconstpointer a, gconstpointer b); +typedef void (*GDestroyNotify)(gpointer data); + +GHashTable *g_hash_table_new_full(GHashFunc hash_func, GEqualFunc key_equal_func, + GDestroyNotify key_destroy_func, GDestroyNotify value_destroy_func); +void g_hash_table_insert(GHashTable *hash_table, gpointer key, gpointer value); +void g_hash_table_destroy(GHashTable *hash_table); + +%constant guint g_str_hash(gconstpointer v); +%constant gboolean g_str_equal(gconstpointer v1, gconstpointer v2);; +%constant void g_free(gpointer mem); + +gchar *g_strdup(const char *str); + %include "libsigrok/libsigrok.h" #undef SR_API #define SR_API @@ -68,3 +83,17 @@ GVariant *g_variant_get_child_value(GVariant *value, unsigned long index); %pointer_cast(void *, struct sr_datafeed_analog *, void_ptr_to_sr_datafeed_analog_ptr) %pointer_cast(void *, struct sr_probe *, void_ptr_to_sr_probe_ptr) %pointer_cast(void *, struct sr_probe_group *, void_ptr_to_sr_probe_group_ptr) + +%extend sr_input_format { + int call_format_match(const char *filename) { + return $self->format_match(filename); + } + + int call_init(struct sr_input *in, const char *filename) { + return $self->init(in, filename); + } + + int call_loadfile(struct sr_input *in, const char *filename) { + return $self->loadfile(in, filename); + } +}