Instrument Neutral Distributed Interface INDI 2.2.5
deepskydad_af3.h
Go to the documentation of this file.
1/*
2 Deep Sky Dad AF3
3
4 Copyright (C) 2019 Pavle Gartner
5
6 Based on Moonline driver.
7 Copyright (C) 2013-2019 Jasem Mutlaq ([email protected])
8
9 This library is free software; you can redistribute it and/or
10 modify it under the terms of the GNU Lesser General Public
11 License as published by the Free Software Foundation; either
12 version 2.1 of the License, or (at your option) any later version.
13
14 This library is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 Lesser General Public License for more details.
18
19 You should have received a copy of the GNU Lesser General Public
20 License along with this library; if not, write to the Free Software
21 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22
23*/
24
25#pragma once
26
27#include "indifocuser.h"
28
29#include <chrono>
30
32{
33 public:
35 virtual ~DeepSkyDadAF3() override = default;
36
37 typedef enum { S1, S2, S4, S8, S16, S32, S64, S128, S256 } FocusStepMode;
39
40 const char * getDefaultName() override;
41 virtual bool initProperties() override;
42 virtual bool updateProperties() override;
43 virtual bool ISNewSwitch(const char * dev, const char * name, ISState * states, char * names[], int n) override;
44 virtual bool ISNewNumber(const char * dev, const char * name, double values[], char * names[], int n) override;
45
46 static void timedMoveHelper(void * context);
47 protected:
48 /*
49 * @brief Handshake Try to communicate with Focuser and see if there is a valid response.
50 * @return True if communication is successful, false otherwise.
51 */
52 virtual bool Handshake() override;
53
61 virtual IPState MoveFocuser(FocusDirection dir, int speed, uint16_t duration) override;
62
68 virtual IPState MoveAbsFocuser(uint32_t targetTicks) override;
69
76 virtual IPState MoveRelFocuser(FocusDirection dir, uint32_t ticks) override;
77
78 virtual bool SyncFocuser(uint32_t ticks) override;
79 virtual bool ReverseFocuser(bool enabled) override;
80 virtual bool AbortFocuser() override;
81 virtual void TimerHit() override;
82 virtual bool saveConfigItems(FILE * fp) override;
83 virtual bool SetFocuserBacklash(int32_t steps) override;
84 virtual bool SetFocuserMaxPosition(uint32_t ticks) override;
85
86 private:
87 bool Ack();
95 bool sendCommand(const char * cmd, char * res = nullptr);
96 bool sendCommandSet(const char * cmd);
97
98 // Get initial focuser parameter when we first connect
99 void GetFocusParams();
100 bool readStepMode();
101 bool readSpeedMode();
102 bool readPosition();
103 bool readMaxPosition();
104 bool readMaxMovement();
105 bool readSettleBuffer();
106 bool readMoveCurrentMultiplier();
107 bool readHoldCurrentMultiplier();
108 bool isMoving();
109 bool readTemperature();
110
111 void timedMoveCallback();
112
113 bool MoveFocuser(uint32_t position);
114
115 double targetPos { 0 }, lastPos { 0 }, lastTemperature { 0 }, backlashComp {0};
116
117 bool moveAborted = false;
118
119 // Step mode
120 INDI::PropertySwitch StepModeSP {9};
121
122 // Speed mode
123 INDI::PropertySwitch SpeedModeSP {5};
124
125 //Current move
126 INDI::PropertyNumber MoveCurrentMultiplierNP {1};
127
128 //Current hold
129 INDI::PropertyNumber HoldCurrentMultiplierNP {1};
130
131 // Settle buffer
132 INDI::PropertyNumber SettleBufferNP {1};
133
134 INDI::PropertyNumber TemperatureNP {1};
135
136 // Response Buffer
137
138 static const uint8_t DSD_RES { 32 };
139 static const char DSD_DEL { ')' };
140 static const uint8_t DSD_TIMEOUT { 3 };
141};
virtual IPState MoveRelFocuser(FocusDirection dir, uint32_t ticks) override
MoveRelFocuser Move focuser for a relative amount of ticks in a specific direction.
virtual bool saveConfigItems(FILE *fp) override
virtual bool updateProperties() override
Updates the state and definition of properties based on the current connection status....
virtual bool SetFocuserMaxPosition(uint32_t ticks) override
SetFocuserMaxPosition Update focuser maximum position. It only updates the PresetNP property limits.
virtual bool SyncFocuser(uint32_t ticks) override
SyncFocuser Set current position to ticks without moving the focuser.
virtual ~DeepSkyDadAF3() override=default
virtual bool Handshake() override
Performs a device-specific handshake after a connection is established. This method should be overrid...
static void timedMoveHelper(void *context)
virtual IPState MoveFocuser(FocusDirection dir, int speed, uint16_t duration) override
MoveFocuser Move focuser in a specific direction and speed for period of time.
virtual bool ReverseFocuser(bool enabled) override
ReverseFocuser Reverse focuser motion direction.
virtual bool AbortFocuser() override
AbortFocuser all focus motion.
virtual bool SetFocuserBacklash(int32_t steps) override
SetFocuserBacklash Set the focuser backlash compensation value.
virtual bool ISNewSwitch(const char *dev, const char *name, ISState *states, char *names[], int n) override
Processes incoming new switch states from the client for this device. Handles updates to FocuserInter...
virtual void TimerHit() override
Callback function to be called once SetTimer duration elapses.
virtual bool initProperties() override
Initializes the default properties for the focuser device. Sets up standard INDI properties,...
const char * getDefaultName() override
virtual bool ISNewNumber(const char *dev, const char *name, double values[], char *names[], int n) override
Processes incoming new number values from the client for this device. Handles updates to FocuserInter...
virtual IPState MoveAbsFocuser(uint32_t targetTicks) override
MoveAbsFocuser Move to an absolute target position.
ISState
Switch state.
Definition indiapi.h:148
IPState
Property state.
Definition indiapi.h:158
uint8_t cmd[4]
Definition pwc-ioctl.h:2