AJA NTV2 SDK  18.0.0.2717
NTV2 SDK 18.0.0.2717
ntv2baremetaldriverinterface.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
7 #ifndef NTV2BAREMETALDRIVERINTERFACE_H
8 #define NTV2BAREMETALDRIVERINTERFACE_H
9 
10 #include "ntv2driverinterface.h"
11 #include <assert.h>
12 #include <stdio.h>
13 #include <string.h>
14 #include <string>
15 
16 #define CopyMemory(a,b,c) memcpy((a),(b),(c))
17 
18 // oem dma: save locked pages in a stl::vector
19 #include <vector>
20 typedef std::vector<ULWord *> DMA_LOCKED_VEC;
21 
26 {
27  public:
30 
31  AJA_VIRTUAL bool WriteRegister (const ULWord inRegNum, const ULWord inValue, const ULWord inMask = 0xFFFFFFFF, const ULWord inShift = 0);
32  AJA_VIRTUAL bool ReadRegister (const ULWord inRegNum, ULWord & outValue, const ULWord inMask = 0xFFFFFFFF, const ULWord inShift = 0);
33 
35 
36  AJA_VIRTUAL bool DmaTransfer (const NTV2DMAEngine inDMAEngine,
37  const bool inIsRead,
38  const ULWord inFrameNumber,
39  ULWord * pFrameBuffer,
40  const ULWord inCardOffsetBytes,
41  const ULWord inTotalByteCount,
42  const bool inSynchronous = true);
43 
44  AJA_VIRTUAL bool DmaTransfer (const NTV2DMAEngine inDMAEngine,
45  const bool inIsRead,
46  const ULWord inFrameNumber,
47  ULWord * pFrameBuffer,
48  const ULWord inCardOffsetBytes,
49  const ULWord inTotalByteCount,
50  const ULWord inNumSegments,
51  const ULWord inHostPitchPerSeg,
52  const ULWord inCardPitchPerSeg,
53  const bool inSynchronous = true);
54 
55  AJA_VIRTUAL bool DmaTransfer (const NTV2DMAEngine inDMAEngine,
56  const NTV2Channel inDMAChannel,
57  const bool inTarget,
58  const ULWord inFrameNumber,
59  const ULWord inCardOffsetBytes,
60  const ULWord inByteCount,
61  const ULWord inNumSegments,
62  const ULWord inSegmentHostPitch,
63  const ULWord inSegmentCardPitch,
64  const PCHANNEL_P2P_STRUCT & inP2PData);
65 
66  AJA_VIRTUAL bool ConfigureSubscription (const bool bSubscribe, const INTERRUPT_ENUMS eInterruptType, PULWord & hSubcription)
67  {(void)bSubscribe; (void)eInterruptType; (void)hSubcription; return true;}
68  AJA_VIRTUAL bool ConfigureInterrupt (const bool bEnable, const INTERRUPT_ENUMS eInterruptType);
69  AJA_VIRTUAL bool GetInterruptCount (const INTERRUPT_ENUMS eInterrupt, ULWord & outCount);
70  AJA_VIRTUAL bool WaitForInterrupt (INTERRUPT_ENUMS eInterrupt, ULWord timeOutMs = 68); // default of 68 ms timeout is enough time for 2K at 14.98 HZ
71 
72  AJA_VIRTUAL bool AutoCirculate (AUTOCIRCULATE_DATA &autoCircData);
73  AJA_VIRTUAL bool NTV2Message (NTV2_HEADER * pInOutMessage);
75 
76  AJA_VIRTUAL bool SetupBoard(void);
77 
78  // User allocated buffer methods. Not as fast as driverbuffer methods, but no kernel patch required.
79  AJA_VIRTUAL bool DmaWriteWithOffsets (NTV2DMAEngine DMAEngine, ULWord frameNumber, ULWord * pFrameBuffer,
80  ULWord offsetSrc, ULWord offsetDest, ULWord bytes);
81  AJA_VIRTUAL bool DmaReadWithOffsets (NTV2DMAEngine DMAEngine, ULWord frameNumber, ULWord * pFrameBuffer,
82  ULWord offsetSrc, ULWord offsetDest, ULWord bytes);
83 
84 public:
85 #if !defined(NTV2_DEPRECATE_16_0)
86  AJA_VIRTUAL inline NTV2_SHOULD_BE_DEPRECATED(bool GetStreamingApplication(ULWord & outAppType, int32_t & outPID)) {return CNTV2DriverInterface::GetStreamingApplication(outAppType,outPID);}
87  AJA_VIRTUAL inline NTV2_SHOULD_BE_DEPRECATED(bool GetStreamingApplication(ULWord * pAppType, int32_t * pPID)) {return pAppType && pPID ? CNTV2DriverInterface::GetStreamingApplication(*pAppType,*pPID) : false;}
100  // Driver allocated buffer (DMA performance enhancement, requires bigphysarea patch to kernel)
103 
104  AJA_VIRTUAL NTV2_SHOULD_BE_DEPRECATED(bool DmaReadFrameDriverBuffer (NTV2DMAEngine DMAEngine, ULWord frameNumber, unsigned long dmaBufferFrame,
105  ULWord bytes, ULWord downSample, ULWord linePitch, ULWord poll));
106 
107  AJA_VIRTUAL NTV2_SHOULD_BE_DEPRECATED(bool DmaReadFrameDriverBuffer (NTV2DMAEngine DMAEngine, ULWord frameNumber, unsigned long dmaBufferFrame,
108  ULWord offsetSrc, ULWord offsetDest, ULWord bytes,
109  ULWord downSample, ULWord linePitch, ULWord poll));
110 
111  AJA_VIRTUAL NTV2_SHOULD_BE_DEPRECATED(bool DmaWriteFrameDriverBuffer (NTV2DMAEngine DMAEngine, ULWord frameNumber, unsigned long dmaBufferFrame,
112  ULWord bytes, ULWord poll));
113  AJA_VIRTUAL NTV2_SHOULD_BE_DEPRECATED(bool DmaWriteFrameDriverBuffer (NTV2DMAEngine DMAEngine, ULWord frameNumber, unsigned long dmaBufferFrame,
114  ULWord offsetSrc, ULWord offsetDest, ULWord bytes, ULWord poll));
118 #endif // defined(NTV2_DRIVER_ALLOCATED_BUFFERS)
119 #if !defined(NTV2_DEPRECATE_17_6)
120  AJA_VIRTUAL inline bool NTV2_DEPRECATED_f(HevcSendMessage(HevcMessageHeader* pMsg)) {(void)pMsg; return false;}
121 #endif
122  AJA_VIRTUAL bool SetAudioOutputMode(NTV2_GlobalAudioPlaybackMode mode); // Supported!
124 
125 #if !defined(NTV2_NULL_DEVICE)
126 protected: // PRIVATE METHODS
127  AJA_VIRTUAL bool OpenLocalPhysical (const UWord inDeviceIndex);
128  AJA_VIRTUAL bool CloseLocalPhysical (void);
129 #endif // !defined(NTV2_NULL_DEVICE)
130 
131 protected: // INSTANCE DATA
132  std::string _bitfileDirectory;
134 #if !defined(NTV2_DEPRECATE_16_0)
139  ULWord _BA4MemorySize; // XENA2 only
140 #endif // !defined(NTV2_DEPRECATE_16_0)
141 }; // CNTV2BareMetalDriverInterface
142 
143 #endif // NTV2BAREMETALDRIVERINTERFACE_H
CNTV2BareMetalDriverInterface::OpenLocalPhysical
virtual bool OpenLocalPhysical(const UWord inDeviceIndex)
Opens the local/physical device connection.
Definition: ntv2baremetaldriverinterface.cpp:65
CNTV2BareMetalDriverInterface::_bitfileDirectory
std::string _bitfileDirectory
Definition: ntv2baremetaldriverinterface.h:132
CNTV2BareMetalDriverInterface::GetBA0MemorySize
virtual bool GetBA0MemorySize(ULWord *memSize)
Definition: ntv2baremetaldriverinterface.cpp:464
CNTV2BareMetalDriverInterface::NTV2Message
virtual bool NTV2Message(NTV2_HEADER *pInOutMessage)
Sends a message to the NTV2 driver (the new, improved, preferred way).
Definition: ntv2baremetaldriverinterface.cpp:1075
HANDLE
short HANDLE
Definition: ajatypes.h:338
INTERRUPT_ENUMS
enum _INTERRUPT_ENUMS_ INTERRUPT_ENUMS
CNTV2BareMetalDriverInterface::MapDMADriverBuffer
virtual bool MapDMADriverBuffer()
Definition: ntv2baremetaldriverinterface.cpp:1109
CNTV2BareMetalDriverInterface::UnmapDMADriverBuffer
virtual bool UnmapDMADriverBuffer()
Definition: ntv2baremetaldriverinterface.cpp:1157
NTV2_DriverDebugMessageSet
NTV2_DriverDebugMessageSet
Definition: ntv2enums.h:3814
CNTV2BareMetalDriverInterface::GetInterruptCount
virtual bool GetInterruptCount(const INTERRUPT_ENUMS eInterrupt, ULWord &outCount)
Answers with the number of interrupts of the given type processed by the driver.
Definition: ntv2baremetaldriverinterface.cpp:199
NTV2Channel
NTV2Channel
These enum values are mostly used to identify a specific widget_framestore. They're also commonly use...
Definition: ntv2enums.h:1353
CNTV2BareMetalDriverInterface::_pDMADriverBufferAddress
ULWord * _pDMADriverBufferAddress
Definition: ntv2baremetaldriverinterface.h:135
CNTV2BareMetalDriverInterface::UnmapDNXRegisters
virtual bool UnmapDNXRegisters(void)
Definition: ntv2baremetaldriverinterface.cpp:574
CNTV2BareMetalDriverInterface::_pDNXRegisterBaseAddress
ULWord * _pDNXRegisterBaseAddress
Definition: ntv2baremetaldriverinterface.h:137
CNTV2BareMetalDriverInterface
BareMetal implementation of CNTV2DriverInterface.
Definition: ntv2baremetaldriverinterface.h:25
CNTV2BareMetalDriverInterface::UnmapFrameBuffers
virtual bool UnmapFrameBuffers(void)
Definition: ntv2baremetaldriverinterface.cpp:386
CNTV2BareMetalDriverInterface::_BA4MemorySize
ULWord _BA4MemorySize
Definition: ntv2baremetaldriverinterface.h:139
CNTV2BareMetalDriverInterface::RestoreHardwareProcampRegisters
virtual bool RestoreHardwareProcampRegisters(void)
Definition: ntv2baremetaldriverinterface.cpp:157
CNTV2BareMetalDriverInterface::_BA0MemorySize
ULWord _BA0MemorySize
Definition: ntv2baremetaldriverinterface.h:136
PULWord
uint32_t * PULWord
Definition: ajatypes.h:277
nlohmann::json_abiNLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON_v3_11_NLOHMANN_JSON_VERSION_PATCH::detail::void
j template void())
Definition: json.hpp:4893
CNTV2BareMetalDriverInterface::MapXena2Flash
virtual bool MapXena2Flash(void)
Definition: ntv2baremetaldriverinterface.cpp:484
CNTV2BareMetalDriverInterface::_hDevice
HANDLE _hDevice
Definition: ntv2baremetaldriverinterface.h:133
CNTV2BareMetalDriverInterface::UnmapXena2Flash
virtual bool UnmapXena2Flash(void)
Definition: ntv2baremetaldriverinterface.cpp:520
CNTV2BareMetalDriverInterface::UnmapRegisters
virtual bool UnmapRegisters(void)
Definition: ntv2baremetaldriverinterface.cpp:450
CNTV2BareMetalDriverInterface::ConfigureSubscription
virtual bool ConfigureSubscription(const bool bSubscribe, const INTERRUPT_ENUMS eInterruptType, PULWord &hSubcription)
Definition: ntv2baremetaldriverinterface.h:66
CNTV2BareMetalDriverInterface::~CNTV2BareMetalDriverInterface
virtual ~CNTV2BareMetalDriverInterface()
Definition: ntv2baremetaldriverinterface.cpp:54
NTV2_GlobalAudioPlaybackMode
NTV2_GlobalAudioPlaybackMode
Definition: ntv2enums.h:2102
CNTV2BareMetalDriverInterface::_BA2MemorySize
ULWord _BA2MemorySize
Definition: ntv2baremetaldriverinterface.h:138
NTV2DMAEngine
NTV2DMAEngine
Definition: ntv2enums.h:1852
CNTV2BareMetalDriverInterface::DmaWriteWithOffsets
virtual bool DmaWriteWithOffsets(NTV2DMAEngine DMAEngine, ULWord frameNumber, ULWord *pFrameBuffer, ULWord offsetSrc, ULWord offsetDest, ULWord bytes)
Definition: ntv2baremetaldriverinterface.cpp:1352
CNTV2BareMetalDriverInterface::GetDMANumDriverBuffers
virtual bool GetDMANumDriverBuffers(ULWord *pNumDmaDriverBuffers)
Definition: ntv2baremetaldriverinterface.cpp:1101
CNTV2DriverInterface::GetStreamingApplication
virtual bool GetStreamingApplication(ULWord &outAppType, int32_t &outProcessID)
Answers with the four-CC type and process ID of the application that currently "owns" the AJA device ...
Definition: ntv2driverinterface.cpp:1187
CNTV2BareMetalDriverInterface::CloseLocalPhysical
virtual bool CloseLocalPhysical(void)
Releases host resources associated with the local/physical device connection.
Definition: ntv2baremetaldriverinterface.cpp:99
ULWord
uint32_t ULWord
Definition: ajatypes.h:276
CNTV2BareMetalDriverInterface::SetupBoard
virtual bool SetupBoard(void)
Definition: ntv2baremetaldriverinterface.cpp:312
CNTV2BareMetalDriverInterface::WaitForInterrupt
virtual bool WaitForInterrupt(INTERRUPT_ENUMS eInterrupt, ULWord timeOutMs=68)
Definition: ntv2baremetaldriverinterface.cpp:265
CNTV2BareMetalDriverInterface::AutoCirculate
virtual bool AutoCirculate(AUTOCIRCULATE_DATA &autoCircData)
Sends an AutoCirculate command to the NTV2 driver.
Definition: ntv2baremetaldriverinterface.cpp:844
DMA_LOCKED_VEC
std::vector< ULWord * > DMA_LOCKED_VEC
Definition: ntv2baremetaldriverinterface.h:20
NTV2_HEADER
All new NTV2 structs start with this common header.
Definition: ntv2publicinterface.h:7196
UWord
uint16_t UWord
Definition: ajatypes.h:274
CNTV2BareMetalDriverInterface::DmaReadFrameDriverBuffer
virtual bool DmaReadFrameDriverBuffer(NTV2DMAEngine DMAEngine, ULWord frameNumber, unsigned long dmaBufferFrame, ULWord bytes, ULWord downSample, ULWord linePitch, ULWord poll)
Definition: ntv2baremetaldriverinterface.cpp:1277
DMAEngine
DMAEngine
Definition: ntv2macpublicinterface.h:104
CNTV2BareMetalDriverInterface::CNTV2BareMetalDriverInterface
CNTV2BareMetalDriverInterface()
Definition: ntv2baremetaldriverinterface.cpp:41
AJA_VIRTUAL
#define AJA_VIRTUAL
Definition: ajatypes.h:183
CNTV2BareMetalDriverInterface::WriteRegister
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...
Definition: ntv2baremetaldriverinterface.cpp:141
CNTV2BareMetalDriverInterface::DmaReadWithOffsets
virtual bool DmaReadWithOffsets(NTV2DMAEngine DMAEngine, ULWord frameNumber, ULWord *pFrameBuffer, ULWord offsetSrc, ULWord offsetDest, ULWord bytes)
Definition: ntv2baremetaldriverinterface.cpp:1400
hevcMessageHeader
Definition: ntv2publicinterface.h:10143
NTV2_SHOULD_BE_DEPRECATED
#define NTV2_SHOULD_BE_DEPRECATED(__f__)
Definition: ajatypes.h:544
NTV2_DEPRECATED_f
#define NTV2_DEPRECATED_f(__f__)
Definition: ajatypes.h:577
CNTV2BareMetalDriverInterface::GetAudioOutputMode
virtual bool GetAudioOutputMode(NTV2_GlobalAudioPlaybackMode *mode)
Definition: ntv2baremetaldriverinterface.cpp:1187
false
#define false
Definition: ntv2devicefeatures.h:25
CNTV2BareMetalDriverInterface::ReadRegister
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....
Definition: ntv2baremetaldriverinterface.cpp:127
CNTV2BareMetalDriverInterface::DmaWriteFrameDriverBuffer
virtual bool DmaWriteFrameDriverBuffer(NTV2DMAEngine DMAEngine, ULWord frameNumber, unsigned long dmaBufferFrame, ULWord bytes, ULWord poll)
Definition: ntv2baremetaldriverinterface.cpp:1204
AUTOCIRCULATE_P2P_STRUCT
Definition: ntv2publicinterface.h:4836
CNTV2BareMetalDriverInterface::DmaTransfer
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...
Definition: ntv2baremetaldriverinterface.cpp:598
CNTV2BareMetalDriverInterface::GetBA1MemorySize
virtual bool GetBA1MemorySize(ULWord *memSize)
Definition: ntv2baremetaldriverinterface.cpp:469
CNTV2BareMetalDriverInterface::MapRegisters
virtual bool MapRegisters(void)
Definition: ntv2baremetaldriverinterface.cpp:411
CNTV2BareMetalDriverInterface::MapDNXRegisters
virtual bool MapDNXRegisters(void)
Definition: ntv2baremetaldriverinterface.cpp:537
CNTV2BareMetalDriverInterface::ControlDriverDebugMessages
virtual bool ControlDriverDebugMessages(NTV2_DriverDebugMessageSet msgSet, bool enable)
Definition: ntv2baremetaldriverinterface.cpp:292
CNTV2BareMetalDriverInterface::ConfigureInterrupt
virtual bool ConfigureInterrupt(const bool bEnable, const INTERRUPT_ENUMS eInterruptType)
Definition: ntv2baremetaldriverinterface.cpp:177
CNTV2BareMetalDriverInterface::MapFrameBuffers
virtual bool MapFrameBuffers(void)
Definition: ntv2baremetaldriverinterface.cpp:335
CNTV2BareMetalDriverInterface::GetBA2MemorySize
virtual bool GetBA2MemorySize(ULWord *memSize)
Definition: ntv2baremetaldriverinterface.cpp:474
CNTV2DriverInterface
I'm the base class that undergirds the platform-specific derived classes (from which CNTV2Card is ult...
Definition: ntv2driverinterface.h:60
CNTV2BareMetalDriverInterface::GetDMADriverBufferAddress
virtual bool GetDMADriverBufferAddress(ULWord **pDMADriverBuffer)
Definition: ntv2baremetaldriverinterface.cpp:1143
ntv2driverinterface.h
Declares the CNTV2DriverInterface base class.
CNTV2BareMetalDriverInterface::GetDMADriverBufferPhysicalAddress
virtual bool GetDMADriverBufferPhysicalAddress(ULWord *physAddr)
Definition: ntv2baremetaldriverinterface.cpp:1096
CNTV2BareMetalDriverInterface::GetBA4MemorySize
virtual bool GetBA4MemorySize(ULWord *memSize)
Definition: ntv2baremetaldriverinterface.cpp:479
AUTOCIRCULATE_DATA
Definition: ntv2publicinterface.h:4547