15 #pragma warning( disable: 4251 )
26#include <CArcDeviceDllMain.h>
47 typedef enum class PCIeRegs : std::uint32_t
97 typedef enum class PCIeRegOffsets : std::uint32_t
99 REG_CMD_HEADER = 0x00,
100 REG_CMD_COMMAND = 0x04,
106 REG_CTLR_SPECIAL_CMD = 0x1C,
108 REG_INIT_IMG_ADDR = 0x38,
109 REG_FIBER_2X_CTRL = 0x5C,
111 REG_CMD_REPLY = 0x64,
112 REG_CTLR_ARG1 = 0x68,
113 REG_CTLR_ARG2 = 0x6C,
114 REG_PIXEL_COUNT = 0x70,
115 REG_FRAME_COUNT = 0x74,
128 typedef enum class RegCmds : std::uint32_t
130 CONTROLLER_GET_ID = 0x09,
131 CONTROLLER_RESET = 0x0B
142 typedef enum class Fiber2x : std::uint32_t
159 typedef enum class Fiber : std::uint32_t
189 constexpr std::string_view toString(
void );
199 std::uint32_t getCfgSpByte(
const std::uint32_t uiOffset );
206 std::uint32_t getCfgSpWord(
const std::uint32_t uiOffset );
213 std::uint32_t getCfgSpDWord(
const std::uint32_t uiOffset );
220 void setCfgSpByte(
const std::uint32_t uiOffset,
const std::uint32_t uiValue );
227 void setCfgSpWord(
const std::uint32_t uiOffset,
const std::uint32_t uiValue );
234 void setCfgSpDWord(
const std::uint32_t uiOffset,
const std::uint32_t uiValue );
241 void getCfgSp(
void );
249 void getBarSp(
void );
258 static void findDevices(
void );
263 static std::uint32_t deviceCount(
void )
noexcept;
268 static const std::weak_ptr<std::string[]> getDeviceStringList(
void )
noexcept;
273 bool isOpen(
void )
noexcept;
279 void open(
const std::uint32_t uiDeviceNumber = 0 );
287 void open(
const std::uint32_t uiDeviceNumber,
const std::uint32_t uiBytes );
297 void open(
const std::uint32_t uiDeviceNumber,
const std::uint32_t uiRows,
const std::uint32_t uiCols );
312 bool getCommonBufferProperties(
void );
319 void mapCommonBuffer( std::size_t uiBytes = 0 );
324 void unMapCommonBuffer(
void );
330 std::uint32_t getId(
void );
337 std::uint32_t getStatus(
void );
342 void clearStatus(
void );
348 void set2xFOTransmitter(
bool bOnOff );
354 void loadDeviceFile(
const std::filesystem::path& tFile );
367 std::uint32_t command(
const std::initializer_list<const std::uint32_t>& tCmdList );
373 std::uint32_t getControllerId(
void );
378 void resetController(
void );
384 bool isControllerConnected(
void );
390 bool isFiberConnected( arc::gen3::device::eFiber eFiberId = arc::gen3::device::eFiber::FIBER_A );
398 void stopExposure(
void );
404 bool isReadout(
void );
410 std::uint32_t getPixelCount(
void );
416 std::uint32_t getCRPixelCount(
void );
422 std::uint32_t getFrameCount(
void );
433 void writeBar( arc::gen3::device::ePCIeRegs eBar,
const std::uint32_t uiOffset,
const std::uint32_t uiValue );
441 std::uint32_t readBar( arc::gen3::device::ePCIeRegs eBar,
const std::uint32_t uiOffset );
448 std::uint32_t readReply(
double fTimeOutSecs = 1.5 );
454 static constexpr auto ID =
static_cast< std::uint32_t
>( 0x41524336 );
460 static constexpr auto ARC_READ_BAR =
static_cast< std::uint32_t
>( 0x01 );
463 static constexpr auto ARC_WRITE_BAR =
static_cast< std::uint32_t
>( 0x02 );
466 static constexpr auto ARC_BAR_SIZE =
static_cast< std::uint32_t
>( 0x03 );
469 static constexpr auto ARC_READ_CFG_8 =
static_cast< std::uint32_t
>( 0x04 );
472 static constexpr auto ARC_READ_CFG_16 =
static_cast< std::uint32_t
>( 0x05 );
475 static constexpr auto ARC_READ_CFG_32 =
static_cast< std::uint32_t
>( 0x06 );
478 static constexpr auto ARC_WRITE_CFG_8 =
static_cast< std::uint32_t
>( 0x07 );
481 static constexpr auto ARC_WRITE_CFG_16 =
static_cast< std::uint32_t
>( 0x08 );
484 static constexpr auto ARC_WRITE_CFG_32 =
static_cast< std::uint32_t
>( 0x09 );
487 static constexpr auto ARC_BUFFER_PROP =
static_cast< std::uint32_t
>( 0x0A );
490 static constexpr auto ARC_MEM_MAP =
static_cast< std::uint32_t
>( 0x0C );
493 static constexpr auto ARC_MEM_UNMAP =
static_cast< std::uint32_t
>( 0x0D );
500 static constexpr auto PCIe_STATUS_CLEAR_ALL =
static_cast< std::uint32_t
>( 0x7F );
565 static constexpr auto ARC_MIN_BAR =
static_cast< std::uint32_t
>( 0 );
568 static constexpr auto ARC_MAX_BAR =
static_cast< std::uint32_t
>( 5 );
577 std::uint32_t getContinuousImageSize(
const std::uint32_t uiImageSize );
586 std::uint32_t smallCamDLoad(
const std::uint32_t uiBoardId,
const std::vector<std::uint32_t>* pvData );
596 void loadGen23ControllerFile(
const std::filesystem::path& tFilename,
bool bValidate,
bool* pAbort =
nullptr );
600 void setByteSwapping(
void );
605 void getLocalConfiguration(
void );
621 static std::unique_ptr<std::vector<arc::gen3::arcDev_t>>
m_pvDevList;
Definition: CArcPCIBase.h:95
Definition: CArcPCIe.h:175
std::function< bool(const std::uint32_t)> fnPCIeStatusReadout
Definition: CArcPCIe.h:518
std::function< void(const std::uint32_t)> m_fnVerify24Bits
Definition: CArcPCIe.h:618
std::function< bool(const std::uint32_t)> fnPCIeStatusIdle
Definition: CArcPCIe.h:524
static std::unique_ptr< std::vector< arc::gen3::arcDev_t > > m_pvDevList
Definition: CArcPCIe.h:621
static std::shared_ptr< std::string[]> m_psDevList
Definition: CArcPCIe.h:624
std::function< bool(const std::uint32_t)> fnPCIeStatusHeaderError
Definition: CArcPCIe.h:542
std::function< std::uint32_t(const std::uint16_t)> m_fnValidDeviceVendorId
Definition: CArcPCIe.h:611
std::function< bool(const std::uint32_t)> fnPCIeStatusControllerReset
Definition: CArcPCIe.h:512
std::function< bool(const std::uint32_t)> fnPCIeStatusFiber2xReceiver
Definition: CArcPCIe.h:548
std::function< bool(const std::uint32_t)> fnPCIeStatusImageReadTimeOut
Definition: CArcPCIe.h:536
std::function< bool(const std::uint32_t)> fnPCIeStatusFiberBConnected
Definition: CArcPCIe.h:560
std::function< bool(const std::uint32_t)> fnPCIeStatusCmdSent
Definition: CArcPCIe.h:530
std::function< bool(const std::uint32_t)> fnPCIeStatusFiberAConnected
Definition: CArcPCIe.h:554
std::function< bool(const std::uint32_t)> fnPCIeStatusReplyRecvd
Definition: CArcPCIe.h:506