Changeset View
Changeset View
Standalone View
Standalone View
kstars/ekos/observatory/observatorymodel.cpp
- This file was added.
1 | /* Ekos Observatory Module | ||||
---|---|---|---|---|---|
2 | Copyright (C) Wolfgang Reissenberger <sterne-jaeger@t-online.de> | ||||
3 | | ||||
4 | This application is free software; you can redistribute it and/or | ||||
5 | modify it under the terms of the GNU General Public | ||||
6 | License as published by the Free Software Foundation; either | ||||
7 | version 2 of the License, or (at your option) any later version. | ||||
8 | */ | ||||
9 | | ||||
10 | #include "observatorymodel.h" | ||||
11 | #include "Options.h" | ||||
12 | | ||||
13 | namespace Ekos | ||||
14 | { | ||||
15 | | ||||
16 | ObservatoryModel::ObservatoryModel() | ||||
17 | { | ||||
18 | | ||||
19 | mStatusControl.useDome = Options::observatoryStatusUseDome(); | ||||
20 | mStatusControl.useShutter = Options::observatoryStatusUseShutter(); | ||||
21 | mStatusControl.useWeather = Options::observatoryStatusUseWeather(); | ||||
22 | | ||||
23 | setDomeModel(new ObservatoryDomeModel()); | ||||
24 | setWeatherModel(new ObservatoryWeatherModel()); | ||||
25 | } | ||||
26 | | ||||
27 | void ObservatoryModel::setDomeModel(ObservatoryDomeModel *model) { | ||||
28 | mDomeModel = model; | ||||
29 | if (model != nullptr) | ||||
30 | { | ||||
31 | connect(mDomeModel, &ObservatoryDomeModel::newStatus, [this](ISD::Dome::Status s) { Q_UNUSED(s); updateStatus(); }); | ||||
32 | connect(mDomeModel, &ObservatoryDomeModel::newShutterStatus, [this](ISD::Dome::ShutterStatus s) { Q_UNUSED(s); updateStatus(); }); | ||||
33 | if (mWeatherModel != nullptr) | ||||
34 | connect(mWeatherModel, &ObservatoryWeatherModel::execute, mDomeModel, &ObservatoryDomeModel::execute); | ||||
35 | } | ||||
36 | else | ||||
37 | { | ||||
38 | if (mWeatherModel != nullptr) | ||||
39 | disconnect(mWeatherModel, &ObservatoryWeatherModel::execute, mDomeModel, &ObservatoryDomeModel::execute); | ||||
40 | } | ||||
41 | | ||||
42 | updateStatus(); | ||||
43 | } | ||||
44 | | ||||
45 | void ObservatoryModel::setWeatherModel(ObservatoryWeatherModel *model) { | ||||
46 | mWeatherModel = model; | ||||
47 | if (model != nullptr) | ||||
48 | { | ||||
49 | connect(mWeatherModel, &ObservatoryWeatherModel::newStatus, [this](ISD::Weather::Status s) { Q_UNUSED(s); updateStatus(); }); | ||||
50 | if (mDomeModel != nullptr) | ||||
51 | { | ||||
52 | connect(mWeatherModel, &ObservatoryWeatherModel::execute, mDomeModel, &ObservatoryDomeModel::execute); | ||||
53 | } | ||||
54 | } | ||||
55 | else | ||||
56 | { | ||||
57 | if (mDomeModel != nullptr) | ||||
58 | disconnect(mWeatherModel, &ObservatoryWeatherModel::execute, mDomeModel, &ObservatoryDomeModel::execute); | ||||
59 | } | ||||
60 | updateStatus(); | ||||
61 | } | ||||
62 | | ||||
63 | | ||||
64 | void ObservatoryModel::setStatusControl(ObservatoryStatusControl control) | ||||
65 | { | ||||
66 | mStatusControl = control; | ||||
67 | Options::setObservatoryStatusUseDome(control.useDome); | ||||
68 | Options::setObservatoryStatusUseShutter(control.useShutter); | ||||
69 | Options::setObservatoryStatusUseWeather(control.useWeather); | ||||
70 | updateStatus(); | ||||
71 | } | ||||
72 | | ||||
73 | bool ObservatoryModel::isReady() | ||||
74 | { | ||||
75 | // dome relevant for the status and dome is ready | ||||
76 | if (mStatusControl.useDome && (getDomeModel() == nullptr || getDomeModel()->status() != ISD::Dome::DOME_IDLE)) | ||||
77 | return false; | ||||
78 | | ||||
79 | // shutter relevant for the status and shutter open | ||||
80 | if (mStatusControl.useShutter && (getDomeModel() == nullptr || | ||||
81 | (getDomeModel()->hasShutter() && getDomeModel()->shutterStatus() != ISD::Dome::SHUTTER_OPEN))) | ||||
82 | return false; | ||||
83 | | ||||
84 | // weather relevant for the status and weather is OK | ||||
85 | if (mStatusControl.useWeather && (getWeatherModel() == nullptr || getWeatherModel()->status() != ISD::Weather::WEATHER_OK)) | ||||
86 | return false; | ||||
87 | | ||||
88 | return true; | ||||
89 | } | ||||
90 | | ||||
91 | void ObservatoryModel::updateStatus() | ||||
92 | { | ||||
93 | emit newStatus(isReady()); | ||||
94 | } | ||||
95 | | ||||
96 | void ObservatoryModel::makeReady() | ||||
97 | { | ||||
98 | // dome relevant for the status and dome is ready | ||||
99 | if (mStatusControl.useDome && (getDomeModel() == nullptr || getDomeModel()->status() != ISD::Dome::DOME_IDLE)) | ||||
100 | getDomeModel()->unpark(); | ||||
101 | | ||||
102 | // shutter relevant for the status and shutter open | ||||
103 | if (mStatusControl.useShutter && (getDomeModel() == nullptr || | ||||
104 | (getDomeModel()->hasShutter() && getDomeModel()->shutterStatus() != ISD::Dome::SHUTTER_OPEN))) | ||||
105 | getDomeModel()->openShutter(); | ||||
106 | | ||||
107 | // weather relevant for the status and weather is OK | ||||
108 | // Haha, weather we can't change | ||||
109 | } | ||||
110 | | ||||
111 | } |