[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kstars/ekoslive] kstars/ekos: Implement guiding and send video frames separately
From: Jasem Mutlaq <null () kde ! org>
Date: 2018-05-28 16:13:16
Message-ID: E1fNKlo-0001Uz-Up () code ! kde ! org
[Download RAW message or body]
Git commit 7624bf32d81e7c8ceec64d84b8ed0c5d91f828fc by Jasem Mutlaq.
Committed on 28/05/2018 at 16:13.
Pushed by mutlaqja into branch 'ekoslive'.
Implement guiding and send video frames separately
M +50 -33 kstars/ekos/ekoslive/ekosliveclient.cpp
M +14 -5 kstars/ekos/ekoslive/ekosliveclient.h
M +1 -0 kstars/ekos/ekosmanager.h
https://commits.kde.org/kstars/7624bf32d81e7c8ceec64d84b8ed0c5d91f828fc
diff --git a/kstars/ekos/ekoslive/ekosliveclient.cpp b/kstars/ekos/ekoslive/ekosliveclient.cpp
index 2ac1c1471..7ccd109c1 100644
--- a/kstars/ekos/ekoslive/ekosliveclient.cpp
+++ b/kstars/ekos/ekoslive/ekosliveclient.cpp
@@ -47,6 +47,7 @@ QMap<EkosLiveClient::COMMANDS, QString> const EkosLiveClient::commands =
{NEW_GUIDE_STATE, "new_guide_state"},
{NEW_FOCUS_STATE, "new_focus_state"},
{NEW_PREVIEW_IMAGE, "new_preview_image"},
+ {NEW_VIDEO_FRAME, "new_video_frame"},
{NEW_NOTIFICATION, "new_notification"},
{NEW_TEMPERATURE, "new_temperature"},
@@ -69,6 +70,10 @@ QMap<EkosLiveClient::COMMANDS, QString> const EkosLiveClient::commands =
{FOCUS_START, "focus_start"},
{FOCUS_STOP, "focus_stop"},
+
+ {GUIDE_START, "guide_start"},
+ {GUIDE_STOP, "guide_stop"},
+ {GUIDE_CLEAR, "guide_clear"},
};
EkosLiveClient::EkosLiveClient(EkosManager *manager) : QDialog(manager), m_Manager(manager)
@@ -254,21 +259,15 @@ void EkosLiveClient::onTextMessageReceived(const QString &message)
else if (command == commands[GET_MOUNTS])
sendMounts();
else if (command == commands[GET_FILTER_WHEELS])
- sendFilterWheels();
- else if (command == commands[CAPTURE_PREVIEW])
- {
- capturePreview(serverMessage.object().value("payload").toObject());
- }
- else if (command == commands[CAPTURE_TOGGLE_VIDEO])
- {
- toggleVideo(serverMessage.object().value("payload").toObject().value("enabled").toBool());
- }
- else if (command == commands[CAPTURE_START])
- startSequence();
- else if (command == commands[CAPTURE_STOP])
- stopSequence();
+ sendFilterWheels();
+ else if (command.startsWith("capture_"))
+ processCaptureCommands(command, serverMessage.object().value("payload").toObject());
else if (command.startsWith("mount_"))
processMountCommands(command, serverMessage.object().value("payload").toObject());
+ else if (command.startsWith("focus_"))
+ processFocusCommands(command, serverMessage.object().value("payload").toObject());
+ else if (command.startsWith("guide_"))
+ processGuideCommands(command, serverMessage.object().value("payload").toObject());
}
void EkosLiveClient::onBinaryMessageReceived(const QByteArray &message)
@@ -400,7 +399,7 @@ void EkosLiveClient::sendPreviewImage(FITSView *view)
{"data", QString(jpegData.toBase64()) }
};
- sendResponse(EkosLiveClient::commands[EkosLiveClient::NEW_PREVIEW_IMAGE], image);
+ sendResponse(EkosLiveClient::commands[EkosLiveClient::NEW_VIDEO_FRAME], image);
}
void EkosLiveClient::sendVideoFrame(std::unique_ptr<QImage> & frame)
@@ -616,19 +615,37 @@ void EkosLiveClient::capturePreview(const QJsonObject &settings)
m_Manager->captureProcess.get()->captureOne();
}
-void EkosLiveClient::toggleVideo(bool enabled)
+void EkosLiveClient::processCaptureCommands(const QString &command, const QJsonObject &payload)
{
- m_Manager->captureProcess.get()->toggleVideo(enabled);
-}
+ Ekos::Capture *capture = m_Manager->captureModule();
-void EkosLiveClient::startSequence()
-{
- m_Manager->captureProcess.get()->start();
+ if (command == commands[CAPTURE_PREVIEW])
+ {
+ capturePreview(payload);
+ }
+ else if (command == commands[CAPTURE_TOGGLE_VIDEO])
+ {
+ capture->toggleVideo(payload["enabled"].toBool());
+ }
+ else if (command == commands[CAPTURE_START])
+ capture->start();
+ else if (command == commands[CAPTURE_STOP])
+ capture->stop();
}
-void EkosLiveClient::stopSequence()
+void EkosLiveClient::processGuideCommands(const QString &command, const QJsonObject &payload)
{
- m_Manager->captureProcess.get()->stop();
+ Ekos::Guide *guide = m_Manager->guideModule();
+ Q_UNUSED(payload);
+
+ if (command == commands[GUIDE_START])
+ {
+ guide->guide();
+ }
+ else if (command == commands[GUIDE_STOP])
+ guide->abort();
+ else if (command == commands[GUIDE_CLEAR])
+ guide->clearCalibration();
}
void EkosLiveClient::processFocusCommands(const QString &command, const QJsonObject &payload)
@@ -642,7 +659,7 @@ void EkosLiveClient::processFocusCommands(const QString &command, const QJsonObj
focus->abort();
}
-void EkosLiveClient::processMountCommands(const QString &command, const QJsonObject &mountCommand)
+void EkosLiveClient::processMountCommands(const QString &command, const QJsonObject &payload)
{
Ekos::Mount *mount = m_Manager->mountModule();
@@ -653,35 +670,35 @@ void EkosLiveClient::processMountCommands(const QString &command, const QJsonObj
else if (command == commands[MOUNT_UNPARK])
mount->unpark();
else if (command == commands[MOUNT_SET_TRACKING])
- mount->setTrackEnabled(mountCommand["enabled"].toBool());
+ mount->setTrackEnabled(payload["enabled"].toBool());
else if (command == commands[MOUNT_SYNC_RADE])
{
- mount->setJ2000Enabled(mountCommand["isJ2000"].toBool());
- mount->sync(mountCommand["ra"].toString(), mountCommand["de"].toString());
+ mount->setJ2000Enabled(payload["isJ2000"].toBool());
+ mount->sync(payload["ra"].toString(), payload["de"].toString());
}
else if (command == commands[MOUNT_SYNC_TARGET])
{
- mount->syncTarget(mountCommand["target"].toString());
+ mount->syncTarget(payload["target"].toString());
}
else if (command == commands[MOUNT_GOTO_RADE])
{
- mount->setJ2000Enabled(mountCommand["isJ2000"].toBool());
- mount->slew(mountCommand["ra"].toString(), mountCommand["de"].toString());
+ mount->setJ2000Enabled(payload["isJ2000"].toBool());
+ mount->slew(payload["ra"].toString(), payload["de"].toString());
}
else if (command == commands[MOUNT_GOTO_TARGET])
{
- mount->gotoTarget(mountCommand["target"].toString());
+ mount->gotoTarget(payload["target"].toString());
}
else if (command == commands[MOUNT_SET_SLEW_RATE])
{
- int rate = mountCommand["rate"].toInt(-1);
+ int rate = payload["rate"].toInt(-1);
if (rate >= 0)
mount->setSlewRate(rate);
}
else if (command == commands[MOUNT_SET_MOTION])
{
- QString direction = mountCommand["direction"].toString();
- ISD::Telescope::TelescopeMotionCommand action = mountCommand["action"].toBool(false) ?
+ QString direction = payload["direction"].toString();
+ ISD::Telescope::TelescopeMotionCommand action = payload["action"].toBool(false) ?
ISD::Telescope::MOTION_START : ISD::Telescope::MOTION_STOP;
if (direction == "N")
diff --git a/kstars/ekos/ekoslive/ekosliveclient.h b/kstars/ekos/ekoslive/ekosliveclient.h
index 2131d003f..4aaeb78f8 100644
--- a/kstars/ekos/ekoslive/ekosliveclient.h
+++ b/kstars/ekos/ekoslive/ekosliveclient.h
@@ -54,15 +54,17 @@ public:
NEW_GUIDE_STATE,
NEW_FOCUS_STATE,
NEW_PREVIEW_IMAGE,
+ NEW_VIDEO_FRAME,
NEW_NOTIFICATION,
NEW_TEMPERATURE,
-
+ // Capture
CAPTURE_PREVIEW,
CAPTURE_TOGGLE_VIDEO,
CAPTURE_START,
CAPTURE_STOP,
+ // Mount
MOUNT_PARK,
MOUNT_UNPARK,
MOUNT_ABORT,
@@ -74,8 +76,14 @@ public:
MOUNT_SET_TRACKING,
MOUNT_SET_SLEW_RATE,
+ // Focus
FOCUS_START,
FOCUS_STOP,
+
+ // Guide
+ GUIDE_START,
+ GUIDE_STOP,
+ GUIDE_CLEAR,
};
static QMap<COMMANDS, QString> const commands;
@@ -102,18 +110,19 @@ private:
void disconnectWebSocketServer();
// Capture
+ void processCaptureCommands(const QString &command, const QJsonObject &payload);
void capturePreview(const QJsonObject &settings);
void sendTemperature(double value);
- void toggleVideo(bool enabled);
- void startSequence();
- void stopSequence();
// Mount
- void processMountCommands(const QString &command, const QJsonObject &mountCommand);
+ void processMountCommands(const QString &command, const QJsonObject &payload);
// Focus
void processFocusCommands(const QString &command, const QJsonObject &payload);
+ // Guide
+ void processGuideCommands(const QString &command, const QJsonObject &payload);
+
// Profiles
void sendProfiles();
void sendStates();
diff --git a/kstars/ekos/ekosmanager.h b/kstars/ekos/ekosmanager.h
index 54e65484e..84d4b6372 100644
--- a/kstars/ekos/ekosmanager.h
+++ b/kstars/ekos/ekosmanager.h
@@ -86,6 +86,7 @@ class EkosManager : public QDialog, public Ui::EkosManager
Ekos::Align *alignModule() { return alignProcess.get(); }
Ekos::Mount *mountModule() { return mountProcess.get(); }
Ekos::Focus *focusModule() { return focusProcess.get(); }
+ Ekos::Capture *captureModule() { return captureProcess.get(); }
FITSView *getSummaryPreview() { return summaryPreview.get(); }
QString getCurrentJobName();
void announceEvent(const QString &message, KSNotification::EventType event);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic