#ifndef CAPNOGRAFO_H
#define CAPNOGRAFO_H
#include <QObject>
#include <QThread>
#include <QVector>
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QTimer>
#include <QVariantMap>
#include <QList>
class CapnographSerialThread : public QObject
{
Q_OBJECT
Q_PROPERTY(double xValue READ xValue NOTIFY xValueChanged)
Q_PROPERTY(double yValue READ yValue NOTIFY yValueChanged)
public:
explicit CapnographSerialThread(QObject *parent = nullptr);
~CapnographSerialThread();
void openCapnographSerialPort();
void closeCapnographSerialPort();
void readCapnographThread();
void inicializarSensor();
void inicializarPaquete84(const QByteArray response);
void processPacket(QByteArray packet);
void interpolacionLineal(quint16 realTimeCO2);
double xValue() const { return m_xValue; }
double yValue() const { return m_yValue; }
void startGenerating();
//Q_INVOKABLE QVariant interpolatePoints(const QList<QVariantMap>& points, int numInterpolatedPoints);
Q_INVOKABLE QVariantList interpolatePoints(const QList<QMap<QString, QVariant>>& points, int numInterpolatedPoints);
Q_INVOKABLE QVariantList getCurrentPoints() const;
signals:
void displayedData(QString co2, QString o2);
void xValueChanged(double xValue);
void yValueChanged(double yValue);
void newDataAvailable(QByteArray data);
void dataPacket83(quint16 realTimeCO2, quint16 realTimeO2);
void dataPacket84(quint8 EtCO2, quint8 InsCO2, quint8 AwRR, quint8 EtO2, quint8 InsO2);
void dataReady(float value);
private slots:
void handleReadyRead();
void generateValues();
private:
QSerialPort *comCapnographController;
QByteArray receivedData;
void sendPacket(QByteArray packet);
QByteArray powerOnHandshake(quint8 command, quint8 data1, quint8 data2, quint8 data3, quint8 data4, quint8 data5);
void processHandshakeResponse(QByteArray response);
QTimer m_timer;
double m_xValue;
double m_yValue;
double m_iXval;
double m_iYval;
QList<QVariantMap> m_points;
//QTimer *timer;
};
#endif // CAPNOGRAFO_H