]> sigrok.org Git - libsigrok.git/commitdiff
Input: Add reset() function
authorSoeren Apel <redacted>
Thu, 28 Apr 2016 06:13:17 +0000 (08:13 +0200)
committerUwe Hermann <redacted>
Mon, 9 May 2016 11:02:29 +0000 (13:02 +0200)
bindings/cxx/classes.cpp
bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp
include/libsigrok/proto.h
src/input/input.c
src/libsigrok-internal.h

index 1c5b97b0149de12dc832741de715cf0c9d7ad0fd..5e07c2c6f8744ad32ea0e388497bb851e2b536f2 100644 (file)
@@ -1329,6 +1329,11 @@ void Input::end()
        check(sr_input_end(_structure));
 }
 
+void Input::reset()
+{
+       check(sr_input_reset(_structure));
+}
+
 Input::~Input()
 {
        sr_input_free(_structure);
index eb7957e5a5a9c6c7737ab5ebd561b7b9b0e8e594..ad59f5b9787a3e986b283e73544045faa47ecbbf 100644 (file)
@@ -828,6 +828,7 @@ public:
        void send(void *data, size_t length);
        /** Signal end of input data. */
        void end();
+       void reset();
 private:
        Input(shared_ptr<Context> context, const struct sr_input *structure);
        ~Input();
index 6ae3be8f856d2567fe58755d7717f7141c8a3410..caa8407e23a19ede70a311b6231c3555236cb47d 100644 (file)
@@ -154,6 +154,7 @@ SR_API int sr_input_scan_file(const char *filename, const struct sr_input **in);
 SR_API struct sr_dev_inst *sr_input_dev_inst_get(const struct sr_input *in);
 SR_API int sr_input_send(const struct sr_input *in, GString *buf);
 SR_API int sr_input_end(const struct sr_input *in);
+SR_API int sr_input_reset(const struct sr_input *in);
 SR_API void sr_input_free(const struct sr_input *in);
 
 /*--- output/output.c -------------------------------------------------------*/
index f2cc976935147b8396d31f0e086382a987d0efd2..f99902d317c6b4497f520ac5a19738273f413d6b 100644 (file)
@@ -559,6 +559,27 @@ SR_API int sr_input_end(const struct sr_input *in)
        return in->module->end((struct sr_input *)in);
 }
 
+/**
+ * Reset the input module's input handling structures.
+ *
+ * Causes the input module to reset its internal state so that we can re-send
+ * the input data from the beginning without having to re-create the entire
+ * input module.
+ *
+ * @since 0.5.0
+ */
+SR_API int sr_input_reset(const struct sr_input *in)
+{
+       if (!in->module->reset) {
+               sr_spew("Tried to reset %s module but no reset handler found.",
+                       in->module->id);
+               return SR_OK;
+       }
+
+       sr_spew("Resetting %s module.", in->module->id);
+       return in->module->reset((struct sr_input *)in);
+}
+
 /**
  * Free the specified input instance and all associated resources.
  *
index 0d6e0dab29d144eb35a56bb3e4851d7781a439b0..589d0a4d00eb1e3b1533e4ae4c1c2ab5d435dbfd 100644 (file)
@@ -401,6 +401,18 @@ struct sr_input_module {
         */
        int (*end) (struct sr_input *in);
 
+        /**
+         * Reset the input module's input handling structures.
+         *
+         * Causes the input module to reset its internal state so that we can
+         * re-send the input data from the beginning without having to
+         * re-create the entire input module.
+         *
+         * @retval SR_OK Success.
+         * @retval other Negative error code.
+         */
+       int (*reset) (struct sr_input *in);
+
        /**
         * This function is called after the caller is finished using
         * the input module, and can be used to free any internal