You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
230 lines
10 KiB
C++
230 lines
10 KiB
C++
#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, ¤t) != 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);
|
|
}
|