X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=bindings%2Fcxx%2Finclude%2Flibsigrokcxx%2Flibsigrokcxx.hpp;h=de54630ffabe74c16f06f5b481aed1b1b07f2509;hb=6ad2fbaad2722f0aa18c3600cdbdddf812784b2d;hp=eb7957e5a5a9c6c7737ab5ebd561b7b9b0e8e594;hpb=32ba0d80054df01767ec323c621ab1c6bc5f310c;p=libsigrok.git diff --git a/bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp b/bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp index eb7957e5..de54630f 100644 --- a/bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp +++ b/bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp @@ -115,6 +115,7 @@ class SR_API PacketType; class SR_API Quantity; class SR_API Unit; class SR_API QuantityFlag; +class SR_API Rational; class SR_API Input; class SR_API InputDevice; class SR_API Output; @@ -282,7 +283,7 @@ public: /** Create an analog packet. */ shared_ptr create_analog_packet( vector > channels, - float *data_pointer, unsigned int num_samples, const Quantity *mq, + const float *data_pointer, unsigned int num_samples, const Quantity *mq, const Unit *unit, vector mqflags); /** Load a saved session. * @param filename File name string. */ @@ -332,7 +333,7 @@ public: set config_capabilities(const ConfigKey *key) const; /** Check whether a configuration capability is supported for a given key. * @param key ConfigKey to check. - * @param capability Capability to check for. */ + * @param capability Capability to check for. */ bool config_check(const ConfigKey *key, const Capability *capability) const; protected: Configurable( @@ -757,6 +758,8 @@ private: const struct sr_datafeed_logic *_structure; friend class Packet; + friend class Analog; + friend struct std::default_delete; }; /** Payload of a datafeed packet with analog data */ @@ -767,16 +770,69 @@ class SR_API Analog : public: /** Pointer to data. */ void *data_pointer(); + /** + * Fills dest pointer with the analog data converted to float. + * The pointer must have space for num_samples() floats. + */ + void get_data_as_float(float *dest); /** Number of samples in this packet. */ unsigned int num_samples() const; /** Channels for which this packet contains data. */ vector > channels(); + /** Size of a single sample in bytes. */ + unsigned int unitsize() const; + /** Samples use a signed data type. */ + bool is_signed() const; + /** Samples use float. */ + bool is_float() const; + /** Samples are stored in big-endian order. */ + bool is_bigendian() const; + /** + * Number of significant digits after the decimal point if positive, + * or number of non-significant digits before the decimal point if negative + * (refers to the value we actually read on the wire). + */ + int digits() const; + /** TBD */ + bool is_digits_decimal() const; + /** TBD */ + shared_ptr scale(); + /** TBD */ + shared_ptr offset(); /** Measured quantity of the samples in this packet. */ const Quantity *mq() const; /** Unit of the samples in this packet. */ const Unit *unit() const; /** Measurement flags associated with the samples in this packet. */ vector mq_flags() const; + /** + * Provides a Logic packet that contains a conversion of the analog + * data using a simple threshold. + * + * @param threshold Threshold to use. + * @param data_ptr Pointer to num_samples() bytes where the logic + * samples are stored. When nullptr, memory for + * logic->data_pointer() will be allocated and must + * be freed by the caller. + */ + shared_ptr get_logic_via_threshold(float threshold, + uint8_t *data_ptr=nullptr) const; + /** + * Provides a Logic packet that contains a conversion of the analog + * data using a Schmitt-Trigger. + * + * @param lo_thr Low threshold to use (anything below this is low). + * @param hi_thr High threshold to use (anything above this is high). + * @param state Points to a byte that contains the current state of the + * converter. For best results, set to value of logic + * sample n-1. + * @param data_ptr Pointer to num_samples() bytes where the logic + * samples are stored. When nullptr, memory for + * logic->data_pointer() will be allocated and must be + * freed by the caller. + */ + shared_ptr get_logic_via_schmitt_trigger(float lo_thr, + float hi_thr, uint8_t *state, uint8_t *data_ptr=nullptr) const; private: explicit Analog(const struct sr_datafeed_analog *structure); ~Analog(); @@ -787,6 +843,28 @@ private: friend class Packet; }; +/** Number represented by a numerator/denominator integer pair */ +class SR_API Rational : + public ParentOwned +{ +public: + /** Numerator, i.e. the dividend. */ + int64_t numerator() const; + /** Denominator, i.e. the divider. */ + uint64_t denominator() const; + /** Actual (lossy) value. */ + float value() const; +private: + explicit Rational(const struct sr_rational *structure); + ~Rational(); + shared_ptr share_owned_by(shared_ptr parent); + + const struct sr_rational *_structure; + + friend class Analog; + friend struct std::default_delete; +}; + /** An input format supported by the library */ class SR_API InputFormat : public ParentOwned @@ -797,7 +875,7 @@ public: /** Description of this input format. */ string description() const; /** A list of preferred file name extensions for this file format. - * @note This list is a recommendation only. */ + * @note This list is a recommendation only. */ vector extensions() const; /** Options supported by this input format. */ map > options(); @@ -828,6 +906,7 @@ public: void send(void *data, size_t length); /** Signal end of input data. */ void end(); + void reset(); private: Input(shared_ptr context, const struct sr_input *structure); ~Input(); @@ -868,6 +947,8 @@ public: Glib::VariantBase default_value() const; /** Possible values for this option, if a limited set. */ vector values() const; + /** Parse a string argument into the appropriate type for this option. */ + Glib::VariantBase parse_string(string value); private: Option(const struct sr_option *structure, shared_ptr structure_array); @@ -890,7 +971,7 @@ public: /** Description of this output format. */ string description() const; /** A list of preferred file name extensions for this file format. - * @note This list is a recommendation only. */ + * @note This list is a recommendation only. */ vector extensions() const; /** Options supported by this output format. */ map > options();