#ifndef PULSEVIEW_PV_DATA_MATHSIGNAL_HPP
#define PULSEVIEW_PV_DATA_MATHSIGNAL_HPP
+#define exprtk_disable_rtl_io_file /* Potential security issue, doubt anyone would use those anyway */
+#define exprtk_disable_rtl_vecops /* Vector ops are rather useless for math channels */
+#define exprtk_disable_caseinsensitivity /* So that we can have both 't' and 'T' */
+
#include <limits>
#include <QString>
class SignalBase;
template<typename T>
-struct sig_sample;
+struct fnc_sample;
struct signal_data {
signal_data(const shared_ptr<SignalBase> _sb) :
{
Q_OBJECT
Q_PROPERTY(QString expression READ get_expression WRITE set_expression NOTIFY expression_changed)
- Q_PROPERTY(QString error_message READ error_message)
private:
static const int64_t ChunkLength;
virtual void save_settings(QSettings &settings) const;
virtual void restore_settings(QSettings &settings);
- QString error_message() const;
-
QString get_expression() const;
void set_expression(QString expression);
private:
- void set_error_message(QString msg);
+ void set_error(uint8_t type, QString msg);
/**
* Returns the number of samples that can be worked on,
*/
uint64_t get_working_sample_count(uint32_t segment_id) const;
- void update_completeness(uint32_t segment_id);
+ void update_completeness(uint32_t segment_id, uint64_t output_sample_count);
void reset_generation();
- void begin_generation();
+ virtual void begin_generation();
- void generate_samples(uint32_t segment_id, const uint64_t start_sample,
+ uint64_t generate_samples(uint32_t segment_id, const uint64_t start_sample,
const int64_t sample_count);
void generation_proc();
signal_data* signal_from_name(const std::string& name);
void update_signal_sample(signal_data* sig_data, uint32_t segment_id, uint64_t sample_num);
+ bool all_input_signals_enabled(QString &disabled_signals) const;
+
Q_SIGNALS:
void samples_cleared();
void on_capture_state_changed(int state);
void on_data_received();
+ void on_enabled_changed();
+
private:
pv::Session &session_;
uint64_t custom_sample_rate_;
uint64_t custom_sample_count_;
bool use_custom_sample_rate_, use_custom_sample_count_;
+ uint64_t generation_chunk_size_;
map<std::string, signal_data> input_signals_;
- QString expression_, error_message_;
+ QString expression_;
+
+ uint8_t error_type_;
mutable mutex input_mutex_;
mutable condition_variable gen_input_cond_;
exprtk::parser<double> *exprtk_parser_;
double exprtk_current_time_, exprtk_current_sample_;
- sig_sample<double>* fnc_sig_sample_;
+ fnc_sample<double>* fnc_sample_;
// Give sig_sample access to the private helper functions
- friend struct sig_sample<double>;
+ friend struct fnc_sample<double>;
};
} // namespace data