This commit is contained in:
2023-03-28 10:33:25 +02:00
parent 0d3a3d37f5
commit 9b40f610e4
6 changed files with 329 additions and 3 deletions
+1 -1
View File
@@ -41,7 +41,7 @@ cAirQuality::~cAirQuality()
air_quality_destroy(&m_airQuality);
}
qint16 cAirQuality::collect()
qint32 cAirQuality::collect()
{
uint8_t iaq_index_acuracy;
int32_t temperature;
+3 -1
View File
@@ -43,7 +43,7 @@ public:
cAirQuality(cTinkerForge* tinkerForge, const QString& uid, QObject* object = nullptr);
~cAirQuality();
qint16 collect();
qint32 collect();
QString uid();
qint32 lastError();
@@ -95,6 +95,8 @@ private:
QString m_hardwareVersion;
QString m_firmwareVersion;
quint16 m_deviceIdentifier;
signals:
};
Q_DECLARE_METATYPE(cAirQuality*)
+1 -1
View File
@@ -13,7 +13,7 @@ cMainWindow::cMainWindow(QWidget *parent)
{
ui->setupUi(this);
m_tinkerForge = new cTinkerForge("192.168.0.208", 4223);
m_tinkerForge = new cTinkerForge("192.168.0.101", 4223);
m_airQuality = new cAirQuality(m_tinkerForge, "QqD");
m_outdoorWeather = new cOutdoorWeather(m_tinkerForge, "SwS", 84);
+229
View File
@@ -0,0 +1,229 @@
#include "cmasterbrick.h"
#include "ctinkerforge.h"
cExtension::cExtension(const quint32& exttype, const QString& name) :
m_exttype(exttype),
m_name(name)
{
}
quint32 cExtension::exttype()
{
return(m_exttype);
}
QString cExtension::name()
{
return(m_name);
}
cExtension* cExtensionList::add(const quint32& exttype, const QString& name)
{
cExtension* lpNew = find(exttype, name);
if(!lpNew)
{
lpNew = new cExtension(exttype, name);
append(lpNew);
}
return(lpNew);
}
cExtension* cExtensionList::find(const quint32& exttype, const QString& name)
{
for(int x = 0;x < count();x++)
{
if(this->at(x)->exttype() == exttype && this->at(x)->name() == name)
return(this->at(x));
}
return(nullptr);
}
cExtension* cExtensionList::find(const quint32& exttype)
{
for(int x = 0;x < count();x++)
{
if(this->at(x)->exttype() == exttype)
return(this->at(x));
}
return(nullptr);
}
cExtension* cExtensionList::find(const QString& name)
{
for(int x = 0;x < count();x++)
{
if(this->at(x)->name() == name)
return(this->at(x));
}
return(nullptr);
}
cMasterBrick::cMasterBrick(cTinkerForge *tinkerForge, const QString &uid, QObject *parent) :
QObject(parent),
m_tinkerForge(tinkerForge),
m_uid(uid),
m_lastError(0)
{
m_extensionList.add(1, "Chibi");
m_extensionList.add(2, "RS485");
m_extensionList.add(3, "WIFI");
m_extensionList.add(4, "Ethernet");
m_extensionList.add(5, "WIFI 2.0");
if(!m_tinkerForge)
return;
master_create(&m_master, m_uid.toLocal8Bit().data(), m_tinkerForge->connection());
}
cMasterBrick::~cMasterBrick()
{
master_destroy(&m_master);
}
qint32 cMasterBrick::collect()
{
uint8_t api_version[3];
uint16_t voltage;
uint16_t current;
uint32_t debounce;
bool bricklets_enabled;
uint8_t communication_method;
uint32_t timeout_count;
bool enable_dynamic_baudrate;
uint32_t minimum_dynamic_baudrate;
char bricklet_port;
uint32_t baudrate;
m_lastError = 0;
if(master_get_api_version(&m_master, api_version) >= 0)
m_apiVersion = QString("%1.%2.%3").arg(api_version[0]).arg(api_version[1]).arg(api_version[2]);
else
m_lastError |= API_VERSION;
if(master_get_stack_voltage(&m_master, &voltage) >= 0)
m_voltage = (double)voltage/100.0;
else
m_lastError |= VOLTAGE;
if(master_get_stack_current(&m_master, &current) != 0)
m_current = (double)current/100.0;
else
m_lastError |= CURRENT;
if(master_get_usb_voltage(&m_master, &voltage) >= 0)
m_usbVoltage = (double)voltage/100.0;
else
m_lastError |= USB_VOLTAGE;
if(master_get_debounce_period(&m_master, &debounce) >= 0)
m_debouncePeriod = debounce;
else
m_lastError |= DEBOUNCE_PERIOD;
if(master_get_bricklets_enabled(&m_master, &bricklets_enabled) >= 0)
m_brickletsEnabled = bricklets_enabled;
else
m_lastError |= BRICKLETS_ENABLED;
for(communication_method = 0;communication_method < 8;communication_method++)
{
if(master_get_send_timeout_count(&m_master, communication_method, &timeout_count) >= 0)
m_timeoutCount[communication_method] = timeout_count;
else
{
m_lastError |= COMMUNICATION_METHOD;
m_lastError |= TIMEOUT_COUNT;
}
}
if(master_get_spitfp_baudrate_config(&m_master, &enable_dynamic_baudrate, &minimum_dynamic_baudrate) >= 0)
{
m_enableDynamicBaudrate = enable_dynamic_baudrate;
m_minimumDynamicBaudrate = minimum_dynamic_baudrate;
}
else
{
m_lastError |= ENABLE_DYNAMIC_BAUDRATE;
m_lastError |= MINIMUM_DYNAMIC_BAUDRATE;
}
for(bricklet_port = 0;bricklet_port < 5;bricklet_port++)
{
if(master_get_spitfp_baudrate(&m_master, bricklet_port, &baudrate) >= 0)
m_spitfpBaudrate[bricklet_port] = baudrate;
else
m_lastError |= SPITFP_BAUDRATE;
}
//int master_get_spitfp_error_count(Master *master, char bricklet_port, uint32_t *ret_error_count_ack_checksum, uint32_t *ret_error_count_message_checksum, uint32_t *ret_error_count_frame, uint32_t *ret_error_count_overflow);
//int master_is_status_led_enabled(Master *master, bool *ret_enabled);
//int master_get_protocol1_bricklet_name(Master *master, char port, uint8_t *ret_protocol_version, uint8_t ret_firmware_version[3], char ret_name[40]);
//int master_get_chip_temperature(Master *master, int16_t *ret_temperature);
//int master_get_identity(Master *master, char ret_uid[8], char ret_connected_uid[8], char *ret_position, uint8_t ret_hardware_version[3], uint8_t ret_firmware_version[3], uint16_t *ret_device_identifier);
//int master_is_chibi_present(Master *master, bool *ret_present);
//int master_get_chibi_address(Master *master, uint8_t *ret_address);
//int master_get_chibi_master_address(Master *master, uint8_t *ret_address);
//int master_get_chibi_slave_address(Master *master, uint8_t num, uint8_t *ret_address);
//int master_get_chibi_signal_strength(Master *master, uint8_t *ret_signal_strength);
//int master_get_chibi_error_log(Master *master, uint16_t *ret_underrun, uint16_t *ret_crc_error, uint16_t *ret_no_ack, uint16_t *ret_overflow);
//int master_get_chibi_frequency(Master *master, uint8_t *ret_frequency);
//int master_get_chibi_channel(Master *master, uint8_t *ret_channel);
//int master_is_rs485_present(Master *master, bool *ret_present);
//int master_get_rs485_address(Master *master, uint8_t *ret_address);
//int master_get_rs485_slave_address(Master *master, uint8_t num, uint8_t *ret_address);
//int master_get_rs485_error_log(Master *master, uint16_t *ret_crc_error);
//int master_get_rs485_configuration(Master *master, uint32_t *ret_speed, char *ret_parity, uint8_t *ret_stopbits);
//int master_is_wifi_present(Master *master, bool *ret_present);
//int master_get_wifi_configuration(Master *master, char ret_ssid[32], uint8_t *ret_connection, uint8_t ret_ip[4], uint8_t ret_subnet_mask[4], uint8_t ret_gateway[4], uint16_t *ret_port);
//int master_get_wifi_encryption(Master *master, uint8_t *ret_encryption, char ret_key[50], uint8_t *ret_key_index, uint8_t *ret_eap_options, uint16_t *ret_ca_certificate_length, uint16_t *ret_client_certificate_length, uint16_t *ret_private_key_length);
//int master_get_wifi_status(Master *master, uint8_t ret_mac_address[6], uint8_t ret_bssid[6], uint8_t *ret_channel, int16_t *ret_rssi, uint8_t ret_ip[4], uint8_t ret_subnet_mask[4], uint8_t ret_gateway[4], uint32_t *ret_rx_count, uint32_t *ret_tx_count, uint8_t *ret_state);
//int master_get_wifi_certificate(Master *master, uint16_t index, uint8_t ret_data[32], uint8_t *ret_data_length);
//int master_get_wifi_power_mode(Master *master, uint8_t *ret_mode);
//int master_get_wifi_buffer_info(Master *master, uint32_t *ret_overflow, uint16_t *ret_low_watermark, uint16_t *ret_used);
//int master_get_wifi_regulatory_domain(Master *master, uint8_t *ret_domain);
//int master_get_long_wifi_key(Master *master, char ret_key[64]);
//int master_get_wifi_hostname(Master *master, char ret_hostname[16]);
//int master_get_wifi_authentication_secret(Master *master, char ret_secret[64]);
//int master_is_ethernet_present(Master *master, bool *ret_present);
//int master_get_ethernet_configuration(Master *master, uint8_t *ret_connection, uint8_t ret_ip[4], uint8_t ret_subnet_mask[4], uint8_t ret_gateway[4], uint16_t *ret_port);
//int master_get_ethernet_status(Master *master, uint8_t ret_mac_address[6], uint8_t ret_ip[4], uint8_t ret_subnet_mask[4], uint8_t ret_gateway[4], uint32_t *ret_rx_count, uint32_t *ret_tx_count, char ret_hostname[32]);
//int master_get_ethernet_websocket_configuration(Master *master, uint8_t *ret_sockets, uint16_t *ret_port);
//int master_get_ethernet_authentication_secret(Master *master, char ret_secret[64]);
//int master_get_connection_type(Master *master, uint8_t *ret_connection_type);
//int master_is_wifi2_present(Master *master, bool *ret_present);
//int master_get_wifi2_authentication_secret(Master *master, char ret_secret[64]);
//int master_get_wifi2_configuration(Master *master, uint16_t *ret_port, uint16_t *ret_websocket_port, uint16_t *ret_website_port, uint8_t *ret_phy_mode, uint8_t *ret_sleep_mode, uint8_t *ret_website);
//int master_get_wifi2_status(Master *master, bool *ret_client_enabled, uint8_t *ret_client_status, uint8_t ret_client_ip[4], uint8_t ret_client_subnet_mask[4], uint8_t ret_client_gateway[4], uint8_t ret_client_mac_address[6], uint32_t *ret_client_rx_count, uint32_t *ret_client_tx_count, int8_t *ret_client_rssi, bool *ret_ap_enabled, uint8_t ret_ap_ip[4], uint8_t ret_ap_subnet_mask[4], uint8_t ret_ap_gateway[4], uint8_t ret_ap_mac_address[6], uint32_t *ret_ap_rx_count, uint32_t *ret_ap_tx_count, uint8_t *ret_ap_connected_count);
//int master_get_wifi2_client_configuration(Master *master, bool *ret_enable, char ret_ssid[32], uint8_t ret_ip[4], uint8_t ret_subnet_mask[4], uint8_t ret_gateway[4], uint8_t ret_mac_address[6], uint8_t ret_bssid[6]);
//int master_get_wifi2_client_hostname(Master *master, char ret_hostname[32]);
//int master_get_wifi2_client_password(Master *master, char ret_password[64]);
//int master_get_wifi2_ap_configuration(Master *master, bool *ret_enable, char ret_ssid[32], uint8_t ret_ip[4], uint8_t ret_subnet_mask[4], uint8_t ret_gateway[4], uint8_t *ret_encryption, bool *ret_hidden, uint8_t *ret_channel, uint8_t ret_mac_address[6]);
//int master_get_wifi2_ap_password(Master *master, char ret_password[64]);
//int master_get_wifi2_firmware_version(Master *master, uint8_t ret_firmware_version[3]);
//int master_is_wifi2_status_led_enabled(Master *master, bool *ret_enabled);
//int master_get_wifi2_mesh_configuration(Master *master, bool *ret_enable, uint8_t ret_root_ip[4], uint8_t ret_root_subnet_mask[4], uint8_t ret_root_gateway[4], uint8_t ret_router_bssid[6], uint8_t ret_group_id[6], char ret_group_ssid_prefix[16], uint8_t ret_gateway_ip[4], uint16_t *ret_gateway_port);
//int master_get_wifi2_mesh_router_ssid(Master *master, char ret_ssid[32]);
//int master_get_wifi2_mesh_router_password(Master *master, char ret_password[64]);
//int master_get_wifi2_mesh_common_status(Master *master, uint8_t *ret_status, bool *ret_root_node, bool *ret_root_candidate, uint16_t *ret_connected_nodes, uint32_t *ret_rx_count, uint32_t *ret_tx_count);
//int master_get_wifi2_mesh_client_status(Master *master, char ret_hostname[32], uint8_t ret_ip[4], uint8_t ret_subnet_mask[4], uint8_t ret_gateway[4], uint8_t ret_mac_address[6]);
//int master_get_wifi2_mesh_ap_status(Master *master, char ret_ssid[32], uint8_t ret_ip[4], uint8_t ret_subnet_mask[4], uint8_t ret_gateway[4], uint8_t ret_mac_address[6]);
//int master_get_extension_type(Master *master, uint8_t extension, uint32_t *ret_exttype);
return(m_lastError);
}
QString cMasterBrick::uid()
{
return(m_uid);
}
qint32 cMasterBrick::lastError()
{
return(m_lastError);
}
+93
View File
@@ -0,0 +1,93 @@
#ifndef CMASTERBRICK_H
#define CMASTERBRICK_H
#include "tinkerforge/brick_master.h"
#include <QList>
#include <QObject>
#include <QMetaType>
class cTinkerForge;
class cExtension
{
public:
cExtension(const quint32& exttype, const QString& name);
quint32 exttype();
QString name();
private:
quint32 m_exttype;
QString m_name;
};
class cExtensionList : public QList<cExtension*>
{
public:
cExtension* add(const quint32& exttype, const QString& name);
cExtension* find(const quint32& exttype);
cExtension* find(const quint32& exttype, const QString& name);
cExtension* find(const QString& name);
};
Q_DECLARE_METATYPE(cExtension*)
class cMasterBrick : public QObject
{
Q_OBJECT
public:
enum errorCode
{
API_VERSION = 0x00000001,
VOLTAGE = 0x00000002,
CURRENT = 0x00000004,
USB_VOLTAGE = 0x00000008,
DEBOUNCE_PERIOD = 0x00000010,
BRICKLETS_ENABLED = 0x00000020,
COMMUNICATION_METHOD = 0x00000040,
TIMEOUT_COUNT = 0x00000080,
ENABLE_DYNAMIC_BAUDRATE = 0x00000100,
MINIMUM_DYNAMIC_BAUDRATE = 0x00000200,
SPITFP_BAUDRATE = 0x00000400,
};
cMasterBrick(cTinkerForge* tinkerForge, const QString& uid, QObject *parent = nullptr);
~cMasterBrick();
qint32 collect();
QString uid();
qint32 lastError();
private:
cTinkerForge* m_tinkerForge;
cExtensionList m_extensionList;
QString m_uid;
qint32 m_lastError;
Master m_master;
QString m_apiVersion;
double m_voltage;
double m_current;
double m_usbVoltage;
quint32 m_debouncePeriod;
bool m_brickletsEnabled;
quint32 m_timeoutCount[8];
bool m_enableDynamicBaudrate;
bool m_minimumDynamicBaudrate;
quint32 m_spitfpBaudrate[4];
signals:
};
Q_DECLARE_METATYPE(cMasterBrick*)
#endif // CMASTERBRICK_H
+2
View File
@@ -11,6 +11,7 @@ CONFIG += c++11
SOURCES += \
cairquality.cpp \
cdisplayvalues.cpp \
cmasterbrick.cpp \
coutdoorweather.cpp \
ctinkerforge.cpp \
main.cpp \
@@ -24,6 +25,7 @@ HEADERS += \
cairquality.h \
cdisplayvalues.h \
cmainwindow.h \
cmasterbrick.h \
coutdoorweather.h \
ctinkerforge.h \
tinkerforge/brick_master.h \