12 #include <sys/ioctl.h> 19 #define HEX2(__x__) "0x" << hex << setw(2) << setfill('0') << (0xFF & uint8_t (__x__)) << dec 20 #define HEX4(__x__) "0x" << hex << setw(4) << setfill('0') << (0xFFFF & uint16_t(__x__)) << dec 21 #define HEX8(__x__) "0x" << hex << setw(8) << setfill('0') << (0xFFFFFFFF & uint32_t(__x__)) << dec 22 #define HEX16(__x__) "0x" << hex << setw(16) << setfill('0') << uint64_t(__x__) << dec 23 #define INSTP(_p_) HEX16(uint64_t(_p_)) 25 #define LDIFAIL(__x__) AJA_sERROR (AJA_DebugUnit_DriverInterface, INSTP(this) << "::" << AJAFUNC << ": " << __x__) 26 #define LDIWARN(__x__) AJA_sWARNING(AJA_DebugUnit_DriverInterface, INSTP(this) << "::" << AJAFUNC << ": " << __x__) 27 #define LDINOTE(__x__) AJA_sNOTICE (AJA_DebugUnit_DriverInterface, INSTP(this) << "::" << AJAFUNC << ": " << __x__) 28 #define LDIINFO(__x__) AJA_sINFO (AJA_DebugUnit_DriverInterface, INSTP(this) << "::" << AJAFUNC << ": " << __x__) 29 #define LDIDBG(__x__) AJA_sDEBUG (AJA_DebugUnit_DriverInterface, INSTP(this) << "::" << AJAFUNC << ": " << __x__) 31 #define AsFrameStampStructPtr(_p_) reinterpret_cast<FRAME_STAMP_STRUCT*>(_p_) 32 #define AsStatusStructPtr(_p_) reinterpret_cast<AUTOCIRCULATE_STATUS_STRUCT*>(_p_) 33 #define AsTransferStatusStruct(_p_) reinterpret_cast<PAUTOCIRCULATE_TRANSFER_STATUS_STRUCT>(_p_) 34 #define AsRoutingTablePtr(_p_) reinterpret_cast<NTV2RoutingTable*>(_p_) 35 #define AsPTaskStruct(_p_) reinterpret_cast<PAUTOCIRCULATE_TASK_STRUCT>(_p_) 36 #define AsPTransferStruct(_p_) reinterpret_cast<PAUTOCIRCULATE_TRANSFER_STRUCT>(_p_) 37 #define AsVoidPtr(_p_) reinterpret_cast<void*>(_p_) 41 : _bitfileDirectory (
"../xilinx")
43 #
if !defined(NTV2_DEPRECATE_16_0)
60 #if !defined(NTV2_NULL_DEVICE) 66 static const string kAJANTV2(
"ajantv2");
74 ostringstream oss; oss <<
"/dev/" << kAJANTV2 <<
DEC(index);
79 if (count == inDeviceIndex)
88 {
LDIFAIL(
"Failed to open device index '" << inDeviceIndex <<
"'");
return false;}
110 #if !defined(NTV2_DEPRECATE_16_0) 113 #endif // !defined(NTV2_DEPRECATE_16_0) 124 #endif // !defined(NTV2_NULL_DEVICE) 136 LDIFAIL(
"Shift " <<
DEC(inShift) <<
" > 31, reg=" <<
DEC(inRegNum) <<
" msk=" <<
xHEX0N(inMask,8));
139 #if defined(NTV2_NUB_CLIENT_SUPPORT) 142 #endif // defined(NTV2_NUB_CLIENT_SUPPORT) 155 {
LDIFAIL(
"IOCTL_NTV2_READ_REGISTER failed");
return false;}
157 #if defined(NTV2_PRETEND_DEVICE) 158 if (inRegNum ==
kRegBoardID && outValue == NTV2_PRETEND_DEVICE_FROM)
159 outValue = NTV2_PRETEND_DEVICE_TO;
162 #endif // NTV2_PRETEND_DEVICE 171 LDIFAIL(
"Shift " <<
DEC(inShift) <<
" > 31, reg=" <<
DEC(inRegNum) <<
" msk=" <<
xHEX0N(inMask,8));
174 #if defined(NTV2_WRITEREG_PROFILING) // Register Write Profiling 182 #endif // defined(NTV2_WRITEREG_PROFILING) // Register Write Profiling 183 #if defined(NTV2_NUB_CLIENT_SUPPORT) 186 #endif // defined(NTV2_NUB_CLIENT_SUPPORT) 188 {
LDIFAIL(
"_hDevice is invalid (0 or -1)");
return false;}
198 {
LDIFAIL(
"IOCTL_NTV2_WRITE_REGISTER failed");
return false;}
208 {
LDIFAIL(
"IOCTL_NTV2_RESTORE_HARDWARE_PROCAMP_REGISTERS failed");
return false;}
228 intrControlStruct.
enable = bEnable;
231 LDIFAIL(
"IOCTL_NTV2_INTERRUPT_CONTROL failed");
264 LDIFAIL(
"Unsupported interrupt count request. Only vertical input interrupts counted.");
277 {
LDIFAIL(
"IOCTL_NTV2_INTERRUPT_CONTROL failed");
return false;}
287 AJA_DebugStat_WaitForInterruptOthers,
AJA_DebugStat_WaitForInterruptOthers,
AJA_DebugStat_WaitForInterruptOthers,
AJA_DebugStat_WaitForInterruptOthers,
AJA_DebugStat_WaitForInterruptOthers,
AJA_DebugStat_WaitForInterruptOthers,
AJA_DebugStat_WaitForInterruptOthers,
AJA_DebugStat_WaitForInterruptOthers,
AJA_DebugStat_WaitForInterruptOthers,
AJA_DebugStat_WaitForInterruptOthers,
320 {
LDIFAIL(
"IOCTL_NTV2_WAITFOR_INTERRUPT failed");
return false;}
322 return waitIntrStruct.
success != 0;
333 cddmStruct.
msgSet = msgSet;
334 cddmStruct.
enable = enable;
337 LDIFAIL(
"IOCTL_NTV2_CONTROL_DRIVER_DEBUG_MESSAGES failed");
340 return cddmStruct.
success != 0;
352 LDIFAIL(
"IOCTL_NTV2_SETUP_BOARD failed");
362 #if !defined(NTV2_DEPRECATE_16_0) 376 LDIFAIL (
"MapFrameBuffers failed - couldn't get BA1MemorySize");
380 if (BA1MemorySize == 0)
382 LDIFAIL (
"BA1MemorySize is 0 -- module loaded with MapFrameBuffers=0?");
383 LDIFAIL (
"PIO mode not available, only driverbuffer DMA.");
399 LDIFAIL (
"MapFrameBuffers failed in call to mmap()");
426 LDIFAIL (
"UnmapFrameBuffers failed - couldn't get BA1MemorySize");
447 LDIFAIL (
"MapRegisters failed - couldn't get BA0MemorySize");
454 LDIFAIL (
"BA0MemorySize is 0, registers not mapped.");
516 LDIFAIL (
"MapXena2Flash failed - couldn't get BA4MemorySize");
522 LDIFAIL (
"MapXena2Flash failed - BA4MemorySize == 0");
529 PROT_READ | PROT_WRITE, MAP_SHARED,
534 LDIFAIL (
"MapXena2Flash(): mmap of BAR4 for PCI Flash failed");
565 LDIFAIL (
"MapDNXRegisters failed - couldn't get BA2MemorySize");
570 LDIFAIL (
"MapDNXRegisters failed - BA2MemorySize == 0");
578 PROT_READ | PROT_WRITE, MAP_SHARED,
584 LDIFAIL (
"MapDNXRegisters failed - couldn't map BAR2");
605 #endif // !defined(NTV2_DEPRECATE_16_0) 615 const ULWord inFrameNumber,
617 const ULWord inOffsetBytes,
619 const bool inSynchronous)
627 buffer, inOffsetBytes, 0,
632 dmaControlBuf.
engine = inDMAEngine;
638 dmaControlBuf.
numBytes = inByteCount;
644 dmaControlBuf.
poll = 0;
645 #if defined(NTV2_DRIVER_ALLOCATED_BUFFERS) 646 ULWord numDmaDriverBuffers;
653 dmaControlBuf.
poll = 0;
655 #endif // defined(NTV2_DRIVER_ALLOCATED_BUFFERS) 659 #define ERRMSG(s) #s " failed" 664 if (inOffsetBytes == 0)
677 if (inOffsetBytes == 0)
691 const int result (ioctl(
int(
_hDevice), request, &dmaControlBuf));
695 LDIFAIL(errMsg <<
" FRM=" << inFrameNumber <<
" ENG=" << inDMAEngine <<
" CNT=" << inByteCount);
703 const ULWord inFrameNumber,
705 const ULWord inOffsetBytes,
707 const ULWord inNumSegments,
710 const bool inIsSynchronous)
718 inNumSegments, inHostPitch, inCardPitch, inIsSynchronous);
720 LDIDBG(
"FRM=" << inFrameNumber <<
" ENG=" << inDMAEngine <<
" NB=" << inByteCount << (inIsRead?
" Rd":
" Wr"));
724 dmaControlBuf.
engine = inDMAEngine;
730 dmaControlBuf.
numBytes = inByteCount;
734 dmaControlBuf.
poll = 0;
735 #if defined(NTV2_DRIVER_ALLOCATED_BUFFERS) 736 ULWord numDmaDriverBuffers(0);
740 if (!inIsSynchronous)
745 #endif // defined(NTV2_DRIVER_ALLOCATED_BUFFERS) 749 #define ERRMSG(s) #s " failed" 781 const int result (ioctl(
int(
_hDevice), request, &dmaControlBuf));
785 LDIFAIL(errMsg <<
" FRM=" << inFrameNumber <<
" ENG=" << inDMAEngine <<
" CNT=" << inByteCount);
794 const bool inIsTarget,
795 const ULWord inFrameNumber,
796 const ULWord inCardOffsetBytes,
798 const ULWord inNumSegments,
799 const ULWord inSegmentHostPitch,
800 const ULWord inSegmentCardPitch,
807 inNumSegments, inSegmentHostPitch, inSegmentCardPitch, inP2PData);
816 ::memset (
AsVoidPtr(&dmaP2PStruct), 0,
sizeof(dmaP2PStruct));
833 dmaP2PStruct.
bRead = inIsTarget;
850 {
LDIFAIL(
"IOCTL error");
return false;}
887 {
LDIFAIL(
"IOCTL_NTV2_AUTOCIRCULATE_CONTROL failed");
return false;}
898 {
LDIFAIL(
"IOCTL_NTV2_AUTOCIRCULATE_STATUS, failed");
return false;}
908 memset(&acFrameStampCombo, 0,
sizeof acFrameStampCombo);
915 {
LDIFAIL(
"IOCTL_NTV2_AUTOCIRCULATE_FRAMESTAMP failed");
return false;}
927 memset(&acFrameStampCombo, 0,
sizeof acFrameStampCombo);
932 acFrameStampCombo.
acTask = *pTask;
937 {
LDIFAIL(
"IOCTL_NTV2_AUTOCIRCULATE_FRAMESTAMP failed");
return false;}
940 *pTask = acFrameStampCombo.
acTask;
951 {
LDIFAIL (
"TransferAutoCirculate failed - audio buffer size not mod 4");
return false;}
952 #if defined(NTV2_DRIVER_ALLOCATED_BUFFERS) 953 ULWord numDmaDriverBuffers;
956 {
LDIFAIL (
"TransferAutoCirculate failed - audio buffer address not mod 4");
return false;}
957 #endif // defined(NTV2_DRIVER_ALLOCATED_BUFFERS) 963 memset((
void*)&acXferCombo, 0,
sizeof acXferCombo);
966 acXferCombo.channelSpec = autoCircData.
channelSpec;
967 acXferCombo.acTransfer = *acTransfer;
968 acXferCombo.acStatus = *acStatus;
969 if (!pXena2RoutingTable)
970 memset(&acXferCombo.acXena2RoutingTable, 0,
sizeof(acXferCombo.acXena2RoutingTable));
972 acXferCombo.acXena2RoutingTable = *pXena2RoutingTable;
979 {
LDIFAIL(
"IOCTL_NTV2_AUTOCIRCULATE_TRANSFER failed");
return false;}
981 *acStatus = acXferCombo.acStatus;
992 {
LDIFAIL (
"TransferAutoCirculate failed - audio buffer size not mod 4");
return false;}
993 #if defined(NTV2_DRIVER_ALLOCATED_BUFFERS) 994 ULWord numDmaDriverBuffers;
996 if ((
unsigned long)acTransfer->
audioBuffer >= numDmaDriverBuffers && (
unsigned long)acTransfer->
audioBuffer % 4)
997 {
LDIFAIL (
"TransferAutoCirculate failed - audio buffer address not mod 4");
return false;}
998 #endif // defined(NTV2_DRIVER_ALLOCATED_BUFFERS) 1004 memset((
void*)&acXferCombo, 0,
sizeof acXferCombo);
1007 acXferCombo.channelSpec = autoCircData.
channelSpec;
1008 acXferCombo.acTransfer = *acTransfer;
1009 acXferCombo.acStatus = *acStatus;
1010 if (!pXena2RoutingTable)
1011 memset(&acXferCombo.acXena2RoutingTable, 0,
sizeof(acXferCombo.acXena2RoutingTable));
1013 acXferCombo.acXena2RoutingTable = *pXena2RoutingTable;
1020 {
LDIFAIL(
"IOCTL_NTV2_AUTOCIRCULATE_TRANSFER failed");
return false;}
1022 *acStatus = acXferCombo.acStatus;
1033 {
LDIFAIL (
"TransferAutoCirculate failed - audio buffer size not mod 4");
return false;}
1034 #if defined(NTV2_DRIVER_ALLOCATED_BUFFERS) 1035 ULWord numDmaDriverBuffers;
1038 {
LDIFAIL (
"TransferAutoCirculate failed - audio buffer address not mod 4");
return false;}
1039 #endif // defined(NTV2_DRIVER_ALLOCATED_BUFFERS) 1045 ::memset(
AsVoidPtr(&acXferCombo), 0,
sizeof(acXferCombo));
1052 if (pXena2RoutingTable)
1055 acXferCombo.
acTask = *pTask;
1062 {
LDIFAIL(
"IOCTL_NTV2_AUTOCIRCULATE_TRANSFER failed");
return false;}
1071 memset(&acFrameStampCombo, 0,
sizeof acFrameStampCombo);
1074 acFrameStampCombo.
acTask = *pTask;
1079 {
LDIFAIL(
"IOCTL_NTV2_AUTOCIRCULATE_CAPTURETASK failed");
return false;}
1084 LDIFAIL(
"Unsupported AC command type in AutoCirculate()");
1104 {
LDIFAIL(
"IOCTL_AJANTV2_MESSAGE failed");
return false;}
1109 #if !defined(NTV2_DEPRECATE_16_0) 1127 ULWord numDmaDriverBuffers;
1130 LDIFAIL(
"GetDMANumDriverBuffers() failed");
1134 if (!numDmaDriverBuffers)
1136 LDIFAIL(
"numDmaDriverBuffers == 0");
1144 PROT_READ | PROT_WRITE,MAP_SHARED,
1171 ULWord numDmaDriverBuffers;
1174 LDIFAIL(
"GetDMANumDriverBuffers() failed");
1177 if (!numDmaDriverBuffers)
1180 LDIFAIL(
"numDmaDriverBuffers == 0");
1188 #endif // !defined(NTV2_DEPRECATE_16_0) 1200 #if !defined(NTV2_DEPRECATE_16_0) 1229 dmaControlBuf.
poll = poll;
1231 {
LDIFAIL(
"IOCTL_NTV2_DMA_WRITE_FRAME failed");
return false;}
1263 dmaControlBuf.
poll = poll;
1265 {
LDIFAIL(
"IOCTL_NTV2_DMA_WRITE_FRAME failed");
return false;}
1297 dmaControlBuf.
linePitch = linePitch == 0 ? 1 : linePitch;
1298 dmaControlBuf.
poll = poll;
1300 static bool bPrintedDownsampleDeprecatedMsg =
false;
1301 if (downSample && !bPrintedDownsampleDeprecatedMsg)
1302 {
LDIWARN(
"downSample is deprecated"); bPrintedDownsampleDeprecatedMsg =
true;}
1305 {
LDIFAIL(
"IOCTL_NTV2_DMA_READ_FRAME failed");
return false;}
1338 if( linePitch == 0 ) linePitch = 1;
1340 dmaControlBuf.
poll = poll;
1342 static bool bPrintedDownsampleDeprecatedMsg =
false;
1343 if (downSample && !bPrintedDownsampleDeprecatedMsg)
1344 {
LDIWARN(
"downSample is deprecated"); bPrintedDownsampleDeprecatedMsg =
true;}
1347 {
LDIFAIL(
"IOCTL_NTV2_DMA_READ_FRAME failed");
return false;}
1350 #endif // !defined(NTV2_DEPRECATE_16_0) 1375 dmaControlBuf.
poll = 0;
1379 #define ERRMSG(s) #s " failed" 1382 if (offsetSrc == 0 && offsetDest == 0)
1393 if (ioctl(
int(
_hDevice), request, &dmaControlBuf))
1394 {
LDIFAIL(errMsg);
return false;}
1422 dmaControlBuf.
poll = 0;
1425 #define ERRMSG(s) #s " failed" 1428 if (offsetSrc == 0 && offsetDest == 0)
1439 if (ioctl(
int(
_hDevice), request, &dmaControlBuf))
1440 {
LDIFAIL(errMsg);
return false;}
Everything needed to call CNTV2Card::ReadRegister or CNTV2Card::WriteRegister functions.
#define AsTransferStatusStruct(_p_)
AUTOCIRCULATE_TRANSFER_STRUCT acTransfer
virtual bool CloseLocalPhysical(void)
Releases host resources associated with the local/physical device connection.
virtual bool DmaReadWithOffsets(NTV2DMAEngine DMAEngine, ULWord frameNumber, ULWord *pFrameBuffer, ULWord offsetSrc, ULWord offsetDest, ULWord bytes)
ULWord * _pRegisterBaseAddress
virtual bool SetupBoard(void)
defined(NTV2_DEPRECATE_17_6)
virtual bool UnmapXena2Flash(void)
virtual bool UnmapDMADriverBuffer()
virtual bool MapRegisters(void)
Declares the AJADebug class.
virtual UWord GetIndexNumber(void) const
virtual bool NTV2Message(NTV2_HEADER *pInOutMessage)
Sends a message to the NTV2 driver (the new, improved, preferred way).
void setDeviceIndexNumber(const UWord num)
ULWord ulVidSegmentCardPitch
ULWord * _pDNXRegisterBaseAddress
virtual bool Close(void)
Closes me, releasing host resources that may have been allocated in a previous Open call...
virtual bool GetDMANumDriverBuffers(ULWord *pNumDmaDriverBuffers)
if(!(riid==IID_IUnknown) &&!(riid==IID_IClassFactory))
NTV2_DriverDebugMessageSet
virtual ULWord GetFrameBufferSize(void) const
#define AsFrameStampStructPtr(_p_)
virtual bool DmaTransfer(const NTV2DMAEngine inDMAEngine, const bool inIsRead, const ULWord inFrameNumber, ULWord *pFrameBuffer, const ULWord inCardOffsetBytes, const ULWord inTotalByteCount, const bool inSynchronous=(!(0)))
Transfers data between the AJA device and the host. This function will block and not return to the ca...
NTV2Channel
These enum values are mostly used to identify a specific widget_framestore. They're also commonly use...
virtual bool DmaReadFrameDriverBuffer(NTV2DMAEngine DMAEngine, ULWord frameNumber, unsigned long dmaBufferFrame, ULWord bytes, ULWord downSample, ULWord linePitch, ULWord poll)
static const uint32_t sIntEnumToStatKeys[]
#define AsRoutingTablePtr(_p_)
#define NTV2_ASSERT(_expr_)
virtual bool NTV2DMATransferRemote(const NTV2DMAEngine inDMAEngine, const bool inIsRead, const ULWord inFrameNumber, NTV2Buffer &inOutBuffer, const ULWord inCardOffsetBytes, const ULWord inNumSegments, const ULWord inSegmentHostPitch, const ULWord inSegmentCardPitch, const bool inSynchronous)
virtual bool RestoreHardwareProcampRegisters(void)
static AJAStatus StatTimerStop(const uint32_t inKey)
virtual bool GetInterruptCount(const INTERRUPT_ENUMS eInterrupt, ULWord &outCount)
Answers with the number of interrupts of the given type processed by the driver.
virtual bool IsRemote(void) const
AUTOCIRCULATE_TASK_STRUCT acTask
NTV2DeviceID
Identifies a specific AJA NTV2 device model number. The NTV2DeviceID is actually the PROM part number...
NTV2DeviceID _boardID
My cached device ID.
virtual bool IsOpen(void) const
virtual ~CNTV2LinuxDriverInterface()
bool _boardOpened
True if I'm open and connected to the device.
virtual void BumpEventCount(const INTERRUPT_ENUMS eInterruptType)
Atomically increments the event count tally for the given interrupt type.
#define AsPTransferStruct(_p_)
ULWord64 ullVideoBusAddress
AUTOCIRCULATE_TRANSFER_STATUS_STRUCT acStatus
virtual bool ReadRegister(const ULWord inRegNum, ULWord &outValue, const ULWord inMask=0xFFFFFFFF, const ULWord inShift=0)
Reads all or part of the 32-bit contents of a specific register (real or virtual) on the AJA device...
virtual bool GetDMADriverBufferPhysicalAddress(ULWord *physAddr)
virtual bool ControlDriverDebugMessages(NTV2_DriverDebugMessageSet msgSet, bool enable)
enum _INTERRUPT_ENUMS_ INTERRUPT_ENUMS
virtual bool MapXena2Flash(void)
bool mRecordRegWrites
True if recording; otherwise false when not recording.
virtual bool AutoCirculate(AUTOCIRCULATE_DATA &autoCircData)
Sends an AutoCirculate command to the NTV2 driver.
All new NTV2 structs start with this common header.
AJALock mRegWritesLock
Guard mutex for mRegWrites.
#define AsPTaskStruct(_p_)
virtual bool DmaWriteWithOffsets(NTV2DMAEngine DMAEngine, ULWord frameNumber, ULWord *pFrameBuffer, ULWord offsetSrc, ULWord offsetDest, ULWord bytes)
INTERRUPT_ENUMS eInterruptType
NTV2_GlobalAudioPlaybackMode
CNTV2LinuxDriverInterface()
NTV2Crosspoint channelSpec
virtual bool WriteRegister(const ULWord inRegNum, const ULWord inValue, const ULWord inMask=0xFFFFFFFF, const ULWord inShift=0)
Updates or replaces all or part of the 32-bit contents of a specific register (real or virtual) on th...
virtual bool NTV2Message(NTV2_HEADER *pInMessage)
Sends a message to the NTV2 driver (the new, improved, preferred way).
Describes a user-space buffer on the host computer. I have an address and a length, plus some optional attributes (allocated by SDK?, page-aligned? etc.).
static AJAStatus StatTimerStart(const uint32_t inKey)
std::string NTV2DeviceIDToString(const NTV2DeviceID inValue, const bool inForRetailDisplay=false)
ULWord * _pXena2FlashBaseAddress
NTV2_DriverDebugMessageSet msgSet
virtual bool UnmapRegisters(void)
virtual bool UnmapFrameBuffers(void)
struct AUTOCIRCULATE_P2P_STRUCT CHANNEL_P2P_STRUCT
FRAME_STAMP_STRUCT acFrameStamp
bool NTV2DeviceIsDirectAddressable(const NTV2DeviceID inDeviceID)
ULWord * _pFrameBaseAddress
virtual bool GetBA4MemorySize(ULWord *memSize)
ULWord64 messageBusAddress
virtual bool GetBA0MemorySize(ULWord *memSize)
INTERRUPT_ENUMS eInterruptType
virtual bool ConfigureInterrupt(const bool bEnable, const INTERRUPT_ENUMS eInterruptType)
virtual bool DmaTransfer(const NTV2DMAEngine inDMAEngine, const bool inIsRead, const ULWord inFrameNumber, ULWord *pFrameBuffer, const ULWord inCardOffsetBytes, const ULWord inTotalByteCount, const bool inSynchronous=(!(0)))
Transfers data between the AJA device and the host. This function will block and not return to the ca...
ULWord ulVidSegmentHostPitch
Declares numerous NTV2 utility functions.
virtual bool UnmapDNXRegisters(void)
virtual bool WaitForInterrupt(INTERRUPT_ENUMS eInterrupt, ULWord timeOutMs=68)
virtual bool MapDNXRegisters(void)
ULWord videoSegmentHostPitch
ULWord * _pCh1FrameBaseAddress
AUTO_CIRC_COMMAND eCommand
#define NTV2_UNUSED(__p__)
Specifies channel or FrameStore 1 (or the first item).
ULWord64 ullMessageBusAddress
#define xHEX0N(__x__, __n__)
virtual bool GetBA2MemorySize(ULWord *memSize)
virtual bool SetAudioOutputMode(NTV2_GlobalAudioPlaybackMode mode)
virtual bool WaitForInterrupt(const INTERRUPT_ENUMS eInterrupt, const ULWord timeOutMs=68)
#define INVALID_HANDLE_VALUE
Declares the CNTV2LinuxDriverInterface class.
virtual bool GetBA1MemorySize(ULWord *memSize)
NTV2RoutingTable acXena2RoutingTable
Types and defines shared between NTV2 user application interface and Linux device driver...
virtual bool ReadRegister(const ULWord inRegNum, ULWord &outValue, const ULWord inMask=0xFFFFFFFF, const ULWord inShift=0)
Reads all or part of the 32-bit contents of a specific register (real or virtual) on the AJA device...
virtual bool WriteRegister(const ULWord inRegNum, const ULWord inValue, const ULWord inMask=0xFFFFFFFF, const ULWord inShift=0)
Updates or replaces all or part of the 32-bit contents of a specific register (real or virtual) on th...
#define AsStatusStructPtr(_p_)
virtual bool OpenLocalPhysical(const UWord inDeviceIndex)
Opens the local/physical device connection.
AUTOCIRCULATE_TASK_STRUCT acTask
NTV2RegisterWrites mRegWrites
Stores WriteRegister data.
bool mSkipRegWrites
True if actual register writes are skipped while recording.
NTV2RPCAPI * _pRPCAPI
Points to remote or software device interface; otherwise NULL for local physical device.
virtual bool MapDMADriverBuffer()
virtual bool MapFrameBuffers(void)
ULWord * _pDMADriverBufferAddress
NTV2Crosspoint channelSpec
NTV2Crosspoint channelSpec
ULWord videoSegmentCardPitch
virtual bool GetDMADriverBufferAddress(ULWord **pDMADriverBuffer)
virtual bool AutoCirculate(AUTOCIRCULATE_DATA &pAutoCircData)
Sends an AutoCirculate command to the NTV2 driver.
virtual bool DmaWriteFrameDriverBuffer(NTV2DMAEngine DMAEngine, ULWord frameNumber, unsigned long dmaBufferFrame, ULWord bytes, ULWord poll)
virtual bool GetAudioOutputMode(NTV2_GlobalAudioPlaybackMode *mode)