Instrument Neutral Distributed Interface INDI 2.2.5
si_efs.h
Go to the documentation of this file.
1/*******************************************************************************
2 Copyright(c) 2019 Jasem Mutlaq. All rights reserved.
3
4 Starlight Instruments EFS Focuser
5
6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public
8 License version 2 as published by the Free Software Foundation.
9 .
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details.
14 .
15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 Boston, MA 02110-1301, USA.
19*******************************************************************************/
20
21#pragma once
22
23#include "indifocuser.h"
24
25#ifdef _USE_SYSTEM_HIDAPILIB
26#include <hidapi/hidapi.h>
27#else
28#include <indi_hidapi.h>
29#endif
30
31#include <map>
32
33class SIEFS : public INDI::Focuser
34{
35 public:
36
37 // SI EFS State
49
50
51 // SI EFS Motor State
57
58
59 SIEFS();
60
61 const char *getDefaultName() override;
62 virtual bool initProperties() override;
63
64 virtual bool Connect() override;
65 virtual bool Disconnect() override;
66
67 virtual void TimerHit() override;
68
69 virtual IPState MoveAbsFocuser(uint32_t targetTicks) override;
70 virtual IPState MoveRelFocuser(FocusDirection dir, uint32_t ticks) override;
71 virtual bool AbortFocuser() override;
72 virtual bool SyncFocuser(uint32_t ticks) override;
73 virtual bool SetFocuserMaxPosition(uint32_t ticks) override;
74
75 virtual bool ReverseFocuser(bool enabled) override;
76
77 private:
84 bool setPosition(uint32_t ticks, uint8_t cmdCode);
85
92 bool getPosition(uint32_t *ticks, uint8_t cmdCode);
93
94 // Set/Get Absolute Position
95 bool setAbsPosition(uint32_t ticks);
96 bool getAbsPosition(uint32_t *ticks);
97
98 // Set/Get Maximum Position
99 bool setMaxPosition(uint32_t ticks);
100 bool getMaxPosition(uint32_t *ticks);
101
102 // Polarity
103 bool isReversed();
104 bool setReversed(bool enabled);
105
106 bool sendCommand(SI_COMMANDS targetCommand);
107 bool getStatus();
108
109 hid_device *handle { nullptr };
110 SI_MOTOR m_Motor { SI_NOT_MOVING };
111 int32_t simPosition { 0 };
112 uint32_t targetPosition { 0 };
113
114 // Driver Timeout in ms
115 static const uint16_t SI_TIMEOUT { 1000 };
116
117 static const std::map<SI_COMMANDS, std::string> CommandsMap;
118 static const std::map<SI_MOTOR, std::string> MotorMap;
119};
Definition si_efs.h:34
virtual void TimerHit() override
Callback function to be called once SetTimer duration elapses.
Definition si_efs.cpp:136
virtual IPState MoveAbsFocuser(uint32_t targetTicks) override
MoveFocuser the focuser to an absolute position.
Definition si_efs.cpp:187
virtual bool SetFocuserMaxPosition(uint32_t ticks) override
SetFocuserMaxPosition Update focuser maximum position. It only updates the PresetNP property limits.
Definition si_efs.cpp:540
SI_COMMANDS
Definition si_efs.h:38
@ SI_NOOP
Definition si_efs.h:38
@ SI_MOTOR_POLARITY
Definition si_efs.h:47
@ SI_FAST_OUT
Definition si_efs.h:45
@ SI_OUT
Definition si_efs.h:40
@ SI_FAST_IN
Definition si_efs.h:44
@ SI_HALT
Definition si_efs.h:46
@ SI_SET_POS
Definition si_efs.h:42
@ SI_IN
Definition si_efs.h:39
@ SI_MAX_POS
Definition si_efs.h:43
@ SI_GOTO
Definition si_efs.h:41
virtual bool ReverseFocuser(bool enabled) override
ReverseFocuser Reverse focuser motion direction.
Definition si_efs.cpp:552
virtual bool SyncFocuser(uint32_t ticks) override
SyncFocuser Set current position to ticks without moving the focuser.
Definition si_efs.cpp:526
virtual bool AbortFocuser() override
AbortFocuser all focus motion.
Definition si_efs.cpp:521
SIEFS()
Definition si_efs.cpp:53
virtual bool Connect() override
Connect to the device. INDI::DefaultDevice implementation connects to appropriate connection interfac...
Definition si_efs.cpp:65
virtual bool initProperties() override
Initializes the default properties for the focuser device. Sets up standard INDI properties,...
Definition si_efs.cpp:127
virtual IPState MoveRelFocuser(FocusDirection dir, uint32_t ticks) override
MoveFocuser the focuser to an relative position.
Definition si_efs.cpp:206
virtual bool Disconnect() override
Disconnect from device.
Definition si_efs.cpp:111
SI_MOTOR
Definition si_efs.h:52
@ SI_MOVING_IN
Definition si_efs.h:53
@ SI_MOVING_OUT
Definition si_efs.h:54
@ SI_NOT_MOVING
Definition si_efs.h:52
@ SI_LOCKED
Definition si_efs.h:55
const char * getDefaultName() override
Definition si_efs.cpp:122
IPState
Property state.
Definition indiapi.h:158