-
Notifications
You must be signed in to change notification settings - Fork 0
/
PlayerOne.h
267 lines (207 loc) · 8.71 KB
/
PlayerOne.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
//
// PlayerOne.h
//
// Created by Rodolphe Pineau on 2022/07/06
// Copyright © 2022 Rodolphe Pineau. All rights reserved.
//
#ifndef PlayerOne_hpp
#define PlayerOne_hpp
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <string>
#include <vector>
#include <sstream>
#include <iostream>
#include <map>
#include <thread>
#include <fstream>
#include <iomanip>
#ifndef WIN32
#include <unistd.h>
#endif
#define ERROR_CMDFAILED -1
#define ERROR_NODEVICESELECTED -2
#define ERROR_NOLINK -3
#define ERROR_COMMANDNOTSUPPORTED -4
#define ERROR_POINTER -5
#define ERROR_COMMANDINPROGRESS -6
#define ERROR_RXTIMEOUT -7
#include "PlayerOneCamera.h"
#include "StopWatch.h"
// #define PLUGIN_DEBUG 3
#define CODE_VERSION 1.31
#define BUFFER_LEN 128
#define PLUGIN_OK 0
#define MAX_NB_BIN 8
#define VAL_NOT_AVAILABLE 0xDEADBEEF
typedef struct _camera_info {
int cameraId;
std::string Sn;
std::string model;
} camera_info_t;
enum Plugin_Flip_Mode { FLIP_NONE, FLIP_HORI, FLIP_VERT, FLIP_BOTH};
enum cameraState {C_IDLE, C_EXPOSING};
class CPlayerOne {
public:
CPlayerOne();
~CPlayerOne();
void setUserConf(bool bUserConf);
int Connect(std::string sSerial);
void Disconnect(void);
int getCameraIdFromSerial(int &nCameraId, std::string sSerial);
int getCameraSerialFromID(int nCameraId, std::string &sSerial);
void getCameraNameFromID(int nCameraId, std::string &sName);
void getCameraName(std::string &sName);
void getCameraSerial(std::string &sSerial);
int listCamera(std::vector<camera_info_t> &cameraIdList);
void getFirmwareVersion(std::string &sVersion);
void isUSB3(bool &bUSB3);
int getNumBins();
int getBinFromIndex(int nIndex);
int startCaputure(double dTime);
void abortCapture(void);
int getTemperture(double &dTemp, double &dPower, double &dSetPoint, bool &bEnabled);
int setCoolerTemperature(bool bOn, double dTemp);
int setCoolerState(bool bOn);
bool isCoolerAvailable();
int getWidth();
int getHeight();
double getPixelSize();
int setBinSize(int nBin);
bool isCameraColor();
void getBayerPattern(std::string &sBayerPattern);
void getFlip(std::string &sFlipMode);
int getGain(long &nMin, long &nMax, long &nValue);
int setGain(long nGain);
int getWB_R(long &nMin, long &nMax, long &nValue, bool &bIsAuto);
int setWB_R(long nWB_R, bool bIsAuto = POA_FALSE);
int getWB_G(long &nMin, long &nMax, long &nValue, bool &bIsAuto);
int setWB_G(long nWB_G, bool bIsAuto = POA_FALSE);
int getWB_B(long &nMin, long &nMax, long &nValue, bool &bIsAuto);
int setWB_B(long nWB_B, bool bIsAuto = POA_FALSE);
int getFlip(long &nMin, long &nMax, long &nValue);
int setFlip(long nFlip);
int getOffset(long &nMin, long &nMax, long &nValue);
int setOffset(long nBlackLevel);
int getUSBBandwidth(long &nMin, long &nMax, long &nValue);
int setUSBBandwidth(long nBandwidth);
bool isLensHeaterAvailable();
int getLensHeaterPowerPerc(long &nMin, long &nMax, long &nValue);
int setLensHeaterPowerPerc(long nPercent);
int setROI(int nLeft, int nTop, int nWidth, int nHeight);
int clearROI(void);
bool isFrameAvailable();
void getCameraState(int &nState);
uint32_t getBitDepth();
int getFrame(int nHeight, int nMemWidth, unsigned char* frameBuffer);
bool isST4Available();
int RelayActivate(const int nXPlus, const int nXMinus, const int nYPlus, const int nYMinus, const bool bSynchronous, const bool bAbort);
int getNbGainInList();
std::string getGainLabelFromListAtIndex(int nIndex);
int getGainFromListAtIndex(int nIndex);
void rebuildGainList();
int getCurentSensorMode(std::string &sSensorMode, int &nModeIndex);
int getSensorModeList(std::vector<std::string> &sModes, int &curentModeIndex);
int setSensorMode(int nModeIndex);
bool isHardwareBinAvailable();
int setHardwareBinOn(bool bOn);
int getHardwareBinOn(bool &bOn);
int getPixelBinMode(bool &bSumMode);
int setPixelBinMode(bool bSumMode);
int getMonoBin(bool &bMonoBin);
int setMonoBin(bool bMonoBin);
void getAllUsefulValues(int &nGainHighestDR, int &nHCGain, int &nUnityGain, int &nGainLowestRN,
int &nOffsetHighestDR, int &nOffsetHCGain, int &nOffsetUnityGain, int &nOffsetLowestRN);
int getGainAdu(double &dMin, double &nMax, double &dValue);
int getExposureMinMax(long &nMin, long &nMax);
long getExposureMin();
long getExposureMax();
bool getFastReadoutAvailable();
#ifdef PLUGIN_DEBUG
void log(std::string sLogEntry);
#endif
protected:
POAErrors getConfigValue(POAConfig confID , POAConfigValue &confValue, POAConfigValue &minValue, POAConfigValue &maxValue, POABool &bAuto);
POAErrors setConfigValue(POAConfig confID , POAConfigValue confValue, POABool bAuto = POA_FALSE);
void buildGainList();
bool m_bSetUserConf = false;
int m_nCameraNum = 0;
int m_nCameraID = 0;
std::string m_sCameraName = "";
std::string m_sCameraSerial = "";
POACameraProperties m_cameraProperty;
POAImgFormat m_nImageFormat = POA_RAW16;
std::vector<POASensorModeInfo> m_sensorModeInfo;
int m_nSensorModeIndex = 0;
int m_nSensorModeCount = 0;
int m_nControlNums = 0;
std::vector<POAConfigAttributes> m_ControlList;
std::vector<std::string> m_GainListLabel;
std::vector<int> m_GainList;
int m_nNbGainValue = VAL_NOT_AVAILABLE;
long m_nGain = VAL_NOT_AVAILABLE;
long m_nWbR = VAL_NOT_AVAILABLE;
bool m_bR_Auto = false;
long m_nWbG = VAL_NOT_AVAILABLE;
bool m_bG_Auto = false;
long m_nWbB = VAL_NOT_AVAILABLE;
bool m_bB_Auto = false;
long m_nFlip = VAL_NOT_AVAILABLE;
long m_nAutoExposureTarget = 0;
long m_nOffset = VAL_NOT_AVAILABLE;
bool m_bPixelBinMode = false;
bool m_bPixelMonoBin = false;
bool m_bHasMonoBinMode = false;
long m_nUSBBandwidth = 100;
long m_nLensHeaterPowerPerc = VAL_NOT_AVAILABLE;
double m_dPixelSize = 0;
int m_nMaxWidth = -1;
int m_nMaxHeight = -1;
bool m_bIsColorCam = false;
int m_nBayerPattern = POA_BAYER_BG;
int m_nMaxBitDepth = 16;
int m_nNbBin = 1;
int m_SupportedBins[MAX_NB_BIN] = {};
int m_nCurrentBin = 1;
bool m_bHasHardwareBin = false;
bool m_bHardwareBinEnabled = false;
bool m_bHasRelayOutput = false;
bool m_bConnected = false;
unsigned char * m_pframeBuffer = nullptr;
bool m_bDeviceIsUSB = true;
bool m_bAbort = false;
std::map<int,bool> m_mAvailableFrameRate;
int m_nNbBitToShift = 0;
double m_dCaptureLenght = 0;
long m_nEposureMax;
long m_nEposureMin;
int m_nROILeft = -1;
int m_nROITop = -1;
int m_nROIWidth = -1;
int m_nROIHeight = -1;
int m_nReqROILeft = -1;
int m_nReqROITop = -1;
int m_nReqROIWidth = -1;
int m_nReqROIHeight = -1;
bool m_bHasLensHeater = false;
// special gain and offset data
int m_nGainHighestDR = VAL_NOT_AVAILABLE;
int m_nHCGain = VAL_NOT_AVAILABLE;
int m_nUnityGain = VAL_NOT_AVAILABLE;
int m_nGainLowestRN = VAL_NOT_AVAILABLE;
int m_nOffsetHighestDR = VAL_NOT_AVAILABLE;
int m_nOffsetHCGain = VAL_NOT_AVAILABLE;
int m_nOffsetUnityGain = VAL_NOT_AVAILABLE;
int m_nOffsetLowestRN = VAL_NOT_AVAILABLE;
POAConfig m_confGuideDir;
CStopWatch m_ExposureTimer;
#ifdef PLUGIN_DEBUG
// timestamp for logs
const std::string getTimeStamp();
std::ofstream m_sLogFile;
std::string m_sLogfilePath;
#endif
};
#endif /* PlayerOne_hpp */