subsurface/core/downloadfromdcthread.h
Jan Mulder 790c0dcfc8 QML UI: add internal admin for virtual vendor
Added a list of paired BT devices for the "Paired BT Devices" vendor. The
devices under this vendor represent all BT devces that can be found
from the local BT interface. Some special processing is required, as
the BT provided data is (obviously) missing the specific data needed
to open a BT device using libdc code. This processing is not in
this commit, but will follow. This commit is preparation for that.

Signed-off-by: Jan Mulder <jlmulder@xs4all.nl>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2017-06-12 09:55:27 -07:00

116 lines
3.1 KiB
C++

#ifndef DOWNLOADFROMDCTHREAD_H
#define DOWNLOADFROMDCTHREAD_H
#include <QThread>
#include <QMap>
#include <QHash>
#include <QLoggingCategory>
#include "dive.h"
#include "libdivecomputer.h"
#include "core/btdiscovery.h"
/* Helper object for access of Device Data in QML */
class DCDeviceData : public QObject {
Q_OBJECT
Q_PROPERTY(QString vendor READ vendor WRITE setVendor)
Q_PROPERTY(QString product READ product WRITE setProduct)
Q_PROPERTY(bool bluetoothMode READ bluetoothMode WRITE setBluetoothMode)
Q_PROPERTY(QString devName READ devName WRITE setDevName)
Q_PROPERTY(QString descriptor READ descriptor)
Q_PROPERTY(bool forceDownload READ forceDownload WRITE setForceDownload)
Q_PROPERTY(bool createNewTrip READ createNewTrip WRITE setCreateNewTrip)
Q_PROPERTY(int deviceId READ deviceId WRITE setDeviceId)
Q_PROPERTY(int diveId READ diveId WRITE setDiveId)
Q_PROPERTY(bool saveDump READ saveDump WRITE setSaveDump)
Q_PROPERTY(bool saveLog READ saveLog WRITE setSaveLog)
public:
DCDeviceData(QObject *parent = nullptr);
static DCDeviceData *instance();
QString vendor() const;
QString product() const;
QString devName() const;
QString descriptor() const;
bool bluetoothMode() const;
bool forceDownload() const;
bool createNewTrip() const;
bool saveDump() const;
bool saveLog() const;
int deviceId() const;
int diveId() const;
/* this needs to be a pointer to make the C-API happy */
device_data_t* internalData();
Q_INVOKABLE QStringList getProductListFromVendor(const QString& vendor);
Q_INVOKABLE int getDetectedVendorIndex(const QString &currentText);
Q_INVOKABLE int getDetectedProductIndex(const QString &currentVendorText,
const QString &currentProductText);
Q_INVOKABLE QString getDetectedDeviceAddress(const QString &currentVendorText,
const QString &currentProductText);
public slots:
void setVendor(const QString& vendor);
void setProduct(const QString& product);
void setDevName(const QString& devName);
void setBluetoothMode(bool mode);
void setForceDownload(bool force);
void setCreateNewTrip(bool create);
void setDeviceId(int deviceId);
void setDiveId(int diveId);
void setSaveDump(bool dumpMode);
void setSaveLog(bool saveLog);
private:
static DCDeviceData *m_instance;
device_data_t data;
};
class DownloadThread : public QThread {
Q_OBJECT
Q_PROPERTY(DCDeviceData* deviceData MEMBER m_data)
public:
DownloadThread();
void run() override;
Q_INVOKABLE DCDeviceData *data();
QString error;
private:
DCDeviceData *m_data;
};
//TODO: QList<product> ?
struct product {
const char *product;
dc_descriptor_t *descriptor;
struct product *next;
};
//TODO: QList<vendor> ?
struct vendor {
const char *vendor;
struct product *productlist;
struct vendor *next;
};
//TODO: C++ify descriptor?
struct mydescriptor {
const char *vendor;
const char *product;
dc_family_t type;
unsigned int model;
};
/* This fills the vendor list QStringList and related members.
* this code needs to be reworked to be less ugly, but it will
* stay like this for now.
*/
void fill_computer_list();
extern QStringList vendorList;
extern QHash<QString, QStringList> productList;
extern QMap<QString, dc_descriptor_t *> descriptorLookup;
#endif