Developer Application Interface (ARC API) v4.5.9
ARC, Inc. GenIV Application Interface
CArcDevice.h
1// +------------------------------------------------------------------------------------------------------------------+
2// | FILE: CArcDevice.h ( GenIV ) |
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: July 16, 2013 |
7// | |
8// | Copyright 2013 Astronomical Research Cameras, Inc. All rights reserved. |
9// +------------------------------------------------------------------------------------------------------------------+
12#pragma once
13
14#ifdef _WINDOWS
15 #pragma warning( disable: 4251 )
16#endif
17
18#include <version>
19#include <initializer_list>
20#include <unordered_map>
21#include <stop_token>
22#include <functional>
23#include <filesystem>
24#include <concepts>
25#include <cstdint>
26#include <utility>
27#include <ranges>
28#include <future>
29#include <vector>
30#include <memory>
31#include <string>
32#include <chrono>
33#include <mutex>
34#include <array>
35#include <any>
36
37#if __cpp_lib_optional
38 #include <optional>
39#endif
40
41#include <CArcDeviceDllMain.h>
42#include <CArcBase.h>
43#include <CArcStringList.h>
44#include <CArcAlertPacket.h>
45#include <CArcCommandPacket.h>
46#include <CArcPacketFactory.h>
47#include <CArcPacket.h>
48#include <CArcStatusPacket.h>
49#include <CArcDLoadPacket.h>
50#include <CArcImageAssembler.h>
51#include <CArcImagePacket.h>
52#include <CArcPCIeBase.h>
53#include <CArcSystem.h>
54#include <CArcLog.h>
55#include <ArcDeviceIOControl.h>
56#include <CArcDebugStreamBuffer.h>
57#include <ArcFlashMemoryDefs.h>
58#include <ArcSysState.h>
59#include <ArcConcepts.h>
60#include <CArcBoardMap.h>
61
62
63//#define SHOW_TIMES
64//#define ARC_DEBUG_READOUT
65
66
67namespace arc
68{
69 namespace gen4
70 {
71
72 // +----------------------------------------------------------------------------------------------------------+
73 // | Image Buffer Type |
74 // +----------------------------------------------------------------------------------------------------------+
75
79 struct GEN4_CARCDEVICE_API imageBuffer_t final
80 {
83 imageBuffer_t( const std::uint64_t u64Size );
84
85 std::unique_ptr<std::uint8_t> pVirtualAddress;
86 std::uint64_t uiSize;
91 const std::string toString( void ) const;
92 };
93
94
97 using pImageBuffer_t = std::shared_ptr<arc::gen4::imageBuffer_t>;
98
99
100 // +----------------------------------------------------------------------------------------------------------+
101 // | Common Buffer Type |
102 // +----------------------------------------------------------------------------------------------------------+
103
107 struct GEN4_CARCDEVICE_API commonBuffer_t final
108 {
109 std::uint8_t* pVirtualAddress;
110 std::uint64_t u64PhysicalAddress;
111 std::uint64_t uiSize;
116 const std::string toString( void ) const;
117 };
118
121 constexpr auto iCommonBufferListCount = 2;
122
125 using commonBufferList_t = std::array<std::unique_ptr<arc::gen4::commonBuffer_t>, iCommonBufferListCount>;
126
129 using pCommonBufferList_t = std::unique_ptr<commonBufferList_t>;
130
131
132 // +----------------------------------------------------------------------------------------------------------+
133 // | Expose, readout and alert handler definitions |
134 // +----------------------------------------------------------------------------------------------------------+
135
138 using pStatusPacket_t = std::unique_ptr<arc::gen4::CArcStatusPacket>;
139
143 using exposeListener_t = std::function<void( float )>;
144
145
150 using readListener_t = std::function<void( std::uint32_t, float )>;
151
152
154 // * @param firstParam - Log message
155 // */
156 //using commandLogHandler_t = std::function<void( std::string_view )>;
157
158
162 using alertHandler_t = std::function<void( const std::string& )>;
163
164
167 #if __cpp_lib_optional
168 using optionalAlertFunction_t = std::optional<const std::function<void( const std::string& )>*>;
169 #endif
170
171
176 using fileProgressListener_t = std::function<void( const std::uint32_t, const std::uint32_t )>;
177
178
196 {
197 RealTime,
198 High,
200 Normal,
201 Other
202 };
203
204
205
206 // +-------------------------------------------------------------------------------------------------------+
207 // | CArcDevice Class |
208 // +-------------------------------------------------------------------------------------------------------+
209
216 class GEN4_CARCDEVICE_API CArcDevice : public CArcPCIeBase
217 {
218 public:
219
221 CArcDevice( void );
222
224 CArcDevice( const CArcDevice& ) = delete;
225
227 CArcDevice& operator=( const CArcDevice& ) = delete;
228
230 CArcDevice( CArcDevice&& ) = delete;
231
234
236 #ifdef ARC_DEBUG_READOUT
237 virtual ~CArcDevice( void );
238 #else
239 virtual ~CArcDevice( void ) = default;
240 #endif
241
245 const std::string toString( void ) const noexcept;
246
250 static const std::string version( void ) noexcept;
251
257 static const std::vector<arcDev_t>& findDevices( void );
258
267 void open( const std::uint32_t uiDeviceNumber = 0, const bool bMapBuffer = true );
268
272 bool isOpen( void ) const noexcept;
273
276 void close( void ) noexcept;
277
281 void mapCommonBuffer( void );
282
286 void unMapCommonBuffer( void );
287
294
307 void setup( const std::filesystem::path& tCtlrFile, const std::uint32_t uiHdwTestCnt = 1234, bool* pStop = nullptr );
308
314 void loadFile( const std::filesystem::path& tCtlrFile, bool* pStop = nullptr );
315
320 void bootFlash( void );
321
329
337
346 void registerAlertHandler( alertHandler_t fnAlertHandler, std::chrono::milliseconds freqMS = std::chrono::milliseconds( 1000 ) );
347
348 #if __cpp_lib_optional
353 arc::gen4::optionalAlertFunction_t getAlertHandler( void ) const;
354 #endif
355
360 std::unique_ptr<arc::gen4::CArcBoardMap> getBoardMap( void );
361
370 void setImageDimensions( const std::uint32_t uiCols, const std::uint32_t uiRows );
371
380 void setImageDimensions( const std::uint32_t uiCols, const std::uint32_t uiRows, const std::uint32_t uwChannelCount );
381
387 void verifyColumnChannelCount( const std::uint32_t uiCols, const std::uint32_t uwChannelCount );
388
396
403 {
404 std::array tArgsArray { args ... };
405
406 auto pCommandPacket = CArcPacketFactory::getInstance().cmdPacket();
407
408 for ( std::size_t i = 0; i < ( sizeof...( args ) ); i++ )
409 {
410 pCommandPacket->add( static_cast< std::uint32_t >( tArgsArray[ i ] ) );
411 }
412
413 return command( pCommandPacket.get() );
414 }
415
423 template <uint32Type... Args>
424 arc::gen4::pStatusPacket_t command( const arc::gen4::cmds_e eCmd, const Args ... args )
425 {
426 std::array<std::uint32_t, sizeof...( Args )> tArgsArray { std::forward<const Args>( args )... };
427
428 auto pCommandPacket = CArcPacketFactory::getInstance().cmdPacket();
429
430 pCommandPacket->add( static_cast< std::uint32_t >( eCmd ) );
431
432 for ( std::size_t i = 0; i < tArgsArray.size(); i++ )
433 {
434 pCommandPacket->add( static_cast< std::uint32_t >( tArgsArray[ i ] ) );
435 }
436
437 return command( pCommandPacket.get() );
438 }
439
446 arc::gen4::pStatusPacket_t command( const std::vector<std::uint32_t>& vCmdList );
447
454 void command( const std::vector<std::uint32_t>& vCmdList, const std::uint32_t uiExpectedStatus );
455
462 void command( const std::vector<std::uint32_t>& vCmdList, const arc::gen4::status_e eExpectedStatus );
463
471 arc::gen4::pStatusPacket_t command( const std::vector<std::any>& vCmdList );
472
480 void command( const std::vector<std::any>& vCmdList, const std::uint32_t uiExpectedStatus );
481
489 void command( const std::vector<std::any>& vCmdList, const arc::gen4::status_e eExpectedStatus );
490
500
504 void commandAbort( void ) const;
505
517 arc::gen4::pImageBuffer_t expose( const std::uint32_t uiExpTime, const exposeListener_t fnExposeListener = nullptr, const readListener_t fnReadListener = nullptr, pSysState_t pSysState = nullptr );
518
521 void stopExpose( void ) noexcept;
522
529 const std::vector<arc::gen4::pImageBuffer_t>& getImageBufferList( void ) const;
530
535 arc::gen4::pImageBuffer_t getImageBuffer( const std::uint16_t uwIndex = 0 ) const noexcept;
536
540 std::size_t getImageBufferCount( void ) const noexcept;
541
550 std::uint64_t setImageBufferSize( const std::uint32_t uiColumns, const std::uint32_t uiRows ) noexcept;
551
559 std::uint64_t setImageBufferSize( const std::uint64_t uiSize ) noexcept;
560
564 std::uint64_t getImageBufferSize( void ) const noexcept;
565
571 bool setImageBufferFill( const std::uint32_t uiValue = arc::gen4::CArcDevice::NO_FILL_VALUE ) const noexcept;
572
576 arc::gen4::pImageAssembler_t getImageAssembler( void ) const noexcept;
577
579 // * The registered logger will receive command and status packet output if command logging is enabled.
580 // */
581 //void registerCommandLogger( commandLogHandler_t fnCommandLogHandler = nullptr ) noexcept;
582
587 void enableCommandLogging( const bool bEnable = true );
588
593 arc::gen4::pLogger_t getCommandLog( void ) const noexcept;
594
604 void flashMemoryReadFirmwareBlock( const std::filesystem::path& tOutFile, bool* pStop = nullptr, const fileProgressListener_t& fnProgressListener = nullptr );
605
613 void flashMemoryWriteFirmwareBlock( const std::filesystem::path& tInFile, bool* pStop = nullptr, const fileProgressListener_t& fnProgressListener = nullptr );
614
621 const std::string flashMemoryReadIdBlock( const std::uint32_t uiBoardNumber );
622
629 const std::string flashMemoryReadUserBlock( const std::uint32_t uiBoardNumber );
630
637 void flashMemoryWriteUserBlock( const std::uint32_t uiBoardNumber, std::string_view svText );
638
645 void flashMemoryErase( const std::uint32_t uiBoardNumber, const arc::gen4::flashMemoryId_e eBlockId );
646
647// const std::vector<std::string> readBoardInfo( void ) noexcept;
648
656 std::uint32_t readBAR( const std::uint32_t uiBAR, const std::uint32_t uiAddress ) const;
657
665 void writeBAR( const std::uint32_t uiBAR, const std::uint32_t uiAddress, const std::uint32_t uiValue ) const;
666
672 const std::string dumpBARs( void ) const;
673
681 void setProcessPriority( [[maybe_unused]] const arc::gen4::processPriority_e ePriority = arc::gen4::processPriority_e::Normal );
682
689 arc::gen4::processPriority_e getProcessPriority( void );
690
695 std::function<float( void )> fnReadElapsedTime;
696
701 std::function<std::uint32_t( void )> fnGetPixelCount;
702
706 std::function<void(void)> fnResetPixelCounter;
707
709 std::function<void(void)> fnVerifyDeviceIsOpen;
710
712 static constexpr auto NOPARAM = static_cast< std::uint32_t >( 0xFFFFFFFF );
713
715 static constexpr auto ARC420_BOARD_NUMBER = static_cast< std::uint32_t >( 0x8 );
716
718 static constexpr auto ARC480_BOARD_NUMBER = static_cast< std::uint32_t >( 0x3F );
719
721 static constexpr auto NO_FILL_VALUE = static_cast< std::uint32_t >( 65536 );
722
724 static constexpr auto ARC420_SYNTHETIC_DIMENSION = static_cast< std::uint32_t >( 2048 );
725
727 static constexpr auto ARC420_SYNTHETIC_CHANNEL_COUNT = static_cast< std::uint32_t >( 16 );
728
730 static constexpr auto ARC420_WG_TABLE_LENGTH = static_cast<std::uint32_t>( 1024 );
731
733 static constexpr auto ARC440_INVALID_CHANNEL_ADDRESS = static_cast< std::uint32_t >( 0x99 );
734
736 static constexpr auto ARC440_CHANNEL_COUNT = static_cast< std::uint32_t >( 16 );
737
739 static constexpr auto ARC430_DC_BIAS_COUNT = static_cast< std::uint32_t >( 12 );
740
741 protected:
742
750 arc::gen4::pStatusPacket_t download( arc::gen4::CArcDLoadPacket* pDLoad );
751
755 void clearCommandAbort( void ) const;
756
761 bool commandAborted( void ) const;
762
767 arc::gen4::pStatusPacket_t readStatus( void ) const;
768
775 void readOut( std::uint32_t& uiBufferIndex, const std::uint32_t uiReadCount, const readListener_t fnReadListener );
776
781 void readAlerts( const std::chrono::milliseconds freqMS ) const;
782
789 void flashMemoryWriteIdBlock( std::uint32_t uiBoardNumber, std::string_view svText );
790
802 std::unique_ptr<std::uint8_t[]> flashMemoryReadFirmwareBlock( std::uint32_t& uiDataLength, bool* pStop, std::function<void( std::uint32_t, std::uint32_t )> fProgressListener );
803
809 std::function<std::uint32_t( const std::size_t )> fnCommonBufferByteCount;
810
816 std::function<bool( const std::size_t )> fnCommonBufferDirty;
817
823 std::function<bool( const std::size_t )> fnCommonBufferOverflow;
824
830 std::function<bool( const std::size_t )> fnCommonBufferComplete;
831
837 std::function<void( std::size_t, std::uint32_t )> fnClearCommonBufferStatus;
838
842 std::function<void( void )> fnClearPacketBuffers;
843
852 std::function<std::tuple<bool,std::uint32_t>(void)> fnImageAddressError;
853
859 virtual bool readConfigSpace8( std::uint64_t uiAddress, std::uint64_t* pRegValue ) const noexcept override;
860
866 virtual bool readConfigSpace16( std::uint64_t uiAddress, std::uint64_t* pRegValue ) const noexcept override;
867
873 virtual bool readConfigSpace32( std::uint64_t uiAddress, std::uint64_t* pRegValue ) const noexcept override;
874
880 virtual bool readConfigSpace64( std::uint64_t uiAddress, std::uint64_t* pRegValue ) const noexcept override;
881
887 virtual bool writeConfigSpace8( const std::uint32_t uiAddress, const std::uint32_t uiValue ) const noexcept override;
888
894 virtual bool writeConfigSpace16( const std::uint32_t uiAddress, const std::uint32_t uiValue ) const noexcept override;
895
901 virtual bool writeConfigSpace32( const std::uint32_t uiAddress, const std::uint32_t uiValue ) const noexcept override;
902
904 static std::unique_ptr<const std::array<std::uint32_t,2>> m_pCommonBufferStatusRegisters;
905
907 static std::unique_ptr<const std::array<std::uint32_t, 2>> m_pCommonBufferStatusByteCountRegisters;
908
910 static const std::string m_sVersion;
911
913 static const std::string m_sToString;
914
916 std::unique_ptr<arc::gen4::commonBuffer_t> m_pCommonBuffer;
917
919 std::unique_ptr<arc::gen4::commonBufferList_t> m_pCommonBufferList;
920
922 std::unique_ptr<std::vector<arc::gen4::pImageBuffer_t>> m_pBufferList;
923
925 std::uint64_t m_uiBufferSize;
926
928 std::unique_ptr<std::queue<arc::gen4::CArcImagePacket*>> m_pImagePacketQueue;
929
931 arc::gen4::arcDevHandle_t m_tDevice;
932
934 static std::unique_ptr<std::vector<arcDev_t>> m_pvDevList;
935
937 std::shared_ptr<arc::gen4::CArcLog> m_pCommandLogger;
938
940 //commandLogHandler_t m_fnCommandLogHandler;
941
943 alertHandler_t m_fnAlertHandler;
944
946 std::thread* m_pAlertThread;
947
949 std::shared_ptr<CArcImageAssembler> m_pImgAssembler;
950
952 mutable std::uint32_t m_uiFillValue;
953
955 mutable std::mutex m_oCmdMutex;
956
958 mutable std::mutex m_oCmdAbortMutex;
959
961 mutable std::atomic_bool m_abCmdAbort;
962
964 std::atomic_bool m_abStopAlertCapture;
965
967 std::unique_ptr<std::stop_source> m_pExposeStopSource;
968
970 bool m_bFlashMemoryBlockAccess;
971
973 static constexpr auto ELAPSED_TIMEOUT_COUNT = static_cast< std::uint32_t >( 20 );
974
976 static constexpr auto READ_TIMEOUT_COUNT = static_cast< std::uint32_t >( 100 );
977
978 #ifdef SHOW_TIMES
979 std::chrono::high_resolution_clock::time_point m_cTimeArr[ 4 ];
980 #endif
981
982 private:
983
991 auto BARtoStream( std::ostream& oss, const std::string& sRegName, const std::uint32_t uiAddress, const std::size_t uiDotLength = 40 ) const-> std::uint32_t;
992
997 std::function<bool(void)> fnAlertReceived;
998
1000 static constexpr auto DEFAULT_IMAGE_COLUMN_DIMENSION = static_cast< std::uint32_t >( 4400 );
1001
1003 static constexpr auto DEFAULT_IMAGE_ROW_DIMENSION = static_cast< std::uint32_t >( 4400 );
1004
1006 static constexpr auto BFM = static_cast< std::uint32_t >( 0x0042464D );
1007
1009 static constexpr auto MAX_BAR = static_cast< std::uint32_t >( 5 );
1010
1012 static constexpr auto FLASH_MEMORY_FIRMWARE_STARTADDR = static_cast< std::uint32_t >( 0 );
1013
1015 static constexpr auto FLASH_MEMORY_FIRMWARE_BLOCKSIZE = static_cast< std::uint32_t >( 0x2FFFF );
1016
1018 static constexpr auto FLASH_MEMORY_NETWORK_MAC_ADDR = static_cast< std::uint32_t >( 0x30000 );
1019
1021 static constexpr auto FLASH_MEMORY_NETWORK_STARTADDR = static_cast< std::uint32_t >( 0x31000 );
1022
1024 static constexpr auto FLASH_MEMORY_NETWORK_MAC_SIZE = static_cast< std::int32_t >( 6 );
1025
1027 static constexpr auto FLASH_MEMORY_NETWORK_IP_SIZE = static_cast< std::int32_t >( 4 );
1028
1030 static constexpr auto FLASH_MEMORY_NETWORK_PORT_SIZE = static_cast< std::int32_t >( 2 );
1031
1033 static constexpr auto FLASH_MEMORY_NETWORK_DATA_SIZE = static_cast< std::int32_t >(
1034 FLASH_MEMORY_NETWORK_IP_SIZE +
1035 FLASH_MEMORY_NETWORK_PORT_SIZE +
1036 FLASH_MEMORY_NETWORK_IP_SIZE +
1037 FLASH_MEMORY_NETWORK_IP_SIZE +
1038 FLASH_MEMORY_NETWORK_IP_SIZE +
1039 FLASH_MEMORY_NETWORK_IP_SIZE +
1040 FLASH_MEMORY_NETWORK_IP_SIZE +
1041 FLASH_MEMORY_NETWORK_PORT_SIZE );
1042
1044 static constexpr auto FLASH_MEMORY_NETWORK_IP_OFFSET = static_cast< std::int32_t >( 0 );
1045
1047 static constexpr auto FLASH_MEMORY_NETWORK_PORT_OFFSET = static_cast< std::int32_t >( FLASH_MEMORY_NETWORK_IP_OFFSET + FLASH_MEMORY_NETWORK_IP_SIZE );
1048
1050 static constexpr auto FLASH_MEMORY_NETWORK_HOST_IP_0_OFFSET = static_cast< std::int32_t >( FLASH_MEMORY_NETWORK_PORT_OFFSET + FLASH_MEMORY_NETWORK_PORT_SIZE );
1051
1053 static constexpr auto FLASH_MEMORY_NETWORK_HOST_IP_1_OFFSET = static_cast< std::int32_t >( FLASH_MEMORY_NETWORK_HOST_IP_0_OFFSET + FLASH_MEMORY_NETWORK_IP_SIZE );
1054
1056 static constexpr auto FLASH_MEMORY_NETWORK_HOST_IP_2_OFFSET = static_cast< std::int32_t >( FLASH_MEMORY_NETWORK_HOST_IP_1_OFFSET + FLASH_MEMORY_NETWORK_IP_SIZE );
1057
1059 static constexpr auto FLASH_MEMORY_NETWORK_HOST_IP_3_OFFSET = static_cast< std::int32_t >( FLASH_MEMORY_NETWORK_HOST_IP_2_OFFSET + FLASH_MEMORY_NETWORK_IP_SIZE );
1060
1062 static constexpr auto FLASH_MEMORY_NETWORK_HOST_IP_4_OFFSET = static_cast< std::int32_t >( FLASH_MEMORY_NETWORK_HOST_IP_3_OFFSET + FLASH_MEMORY_NETWORK_IP_SIZE );
1063
1065 static constexpr auto FLASH_MEMORY_NETWORK_HOST_PORT_OFFSET = static_cast< std::int32_t >( FLASH_MEMORY_NETWORK_HOST_IP_4_OFFSET + FLASH_MEMORY_NETWORK_IP_SIZE );
1066
1068 static constexpr auto FLASH_MEMORY_END_OFFSET = static_cast< std::int32_t >( FLASH_MEMORY_NETWORK_HOST_PORT_OFFSET + FLASH_MEMORY_NETWORK_PORT_SIZE );
1069
1071 static constexpr auto FLASH_MEMORY_ARC420_ID_STARTADDR = static_cast< std::uint32_t >( 0x32000 );
1072
1074 static constexpr auto FLASH_MEMORY_ARC420_MAX_ID_CHARACTERS = static_cast< std::uint32_t >( 4096 );
1075
1077 static constexpr auto FLASH_MEMORY_ID_STARTADDR = static_cast< std::uint32_t >( 0x38000 );
1078
1080 static constexpr auto FLASH_MEMORY_MAX_ID_CHARACTERS = static_cast< std::uint32_t >( 0x7FFF );
1081
1083 static constexpr auto FLASH_MEMORY_ARC420_USER_STARTADDR = static_cast< std::uint32_t >( 0x38000 );
1084
1086 static constexpr auto FLASH_MEMORY_ARC420_MAX_USER_CHARACTERS = static_cast< std::uint32_t >( 4096 );
1087
1089 static constexpr auto FLASH_MEMORY_USER_STARTADDR = static_cast< std::uint32_t >( 0 );
1090
1092 static constexpr auto FLASH_MEMORY_MAX_USER_CHARACTERS = static_cast< std::uint32_t >( 0x37FFF );
1093
1095 static constexpr auto EXPOSE_RET_HANDLE_TIME = static_cast< std::uint32_t >( 310 );
1096
1098 static constexpr auto EXPOSE_RET_BAIL_TIME = static_cast< float >( 0.3f );
1099
1100 #ifdef ARC_DEBUG_READOUT
1102 std::shared_ptr<std::ostream> m_pDbgOS;
1103 #endif
1104 };
1105
1106
1107 } // end gen4 namespace
1108} // end arc namespace
void stopExpose(void) noexcept
void command(const std::vector< std::uint32_t > &vCmdList, const arc::gen4::status_e eExpectedStatus)
void mapCommonBuffer(void)
void commandAbort(void) const
arc::gen4::pStatusPacket_t command(const arc::gen4::cmds_e eCmd, const Args ... args)
Definition: CArcDevice.h:424
void command(const std::vector< std::any > &vCmdList, const std::uint32_t uiExpectedStatus)
arc::gen4::pStatusPacket_t command(uint32Type auto const ... args)
Definition: CArcDevice.h:402
bool isOpen(void) const noexcept
arc::gen4::pStringList_t getExposeModeList(void)
arc::gen4::pImageBuffer_t getImageBuffer(const std::uint16_t uwIndex=0) const noexcept
arc::gen4::pStatusPacket_t command(const std::vector< std::any > &vCmdList)
const std::string toString(void) const noexcept
arc::gen4::pCommonBufferList_t getCommonBuffers(void) const noexcept
CArcDevice(CArcDevice &&)=delete
arc::gen4::pSysState_t getSystemState(void)
void loadFile(const std::filesystem::path &tCtlrFile, bool *pStop=nullptr)
void setImageDimensions(const std::uint32_t uiCols, const std::uint32_t uiRows, const std::uint32_t uwChannelCount)
virtual ~CArcDevice(void)=default
void registerAlertHandler(alertHandler_t fnAlertHandler, std::chrono::milliseconds freqMS=std::chrono::milliseconds(1000))
CArcDevice & operator=(const CArcDevice &)=delete
CArcDevice(const CArcDevice &)=delete
arc::gen4::pStringList_t getCommandList(void)
arc::gen4::pStatusPacket_t command(const arc::gen4::CArcCommandPacket *pCmd) const
CArcDevice & operator=(CArcDevice &&)=delete
static const std::vector< arcDev_t > & findDevices(void)
std::unique_ptr< arc::gen4::CArcBoardMap > getBoardMap(void)
arc::gen4::pStatusPacket_t command(const std::vector< std::uint32_t > &vCmdList)
void open(const std::uint32_t uiDeviceNumber=0, const bool bMapBuffer=true)
void command(const std::vector< std::any > &vCmdList, const arc::gen4::status_e eExpectedStatus)
void setImageDimensions(const std::uint32_t uiCols, const std::uint32_t uiRows)
void setup(const std::filesystem::path &tCtlrFile, const std::uint32_t uiHdwTestCnt=1234, bool *pStop=nullptr)
void verifyColumnChannelCount(const std::uint32_t uiCols, const std::uint32_t uwChannelCount)
arc::gen4::pImageBuffer_t expose(const std::uint32_t uiExpTime, const exposeListener_t fnExposeListener=nullptr, const readListener_t fnReadListener=nullptr, pSysState_t pSysState=nullptr)
static const std::string version(void) noexcept
void command(const std::vector< std::uint32_t > &vCmdList, const std::uint32_t uiExpectedStatus)
void close(void) noexcept
const std::vector< arc::gen4::pImageBuffer_t > & getImageBufferList(void) const
void unMapCommonBuffer(void)
static CArcPacketFactory & getInstance(void) noexcept
std::unique_ptr< CArcCommandPacket > cmdPacket(const std::uint8_t uiId=0) const
std::shared_ptr< arc::gen4::CArcImageAssembler > pImageAssembler_t
std::unique_ptr< arc::gen4::CArcStringList > pStringList_t
constexpr auto ARC440_INVALID_CHANNEL_ADDRESS
std::function< void(std::uint32_t, float)> readListener_t
Definition: CArcDevice.h:150
std::function< void(float)> exposeListener_t
Definition: CArcDevice.h:143
std::function< void(const std::uint32_t, const std::uint32_t)> fileProgressListener_t
Definition: CArcDevice.h:176
std::array< std::unique_ptr< arc::gen4::commonBuffer_t >, iCommonBufferListCount > commonBufferList_t
Definition: CArcDevice.h:125
std::weak_ptr< arc::gen4::CArcLog > pLogger_t
Definition: CArcLog.h:162
HANDLE arcDevHandle_t
Definition: CArcSystem.h:53
std::unique_ptr< arc::gen4::CArcStatusPacket > pStatusPacket_t
Definition: CArcDevice.h:138
std::shared_ptr< sysState_t > pSysState_t
Definition: ArcSysState.h:28
std::function< void(const std::string &)> alertHandler_t
‍** Convenience ( compact ) definition for command log handler
Definition: CArcDevice.h:162
constexpr auto iCommonBufferListCount
Definition: CArcDevice.h:121
std::unique_ptr< commonBufferList_t > pCommonBufferList_t
Definition: CArcDevice.h:129
std::shared_ptr< arc::gen4::imageBuffer_t > pImageBuffer_t
Definition: CArcDevice.h:97
Definition: CArcBase.h:46
std::uint8_t * pVirtualAddress
Definition: CArcDevice.h:109
const std::string toString(void) const
std::uint64_t u64PhysicalAddress
Definition: CArcDevice.h:110
std::uint64_t uiSize
Definition: CArcDevice.h:86
std::unique_ptr< std::uint8_t > pVirtualAddress
Definition: CArcDevice.h:85
const std::string toString(void) const
imageBuffer_t(const std::uint64_t u64Size)