move from tabs to spaces
This commit is contained in:
@ -5,57 +5,58 @@
|
||||
#include "../apgetconnected.h"
|
||||
|
||||
|
||||
OcupancySensorSource::OcupancySensorSource(QObject *parent, const QString& device, const QString& deviceMac): QObject (parent), deviceMac_(deviceMac), device_(device)
|
||||
OcupancySensorSource::OcupancySensorSource(QObject *parent, const QString& device,
|
||||
const QString& deviceMac): QObject (parent), deviceMac_(deviceMac), device_(device)
|
||||
{
|
||||
QTimer::singleShot(timeoutMs, this, &OcupancySensorSource::Timeout);
|
||||
QTimer::singleShot(timeoutMs, this, &OcupancySensorSource::Timeout);
|
||||
}
|
||||
|
||||
void OcupancySensorSource::sensorEvent(Sensor sensor)
|
||||
{
|
||||
if(sensor.type == Sensor::TYPE_DOOR && sensor.id == 1 && sensor.field != 0.0f)
|
||||
{
|
||||
if(occupied == false) stateChanged(Sensor(Sensor::TYPE_OCUPANCY, 0, 1, "Occupancy"));
|
||||
QTimer::singleShot(timeoutMs, this, &OcupancySensorSource::Timeout);
|
||||
}
|
||||
if(sensor.type == Sensor::TYPE_DOOR && sensor.id == 1 && sensor.field != 0.0f)
|
||||
{
|
||||
if(occupied == false) stateChanged(Sensor(Sensor::TYPE_OCUPANCY, 0, 1, "Occupancy"));
|
||||
QTimer::singleShot(timeoutMs, this, &OcupancySensorSource::Timeout);
|
||||
}
|
||||
}
|
||||
|
||||
void OcupancySensorSource::Timeout()
|
||||
{
|
||||
int error = 0;
|
||||
qDebug()<<"testing for occupancy";
|
||||
std::vector<uint64_t> devices = ap::connectedDevices(device_.toLatin1().toStdString(), error);
|
||||
if(error == 0)
|
||||
{
|
||||
bool found = false;
|
||||
for(size_t i = 0; i < devices.size(); ++i)
|
||||
{
|
||||
std::string mac = ap::macAddrToString(devices[i]);
|
||||
if(mac.find(deviceMac_.toLatin1().toStdString()) != std::string::npos)
|
||||
{
|
||||
found = true;
|
||||
qDebug()<<"occupied";
|
||||
break;
|
||||
}
|
||||
}
|
||||
stateChanged(Sensor(Sensor::TYPE_OCUPANCY, 0, found, "Occupancy"));
|
||||
occupied = found;
|
||||
}
|
||||
else
|
||||
{
|
||||
stateChanged(Sensor(Sensor::TYPE_OCUPANCY, 0, true, "Occupancy"));
|
||||
qDebug()<<"occupancy sensor error "<<error;
|
||||
}
|
||||
int error = 0;
|
||||
qDebug()<<"testing for occupancy";
|
||||
std::vector<uint64_t> devices = ap::connectedDevices(device_.toLatin1().toStdString(), error);
|
||||
if(error == 0)
|
||||
{
|
||||
bool found = false;
|
||||
for(size_t i = 0; i < devices.size(); ++i)
|
||||
{
|
||||
std::string mac = ap::macAddrToString(devices[i]);
|
||||
if(mac.find(deviceMac_.toLatin1().toStdString()) != std::string::npos)
|
||||
{
|
||||
found = true;
|
||||
qDebug()<<"occupied";
|
||||
break;
|
||||
}
|
||||
}
|
||||
stateChanged(Sensor(Sensor::TYPE_OCUPANCY, 0, found, "Occupancy"));
|
||||
occupied = found;
|
||||
}
|
||||
else
|
||||
{
|
||||
stateChanged(Sensor(Sensor::TYPE_OCUPANCY, 0, true, "Occupancy"));
|
||||
qDebug()<<"occupancy sensor error "<<error;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void OcupancySensorSource::store(QJsonObject &json)
|
||||
{
|
||||
json["Device"] = device_;
|
||||
json["MacAddres"] = deviceMac_;
|
||||
json["Device"] = device_;
|
||||
json["MacAddres"] = deviceMac_;
|
||||
}
|
||||
|
||||
void OcupancySensorSource::load(const QJsonObject &json)
|
||||
{
|
||||
device_ = json["Device"].toString("wlan0");
|
||||
deviceMac_ = json["MacAddres"].toString("60:BE:B5:25:8C:E0");
|
||||
device_ = json["Device"].toString("wlan0");
|
||||
deviceMac_ = json["MacAddres"].toString("60:BE:B5:25:8C:E0");
|
||||
}
|
||||
|
@ -6,27 +6,28 @@
|
||||
|
||||
class OcupancySensorSource : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_OBJECT
|
||||
private:
|
||||
|
||||
QString deviceMac_;
|
||||
QString device_;
|
||||
bool occupied = true;
|
||||
static constexpr unsigned timeoutMs = (15 * 60) * 1000;
|
||||
QString deviceMac_;
|
||||
QString device_;
|
||||
bool occupied = true;
|
||||
static constexpr unsigned timeoutMs = (15 * 60) * 1000;
|
||||
|
||||
public:
|
||||
explicit OcupancySensorSource(QObject *parent = nullptr, const QString& device = "wlan0", const QString& deviceMac = "60:BE:B5:25:8C:E0");
|
||||
explicit OcupancySensorSource(QObject *parent = nullptr, const QString& device = "wlan0",
|
||||
const QString& deviceMac = "60:BE:B5:25:8C:E0");
|
||||
|
||||
void store(QJsonObject& json);
|
||||
void load(const QJsonObject& json);
|
||||
void store(QJsonObject& json);
|
||||
void load(const QJsonObject& json);
|
||||
|
||||
public slots:
|
||||
void sensorEvent(Sensor sensor);
|
||||
void sensorEvent(Sensor sensor);
|
||||
|
||||
private slots:
|
||||
|
||||
void Timeout();
|
||||
void Timeout();
|
||||
|
||||
signals:
|
||||
void stateChanged(Sensor sensor);
|
||||
void stateChanged(Sensor sensor);
|
||||
};
|
||||
|
@ -6,44 +6,44 @@ SensorStore globalSensors;
|
||||
|
||||
SensorStore::SensorStore(QObject *parent): QObject(parent)
|
||||
{
|
||||
sensors_.push_back(Sensor(0,1,0,"Front door"));
|
||||
sensors_.push_back(Sensor(0,0,0,"Bedroom door"));
|
||||
sensors_.push_back(Sensor(0,1,0,"Front door"));
|
||||
sensors_.push_back(Sensor(0,0,0,"Bedroom door"));
|
||||
}
|
||||
|
||||
void SensorStore::sensorGotState(const Sensor& sensor)
|
||||
{
|
||||
bool exsisting = false;
|
||||
for(unsigned i = 0; i < sensors_.size(); ++i)
|
||||
{
|
||||
if(sensor.type == sensors_[i].type && sensor.id == sensors_[i].id)
|
||||
{
|
||||
sensors_[i].updateSeen();
|
||||
if(sensors_[i].field != sensor.field)
|
||||
{
|
||||
sensors_[i].field = sensor.field;
|
||||
sensorChangedState(sensor);
|
||||
stateChenged(sensors_);
|
||||
}
|
||||
exsisting = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(!exsisting)
|
||||
{
|
||||
sensors_.push_back(sensor);
|
||||
sensorChangedState(sensor);
|
||||
stateChenged(sensors_);
|
||||
}
|
||||
bool exsisting = false;
|
||||
for(unsigned i = 0; i < sensors_.size(); ++i)
|
||||
{
|
||||
if(sensor.type == sensors_[i].type && sensor.id == sensors_[i].id)
|
||||
{
|
||||
sensors_[i].updateSeen();
|
||||
if(sensors_[i].field != sensor.field)
|
||||
{
|
||||
sensors_[i].field = sensor.field;
|
||||
sensorChangedState(sensor);
|
||||
stateChenged(sensors_);
|
||||
}
|
||||
exsisting = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(!exsisting)
|
||||
{
|
||||
sensors_.push_back(sensor);
|
||||
sensorChangedState(sensor);
|
||||
stateChenged(sensors_);
|
||||
}
|
||||
|
||||
for(unsigned i = 0; i < sensors_.size(); ++i)
|
||||
{
|
||||
if(sensors_[i].type > 0 && sensors_[i].type < 128 && QDateTime::currentDateTime() > sensors_[i].lastSeen.addSecs(1800))
|
||||
{
|
||||
sensorDeleted(sensors_[i]);
|
||||
stateChenged(sensors_);
|
||||
sensors_.erase(sensors_.begin()+i);
|
||||
}
|
||||
}
|
||||
for(unsigned i = 0; i < sensors_.size(); ++i)
|
||||
{
|
||||
if(sensors_[i].type > 0 && sensors_[i].type < 128 && QDateTime::currentDateTime() > sensors_[i].lastSeen.addSecs(1800))
|
||||
{
|
||||
sensorDeleted(sensors_[i]);
|
||||
stateChenged(sensors_);
|
||||
sensors_.erase(sensors_.begin()+i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -9,91 +9,104 @@ class Sensor
|
||||
{
|
||||
public:
|
||||
|
||||
static constexpr uint8_t TYPE_DOOR = 0;
|
||||
static constexpr uint8_t TYPE_TEMPERATURE = 1;
|
||||
static constexpr uint8_t TYPE_HUMIDITY = 2;
|
||||
static constexpr uint8_t TYPE_PRESSURE = 3;
|
||||
static constexpr uint8_t TYPE_BRIGHTNESS = 4;
|
||||
static constexpr uint8_t TYPE_BUTTON = 5;
|
||||
static constexpr uint8_t TYPE_ADC = 6;
|
||||
static constexpr uint8_t TYPE_LOWBATTERY = 128;
|
||||
static constexpr uint8_t TYPE_SHUTDOWN_IMMINENT = 251;
|
||||
static constexpr uint8_t TYPE_OCUPANCY = 252;
|
||||
static constexpr uint8_t TYPE_SUN_ALTITUDE = 253;
|
||||
static constexpr uint8_t TYPE_AUDIO_OUTPUT = 254;
|
||||
static constexpr uint8_t TYPE_DUMMY = 255;
|
||||
static constexpr uint8_t TYPE_DOOR = 0;
|
||||
static constexpr uint8_t TYPE_TEMPERATURE = 1;
|
||||
static constexpr uint8_t TYPE_HUMIDITY = 2;
|
||||
static constexpr uint8_t TYPE_PRESSURE = 3;
|
||||
static constexpr uint8_t TYPE_BRIGHTNESS = 4;
|
||||
static constexpr uint8_t TYPE_BUTTON = 5;
|
||||
static constexpr uint8_t TYPE_ADC = 6;
|
||||
static constexpr uint8_t TYPE_LOWBATTERY = 128;
|
||||
static constexpr uint8_t TYPE_SHUTDOWN_IMMINENT = 251;
|
||||
static constexpr uint8_t TYPE_OCUPANCY = 252;
|
||||
static constexpr uint8_t TYPE_SUN_ALTITUDE = 253;
|
||||
static constexpr uint8_t TYPE_AUDIO_OUTPUT = 254;
|
||||
static constexpr uint8_t TYPE_DUMMY = 255;
|
||||
|
||||
uint8_t type;
|
||||
uint8_t id;
|
||||
float field;
|
||||
QString name;
|
||||
QDateTime lastSeen;
|
||||
bool hidden;
|
||||
uint8_t type;
|
||||
uint8_t id;
|
||||
float field;
|
||||
QString name;
|
||||
QDateTime lastSeen;
|
||||
bool hidden;
|
||||
|
||||
Sensor(uint8_t typeIn, uint8_t idIn, float fieldIn = 0, QString nameIn = "", bool hiddenIn = false): type(typeIn), id(idIn), field(fieldIn), name(nameIn), hidden(hiddenIn)
|
||||
{
|
||||
lastSeen = QDateTime::currentDateTime();
|
||||
if(nameIn == "") generateName();
|
||||
}
|
||||
Sensor(QString nameIn = "dummy"): type(TYPE_DUMMY), id(0), field(0), name(nameIn), hidden(false)
|
||||
{
|
||||
lastSeen = QDateTime::currentDateTime();
|
||||
}
|
||||
inline bool operator==(const Sensor& in) const{ return type==in.type && id == in.id; }
|
||||
inline bool operator!=(const Sensor& in) const{ return !(*this==in); }
|
||||
inline void updateSeen(){lastSeen = QDateTime::currentDateTime();}
|
||||
static Sensor sensorFromString(const QString& str)
|
||||
{
|
||||
QStringList bufferList = str.split(' ');
|
||||
if(bufferList.size() >= 7)
|
||||
{
|
||||
Sensor sensor(bufferList[2].toUInt(), bufferList[4].toUInt(), bufferList[6].toUInt());
|
||||
if(sensor.type == Sensor::TYPE_HUMIDITY || sensor.type == Sensor::TYPE_TEMPERATURE) sensor.field = sensor.field/10;
|
||||
return sensor;
|
||||
}
|
||||
else return Sensor(TYPE_DUMMY, 0, 0, "", true);
|
||||
}
|
||||
QString toString()
|
||||
{
|
||||
return QString("SENSOR TYPE: ")+QString::number(type)+" ID: "+QString::number(id)+" FIELD: "+
|
||||
QString::number((type == Sensor::TYPE_HUMIDITY || type == Sensor::TYPE_TEMPERATURE) ? field*10 : field);
|
||||
}
|
||||
inline void generateName()
|
||||
{
|
||||
if(type == TYPE_TEMPERATURE) name = "Temperature " + QString::number(id);
|
||||
else if(type == TYPE_DOOR) name = "Door " + QString::number(id);
|
||||
else if(type == TYPE_BUTTON) name = "Button " + QString::number(id);
|
||||
else if(type == TYPE_AUDIO_OUTPUT) name = "Speakers " + QString::number(id);
|
||||
else if(type == TYPE_HUMIDITY) name = "Humidity " + QString::number(id);
|
||||
else if(type == TYPE_SUN_ALTITUDE) name = "Solar Altitude";
|
||||
else if(type == TYPE_SHUTDOWN_IMMINENT) name = "Shutdown Imminent";
|
||||
else name = "Sensor Type " + QString::number(type) + " Id " + QString::number(id);
|
||||
}
|
||||
Sensor(uint8_t typeIn, uint8_t idIn, float fieldIn = 0, QString nameIn = "", bool hiddenIn = false): type(typeIn),
|
||||
id(idIn), field(fieldIn), name(nameIn), hidden(hiddenIn)
|
||||
{
|
||||
lastSeen = QDateTime::currentDateTime();
|
||||
if(nameIn == "") generateName();
|
||||
}
|
||||
Sensor(QString nameIn = "dummy"): type(TYPE_DUMMY), id(0), field(0), name(nameIn), hidden(false)
|
||||
{
|
||||
lastSeen = QDateTime::currentDateTime();
|
||||
}
|
||||
inline bool operator==(const Sensor& in) const
|
||||
{
|
||||
return type==in.type && id == in.id;
|
||||
}
|
||||
inline bool operator!=(const Sensor& in) const
|
||||
{
|
||||
return !(*this==in);
|
||||
}
|
||||
inline void updateSeen()
|
||||
{
|
||||
lastSeen = QDateTime::currentDateTime();
|
||||
}
|
||||
static Sensor sensorFromString(const QString& str)
|
||||
{
|
||||
QStringList bufferList = str.split(' ');
|
||||
if(bufferList.size() >= 7)
|
||||
{
|
||||
Sensor sensor(bufferList[2].toUInt(), bufferList[4].toUInt(), bufferList[6].toUInt());
|
||||
if(sensor.type == Sensor::TYPE_HUMIDITY || sensor.type == Sensor::TYPE_TEMPERATURE) sensor.field = sensor.field/10;
|
||||
return sensor;
|
||||
}
|
||||
else return Sensor(TYPE_DUMMY, 0, 0, "", true);
|
||||
}
|
||||
QString toString()
|
||||
{
|
||||
return QString("SENSOR TYPE: ")+QString::number(type)+" ID: "+QString::number(id)+" FIELD: "+
|
||||
QString::number((type == Sensor::TYPE_HUMIDITY || type == Sensor::TYPE_TEMPERATURE) ? field*10 : field);
|
||||
}
|
||||
inline void generateName()
|
||||
{
|
||||
if(type == TYPE_TEMPERATURE) name = "Temperature " + QString::number(id);
|
||||
else if(type == TYPE_DOOR) name = "Door " + QString::number(id);
|
||||
else if(type == TYPE_BUTTON) name = "Button " + QString::number(id);
|
||||
else if(type == TYPE_AUDIO_OUTPUT) name = "Speakers " + QString::number(id);
|
||||
else if(type == TYPE_HUMIDITY) name = "Humidity " + QString::number(id);
|
||||
else if(type == TYPE_SUN_ALTITUDE) name = "Solar Altitude";
|
||||
else if(type == TYPE_SHUTDOWN_IMMINENT) name = "Shutdown Imminent";
|
||||
else name = "Sensor Type " + QString::number(type) + " Id " + QString::number(id);
|
||||
}
|
||||
};
|
||||
|
||||
class SensorStore: public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_OBJECT
|
||||
private:
|
||||
std::vector<Sensor> sensors_;
|
||||
std::vector<Sensor> sensors_;
|
||||
|
||||
public:
|
||||
|
||||
SensorStore(QObject *parent = nullptr);
|
||||
virtual ~SensorStore(){}
|
||||
SensorStore(QObject *parent = nullptr);
|
||||
virtual ~SensorStore() {}
|
||||
|
||||
inline std::vector<Sensor>* getSensors(){ return &sensors_; }
|
||||
inline std::vector<Sensor>* getSensors()
|
||||
{
|
||||
return &sensors_;
|
||||
}
|
||||
|
||||
|
||||
public slots:
|
||||
|
||||
void sensorGotState(const Sensor& sensor);
|
||||
void sensorGotState(const Sensor& sensor);
|
||||
|
||||
signals:
|
||||
|
||||
void stateChenged(std::vector<Sensor> sensors);
|
||||
void sensorChangedState(Sensor sensor);
|
||||
void sensorDeleted(Sensor sensor);
|
||||
void stateChenged(std::vector<Sensor> sensors);
|
||||
void sensorChangedState(Sensor sensor);
|
||||
void sensorDeleted(Sensor sensor);
|
||||
|
||||
};
|
||||
|
||||
|
@ -4,56 +4,56 @@
|
||||
|
||||
SpeakerSensorSource::SpeakerSensorSource(QString name, QObject *parent) : QObject(parent), name_(name)
|
||||
{
|
||||
silenceCount = 0;
|
||||
silenceCount = 0;
|
||||
}
|
||||
|
||||
SpeakerSensorSource::~SpeakerSensorSource()
|
||||
{
|
||||
abort();
|
||||
abort();
|
||||
}
|
||||
|
||||
void SpeakerSensorSource::run()
|
||||
{
|
||||
abort();
|
||||
arecord.start( "arecord --disable-softvol -r 8000 -D front -" );
|
||||
abort();
|
||||
arecord.start( "arecord --disable-softvol -r 8000 -D front -" );
|
||||
|
||||
connect(&timer, SIGNAL(timeout()), this, SLOT(doTick()));
|
||||
timer.setInterval(500);
|
||||
timer.start();
|
||||
connect(&timer, SIGNAL(timeout()), this, SLOT(doTick()));
|
||||
timer.setInterval(500);
|
||||
timer.start();
|
||||
|
||||
stateChanged(Sensor(Sensor::TYPE_AUDIO_OUTPUT, 0, 1, name_));
|
||||
stateChanged(Sensor(Sensor::TYPE_AUDIO_OUTPUT, 0, 1, name_));
|
||||
}
|
||||
|
||||
|
||||
void SpeakerSensorSource::abort()
|
||||
{
|
||||
if(arecord.state() == QProcess::Running)arecord.close();
|
||||
if(timer.isActive())timer.stop();
|
||||
if(arecord.state() == QProcess::Running)arecord.close();
|
||||
if(timer.isActive())timer.stop();
|
||||
}
|
||||
|
||||
void SpeakerSensorSource::doTick()
|
||||
{
|
||||
if(arecord.state() == QProcess::Running)
|
||||
{
|
||||
QByteArray buffer = arecord.readAllStandardOutput();
|
||||
//qDebug()<<(int16_t)buffer[0];
|
||||
for(long i = 0; i < buffer.size(); i++)
|
||||
{
|
||||
if((int16_t)buffer.at(i) != -128)
|
||||
{
|
||||
silenceCount = 0;
|
||||
}
|
||||
}
|
||||
if(silenceCount > 40 && state)
|
||||
{
|
||||
stateChanged(Sensor(Sensor::TYPE_AUDIO_OUTPUT, 0, 0, name_));
|
||||
state = false;
|
||||
}
|
||||
else if(silenceCount == 0 && !state)
|
||||
{
|
||||
stateChanged(Sensor(Sensor::TYPE_AUDIO_OUTPUT, 0, 1, name_));
|
||||
state = true;
|
||||
}
|
||||
silenceCount++;
|
||||
}
|
||||
if(arecord.state() == QProcess::Running)
|
||||
{
|
||||
QByteArray buffer = arecord.readAllStandardOutput();
|
||||
//qDebug()<<(int16_t)buffer[0];
|
||||
for(long i = 0; i < buffer.size(); i++)
|
||||
{
|
||||
if((int16_t)buffer.at(i) != -128)
|
||||
{
|
||||
silenceCount = 0;
|
||||
}
|
||||
}
|
||||
if(silenceCount > 40 && state)
|
||||
{
|
||||
stateChanged(Sensor(Sensor::TYPE_AUDIO_OUTPUT, 0, 0, name_));
|
||||
state = false;
|
||||
}
|
||||
else if(silenceCount == 0 && !state)
|
||||
{
|
||||
stateChanged(Sensor(Sensor::TYPE_AUDIO_OUTPUT, 0, 1, name_));
|
||||
state = true;
|
||||
}
|
||||
silenceCount++;
|
||||
}
|
||||
}
|
||||
|
@ -16,30 +16,30 @@
|
||||
|
||||
class SpeakerSensorSource : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_OBJECT
|
||||
private:
|
||||
QString name_;
|
||||
bool state = true;
|
||||
QTimer timer;
|
||||
QString name_;
|
||||
bool state = true;
|
||||
QTimer timer;
|
||||
|
||||
public:
|
||||
explicit SpeakerSensorSource(QString name = "", QObject *parent = nullptr);
|
||||
~SpeakerSensorSource();
|
||||
explicit SpeakerSensorSource(QString name = "", QObject *parent = nullptr);
|
||||
~SpeakerSensorSource();
|
||||
|
||||
public slots:
|
||||
void run();
|
||||
void abort();
|
||||
void run();
|
||||
void abort();
|
||||
|
||||
signals:
|
||||
void stateChanged(Sensor sensor);
|
||||
void stateChanged(Sensor sensor);
|
||||
|
||||
private slots:
|
||||
void doTick();
|
||||
void doTick();
|
||||
|
||||
private:
|
||||
long silenceCount = 0;
|
||||
long silenceCount = 0;
|
||||
|
||||
QProcess arecord;
|
||||
QProcess arecord;
|
||||
};
|
||||
|
||||
#endif // AMPMANAGER_H
|
||||
|
@ -2,24 +2,24 @@
|
||||
|
||||
SunSensorSource::SunSensorSource(double lat, double lon, QObject *parent): QObject(parent), sun_(lat, lon)
|
||||
{
|
||||
connect(&timer, SIGNAL(timeout()), this, SLOT(doTick()));
|
||||
connect(&timer, SIGNAL(timeout()), this, SLOT(doTick()));
|
||||
}
|
||||
|
||||
void SunSensorSource::run()
|
||||
{
|
||||
connect(&timer, SIGNAL(timeout()), this, SLOT(doTick()));
|
||||
timer.setInterval(10000); //10s
|
||||
timer.start();
|
||||
doTick();
|
||||
connect(&timer, SIGNAL(timeout()), this, SLOT(doTick()));
|
||||
timer.setInterval(10000); //10s
|
||||
timer.start();
|
||||
doTick();
|
||||
}
|
||||
|
||||
|
||||
void SunSensorSource::abort()
|
||||
{
|
||||
if(timer.isActive())timer.stop();
|
||||
if(timer.isActive())timer.stop();
|
||||
}
|
||||
|
||||
void SunSensorSource::doTick()
|
||||
{
|
||||
stateChanged(Sensor(Sensor::TYPE_SUN_ALTITUDE, 0, static_cast<float>(sun_.altitude())));
|
||||
stateChanged(Sensor(Sensor::TYPE_SUN_ALTITUDE, 0, static_cast<float>(sun_.altitude())));
|
||||
}
|
||||
|
@ -8,22 +8,22 @@
|
||||
|
||||
class SunSensorSource : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_OBJECT
|
||||
private:
|
||||
|
||||
Sun sun_;
|
||||
QTimer timer;
|
||||
Sun sun_;
|
||||
QTimer timer;
|
||||
|
||||
public:
|
||||
explicit SunSensorSource(double lat, double lon, QObject *parent = nullptr);
|
||||
explicit SunSensorSource(double lat, double lon, QObject *parent = nullptr);
|
||||
|
||||
public slots:
|
||||
void run();
|
||||
void abort();
|
||||
void run();
|
||||
void abort();
|
||||
|
||||
signals:
|
||||
void stateChanged(Sensor sensor);
|
||||
void stateChanged(Sensor sensor);
|
||||
|
||||
private slots:
|
||||
void doTick();
|
||||
void doTick();
|
||||
};
|
||||
|
Reference in New Issue
Block a user