Photo capture and PHD dither support
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
#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);
|
||||
}
|
||||
Reference in New Issue
Block a user