Developer Application Interface (ARC API) v3.6.2
ARC, Inc. GenII/III Application Interface
CArcDevice.h
Go to the documentation of this file.
1// +------------------------------------------------------------------------------------------------------------------+
2// | FILE: CArcDevice.h |
3// +------------------------------------------------------------------------------------------------------------------+
4// | PURPOSE: This file defines the standard ARC device class. This is the class all user applications should use. |
5// | |
6// | AUTHOR: Scott Streit DATE: ? |
7// | |
8// | Copyright Astronomical Research Cameras, Inc. All rights reserved. |
9// +------------------------------------------------------------------------------------------------------------------+
12#pragma once
13
14#include <string_view>
15#include <filesystem>
16
17#include <CArcDeviceDllMain.h>
18#include <CArcSystem.h>
19#include <CExpIFace.h>
20#include <CConIFace.h>
21#include <TempCtrl.h>
22#include <CArcLog.h>
23
24#if defined( linux ) || defined( __linux )
25 #include <sys/types.h>
26#endif
27
28using namespace std::string_literals;
29
30
31namespace arc
32{
33 namespace gen3
34 {
35 namespace device
36 {
37
41 struct ImgBuf_t
42 {
43 std::uint16_t* pUserAddr;
44 std::uint64_t ulPhysicalAddr;
45 std::uint64_t ulSize;
46 };
47
48
49 } // end device namespace
50
51
58 class GEN3_CARCDEVICE_API CArcDevice
59 {
60 public:
61
65 CArcDevice( void );
66
70 virtual ~CArcDevice( void ) = default;
71
75 virtual constexpr std::string_view toString( void ) = 0;
76
77 // Device access
78 // +---------------------------------------------------------------+
79
83 virtual bool isOpen( void ) noexcept;
84
89 virtual void open( const std::uint32_t uiDeviceNumber = 0 ) = 0;
90
97 virtual void open( const std::uint32_t uiDeviceNumber, const std::uint32_t uiBytes ) = 0;
98
107 virtual void open( const std::uint32_t uiDeviceNumber, const std::uint32_t uiRows, const std::uint32_t uiCols ) = 0;
108
111 virtual void close( void ) = 0;
112
116 virtual void reset( void ) = 0;
117
123 virtual void mapCommonBuffer( const std::size_t uiBytes = 0 ) = 0;
124
128 virtual void unMapCommonBuffer( void ) = 0;
129
138 virtual void reMapCommonBuffer( const std::uint32_t uiBytes = 0 );
139
144 virtual void fillCommonBuffer( const std::uint16_t uwValue = 0 );
145
149 virtual std::uint8_t* commonBufferVA( void );
150
155 virtual std::uint64_t commonBufferPA( void );
156
160 virtual std::uint64_t commonBufferSize( void );
161
166 virtual std::uint32_t getId( void ) = 0;
167
173 virtual std::uint32_t getStatus( void ) = 0;
174
178 virtual void clearStatus( void ) = 0;
179
184 virtual void set2xFOTransmitter( bool bOnOff ) = 0;
185
190 virtual void loadDeviceFile( const std::filesystem::path& tFile ) = 0;
191
192 // Setup & General commands
193 // +---------------------------------------------------------------+
194
201 virtual std::uint32_t command( const std::initializer_list<const std::uint32_t>& tCmdList ) = 0;
202
208 virtual void command( const std::initializer_list<const std::uint32_t>& tCmdList, std::uint32_t uiExpectedReply );
209
214 virtual std::uint32_t getControllerId( void ) = 0;
215
219 virtual void resetController( void ) = 0;
220
225 virtual bool isControllerConnected( void ) = 0;
226
245 virtual void setupController( bool bReset, bool bTdl, bool bPower, const std::uint32_t uiRows, const std::uint32_t uiCols, const std::filesystem::path& tTimFile,
246 const std::filesystem::path& tUtilFile = std::filesystem::path(), const std::filesystem::path& tPciFile = std::filesystem::path(),
247 bool* pAbort = nullptr );
248
255 virtual void loadControllerFile( const std::filesystem::path& tFilename, bool bValidate = true, bool* pAbort = nullptr );
256
263 virtual void setImageSize( const std::uint32_t uiRows, const std::uint32_t uiCols );
264
269 virtual std::uint32_t getImageRows( void );
270
275 virtual std::uint32_t getImageCols( void );
276
352 virtual std::uint32_t getCCParams( void );
353
360 virtual bool isCCParamSupported( const std::uint32_t uiParameter );
361
366 virtual bool isCCD( void );
367
372 virtual bool isBinningSet( void );
373
385 virtual void setBinning( const std::uint32_t uiRows, const std::uint32_t uiCols, const std::uint32_t uiRowFactor, const std::uint32_t uiColFactor, std::uint32_t* pBinRows = nullptr, std::uint32_t* pBinCols = nullptr );
386
393 virtual void unSetBinning( const std::uint32_t uiRows, const std::uint32_t uiCols );
394
425 virtual void setSubArray( std::uint32_t& uiOldRows, std::uint32_t& uiOldCols, const std::uint32_t uiRow, const std::uint32_t uiCol, const std::uint32_t uiSubRows, const std::uint32_t uiSubCols, const std::uint32_t uiBiasOffset, const std::uint32_t uiBiasWidth );
426
432 virtual void unSetSubArray( const std::uint32_t uiRows, const std::uint32_t uiCols );
433
439 virtual bool isSyntheticImageMode( void );
440
446 virtual void setSyntheticImageMode( bool bMode );
447
448
449 // expose commands
450 // +-------------------------------------------------+
451
456 virtual void setOpenShutter( bool bShouldOpen );
457
467 virtual void expose( const float fExpTime, const std::uint32_t uiRows, const std::uint32_t uiCols, const bool* pAbort = nullptr, arc::gen3::CExpIFace* pExpIFace = nullptr, bool bOpenShutter = true );
468
472 virtual void stopExposure( void ) = 0;
473
484 virtual void continuous( const std::uint32_t uiRows, const std::uint32_t uiCols, const std::uint32_t uiNumOfFrames, const float fExpTime, const bool* pAbort = nullptr, arc::gen3::CConIFace* pConIFace = nullptr, bool bOpenShutter = true );
485
489 virtual void stopContinuous( void );
490
495 virtual bool isReadout( void ) = 0;
496
501 virtual std::uint32_t getPixelCount( void ) = 0;
502
507 virtual std::uint32_t getCRPixelCount( void ) = 0;
508
513 virtual std::uint32_t getFrameCount( void ) = 0;
514
515
516 // Error & Degug message access
517 // +--------------------------------------------------------------------------------------+
518
523 virtual bool containsError( const std::uint32_t uiWord ) noexcept;
524
531 virtual bool containsError( const std::uint32_t uiWord, const std::uint32_t uiWordMin, const std::uint32_t uiWordMax ) noexcept;
532
536 virtual const std::string getNextLoggedCmd( void );
537
541 virtual std::uint32_t getLoggedCmdCount( void );
542
551 virtual void setLogCmds( bool bOnOff ) noexcept;
552
553
554 // Temperature control
555 // +----------------------------------------------------------------------------------------+
556
563 virtual double getArrayTemperature( void );
564
569 virtual double getArrayTemperatureDN( void );
570
575 virtual void setArrayTemperature( double gTempVal );
576
582 virtual void loadTemperatureCtrlData( const std::filesystem::path& tFilename );
583
589 virtual void saveTemperatureCtrlData( const std::filesystem::path& tFilename );
590
591
594 static constexpr auto CTLR_CMD_MAX = static_cast< std::uint32_t >( 6 );
595
596
599 static constexpr auto READ_TIMEOUT = static_cast< std::uint32_t >( 200 );
600
601
604 static constexpr auto NOPARAM = static_cast< std::uint32_t >( 0xFF000000 );
605
606 protected:
607
612 virtual bool getCommonBufferProperties( void ) = 0;
613
616 virtual void setDefaultTemperatureValues( void ) noexcept;
617
624 virtual double ADUToVoltage( const std::uint32_t uiAdu, bool bArc12 = false, bool bHighGain = false ) noexcept;
625
632 virtual double voltageToADU( const double gVoltage, bool bArc12 = false, bool bHighGain = false ) noexcept;
633
641 virtual double calculateAverageTemperature( void );
642
650 virtual double calculateVoltage( const double gTemperature );
651
658 virtual double calculateTemperature( const double gVoltage );
659
667 virtual std::uint32_t getContinuousImageSize( const std::uint32_t uiImageSize ) = 0;
668
675 virtual std::uint32_t smallCamDLoad( const std::uint32_t uiBoardId, const std::vector<std::uint32_t>* pvData ) = 0;
676
683 virtual void loadSmallCamControllerFile( const std::filesystem::path& tFilename, [[maybe_unused]] bool bValidate, bool* pAbort = nullptr );
684
691 virtual void loadGen23ControllerFile( const std::filesystem::path& tFilename, bool bValidate, bool* pAbort = nullptr ) = 0;
692
698 virtual void setByteSwapping( void ) = 0;
699
707 virtual const std::string formatDLoadString( const std::uint32_t uiReply, const std::uint32_t uiBoardId, const std::vector<std::uint32_t>* pvData );
708
709 // Temperature control variables
710 // +-------------------------------------------------------------+
711 double m_gTmpCtrl_DT670Coeff1;
712 double m_gTmpCtrl_DT670Coeff2;
713 double m_gTmpCtrl_SDAduOffset;
714 double m_gTmpCtrl_SDAduPerVolt;
715 double m_gTmpCtrl_HGAduOffset;
716 double m_gTmpCtrl_HGAduPerVolt;
717 double m_gTmpCtrl_SDVoltTolerance;
718 double m_gTmpCtrl_SDDegTolerance;
719 std::uint32_t m_gTmpCtrl_SDNumberOfReads;
720 std::uint32_t m_gTmpCtrl_SDVoltToleranceTrials;
722 TmpCtrlCoeff_t m_tTmpCtrl_SD_2_12K;
723 TmpCtrlCoeff_t m_tTmpCtrl_SD_12_24K;
724 TmpCtrlCoeff_t m_tTmpCtrl_SD_24_100K;
725 TmpCtrlCoeff_t m_tTmpCtrl_SD_100_475K;
727 arc::gen3::arcDevHandle_t m_hDevice;
728 std::unique_ptr<arc::gen3::CArcLog> m_pCLog;
729 arc::gen3::device::ImgBuf_t m_tImgBuffer;
730 std::uint32_t m_uiCCParam;
731 bool m_bStoreCmds;
732 };
733
734 } // end gen3 namespace
735} // end arc namespace
Definition: CArcDevice.h:59
virtual bool isReadout(void)=0
virtual void mapCommonBuffer(const std::size_t uiBytes=0)=0
virtual std::uint32_t getId(void)=0
virtual void open(const std::uint32_t uiDeviceNumber=0)=0
virtual constexpr std::string_view toString(void)=0
virtual void close(void)=0
virtual ~CArcDevice(void)=default
virtual std::uint32_t getPixelCount(void)=0
virtual void open(const std::uint32_t uiDeviceNumber, const std::uint32_t uiBytes)=0
virtual void resetController(void)=0
virtual std::uint32_t getStatus(void)=0
virtual bool isControllerConnected(void)=0
virtual void open(const std::uint32_t uiDeviceNumber, const std::uint32_t uiRows, const std::uint32_t uiCols)=0
virtual std::uint32_t command(const std::initializer_list< const std::uint32_t > &tCmdList)=0
virtual std::uint32_t getFrameCount(void)=0
virtual std::uint32_t getCRPixelCount(void)=0
virtual void clearStatus(void)=0
virtual void unMapCommonBuffer(void)=0
virtual void stopExposure(void)=0
virtual void loadDeviceFile(const std::filesystem::path &tFile)=0
virtual std::uint32_t getControllerId(void)=0
virtual void set2xFOTransmitter(bool bOnOff)=0
virtual void reset(void)=0
virtual bool getCommonBufferProperties(void)=0
Definition: CArcLog.h:40
Definition: CConIFace.h:30
Definition: CExpIFace.h:32
Definition: TempCtrl.h:61
Definition: CArcDevice.h:42
std::uint16_t * pUserAddr
Definition: CArcDevice.h:43
std::uint64_t ulPhysicalAddr
Definition: CArcDevice.h:44
std::uint64_t ulSize
Definition: CArcDevice.h:45