changed interface, fixed remarks from reviewer
parent
ccdb0c371f
commit
f004899127
51
idm/idm.cpp
51
idm/idm.cpp
|
|
@ -1,6 +1,6 @@
|
|||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
*
|
||||
* Copyright 2013 - 2020, nymea GmbH
|
||||
* Copyright 2013 - 2021, nymea GmbH
|
||||
* Contact: contact@nymea.io
|
||||
*
|
||||
* This file is part of nymea.
|
||||
|
|
@ -33,7 +33,6 @@
|
|||
#include "../modbus/modbushelpers.h"
|
||||
|
||||
#include <QTimer>
|
||||
#include <cstring>
|
||||
|
||||
Idm::Idm(const QHostAddress &address, QObject *parent) :
|
||||
QObject(parent),
|
||||
|
|
@ -61,6 +60,11 @@ bool Idm::connectDevice()
|
|||
return m_modbusMaster->connectDevice();
|
||||
}
|
||||
|
||||
QHostAddress Idm::getIdmAddress() const
|
||||
{
|
||||
return m_hostAddress;
|
||||
}
|
||||
|
||||
void Idm::onReceivedHoldingRegister(int slaveAddress, int modbusRegister, const QVector<quint16> &value)
|
||||
{
|
||||
Q_UNUSED(slaveAddress);
|
||||
|
|
@ -70,7 +74,7 @@ void Idm::onReceivedHoldingRegister(int slaveAddress, int modbusRegister, const
|
|||
case Idm::OutsideTemperature:
|
||||
/* qCDebug(dcIdm()) << "received outside temperature"; */
|
||||
if (value.length() == 2) {
|
||||
m_info->outsideTemperature = ModbusHelpers::convertRegisterToFloat(&value[RegisterList::OutsideTemperature - modbusRegister]);
|
||||
m_info.outsideTemperature = ModbusHelpers::convertRegisterToFloat(&value[RegisterList::OutsideTemperature - modbusRegister]);
|
||||
}
|
||||
QTimer::singleShot(200, this, [this] {
|
||||
m_modbusMaster->readHoldingRegister(Idm::ModbusUnitID, Idm::CurrentFaultNumber, 1);
|
||||
|
|
@ -80,9 +84,9 @@ void Idm::onReceivedHoldingRegister(int slaveAddress, int modbusRegister, const
|
|||
/* qCDebug(dcIdm()) << "current fault number"; */
|
||||
if (value.length() == 1) {
|
||||
if (value[0] > 0) {
|
||||
m_info->error = true;
|
||||
m_info.error = true;
|
||||
} else {
|
||||
m_info->error = false;
|
||||
m_info.error = false;
|
||||
}
|
||||
}
|
||||
QTimer::singleShot(200, this, [this] {
|
||||
|
|
@ -92,7 +96,7 @@ void Idm::onReceivedHoldingRegister(int slaveAddress, int modbusRegister, const
|
|||
case Idm::HeatStorageTemperature:
|
||||
/* qCDebug(dcIdm()) << "received storage temperature"; */
|
||||
if (value.length() == 2) {
|
||||
m_info->waterTemperature = ModbusHelpers::convertRegisterToFloat(&value[RegisterList::HeatStorageTemperature - modbusRegister]);
|
||||
m_info.waterTemperature = ModbusHelpers::convertRegisterToFloat(&value[RegisterList::HeatStorageTemperature - modbusRegister]);
|
||||
}
|
||||
QTimer::singleShot(200, this, [this] {
|
||||
m_modbusMaster->readHoldingRegister(Idm::ModbusUnitID, Idm::TargetHotWaterTemperature, 1);
|
||||
|
|
@ -102,7 +106,7 @@ void Idm::onReceivedHoldingRegister(int slaveAddress, int modbusRegister, const
|
|||
/* qCDebug(dcIdm()) << "received target hot water temperature"; */
|
||||
if (value.length() == 1) {
|
||||
/* The hot water target temperature is stored as UCHAR (manual p. 13) */
|
||||
m_info->targetWaterTemperature = (double)value[RegisterList::TargetHotWaterTemperature - modbusRegister];
|
||||
m_info.targetWaterTemperature = (double)value[RegisterList::TargetHotWaterTemperature - modbusRegister];
|
||||
}
|
||||
QTimer::singleShot(200, this, [this] {
|
||||
m_modbusMaster->readHoldingRegister(Idm::ModbusUnitID, Idm::HeatPumpOperatingMode, 1);
|
||||
|
|
@ -111,7 +115,7 @@ void Idm::onReceivedHoldingRegister(int slaveAddress, int modbusRegister, const
|
|||
case Idm::HeatPumpOperatingMode:
|
||||
/* qCDebug(dcIdm()) << "received heat pump operating mode"; */
|
||||
if (value.length() == 1) {
|
||||
m_info->mode = heatPumpOperationModeToString((Idm::IdmHeatPumpMode)value[RegisterList::HeatPumpOperatingMode-modbusRegister]);
|
||||
m_info.mode = heatPumpOperationModeToString((Idm::IdmHeatPumpMode)value[RegisterList::HeatPumpOperatingMode-modbusRegister]);
|
||||
}
|
||||
QTimer::singleShot(200, this, [this] {
|
||||
m_modbusMaster->readHoldingRegister(Idm::ModbusUnitID, Idm::RoomTemperatureHKA, 2);
|
||||
|
|
@ -120,7 +124,7 @@ void Idm::onReceivedHoldingRegister(int slaveAddress, int modbusRegister, const
|
|||
case Idm::RoomTemperatureHKA:
|
||||
/* qCDebug(dcIdm()) << "received room temperature hka"; */
|
||||
if (value.length() == 2) {
|
||||
m_info->roomTemperature = ModbusHelpers::convertRegisterToFloat(&value[RegisterList::RoomTemperatureHKA - modbusRegister]);
|
||||
m_info.roomTemperature = ModbusHelpers::convertRegisterToFloat(&value[RegisterList::RoomTemperatureHKA - modbusRegister]);
|
||||
}
|
||||
QTimer::singleShot(200, this, [this] {
|
||||
m_modbusMaster->readHoldingRegister(Idm::ModbusUnitID, Idm::RoomTemperatureTargetHeatingEcoHKA, 2);
|
||||
|
|
@ -129,7 +133,7 @@ void Idm::onReceivedHoldingRegister(int slaveAddress, int modbusRegister, const
|
|||
case Idm::RoomTemperatureTargetHeatingEcoHKA:
|
||||
/* qCDebug(dcIdm()) << "received room temprature hka eco"; */
|
||||
if (value.length() == 2) {
|
||||
m_info->targetRoomTemperature = ModbusHelpers::convertRegisterToFloat(&value[RegisterList::RoomTemperatureTargetHeatingEcoHKA - modbusRegister]);
|
||||
m_info.targetRoomTemperature = ModbusHelpers::convertRegisterToFloat(&value[RegisterList::RoomTemperatureTargetHeatingEcoHKA - modbusRegister]);
|
||||
}
|
||||
QTimer::singleShot(200, this, [this] {
|
||||
m_modbusMaster->readHoldingRegister(Idm::ModbusUnitID, Idm::CurrentPowerConsumptionHeatPump, 2);
|
||||
|
|
@ -138,12 +142,12 @@ void Idm::onReceivedHoldingRegister(int slaveAddress, int modbusRegister, const
|
|||
case Idm::CurrentPowerConsumptionHeatPump:
|
||||
/* qCDebug(dcIdm()) << "received power consumption heat pump"; */
|
||||
if (value.length() == 2) {
|
||||
m_info->powerConsumptionHeatPump = ModbusHelpers::convertRegisterToFloat(&value[RegisterList::CurrentPowerConsumptionHeatPump - modbusRegister]);
|
||||
m_info.powerConsumptionHeatPump = ModbusHelpers::convertRegisterToFloat(&value[RegisterList::CurrentPowerConsumptionHeatPump - modbusRegister]);
|
||||
}
|
||||
|
||||
/* Everything read without an error
|
||||
* -> set connected to true */
|
||||
m_info->connected = true;
|
||||
m_info.connected = true;
|
||||
emit statusUpdated(m_info);
|
||||
break;
|
||||
}
|
||||
|
|
@ -152,24 +156,17 @@ void Idm::onReceivedHoldingRegister(int slaveAddress, int modbusRegister, const
|
|||
void Idm::onModbusError()
|
||||
{
|
||||
qCDebug(dcIdm()) << "iDM: Received modbus error";
|
||||
|
||||
if (m_info != nullptr) {
|
||||
m_info->connected = false;
|
||||
emit statusUpdated(m_info);
|
||||
}
|
||||
m_info.connected = false;
|
||||
emit statusUpdated(m_info);
|
||||
}
|
||||
|
||||
void Idm::onRequestStatus()
|
||||
{
|
||||
m_info = new IdmInfo;
|
||||
|
||||
QUuid reqId{};
|
||||
reqId = m_modbusMaster->readHoldingRegister(Idm::ModbusUnitID, Idm::OutsideTemperature, 2);
|
||||
|
||||
/* qCDebug(dcIdm()) << "Request id: " << reqId; */
|
||||
m_modbusMaster->readHoldingRegister(Idm::ModbusUnitID, Idm::OutsideTemperature, 2);
|
||||
}
|
||||
|
||||
QString Idm::systemOperationModeToString(IdmSysMode mode) {
|
||||
QString Idm::systemOperationModeToString(IdmSysMode mode)
|
||||
{
|
||||
QString result{};
|
||||
|
||||
/* Operation modes according to table of manual p. 13 */
|
||||
|
|
@ -190,13 +187,12 @@ QString Idm::systemOperationModeToString(IdmSysMode mode) {
|
|||
result = "Nur Heizung/Kühlung";
|
||||
break;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
QString Idm::heatPumpOperationModeToString(IdmHeatPumpMode mode) {
|
||||
QString Idm::heatPumpOperationModeToString(IdmHeatPumpMode mode)
|
||||
{
|
||||
QString result{};
|
||||
|
||||
/* Operation modes according to table of manual p. 14 */
|
||||
switch (mode) {
|
||||
case IdmHeatPumpModeOff:
|
||||
|
|
@ -215,7 +211,6 @@ QString Idm::heatPumpOperationModeToString(IdmHeatPumpMode mode) {
|
|||
result = "Defrost";
|
||||
break;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
|
|||
11
idm/idm.h
11
idm/idm.h
|
|
@ -1,6 +1,6 @@
|
|||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
*
|
||||
* Copyright 2013 - 2020, nymea GmbH
|
||||
* Copyright 2013 - 2021, nymea GmbH
|
||||
* Contact: contact@nymea.io
|
||||
*
|
||||
* This file is part of nymea.
|
||||
|
|
@ -72,12 +72,13 @@ public:
|
|||
~Idm();
|
||||
|
||||
bool connectDevice();
|
||||
QHostAddress getIdmAddress() const {return m_hostAddress;};
|
||||
QHostAddress getIdmAddress() const;
|
||||
bool setTargetTemperature;
|
||||
|
||||
private:
|
||||
|
||||
/** Modbus Unit ID of Idm device */
|
||||
static const quint16 ModbusUnitID = 1;
|
||||
static const quint16 ModbusUnitID = 1;
|
||||
|
||||
enum IscModus {
|
||||
KeineAbwarme = 0,
|
||||
|
|
@ -164,7 +165,7 @@ private:
|
|||
|
||||
/** This structure is allocated within onRequestStatus and filled
|
||||
* by the receivedStatusGroupx functions */
|
||||
IdmInfo *m_info = nullptr;
|
||||
IdmInfo m_info;
|
||||
|
||||
/** Converts a system operation mode code to a string (according to manual p. 13) */
|
||||
QString systemOperationModeToString(IdmSysMode mode);
|
||||
|
|
@ -173,7 +174,7 @@ private:
|
|||
QString heatPumpOperationModeToString(IdmHeatPumpMode mode);
|
||||
|
||||
signals:
|
||||
void statusUpdated(IdmInfo *info);
|
||||
void statusUpdated(const IdmInfo &info);
|
||||
void targetRoomTemperatureChanged();
|
||||
|
||||
public slots:
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
*
|
||||
* Copyright 2013 - 2020, nymea GmbH
|
||||
* Copyright 2013 - 2021, nymea GmbH
|
||||
* Contact: contact@nymea.io
|
||||
*
|
||||
* This file is part of nymea.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
*
|
||||
* Copyright 2013 - 2020, nymea GmbH
|
||||
* Copyright 2013 - 2021, nymea GmbH
|
||||
* Contact: contact@nymea.io
|
||||
*
|
||||
* This file is part of nymea.
|
||||
|
|
@ -44,9 +44,10 @@ void IntegrationPluginIdm::setupThing(ThingSetupInfo *info)
|
|||
if (thing->thingClassId() == navigator2ThingClassId) {
|
||||
QHostAddress hostAddress = QHostAddress(thing->paramValue(navigator2ThingIpAddressParamTypeId).toString());
|
||||
|
||||
if (hostAddress.isNull()) {
|
||||
|
||||
if (!hostAddress.isNull()) {
|
||||
qCWarning(dcIdm()) << "Setup failed, IP address not valid";
|
||||
info->finish(Thing::ThingErrorInvalidParameter, "No IP address given");
|
||||
info->finish(Thing::ThingErrorInvalidParameter, QT_TR_NOOP("No IP address given"));
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -75,8 +76,8 @@ void IntegrationPluginIdm::setupThing(ThingSetupInfo *info)
|
|||
return;
|
||||
}
|
||||
m_idmConnections.insert(thing, idm);
|
||||
connect(idm, &Idm::statusUpdated, info, [info] (IdmInfo *idmInfo) {
|
||||
if (idmInfo->connected) {
|
||||
connect(idm, &Idm::statusUpdated, info, [info] (const IdmInfo &idmInfo) {
|
||||
if (idmInfo.connected) {
|
||||
info->finish(Thing::ThingErrorNoError);
|
||||
}
|
||||
});
|
||||
|
|
@ -94,6 +95,7 @@ void IntegrationPluginIdm::postSetupThing(Thing *thing)
|
|||
qCDebug(dcIdm()) << "postSetupThing called" << thing->name();
|
||||
|
||||
if (!m_refreshTimer) {
|
||||
qCDebug(dcIdm()) << "Starting refresh timer";
|
||||
m_refreshTimer = hardwareManager()->pluginTimerManager()->registerTimer(10);
|
||||
connect(m_refreshTimer, &PluginTimer::timeout, this, &IntegrationPluginIdm::onRefreshTimer);
|
||||
}
|
||||
|
|
@ -121,6 +123,12 @@ void IntegrationPluginIdm::thingRemoved(Thing *thing)
|
|||
m_idmConnections.take(thing)->deleteLater();
|
||||
}
|
||||
}
|
||||
|
||||
if (myThings().isEmpty()) {
|
||||
qCDebug(dcIdm()) << "Stopping refresh timer";
|
||||
hardwareManager()->pluginTimerManager()->unregisterTimer(m_refreshTimer);
|
||||
m_refreshTimer = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void IntegrationPluginIdm::executeAction(ThingActionInfo *info)
|
||||
|
|
@ -129,7 +137,9 @@ void IntegrationPluginIdm::executeAction(ThingActionInfo *info)
|
|||
Action action = info->action();
|
||||
|
||||
if (thing->thingClassId() == navigator2ThingClassId) {
|
||||
if (action.actionTypeId() == navigator2PowerActionTypeId) {
|
||||
if (action.actionTypeId() == navigator2TargetTemperatureActionTypeId) {
|
||||
double targetTemperature = thing->stateValue(navigator2TargetTemperatureStateTypeId).toDouble();
|
||||
Q_UNUSED(targetTemperature);
|
||||
|
||||
} else {
|
||||
Q_ASSERT_X(false, "executeAction", QString("Unhandled action: %1").arg(action.actionTypeId().toString()).toUtf8());
|
||||
|
|
@ -152,15 +162,11 @@ void IntegrationPluginIdm::update(Thing *thing)
|
|||
}
|
||||
}
|
||||
|
||||
void IntegrationPluginIdm::onStatusUpdated(IdmInfo *info)
|
||||
void IntegrationPluginIdm::onStatusUpdated(const IdmInfo &info)
|
||||
{
|
||||
/* qCDebug(dcIdm()) << "onStatusUpdated"; */
|
||||
if (!info)
|
||||
return;
|
||||
|
||||
qCDebug(dcIdm()) << "Received status from heat pump";
|
||||
|
||||
Idm *idm = static_cast<Idm *>(sender());
|
||||
Idm *idm = qobject_cast<Idm *>(sender());
|
||||
Thing *thing = m_idmConnections.key(idm);
|
||||
|
||||
if (!thing)
|
||||
|
|
@ -168,16 +174,16 @@ void IntegrationPluginIdm::onStatusUpdated(IdmInfo *info)
|
|||
|
||||
/* Received a structure holding the status info of the
|
||||
* heat pump. Update the thing states with the individual fields. */
|
||||
thing->setStateValue(navigator2ConnectedStateTypeId, info->connected);
|
||||
thing->setStateValue(navigator2PowerStateTypeId, info->power);
|
||||
thing->setStateValue(navigator2TemperatureStateTypeId, info->roomTemperature);
|
||||
thing->setStateValue(navigator2OutsideAirTemperatureStateTypeId, info->outsideTemperature);
|
||||
thing->setStateValue(navigator2WaterTemperatureStateTypeId, info->waterTemperature);
|
||||
thing->setStateValue(navigator2TargetTemperatureStateTypeId, info->targetRoomTemperature);
|
||||
thing->setStateValue(navigator2TargetWaterTemperatureStateTypeId, info->targetWaterTemperature);
|
||||
thing->setStateValue(navigator2CurrentPowerConsumptionHeatPumpStateTypeId, info->powerConsumptionHeatPump);
|
||||
thing->setStateValue(navigator2ModeStateTypeId, info->mode);
|
||||
thing->setStateValue(navigator2ErrorStateTypeId, info->error);
|
||||
thing->setStateValue(navigator2ConnectedStateTypeId, info.connected);
|
||||
thing->setStateValue(navigator2PowerStateTypeId, info.power);
|
||||
thing->setStateValue(navigator2TemperatureStateTypeId, info.roomTemperature);
|
||||
thing->setStateValue(navigator2OutsideAirTemperatureStateTypeId, info.outsideTemperature);
|
||||
thing->setStateValue(navigator2WaterTemperatureStateTypeId, info.waterTemperature);
|
||||
thing->setStateValue(navigator2TargetTemperatureStateTypeId, info.targetRoomTemperature);
|
||||
thing->setStateValue(navigator2TargetWaterTemperatureStateTypeId, info.targetWaterTemperature);
|
||||
thing->setStateValue(navigator2CurrentPowerConsumptionHeatPumpStateTypeId, info.powerConsumptionHeatPump);
|
||||
thing->setStateValue(navigator2ModeStateTypeId, info.mode);
|
||||
thing->setStateValue(navigator2ErrorStateTypeId, info.error);
|
||||
}
|
||||
|
||||
void IntegrationPluginIdm::onRefreshTimer()
|
||||
|
|
|
|||
|
|
@ -46,27 +46,24 @@ class IntegrationPluginIdm: public IntegrationPlugin
|
|||
Q_PLUGIN_METADATA(IID "io.nymea.IntegrationPlugin" FILE "integrationpluginidm.json")
|
||||
Q_INTERFACES(IntegrationPlugin)
|
||||
|
||||
|
||||
public:
|
||||
/** Constructor */
|
||||
explicit IntegrationPluginIdm();
|
||||
|
||||
void setupThing(ThingSetupInfo *info) override;
|
||||
void postSetupThing(Thing *thing) override;
|
||||
void thingRemoved(Thing *thing) override;
|
||||
void executeAction(ThingActionInfo *info) override;
|
||||
void update(Thing *thing);
|
||||
|
||||
private:
|
||||
|
||||
PluginTimer *m_refreshTimer = nullptr;
|
||||
QHash<Thing *, Idm *> m_idmConnections;
|
||||
QHash<QUuid, ThingActionInfo *> m_asyncActions;
|
||||
|
||||
void update(Thing *thing);
|
||||
void onRefreshTimer();
|
||||
|
||||
private slots:
|
||||
void onStatusUpdated(IdmInfo *info);
|
||||
void onStatusUpdated(const IdmInfo &info);
|
||||
};
|
||||
|
||||
#endif // INTEGRATIONPLUGINIDM_H
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
"displayName": "Navigator 2.0",
|
||||
"id": "1c95ac91-4eca-4cbf-b0f4-d60d35d069ed",
|
||||
"createMethods": ["user"],
|
||||
"interfaces": ["temperaturesensor", "connectable"],
|
||||
"interfaces": ["thermostat", "connectable"],
|
||||
"paramTypes": [
|
||||
{
|
||||
"id": "05714e5c-d66a-4095-bbff-a0eb96fb035b",
|
||||
|
|
@ -37,10 +37,8 @@
|
|||
"name": "power",
|
||||
"displayName": "Power",
|
||||
"displayNameEvent": "Power changed",
|
||||
"displayNameAction": "Change power",
|
||||
"type": "bool",
|
||||
"defaultValue": 0,
|
||||
"writable": true
|
||||
"defaultValue": false
|
||||
},
|
||||
{
|
||||
"id": "f0f596bf-7e45-43ea-b3d4-767b82dd422a",
|
||||
|
|
@ -73,10 +71,14 @@
|
|||
"id": "efae7493-68c3-4cb9-853c-81011bdf09ca",
|
||||
"name": "targetTemperature",
|
||||
"displayName": "Target room temperature",
|
||||
"displayNameAction": "Set target room temperature",
|
||||
"displayNameEvent": "Target room temperature changed",
|
||||
"type": "double",
|
||||
"unit": "DegreeCelsius",
|
||||
"defaultValue": 22.00
|
||||
"minValue": "18",
|
||||
"maxValue": "28",
|
||||
"defaultValue": 22.00,
|
||||
"writable": true
|
||||
},
|
||||
{
|
||||
"id": "746244d6-dd37-4af8-b2ae-a7d8463e51e2",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
*
|
||||
* Copyright 2013 - 2020, nymea GmbH
|
||||
* Copyright 2013 - 2021, nymea GmbH
|
||||
* Contact: contact@nymea.io
|
||||
*
|
||||
* This file is part of nymea.
|
||||
|
|
@ -30,8 +30,6 @@
|
|||
|
||||
#include "modbushelpers.h"
|
||||
|
||||
#include <cstring>
|
||||
|
||||
float ModbusHelpers::convertRegisterToFloat(const quint16 *reg) {
|
||||
float result = 0.0;
|
||||
|
||||
|
|
@ -46,7 +44,6 @@ float ModbusHelpers::convertRegisterToFloat(const quint16 *reg) {
|
|||
/* needs to be done with char * to avoid pedantic compiler errors */
|
||||
memcpy((char *)&result, (char *)&tmp, sizeof(result));
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
*
|
||||
* Copyright 2013 - 2020, nymea GmbH
|
||||
* Copyright 2013 - 2021, nymea GmbH
|
||||
* Contact: contact@nymea.io
|
||||
*
|
||||
* This file is part of nymea.
|
||||
|
|
@ -36,8 +36,8 @@
|
|||
|
||||
class ModbusHelpers {
|
||||
public:
|
||||
static float convertRegisterToFloat(const quint16 *reg);
|
||||
static void convertFloatToRegister(QVector<quint16> ®, float value);
|
||||
static float convertRegisterToFloat(const quint16 *reg);
|
||||
static void convertFloatToRegister(QVector<quint16> ®, float value);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in New Issue