forked from indilib/indi-3rdparty
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathEAF_focuser.h
473 lines (363 loc) · 14.1 KB
/
EAF_focuser.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
/**************************************************
this is the ZWO focuser EAF SDK
any question feel free contact us:[email protected]
***************************************************/
#ifndef EAF_FOCUSER_H
#define EAF_FOCUSER_H
#ifdef _WINDOWS
#define EAF_API __declspec(dllexport)
#else
#define EAF_API
#endif
#define EAF_ID_MAX 128
typedef struct _EAF_INFO
{
int ID;
char Name[64];
int MaxStep;//fixed maximum position
} EAF_INFO;
typedef enum _EAF_ERROR_CODE{
EAF_SUCCESS = 0,
EAF_ERROR_INVALID_INDEX,
EAF_ERROR_INVALID_ID,
EAF_ERROR_INVALID_VALUE,
EAF_ERROR_REMOVED, //failed to find the focuser, maybe the focuser has been removed
EAF_ERROR_MOVING,//focuser is moving
EAF_ERROR_ERROR_STATE,//focuser is in error state
EAF_ERROR_GENERAL_ERROR,//other error
EAF_ERROR_NOT_SUPPORTED,
EAF_ERROR_CLOSED,
EAF_ERROR_END = -1
}EAF_ERROR_CODE;
typedef struct _EAF_ID{
unsigned char id[8];
}EAF_ID;
typedef EAF_ID EAF_SN;
#ifdef __cplusplus
extern "C" {
#endif
/***************************************************************************
Descriptions:
This should be the first API to be called
get number of connected EAF focuser, call this API to refresh device list if EAF is connected
or disconnected
Return: number of connected EAF focuser. 1 means 1 focuser is connected.
***************************************************************************/
EAF_API int EAFGetNum();
/***************************************************************************
Descriptions:
Get the product ID of each focuser, at first set pPIDs as 0 and get length and then malloc a buffer to load the PIDs
Paras:
int* pPIDs: pointer to array of PIDs
Return: length of the array.
Note: This api will be deprecated. Please use EAFCheck instead
***************************************************************************/
EAF_API int EAFGetProductIDs(int* pPIDs);
/***************************************************************************
Descriptions:
Check if the device is EAF
Paras:
int iVID: VID is 0x03C3 for EAF
int iPID: PID of the device
Return: If the device is EAF, return 1, otherwise return 0
***************************************************************************/
EAF_API int EAFCheck(int iVID, int iPID);
/***************************************************************************
Descriptions:
Get ID of focuser
Paras:
int index: the index of focuser, from 0 to N - 1, N is returned by GetNum()
int* ID: pointer to ID. the ID is a unique integer, between 0 to EAF_ID_MAX - 1, after opened,
all the operation is base on this ID, the ID will not change.
Return:
EAF_ERROR_INVALID_INDEX: index value is invalid
EAF_SUCCESS: operation succeeds
***************************************************************************/
EAF_API EAF_ERROR_CODE EAFGetID(int index, int* ID);
/***************************************************************************
Descriptions:
Open focuser
Paras:
int ID: the ID of focuser
Return:
EAF_ERROR_INVALID_ID: invalid ID value
EAF_ERROR_GENERAL_ERROR: number of opened focuser reaches the maximum value.
EAF_ERROR_REMOVED: the focuser is removed.
EAF_SUCCESS: operation succeeds
***************************************************************************/
EAF_API EAF_ERROR_CODE EAFOpen(int ID);
/***************************************************************************
Descriptions:
Get property of focuser.
Paras:
int ID: the ID of focuser
EAF_INFO *pInfo: pointer to structure containing the property of EAF
Return:
EAF_ERROR_INVALID_ID: invalid ID value
EAF_SUCCESS: operation succeeds
***************************************************************************/
EAF_API EAF_ERROR_CODE EAFGetProperty(int ID, EAF_INFO *pInfo);
/***************************************************************************
Descriptions:
Move focuser to an absolute position.
Paras:
int ID: the ID of focuser
int iStep: step value is between 0 to EAF_INFO::MaxStep
Return:
EAF_ERROR_INVALID_ID: invalid ID value
EAF_ERROR_CLOSED: not opened
EAF_SUCCESS: operation succeeds
EAF_ERROR_ERROR_STATE: focuser is in error state
EAF_ERROR_REMOVED: focuser is removed
***************************************************************************/
EAF_API EAF_ERROR_CODE EAFMove(int ID, int iStep);
/***************************************************************************
Descriptions:
Stop moving.
Paras:
int ID: the ID of focuser
Return:
EAF_ERROR_INVALID_ID: invalid ID value
EAF_ERROR_CLOSED: not opened
EAF_SUCCESS: operation succeeds
EAF_ERROR_ERROR_STATE: focuser is in error state
EAF_ERROR_REMOVED: focuser is removed
***************************************************************************/
EAF_API EAF_ERROR_CODE EAFStop(int ID);
/***************************************************************************
Descriptions:
Check if the focuser is moving.
Paras:
int ID: the ID of focuser
bool *pbVal: pointer to the value, imply if focuser is moving
bool* pbHandControl: pointer to the value, imply focuser is moved by handle control, can't be stopped by calling EAFStop()
Return:
EAF_ERROR_INVALID_ID: invalid ID value
EAF_ERROR_CLOSED: not opened
EAF_SUCCESS: operation succeeds
EAF_ERROR_ERROR_STATE: focuser is in error state
EAF_ERROR_REMOVED: focuser is removed
***************************************************************************/
EAF_API EAF_ERROR_CODE EAFIsMoving(int ID, bool *pbVal, bool* pbHandControl);
/***************************************************************************
Descriptions:
Get current position.
Paras:
int ID: the ID of focuser
bool *piStep: pointer to the value
Return:
EAF_ERROR_INVALID_ID: invalid ID value
EAF_ERROR_CLOSED: not opened
EAF_SUCCESS: operation succeeds
EAF_ERROR_ERROR_STATE: focuser is in error state
EAF_ERROR_REMOVED: focuser is removed
***************************************************************************/
EAF_API EAF_ERROR_CODE EAFGetPosition(int ID, int* piStep);
/***************************************************************************
Descriptions:
Set as current position
Paras:
int ID: the ID of focuser
int iStep: step value
Return:
EAF_ERROR_INVALID_ID: invalid ID value
EAF_ERROR_CLOSED: not opened
EAF_SUCCESS: operation succeeds
EAF_ERROR_ERROR_STATE: focuser is in error state
EAF_ERROR_REMOVED: focuser is removed
***************************************************************************/
EAF_API EAF_ERROR_CODE EAFResetPostion(int ID, int iStep);
/***************************************************************************
Descriptions:
Get the value of the temperature detector, if it's moved by handle, the temperature value is unreasonable, the value is -273 and return error
Paras:
int ID: the ID of focuser
bool *pfTemp: pointer to the value
Return:
EAF_ERROR_INVALID_ID: invalid ID value
EAF_ERROR_CLOSED: not opened
EAF_SUCCESS: operation succeeds
EAF_ERROR_ERROR_STATE: focuser is in error state
EAF_ERROR_REMOVED: focuser is removed
EAF_ERROR_GENERAL_ERROR: temperature value is unusable
***************************************************************************/
EAF_API EAF_ERROR_CODE EAFGetTemp(int ID, float* pfTemp);
/***************************************************************************
Descriptions:
Turn on/off beep, if true the focuser will beep at the moment when it begins to move
Paras:
int ID: the ID of focuser
bool bVal: turn on beep if true
Return:
EAF_ERROR_INVALID_ID: invalid ID value
EAF_ERROR_CLOSED: not opened
EAF_SUCCESS: operation succeeds
EAF_ERROR_ERROR_STATE: focuser is in error state
EAF_ERROR_REMOVED: focuser is removed
***************************************************************************/
EAF_API EAF_ERROR_CODE EAFSetBeep(int ID, bool bVal);
/***************************************************************************
Descriptions:
Get if beep is turned on
Paras:
int ID: the ID of focuser
bool *pbVal: pointer to the value
Return:
EAF_ERROR_INVALID_ID: invalid ID value
EAF_ERROR_CLOSED: not opened
EAF_SUCCESS: operation succeeds
EAF_ERROR_ERROR_STATE: focuser is in error state
EAF_ERROR_REMOVED: focuser is removed
***************************************************************************/
EAF_API EAF_ERROR_CODE EAFGetBeep(int ID, bool* pbVal);
/***************************************************************************
Descriptions:
Set the maximum position
Paras:
int ID: the ID of focuser
int iVal: maximum position
Return:
EAF_ERROR_INVALID_ID: invalid ID value
EAF_ERROR_CLOSED: not opened
EAF_SUCCESS: operation succeeds
EAF_ERROR_MOVING: focuser is moving, should wait until idle
EAF_ERROR_ERROR_STATE: focuser is in error state
EAF_ERROR_REMOVED: focuser is removed
***************************************************************************/
EAF_API EAF_ERROR_CODE EAFSetMaxStep(int ID, int iVal);
/***************************************************************************
Descriptions:
Get the maximum position
Paras:
int ID: the ID of focuser
bool *piVal: pointer to the value
Return:
EAF_ERROR_INVALID_ID: invalid ID value
EAF_ERROR_CLOSED: not opened
EAF_SUCCESS: operation succeeds
EAF_ERROR_MOVING: focuser is moving, should wait until idle
EAF_ERROR_ERROR_STATE: focuser is in error state
EAF_ERROR_REMOVED: focuser is removed
***************************************************************************/
EAF_API EAF_ERROR_CODE EAFGetMaxStep(int ID, int* piVal);
/***************************************************************************
Descriptions:
Get the position range
Paras:
int ID: the ID of focuser
bool *piVal: pointer to the value
Return:
EAF_ERROR_INVALID_ID: invalid ID value
EAF_ERROR_CLOSED: not opened
EAF_SUCCESS: operation succeeds
EAF_ERROR_MOVING: focuser is moving, should wait until idle
EAF_ERROR_ERROR_STATE: focuser is in error state
EAF_ERROR_REMOVED: focuser is removed
***************************************************************************/
EAF_API EAF_ERROR_CODE EAFStepRange(int ID, int* piVal);
/***************************************************************************
Descriptions:
Set moving direction of focuser
Paras:
int ID: the ID of focuser
bool bVal: if set as true, the focuser will move along reverse direction
Return:
EAF_ERROR_INVALID_ID: invalid ID value
EAF_ERROR_CLOSED: not opened
EAF_SUCCESS: operation succeeds
***************************************************************************/
EAF_API EAF_ERROR_CODE EAFSetReverse(int ID, bool bVal);
/***************************************************************************
Descriptions:
Get moving direction of focuser
Paras:
int ID: the ID of focuser
bool *pbVal: pointer to direction value.
Return:
EAF_ERROR_INVALID_ID: invalid ID value
EAF_ERROR_CLOSED: not opened
EAF_SUCCESS: operation succeeds
***************************************************************************/
EAF_API EAF_ERROR_CODE EAFGetReverse(int ID, bool* pbVal);
/***************************************************************************
Descriptions:
Set backlash of focuser
Paras:
int ID: the ID of focuser
int iVal: backlash value.
Return:
EAF_ERROR_INVALID_ID: invalid ID value
EAF_ERROR_INVALID_VALUE: iVal needs to be between 0 and 255
EAF_ERROR_CLOSED: not opened
EAF_SUCCESS: operation succeeds
***************************************************************************/
EAF_API EAF_ERROR_CODE EAFSetBacklash(int ID, int iVal);
/***************************************************************************
Descriptions:
Get backlash of focuser
Paras:
int ID: the ID of focuser
int *piVal: pointer to backlash value.
Return:
EAF_ERROR_INVALID_ID: invalid ID value
EAF_ERROR_CLOSED: not opened
EAF_SUCCESS: operation succeeds
***************************************************************************/
EAF_API EAF_ERROR_CODE EAFGetBacklash(int ID, int* piVal);
/***************************************************************************
Descriptions:
Close focuser
Paras:
int ID: the ID of focuser
Return:
EAF_ERROR_INVALID_ID: invalid ID value
EAF_SUCCESS: operation succeeds
***************************************************************************/
EAF_API EAF_ERROR_CODE EAFClose(int ID);
/***************************************************************************
Descriptions:
get version string, like "1, 4, 0"
***************************************************************************/
EAF_API char* EAFGetSDKVersion();
/***************************************************************************
Descriptions:
Get firmware version of focuser
Paras:
int ID: the ID of focuser
int *major, int *minor, int *build: pointer to value.
Return:
EAF_ERROR_INVALID_ID: invalid ID value
EAF_ERROR_CLOSED: not opened
EAF_SUCCESS: operation succeeds
***************************************************************************/
EAF_API EAF_ERROR_CODE EAFGetFirmwareVersion(int ID, unsigned char *major, unsigned char *minor, unsigned char *build);
/***************************************************************************
Descriptions:
Get the serial number from a EAF
Paras:
int ID: the ID of focuser
EAF_SN* pSN: pointer to SN
Return:
EAF_ERROR_INVALID_ID: invalid ID value
EAF_ERROR_CLOSED: not opened
EFW_ERROR_NOT_SUPPORTED: the firmware does not support serial number
EAF_SUCCESS: operation succeeds
***************************************************************************/
EAF_API EAF_ERROR_CODE EAFGetSerialNumber(int ID, EAF_SN* pSN);
/***************************************************************************
Descriptions:
Set the alias to a EAF
Paras:
int ID: the ID of focuser
EAF_ID alias: the struct which contains the alias
Return:
EAF_ERROR_INVALID_ID: invalid ID value
EAF_ERROR_CLOSED: not opened
EFW_ERROR_NOT_SUPPORTED: the firmware does not support setting alias
EAF_SUCCESS: operation succeeds
***************************************************************************/
EAF_API EAF_ERROR_CODE EAFSetID(int ID, EAF_ID alias);
#ifdef __cplusplus
}
#endif
#endif