94 lines
2.4 KiB
C++
94 lines
2.4 KiB
C++
#include "phd.h"
|
|
#include <QJsonDocument>
|
|
#include <QJsonObject>
|
|
#include <QJsonArray>
|
|
|
|
const QHash<PHDState, QString> stateMap = {{Stopped, "Stopped"}, {Selected,"Selected"}, {Calibrating,"Calibrating"}, {Guiding,"Guiding"},
|
|
{LostLock,"LostLock"}, {Paused,"Paused"}, {Looping,"Looping"}};
|
|
|
|
PHD::PHD(QObject *parent) : QObject(parent)
|
|
,_messageId(0)
|
|
{
|
|
_socket = new QTcpSocket(this);
|
|
connect(_socket, SIGNAL(readyRead()), this, SLOT(readyRead()));
|
|
}
|
|
|
|
void PHD::connectTo(const QHostAddress &address, int port)
|
|
{
|
|
if(_socket->state() == QTcpSocket::ConnectedState)
|
|
{
|
|
_socket->disconnect();
|
|
_socket->waitForDisconnected();
|
|
}
|
|
_socket->connectToHost(address, port);
|
|
}
|
|
|
|
QString PHD::stateToString(PHDState state)
|
|
{
|
|
if(stateMap.contains(state))
|
|
return stateMap[state];
|
|
else
|
|
return QString();
|
|
}
|
|
|
|
PHDState PHD::stringToState(const QString &state)
|
|
{
|
|
return stateMap.key(state, Unknown);
|
|
}
|
|
|
|
void PHD::dither(float pixels, bool raOnly, int time, int timeout)
|
|
{
|
|
QVariantList params;
|
|
params.append(pixels);
|
|
params.append(raOnly);
|
|
params.append(QVariantHash({{"pixels",pixels/2.0},{"time",time},{"timeout",timeout}}));
|
|
invokeMethod("dither", params);
|
|
}
|
|
|
|
void PHD::parseMessage()
|
|
{
|
|
QJsonDocument json = QJsonDocument::fromJson(_data);
|
|
QJsonObject message = json.object();
|
|
//qDebug() << message;
|
|
if(message.contains("Event"))
|
|
{
|
|
QString event = message.value("Event").toString();
|
|
if(event=="AppState")
|
|
emit stateChanged(stringToState(message.value("State").toString()));
|
|
else if(event=="SettleDone")
|
|
{
|
|
qDebug() << message;
|
|
emit settled();
|
|
}
|
|
}
|
|
|
|
_data.clear();
|
|
}
|
|
|
|
void PHD::invokeMethod(const QString &method, const QVariantList ¶ms)
|
|
{
|
|
QJsonDocument json;
|
|
QJsonObject message;
|
|
message.insert("method", method);
|
|
message.insert("id", QString::number(_messageId++));
|
|
message.insert("params", QJsonArray::fromVariantList(params));
|
|
json.setObject(message);
|
|
QByteArray data = json.toJson(QJsonDocument::Compact);
|
|
data.append('\n');
|
|
_socket->write(data);
|
|
}
|
|
|
|
void PHD::readyRead()
|
|
{
|
|
QByteArray data = _socket->readAll();
|
|
int index;
|
|
while((index = data.indexOf('\n')) != -1)
|
|
{
|
|
_data.append(data.left(index));
|
|
data.remove(0, index+1);
|
|
parseMessage();
|
|
}
|
|
if(data.size())
|
|
_data.append(data);
|
|
}
|