8#include "indifocuser.h"
9#include "clientmanager.h"
14void Focuser::registerProperty(INDI::Property prop)
16 if (!prop.getRegistered())
19 if (prop.isNameMatch(
"FOCUS_MAX"))
21 auto nvp = prop.getNumber();
22 m_maxPosition = nvp->at(0)->getValue();
25 ConcreteDevice::registerProperty(prop);
28void Focuser::processNumber(INDI::Property prop)
30 auto nvp = prop.getNumber();
31 if (prop.isNameMatch(
"FOCUS_MAX"))
33 m_maxPosition = nvp->at(0)->getValue();
37bool Focuser::focusIn()
39 auto focusProp =
getSwitch(
"FOCUS_MOTION");
44 auto inFocus = focusProp->findWidgetByName(
"FOCUS_INWARD");
49 if (inFocus->getState() == ISS_ON)
53 inFocus->setState(ISS_ON);
62 auto focusStop =
getSwitch(
"FOCUS_ABORT_MOTION");
67 focusStop->at(0)->setState(ISS_ON);
73bool Focuser::focusOut()
75 auto focusProp =
getSwitch(
"FOCUS_MOTION");
80 auto outFocus = focusProp->findWidgetByName(
"FOCUS_OUTWARD");
85 if (outFocus->getState() == ISS_ON)
89 outFocus->setState(ISS_ON);
96bool Focuser::getFocusDirection(ISD::Focuser::FocusDirection *dir)
98 auto focusProp =
getSwitch(
"FOCUS_MOTION");
103 auto inFocus = focusProp->findWidgetByName(
"FOCUS_INWARD");
108 if (inFocus->getState() == ISS_ON)
111 *
dir = FOCUS_OUTWARD;
116bool Focuser::moveByTimer(
int msecs)
118 auto focusProp = getNumber(
"FOCUS_TIMER");
123 focusProp->at(0)->setValue(msecs);
130bool Focuser::moveAbs(
int steps)
132 auto focusProp = getNumber(
"ABS_FOCUS_POSITION");
137 focusProp->at(0)->setValue(steps);
144bool Focuser::canAbsMove()
146 auto focusProp = getNumber(
"ABS_FOCUS_POSITION");
154bool Focuser::moveRel(
int steps)
156 if(canManualFocusDriveMove())
158 auto focusProp = getNumber(
"manualfocusdrive");
161 if (!getFocusDirection(&dir))
163 if (dir == FOCUS_INWARD)
165 else if (dir == FOCUS_OUTWARD)
169 if (steps == getLastManualFocusDriveValue())
173 if (deviation == NIKONZ6)
179 focusProp[0].setValue(steps);
185 auto focusProp = getNumber(
"REL_FOCUS_POSITION");
186 focusProp[0].setValue(steps);
194bool Focuser::canRelMove()
196 auto focusProp = getNumber(
"REL_FOCUS_POSITION");
204bool Focuser::canManualFocusDriveMove()
206 auto focusProp = getNumber(
"manualfocusdrive");
214double Focuser::getLastManualFocusDriveValue()
216 auto focusProp = getNumber(
"manualfocusdrive");
221 return focusProp->at(0)->getValue();
225bool Focuser::canTimerMove()
227 auto focusProp = getNumber(
"FOCUS_TIMER");
235bool Focuser::setMaxPosition(uint32_t steps)
237 auto focusProp = getNumber(
"FOCUS_MAX");
242 focusProp->at(0)->setValue(steps);
248bool Focuser::hasBacklash()
250 auto focusProp = getNumber(
"FOCUS_BACKLASH_STEPS");
251 return (focusProp !=
nullptr);
254bool Focuser::setBacklash(int32_t steps)
256 auto focusToggle =
getSwitch(
"FOCUS_BACKLASH_TOGGLE");
261 if (steps != 0 && focusToggle->at(0)->getState() != ISS_ON)
263 focusToggle->reset();
264 focusToggle->at(0)->setState(ISS_ON);
265 focusToggle->at(1)->setState(ISS_OFF);
269 auto focusProp = getNumber(
"FOCUS_BACKLASH_STEPS");
273 focusProp->at(0)->setValue(steps);
277 if (steps == 0 && focusToggle->at(0)->getState() == ISS_ON)
279 focusToggle->reset();
280 focusToggle->at(0)->setState(ISS_OFF);
281 focusToggle->at(1)->setState(ISS_ON);
287int32_t Focuser::getBacklash()
289 auto focusProp = getNumber(
"FOCUS_BACKLASH_STEPS");
293 return focusProp->at(0)->getValue();
296bool Focuser::hasDeviation()
298 if (getDeviceName() ==
"Nikon DSLR Z6")
void sendNewProperty(INDI::Property prop)
Send new property command to server.
INDI::PropertySwitch getSwitch(const QString &name) const
ISD is a collection of INDI Standard Devices.
KIOCORE_EXPORT QString dir(const QString &fileClass)