AJA NTV2 SDK  17.0.1.1246
NTV2 SDK 17.0.1.1246
ntv2baremetaldriverinterface.cpp
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
9 #include "ntv2utils.h"
10 #include "ajabase/system/debug.h"
11 #include "ajabase/system/file_io.h"
12 //#include <fcntl.h>
13 //#include <sys/ioctl.h>
14 //#include <sys/mman.h>
15 
16 using namespace std;
17 
18 
19 // BareMetalDriverInterface Logging Macros
20 #define HEX2(__x__) "0x" << hex << setw(2) << setfill('0') << (0xFF & uint8_t (__x__)) << dec
21 #define HEX4(__x__) "0x" << hex << setw(4) << setfill('0') << (0xFFFF & uint16_t(__x__)) << dec
22 #define HEX8(__x__) "0x" << hex << setw(8) << setfill('0') << (0xFFFFFFFF & uint32_t(__x__)) << dec
23 #define HEX16(__x__) "0x" << hex << setw(16) << setfill('0') << uint64_t(__x__) << dec
24 #define INSTP(_p_) HEX16(uint64_t(_p_))
25 
26 #define LDIFAIL(__x__) AJA_sERROR (AJA_DebugUnit_DriverInterface, INSTP(this) << "::" << AJAFUNC << ": " << __x__)
27 #define LDIWARN(__x__) AJA_sWARNING(AJA_DebugUnit_DriverInterface, INSTP(this) << "::" << AJAFUNC << ": " << __x__)
28 #define LDINOTE(__x__) AJA_sNOTICE (AJA_DebugUnit_DriverInterface, INSTP(this) << "::" << AJAFUNC << ": " << __x__)
29 #define LDIINFO(__x__) AJA_sINFO (AJA_DebugUnit_DriverInterface, INSTP(this) << "::" << AJAFUNC << ": " << __x__)
30 #define LDIDBG(__x__) AJA_sDEBUG (AJA_DebugUnit_DriverInterface, INSTP(this) << "::" << AJAFUNC << ": " << __x__)
31 
32 #define AsFrameStampStructPtr(_p_) reinterpret_cast<FRAME_STAMP_STRUCT*>(_p_)
33 #define AsStatusStructPtr(_p_) reinterpret_cast<AUTOCIRCULATE_STATUS_STRUCT*>(_p_)
34 #define AsTransferStatusStruct(_p_) reinterpret_cast<PAUTOCIRCULATE_TRANSFER_STATUS_STRUCT>(_p_)
35 #define AsRoutingTablePtr(_p_) reinterpret_cast<NTV2RoutingTable*>(_p_)
36 #define AsPTaskStruct(_p_) reinterpret_cast<PAUTOCIRCULATE_TASK_STRUCT>(_p_)
37 #define AsPTransferStruct(_p_) reinterpret_cast<PAUTOCIRCULATE_TRANSFER_STRUCT>(_p_)
38 #define AsVoidPtr(_p_) reinterpret_cast<void*>(_p_)
39 
40 
42  : _bitfileDirectory ("../xilinx")
43  ,_hDevice (INVALID_HANDLE_VALUE)
44 #if !defined(NTV2_DEPRECATE_16_0)
45  ,_pDMADriverBufferAddress (AJA_NULL)
46  ,_BA0MemorySize (0)
47  ,_pDNXRegisterBaseAddress (AJA_NULL)
48  ,_BA2MemorySize (0)
49  ,_BA4MemorySize (0)
50 #endif // !defined(NTV2_DEPRECATE_16_0)
51 {
52 }
53 
55 {
56  if (IsOpen())
57  Close();
58 }
59 
60 
61 #if !defined(NTV2_NULL_DEVICE)
62 // Board Open / Close methods
66 {
67  NTV2_ASSERT(!IsRemote());
68  NTV2_ASSERT(!IsOpen());
69 
70  if (inDeviceIndex != 0) {
71  LDIFAIL("Invalid device index " << inDeviceIndex);
72  return false;
73  }
74  _boardNumber = inDeviceIndex;
75  const NTV2DeviceIDSet legalDeviceIDs(::NTV2GetSupportedDevices());
77  {
78  LDIFAIL ("ReadRegister failed for 'kRegBoardID': ndx=" << inDeviceIndex << " hDev=" << _hDevice << " id=" << HEX8(_boardID));
80  {
81  LDIFAIL ("ReadReg retry failed for 'kRegBoardID': ndx=" << inDeviceIndex << " hDev=" << _hDevice << " id=" << HEX8(_boardID));
82  Close();
83  return false;
84  }
85  LDIDBG("Retry succeeded: ndx=" << _boardNumber << " hDev=" << _hDevice << " id=" << ::NTV2DeviceIDToString(_boardID));
86  }
87  if (legalDeviceIDs.find(_boardID) == legalDeviceIDs.end())
88  {
89  LDIFAIL("Unsupported boardID=" << HEX8(_boardID) << " ndx=" << inDeviceIndex << " hDev=" << _hDevice);
90  Close();
91  return false;
92  }
93  _boardOpened = true;
94  LDIINFO ("Opened device, devID=" << HEX8(_boardID) << " ndx=" << DEC(_boardNumber));
95  return true;
96 }
97 
98 
100 {
101 #if 0
102  NTV2_ASSERT(!IsRemote());
103  NTV2_ASSERT(IsOpen());
105 
106 #if !defined(NTV2_DEPRECATE_16_0)
107  UnmapXena2Flash();
109 #endif // !defined(NTV2_DEPRECATE_16_0)
110 
111  LDIINFO ("Closed deviceID=" << HEX8(_boardID) << " ndx=" << DEC(_boardNumber) << " hDev=" << _hDevice);
115  _boardOpened = false;
116 #endif
117  return true;
118 }
119 #endif // !defined(NTV2_NULL_DEVICE)
120 
121 
123 // Read and Write Register methods
125 
126 
127 bool CNTV2BareMetalDriverInterface::ReadRegister (const ULWord inRegNum, ULWord & outValue, const ULWord inMask, const ULWord inShift)
128 {
129  if (inShift >= 32)
130  {
131  LDIFAIL("Shift " << DEC(inShift) << " > 31, reg=" << DEC(inRegNum) << " msk=" << xHEX0N(inMask,8));
132  return false;
133  }
134  outValue = (*(uint32_t *)(0x80000000+4*inRegNum) & inMask) >> inShift;
135 // printf("read reg - 0x%08lX = 0x%08lX (0x%08lX) %08lX/%d\n", inRegNum,
136 // *(uint32_t *)(4*inRegNum), outValue, inMask, inShift);
137  return true;
138 }
139 
140 
141 bool CNTV2BareMetalDriverInterface::WriteRegister (const ULWord inRegNum, const ULWord inValue, const ULWord inMask, const ULWord inShift)
142 {
143  if (inShift >= 32)
144  {
145  LDIFAIL("Shift " << DEC(inShift) << " > 31, reg=" << DEC(inRegNum) << " msk=" << xHEX0N(inMask,8));
146  return false;
147  }
148  uint32_t val = *(uint32_t *)(0x80000000+4*inRegNum);
149  val &= ~inMask;
150  val |= (inValue << inShift) & inMask;
151 // printf("write reg - 0x%08lX at 0x%08lX = 0x%08lX (0x%08lX) %08lX/%d\n", inRegNum,
152 // 4*inRegNum, val, inValue, inMask, inShift);
153  *(uint32_t *)(0x80000000+4*inRegNum) = val;
154  return true;
155 }
156 
158 {
159 #if 0
160  if (IsRemote())
161  return false;
164  {LDIFAIL("IOCTL_NTV2_RESTORE_HARDWARE_PROCAMP_REGISTERS failed"); return false;}
165 #endif
166  return true;
167 }
168 
170 // Interrupt enabling / disabling method
172 
173 // Method: ConfigureInterrupt
174 // Input: bool bEnable (turn on/off interrupt), INTERRUPT_ENUMS eInterruptType
175 // Output: bool status
176 // Purpose: Provides a 1 point connection to driver for interrupt calls
177 bool CNTV2BareMetalDriverInterface::ConfigureInterrupt (const bool bEnable, const INTERRUPT_ENUMS eInterruptType)
178 {
179 #if 0
181  NTV2_INTERRUPT_CONTROL_STRUCT intrControlStruct;
182  memset(&intrControlStruct, 0, sizeof(NTV2_INTERRUPT_CONTROL_STRUCT)); // Suppress valgrind error
183  intrControlStruct.eInterruptType = eInterruptType;
184  intrControlStruct.enable = bEnable;
185  if (ioctl(int(_hDevice), IOCTL_NTV2_INTERRUPT_CONTROL, &intrControlStruct))
186  {
187  LDIFAIL("IOCTL_NTV2_INTERRUPT_CONTROL failed");
188  return false;
189  }
190  return true;
191 #else
192  return false;
193 #endif
194 }
195 
196 // Method: getInterruptCount
197 // Input: INTERRUPT_ENUMS eInterruptType. Currently only output vertical interrupts are supported.
198 // Output: ULWord or equivalent(i.e. ULWord).
200 {
201 #if 0
203  if ( eInterruptType != eVerticalInterrupt
204  && eInterruptType != eInput1
205  && eInterruptType != eInput2
206  && eInterruptType != eInput3
207  && eInterruptType != eInput4
208  && eInterruptType != eInput5
209  && eInterruptType != eInput6
210  && eInterruptType != eInput7
211  && eInterruptType != eInput8
212  && eInterruptType != eOutput2
213  && eInterruptType != eOutput3
214  && eInterruptType != eOutput4
215  && eInterruptType != eOutput5
216  && eInterruptType != eOutput6
217  && eInterruptType != eOutput7
218  && eInterruptType != eOutput8
219  && eInterruptType != eAuxVerticalInterrupt
220  )
221  {
222  LDIFAIL("Unsupported interrupt count request. Only vertical input interrupts counted.");
223  return false;
224  }
225 
226  NTV2_INTERRUPT_CONTROL_STRUCT intrControlStruct;
227  memset(&intrControlStruct, 0, sizeof(NTV2_INTERRUPT_CONTROL_STRUCT));// Suppress valgrind error
228  intrControlStruct.eInterruptType = eGetIntCount;
229  intrControlStruct.interruptCount = eInterruptType;
230 
232  const int result (ioctl(int(_hDevice), IOCTL_NTV2_INTERRUPT_CONTROL, &intrControlStruct));
234  if (result)
235  {LDIFAIL("IOCTL_NTV2_INTERRUPT_CONTROL failed"); return false;}
236 
237  outCount = intrControlStruct.interruptCount;
238  return true;
239 #else
240  return false;
241 #endif
242 }
243 
244 static const uint32_t sIntEnumToStatKeys[] = { AJA_DebugStat_WaitForInterruptOut1, // eOutput1 // 0
246  AJA_DebugStat_WaitForInterruptIn1, // eInput1 // 2
247  AJA_DebugStat_WaitForInterruptIn2, // eInput2 // 3
249  AJA_DebugStat_WaitForInterruptUartTx1, // eUart1Tx // 14
250  AJA_DebugStat_WaitForInterruptUartRx1, // eUart1Rx // 15
252  AJA_DebugStat_WaitForInterruptIn3, // eInput3 // 24
253  AJA_DebugStat_WaitForInterruptIn4, // eInput4 // 25
254  AJA_DebugStat_WaitForInterruptUartTx2, // eUartTx2 // 26
255  AJA_DebugStat_WaitForInterruptUartRx2, // eUartRx2 // 27
257  AJA_DebugStat_WaitForInterruptIn5, // eInput5 // 29
258  AJA_DebugStat_WaitForInterruptIn6, // eInput6 // 30
259  AJA_DebugStat_WaitForInterruptIn7, // eInput7 // 31
260  AJA_DebugStat_WaitForInterruptIn8, // eInput8 // 32
262 
263 // Method: WaitForInterrupt
264 // Output: True on successs, false on failure (ioctl failed or interrupt didn't happen)
266 {
267 #if 0
268  if (IsRemote())
269  return CNTV2DriverInterface::WaitForInterrupt(eInterrupt, timeOutMs);
270 
272 
273  NTV2_WAITFOR_INTERRUPT_STRUCT waitIntrStruct;
274  waitIntrStruct.eInterruptType = eInterrupt;
275  waitIntrStruct.timeOutMs = timeOutMs;
276  waitIntrStruct.success = 0; // Assume failure
277 
279  const int result (ioctl(int(_hDevice), IOCTL_NTV2_WAITFOR_INTERRUPT, &waitIntrStruct));
281  if (result)
282  {LDIFAIL("IOCTL_NTV2_WAITFOR_INTERRUPT failed"); return false;}
283  BumpEventCount (eInterrupt);
284  return waitIntrStruct.success != 0;
285 #else
286  return false;
287 #endif
288 }
289 
290 // Method: ControlDriverDebugMessages
291 // Output: True on successs, false on failure (ioctl failed or interrupt didn't happen)
293 {
294 #if 0
297  cddmStruct.msgSet = msgSet;
298  cddmStruct.enable = enable;
299  if (ioctl(int(_hDevice), IOCTL_NTV2_CONTROL_DRIVER_DEBUG_MESSAGES, &cddmStruct))
300  {
301  LDIFAIL("IOCTL_NTV2_CONTROL_DRIVER_DEBUG_MESSAGES failed");
302  return false;
303  }
304  return cddmStruct.success != 0;
305 #else
306  return false;
307 #endif
308 }
309 
310 // Method: SetupBoard
311 // Output: True on successs, false on failure (ioctl failed or interrupt didn't happen)
313 {
314 #if 0
316  if (ioctl(int(_hDevice), IOCTL_NTV2_SETUP_BOARD, 0, 0)) // Suppress valgrind errors
317  {
318  LDIFAIL("IOCTL_NTV2_SETUP_BOARD failed");
319  return false;
320  }
321  return true;
322 #else
323  return false;
324 #endif
325 }
326 
328 // OEM Mapping to Userspace Methods
330 
331 #if !defined(NTV2_DEPRECATE_16_0)
332  // Method: MapFrameBuffers
333  // Input: None
334  // Output: bool, and sets member _pBaseFrameAddress
336  {
337 #if 0
338  if (!IsOpen())
339  return false;
340  if (!_pFrameBaseAddress)
341  {
342  // Get memory window size from driver
343  ULWord BA1MemorySize;
344  if (!GetBA1MemorySize(&BA1MemorySize))
345  {
346  LDIFAIL ("MapFrameBuffers failed - couldn't get BA1MemorySize");
347  return false;
348  }
349 
350  if (BA1MemorySize == 0)
351  {
352  LDIFAIL ("BA1MemorySize is 0 -- module loaded with MapFrameBuffers=0?");
353  LDIFAIL ("PIO mode not available, only driverbuffer DMA.");
354  return false;
355  }
356 
357  // If BA1MemorySize is 0, then the module was loaded with MapFrameBuffers=0
358  // and PIO mode is not available.
359 
360  // Map the memory. For Xena(da) boards, the window will be the same size as the amount of
361  // memory on the Xena card. For Xena(mm) cards, it will be a window which is selected using
362  // SetPCIAccessFrame().
363  //
364  // the offset of 0 in the call to mmap tells mmap to map BAR1 which is the framebuffers.
365  _pFrameBaseAddress = reinterpret_cast<ULWord*>(mmap(AJA_NULL, BA1MemorySize, PROT_READ | PROT_WRITE, MAP_SHARED, int(_hDevice), 0));
366  if (_pFrameBaseAddress == MAP_FAILED)
367  {
369  LDIFAIL ("MapFrameBuffers failed in call to mmap()");
370  return false;
371  }
372 
373  // Set the CH1 and CH2 frame base addresses for cards that require them.
374  ULWord boardIDRegister;
375  ReadRegister(kRegBoardID, boardIDRegister); //unfortunately GetBoardID is in ntv2card...ooops.
376  if ( ! ::NTV2DeviceIsDirectAddressable(NTV2DeviceID(boardIDRegister)))
378  }
379 #endif
380  return true;
381  }
382 
383  // Method: UnmapFrameBuffers
384  // Input: None
385  // Output: bool status
387  {
388 #if 0
389  if (!_pFrameBaseAddress)
390  return true;
391  if (!IsOpen())
392  return false;
393 
394  // Get memory window size from driver
395  ULWord BA1MemorySize;
396  if (!GetBA1MemorySize(&BA1MemorySize))
397  {
398  LDIFAIL ("UnmapFrameBuffers failed - couldn't get BA1MemorySize");
399  return false;
400  }
401  if (_pFrameBaseAddress)
402  munmap(_pFrameBaseAddress, BA1MemorySize);
404 #endif
405  return true;
406  }
407 
408  // Method: MapRegisters
409  // Input: None
410  // Output: bool, and sets member _pBaseFrameAddress
412  {
413 #if 0
414  if (!IsOpen())
415  return false;
417  {
418  // Get register window size from driver
420  {
421  LDIFAIL ("MapRegisters failed - couldn't get BA0MemorySize");
423  return false;
424  }
425 
426  if (!_BA0MemorySize)
427  {
428  LDIFAIL ("BA0MemorySize is 0, registers not mapped.");
430  return false;
431  }
432 
433  // the offset of 0x1000 in the call to mmap tells mmap to map BAR0 which is the registers.
434  // 2.4 kernel interprets offset as number of pages, so 0x1000 works. This won't work on a 2.2
435  // kernel
436  _pRegisterBaseAddress = reinterpret_cast<ULWord*>(mmap(AJA_NULL,_BA0MemorySize,PROT_READ | PROT_WRITE,MAP_SHARED,_hDevice,0x1000));
437  if (_pRegisterBaseAddress == MAP_FAILED)
438  {
440  return false;
441  }
442  }
443 #endif
444  return true;
445  }
446 
447  // Method: UnmapRegisters
448  // Input: None
449  // Output: bool status
451  {
452 #if 0
453  if (!IsOpen())
454  return false;
456  return true;
460 #endif
461  return true;
462  }
463 
465  {
466  return memSize ? ReadRegister (kVRegBA0MemorySize, *memSize) : false;
467  }
468 
470  {
471  return memSize ? ReadRegister (kVRegBA1MemorySize, *memSize) : false;
472  }
473 
475  {
476  return memSize ? ReadRegister (kVRegBA2MemorySize, *memSize) : false;
477  }
478 
480  {
481  return memSize ? ReadRegister (kVRegBA4MemorySize, *memSize) : false;
482  }
483 
485  {
486 #if 0
487  if (!IsOpen())
488  return false;
489  ULWord BA4MemorySize;
491  {
492  if ( !GetBA4MemorySize(&BA4MemorySize) )
493  {
494  LDIFAIL ("MapXena2Flash failed - couldn't get BA4MemorySize");
496  return false;
497  }
498  if (!BA4MemorySize)
499  {
500  LDIFAIL ("MapXena2Flash failed - BA4MemorySize == 0");
502  return false;
503  }
504  _BA4MemorySize = BA4MemorySize;
505  // 0x4000 is a page offset magic token passed into the driver mmap callback that ends up mapping the right stuff
506  _pXena2FlashBaseAddress = reinterpret_cast<ULWord*>(mmap(AJA_NULL, BA4MemorySize,
507  PROT_READ | PROT_WRITE, MAP_SHARED,
508  int(_hDevice), 0x4000));
509  if (_pXena2FlashBaseAddress == MAP_FAILED)
510  {
512  LDIFAIL ("MapXena2Flash(): mmap of BAR4 for PCI Flash failed");
513  return false;
514  }
515  }
516 #endif
517  return true;
518  }
519 
521  {
522 #if 0
524  return true;
525  if (!IsOpen())
526  return false;
528  {
530  _BA4MemorySize = 0;
531  }
533 #endif
534  return false;
535  }
536 
538  {
539 #if 0
540  ULWord BA2MemorySize;
541  if (!IsOpen())
542  return false;
544  {
545  if (!GetBA2MemorySize(&BA2MemorySize))
546  {
547  LDIFAIL ("MapDNXRegisters failed - couldn't get BA2MemorySize");
548  return false;
549  }
550  if (!BA2MemorySize)
551  {
552  LDIFAIL ("MapDNXRegisters failed - BA2MemorySize == 0");
553  return false;
554  }
555  _BA2MemorySize = BA2MemorySize;
556 
557  // 0x8000 is a page offset magic token passed into the driver mmap callback
558  // that ends up mapping the right stuff
559  _pDNXRegisterBaseAddress = reinterpret_cast<ULWord*>(mmap (AJA_NULL, BA2MemorySize,
560  PROT_READ | PROT_WRITE, MAP_SHARED,
561  int(_hDevice), 0x8000));
562  if (_pDNXRegisterBaseAddress == MAP_FAILED)
563  {
565  _BA2MemorySize = 0;
566  LDIFAIL ("MapDNXRegisters failed - couldn't map BAR2");
567  return false;
568  }
569  }
570 #endif
571  return true;
572  }
573 
575  {
576 #if 0
578  return true;
579  if (!IsOpen())
580  return false;
582  {
584  _BA2MemorySize = 0;
585  }
587 #endif
588  return false;
589  }
590 #endif // !defined(NTV2_DEPRECATE_16_0)
591 
592 
594 // DMA
595 //
596 // Note: Asynchronous DMA only available with driver-allocated buffers.
597 
599  const bool inIsRead,
600  const ULWord inFrameNumber,
601  ULWord * pFrameBuffer,
602  const ULWord inOffsetBytes,
603  const ULWord inByteCount,
604  const bool inSynchronous)
605 {
606  uint8_t *mem = (uint8_t *)*(uint32_t *)(0x80000000+4*0x3442);
607  printf("%08lx\n", mem);
608  memcpy(mem, pFrameBuffer, inByteCount);
609 #if 0
610  if (IsRemote())
611  return CNTV2DriverInterface::DmaTransfer(inDMAEngine, inIsRead, inFrameNumber, pFrameBuffer,
612  inOffsetBytes, inByteCount, inSynchronous);
613  if (!IsOpen())
614  return false;
615 
616  NTV2_DMA_CONTROL_STRUCT dmaControlBuf;
617  dmaControlBuf.engine = inDMAEngine;
618  dmaControlBuf.dmaChannel = NTV2_CHANNEL1;
619  dmaControlBuf.frameNumber = inFrameNumber;
620  dmaControlBuf.frameBuffer = pFrameBuffer;
621  dmaControlBuf.frameOffsetSrc = inIsRead ? inOffsetBytes : 0;
622  dmaControlBuf.frameOffsetDest = inIsRead ? 0 : inOffsetBytes;
623  dmaControlBuf.numBytes = inByteCount;
624 
625  // The following are used only for driver-created buffers.
626  // Set them to known values.
627  dmaControlBuf.downSample = 0; // Not applicable to this mode
628  dmaControlBuf.linePitch = 1; // Not applicable to this mode
629  dmaControlBuf.poll = 0;
630 #if defined(NTV2_DRIVER_ALLOCATED_BUFFERS)
631  ULWord numDmaDriverBuffers;
632  GetDMANumDriverBuffers(&numDmaDriverBuffers);
633  if (ULWord64(pFrameBuffer) >= ULWord64(numDmaDriverBuffers))
634  {
635  // Can't poll with usermode allocated buffer
636  if (!inSynchronous)
637  return false;
638  dmaControlBuf.poll = 0;
639  }
640 #endif // defined(NTV2_DRIVER_ALLOCATED_BUFFERS)
641 
642  int request;
643  const char *errMsg(AJA_NULL);
644 #define ERRMSG(s) #s " failed"
645 
646  // Usermode buffer stuff
647  if (inIsRead) // Reading?
648  {
649  if (inOffsetBytes == 0) // Frame ( or field 0? )
650  {
651  request = IOCTL_NTV2_DMA_READ_FRAME;
653  }
654  else // Field 1
655  {
656  request = IOCTL_NTV2_DMA_READ;
657  errMsg = ERRMSG(IOCTL_NTV2_DMA_READ);
658  }
659  }
660  else // Writing
661  {
662  if (inOffsetBytes == 0) // Frame ( or field 0? )
663  {
664  request = IOCTL_NTV2_DMA_WRITE_FRAME;
666  }
667  else // Field 1
668  {
669  request = IOCTL_NTV2_DMA_WRITE;
670  errMsg = ERRMSG(IOCTL_NTV2_DMA_WRITE);
671  }
672  }
673 
674  // TODO: Stick the IOCTL code inside the dmaControlBuf and collapse 4 IOCTLs into one.
676  const int result (ioctl(int(_hDevice), request, &dmaControlBuf));
678  if (result)
679  {
680  LDIFAIL(errMsg);
681  return false;
682  }
683 #endif
684  return true;
685 }
686 
688  const bool inIsRead,
689  const ULWord inFrameNumber,
690  ULWord * pFrameBuffer,
691  const ULWord inOffsetBytes,
692  const ULWord inByteCount,
693  const ULWord inNumSegments,
694  const ULWord inHostPitch,
695  const ULWord inCardPitch,
696  const bool inIsSynchronous)
697 {
698 #if 0
699  if (!IsOpen())
700  return false;
701 
702  LDIDBG("FRM=" << inFrameNumber << " ENG=" << inDMAEngine << " NB=" << inByteCount << (inIsRead?" Rd":" Wr"));
703 
704  // NOTE: BareMetal driver assumes driver buffers to be used if pFrameBuffer < numDmaDriverBuffers
705  NTV2_DMA_SEGMENT_CONTROL_STRUCT dmaControlBuf;
706  dmaControlBuf.engine = inDMAEngine;
707  dmaControlBuf.frameNumber = inFrameNumber;
708  dmaControlBuf.frameBuffer = pFrameBuffer;
709  dmaControlBuf.frameOffsetSrc = inIsRead ? inOffsetBytes : 0;
710  dmaControlBuf.frameOffsetDest = inIsRead ? 0 : inOffsetBytes;
711  dmaControlBuf.numBytes = inByteCount;
712  dmaControlBuf.videoNumSegments = inNumSegments;
713  dmaControlBuf.videoSegmentHostPitch = inHostPitch;
714  dmaControlBuf.videoSegmentCardPitch = inCardPitch;
715  dmaControlBuf.poll = 0;
716 #if defined(NTV2_DRIVER_ALLOCATED_BUFFERS)
717  ULWord numDmaDriverBuffers(0);
718  GetDMANumDriverBuffers(&numDmaDriverBuffers);
719  if (ULWord(ULWord64(pFrameBuffer)) >= numDmaDriverBuffers)
720  {
721  if (!inIsSynchronous)
722  return false; // Async mode requires kernel-allocated buffer
723  }
724 #endif // defined(NTV2_DRIVER_ALLOCATED_BUFFERS)
725 
726  int request(0);
727  const char *errMsg(AJA_NULL);
728 #define ERRMSG(s) #s " failed"
729 
730  // Usermode buffer stuff
731  // TODO: Stick the IOCTL code inside the dmaControlBuf and collapse 4 IOCTLs into one.
732  if (inIsRead) // Reading?
733  {
734  if (!inOffsetBytes) // Frame ( or field 0? )
735  {
738  }
739  else // Field 1
740  {
741  request = IOCTL_NTV2_DMA_READ_SEGMENT;
743  }
744  }
745  else // Writing
746  {
747  if (!inOffsetBytes) // Frame ( or field 0? )
748  {
751  }
752  else // Field 1
753  {
756  }
757  }
758 
760  const int result (ioctl(int(_hDevice), request, &dmaControlBuf));
762  if (result)
763  {
764  LDIFAIL(errMsg);
765  return false;
766  }
767 #endif
768  return true;
769 }
770 
771 
773  const NTV2Channel inDMAChannel,
774  const bool inIsTarget,
775  const ULWord inFrameNumber,
776  const ULWord inCardOffsetBytes,
777  const ULWord inByteCount,
778  const ULWord inNumSegments,
779  const ULWord inSegmentHostPitch,
780  const ULWord inSegmentCardPitch,
781  const PCHANNEL_P2P_STRUCT & inP2PData)
782 {
783 #if 0
784  if (!IsOpen())
785  return false;
786  if (IsRemote())
787  return CNTV2DriverInterface::DmaTransfer (inDMAEngine, inDMAChannel, inIsTarget, inFrameNumber, inCardOffsetBytes, inByteCount,
788  inNumSegments, inSegmentHostPitch, inSegmentCardPitch, inP2PData);
789  if (!inP2PData)
790  {
791  LDIFAIL( "P2PData is NULL" );
792  return false;
793  }
794 
795  // Information to be sent to the driver
796  NTV2_DMA_P2P_CONTROL_STRUCT dmaP2PStruct;
797  ::memset (AsVoidPtr(&dmaP2PStruct), 0, sizeof(dmaP2PStruct));
798  if (inIsTarget)
799  {
800  // reset info to be passed back to the user
801  ::memset (AsVoidPtr(inP2PData), 0, sizeof(CHANNEL_P2P_STRUCT));
802  inP2PData->p2pSize = sizeof(CHANNEL_P2P_STRUCT);
803  }
804  else
805  {
806  // check for valid p2p struct
807  if (inP2PData->p2pSize != sizeof(CHANNEL_P2P_STRUCT))
808  {
809  LDIFAIL("p2pSize=" << DEC(inP2PData->p2pSize) << " != sizeof(CHANNEL_P2P_STRUCT) " << DEC(sizeof(CHANNEL_P2P_STRUCT)));
810  return false;
811  }
812  }
813 
814  dmaP2PStruct.bRead = inIsTarget;
815  dmaP2PStruct.dmaEngine = inDMAEngine;
816  dmaP2PStruct.dmaChannel = inDMAChannel;
817  dmaP2PStruct.ulFrameNumber = inFrameNumber;
818  dmaP2PStruct.ulFrameOffset = inCardOffsetBytes;
819  dmaP2PStruct.ulVidNumBytes = inByteCount;
820  dmaP2PStruct.ulVidNumSegments = inNumSegments;
821  dmaP2PStruct.ulVidSegmentHostPitch = inSegmentHostPitch;
822  dmaP2PStruct.ulVidSegmentCardPitch = inSegmentCardPitch;
823  dmaP2PStruct.ullVideoBusAddress = inP2PData->videoBusAddress;
824  dmaP2PStruct.ullMessageBusAddress = inP2PData->messageBusAddress;
825  dmaP2PStruct.ulVideoBusSize = inP2PData->videoBusSize;
826  dmaP2PStruct.ulMessageData = inP2PData->messageData;
828  const int result (ioctl(int(_hDevice), IOCTL_NTV2_DMA_P2P, &dmaP2PStruct));
830  if (result)
831  {LDIFAIL("IOCTL error"); return false;}
832 
833  // fill in p2p data
834  inP2PData->videoBusAddress = dmaP2PStruct.ullVideoBusAddress;
835  inP2PData->messageBusAddress = dmaP2PStruct.ullMessageBusAddress;
836  inP2PData->videoBusSize = dmaP2PStruct.ulVideoBusSize;
837  inP2PData->messageData = dmaP2PStruct.ulMessageData;
838 #endif
839  return true;
840 }
841 
843 // AutoCirculate
845 {
846 #if 0
847  if (IsRemote())
848  return CNTV2DriverInterface::AutoCirculate(autoCircData);
849  if (!IsOpen())
850  return false;
851 
852  int result(1);
853  switch (autoCircData.eCommand)
854  {
855  case eInitAutoCirc:
856  case eStartAutoCirc:
857  case eStopAutoCirc:
858  case eAbortAutoCirc:
859  case ePauseAutoCirc:
860  case eFlushAutoCirculate:
862  // Pass the autoCircData structure to the driver.
863  // The driver knows the implicit meanings of the
864  // members of the structure based on the the
865  // command contained within it.
867  result = ioctl(int(_hDevice), IOCTL_NTV2_AUTOCIRCULATE_CONTROL, &autoCircData);
869  if (result)
870  {LDIFAIL("IOCTL_NTV2_AUTOCIRCULATE_CONTROL failed"); return false;}
871  return true;
872 
873  case eGetAutoCirc:
874  // Pass the autoCircStatus structure to the driver.
875  // It will read the channel spec contained within and
876  // fill out the status structure accordingly.
878  result = ioctl(int(_hDevice), IOCTL_NTV2_AUTOCIRCULATE_STATUS, AsStatusStructPtr(autoCircData.pvVal1));
880  if (result)
881  {LDIFAIL("IOCTL_NTV2_AUTOCIRCULATE_STATUS, failed"); return false;}
882  return true;
883 
884  case eGetFrameStamp:
885  {
886  // Pass the frameStamp structure to the driver.
887  // It will read the channel spec and frame number
888  // contained within and fill out the status structure
889  // accordingly.
890  AUTOCIRCULATE_FRAME_STAMP_COMBO_STRUCT acFrameStampCombo;
891  memset(&acFrameStampCombo, 0, sizeof acFrameStampCombo);
892  FRAME_STAMP_STRUCT* pFrameStamp = AsFrameStampStructPtr(autoCircData.pvVal1);
893  acFrameStampCombo.acFrameStamp = *pFrameStamp;
895  result = ioctl(int(_hDevice), IOCTL_NTV2_AUTOCIRCULATE_FRAMESTAMP, &acFrameStampCombo);
897  if (result)
898  {LDIFAIL("IOCTL_NTV2_AUTOCIRCULATE_FRAMESTAMP failed"); return false;}
899  *pFrameStamp = acFrameStampCombo.acFrameStamp;
900  return true;
901  }
902 
903  case eGetFrameStampEx2:
904  {
905  // Pass the frameStamp structure to the driver.
906  // It will read the channel spec and frame number
907  // contained within and fill out the status structure
908  // accordingly.
909  AUTOCIRCULATE_FRAME_STAMP_COMBO_STRUCT acFrameStampCombo;
910  memset(&acFrameStampCombo, 0, sizeof acFrameStampCombo);
911  FRAME_STAMP_STRUCT* pFrameStamp = AsFrameStampStructPtr(autoCircData.pvVal1);
912  PAUTOCIRCULATE_TASK_STRUCT pTask = AsPTaskStruct(autoCircData.pvVal2);
913  acFrameStampCombo.acFrameStamp = *pFrameStamp;
914  if (pTask)
915  acFrameStampCombo.acTask = *pTask;
917  result = ioctl(int(_hDevice), IOCTL_NTV2_AUTOCIRCULATE_FRAMESTAMP, &acFrameStampCombo);
919  if (result)
920  {LDIFAIL("IOCTL_NTV2_AUTOCIRCULATE_FRAMESTAMP failed"); return false;}
921  *pFrameStamp = acFrameStampCombo.acFrameStamp;
922  if (pTask)
923  *pTask = acFrameStampCombo.acTask;
924  return true;
925  }
926 
928  {
929  PAUTOCIRCULATE_TRANSFER_STRUCT acTransfer = AsPTransferStruct(autoCircData.pvVal1);
930  // If doing audio, insure buffer alignment is OK
931  if (acTransfer->audioBufferSize)
932  {
933  if (acTransfer->audioBufferSize % 4)
934  {LDIFAIL ("TransferAutoCirculate failed - audio buffer size not mod 4"); return false;}
935 #if defined(NTV2_DRIVER_ALLOCATED_BUFFERS)
936  ULWord numDmaDriverBuffers;
937  GetDMANumDriverBuffers(&numDmaDriverBuffers);
938  if (ULWord64(acTransfer->audioBuffer) >= ULWord64(numDmaDriverBuffers) && ULWord64(acTransfer->audioBuffer) % 4)
939  {LDIFAIL ("TransferAutoCirculate failed - audio buffer address not mod 4"); return false;}
940 #endif // defined(NTV2_DRIVER_ALLOCATED_BUFFERS)
941  }
942 
943  // Can't pass multiple pointers in a single ioctl, so combine
944  // them into a single structure and include channel spec too.
946  memset((void*)&acXferCombo, 0, sizeof acXferCombo);
948  NTV2RoutingTable *pXena2RoutingTable = AsRoutingTablePtr(autoCircData.pvVal3);
949  acXferCombo.channelSpec = autoCircData.channelSpec;
950  acXferCombo.acTransfer = *acTransfer;
951  acXferCombo.acStatus = *acStatus;
952  if (!pXena2RoutingTable)
953  memset(&acXferCombo.acXena2RoutingTable, 0, sizeof(acXferCombo.acXena2RoutingTable));
954  else
955  acXferCombo.acXena2RoutingTable = *pXena2RoutingTable;
956 
957  // Do the transfer
959  result = ioctl(int(_hDevice), IOCTL_NTV2_AUTOCIRCULATE_TRANSFER, &acXferCombo);
961  if (result)
962  {LDIFAIL("IOCTL_NTV2_AUTOCIRCULATE_TRANSFER failed"); return false;}
963  // Copy the results back into the status buffer we were given
964  *acStatus = acXferCombo.acStatus;
965  return true;
966  }
967 
969  {
970  PAUTOCIRCULATE_TRANSFER_STRUCT acTransfer = AsPTransferStruct(autoCircData.pvVal1);
971  // If doing audio, insure buffer alignment is OK
972  if (acTransfer->audioBufferSize)
973  {
974  if (acTransfer->audioBufferSize % 4)
975  {LDIFAIL ("TransferAutoCirculate failed - audio buffer size not mod 4"); return false;}
976 #if defined(NTV2_DRIVER_ALLOCATED_BUFFERS)
977  ULWord numDmaDriverBuffers;
978  GetDMANumDriverBuffers(&numDmaDriverBuffers);
979  if ((unsigned long)acTransfer->audioBuffer >= numDmaDriverBuffers && (unsigned long)acTransfer->audioBuffer % 4)
980  {LDIFAIL ("TransferAutoCirculate failed - audio buffer address not mod 4"); return false;}
981 #endif // defined(NTV2_DRIVER_ALLOCATED_BUFFERS)
982  }
983 
984  // Can't pass multiple pointers in a single ioctl, so combine
985  // them into a single structure and include channel spec too.
987  memset((void*)&acXferCombo, 0, sizeof acXferCombo);
989  NTV2RoutingTable *pXena2RoutingTable = AsRoutingTablePtr(autoCircData.pvVal3);
990  acXferCombo.channelSpec = autoCircData.channelSpec;
991  acXferCombo.acTransfer = *acTransfer;
992  acXferCombo.acStatus = *acStatus;
993  if (!pXena2RoutingTable)
994  memset(&acXferCombo.acXena2RoutingTable, 0, sizeof(acXferCombo.acXena2RoutingTable));
995  else
996  acXferCombo.acXena2RoutingTable = *pXena2RoutingTable;
997 
998  // Do the transfer
1000  result = ioctl(int(_hDevice), IOCTL_NTV2_AUTOCIRCULATE_TRANSFER, &acXferCombo);
1002  if (result)
1003  {LDIFAIL("IOCTL_NTV2_AUTOCIRCULATE_TRANSFER failed"); return false;}
1004  // Copy the results back into the status buffer we were given
1005  *acStatus = acXferCombo.acStatus;
1006  return true;
1007  }
1008 
1010  {
1011  PAUTOCIRCULATE_TRANSFER_STRUCT acTransfer = AsPTransferStruct(autoCircData.pvVal1);
1012  // If doing audio, insure buffer alignment is OK
1013  if (acTransfer->audioBufferSize)
1014  {
1015  if (acTransfer->audioBufferSize % 4)
1016  {LDIFAIL ("TransferAutoCirculate failed - audio buffer size not mod 4"); return false;}
1017 #if defined(NTV2_DRIVER_ALLOCATED_BUFFERS)
1018  ULWord numDmaDriverBuffers;
1019  GetDMANumDriverBuffers(&numDmaDriverBuffers);
1020  if (ULWord64(acTransfer->audioBuffer) >= ULWord64(numDmaDriverBuffers) && ULWord(acTransfer->audioBuffer) % 4)
1021  {LDIFAIL ("TransferAutoCirculate failed - audio buffer address not mod 4"); return false;}
1022 #endif // defined(NTV2_DRIVER_ALLOCATED_BUFFERS)
1023  }
1024 
1025  // Can't pass multiple pointers in a single ioctl, so combine
1026  // them into a single structure and include channel spec too.
1028  ::memset(AsVoidPtr(&acXferCombo), 0, sizeof(acXferCombo));
1030  NTV2RoutingTable * pXena2RoutingTable = AsRoutingTablePtr(autoCircData.pvVal3);
1031  PAUTOCIRCULATE_TASK_STRUCT pTask = AsPTaskStruct(autoCircData.pvVal4);
1032  acXferCombo.channelSpec = autoCircData.channelSpec;
1033  acXferCombo.acTransfer = *acTransfer;
1034  acXferCombo.acStatus = *acStatus;
1035  if (pXena2RoutingTable)
1036  acXferCombo.acXena2RoutingTable = *pXena2RoutingTable;
1037  if (pTask)
1038  acXferCombo.acTask = *pTask;
1039 
1040  // Do the transfer
1042  result = ioctl(int(_hDevice), IOCTL_NTV2_AUTOCIRCULATE_TRANSFER, &acXferCombo);
1044  if (result)
1045  {LDIFAIL("IOCTL_NTV2_AUTOCIRCULATE_TRANSFER failed"); return false;}
1046  // Copy the results back into the status buffer we were given
1047  *acStatus = acXferCombo.acStatus;
1048  return true;
1049  }
1050 
1051  case eSetCaptureTask:
1052  {
1053  AUTOCIRCULATE_FRAME_STAMP_COMBO_STRUCT acFrameStampCombo;
1054  memset(&acFrameStampCombo, 0, sizeof acFrameStampCombo);
1055  PAUTOCIRCULATE_TASK_STRUCT pTask = AsPTaskStruct(autoCircData.pvVal1);
1056  acFrameStampCombo.acFrameStamp.channelSpec = autoCircData.channelSpec;
1057  acFrameStampCombo.acTask = *pTask;
1059  result = ioctl(int(_hDevice), IOCTL_NTV2_AUTOCIRCULATE_CAPTURETASK, &acFrameStampCombo);
1061  if (result)
1062  {LDIFAIL("IOCTL_NTV2_AUTOCIRCULATE_CAPTURETASK failed"); return false;}
1063  return true;
1064  }
1065 
1066  default:
1067  LDIFAIL("Unsupported AC command type in AutoCirculate()");
1068  break;
1069  } // switch
1070 #endif
1071  return false;
1072 }
1073 
1074 
1076 {
1077 #if 0
1078  if (!pInMessage)
1079  return false; // NULL message pointer
1080 
1081  if (IsRemote())
1082  return CNTV2DriverInterface::NTV2Message(pInMessage); // Implement NTV2Message on nub
1083 
1086  const int result (ioctl(int(_hDevice), IOCTL_AJANTV2_MESSAGE, pInMessage));
1088  if (result)
1089  {LDIFAIL("IOCTL_AJANTV2_MESSAGE failed"); return false;}
1090 #endif
1091  return true;
1092 }
1093 
1095 {
1096 #if 0
1097  if (!pMessage)
1098  return false; // NULL message pointer
1100  return false;
1101  if (_hDevice == 0)
1102  return false;
1104  const int result = ioctl(int(_hDevice), IOCTL_HEVC_MESSAGE, pMessage);
1106  if (result)
1107  {LDIFAIL("IOCTL_AJANTV2_MESSAGE failed"); return false;}
1108 #endif
1109  return true;
1110 }
1111 
1112 
1113 #if !defined(NTV2_DEPRECATE_16_0)
1115  {
1116  return physAddr ? ReadRegister (kVRegDMADriverBufferPhysicalAddress, *physAddr) : false;
1117  }
1118 
1120  {
1121  return pNumDmaDriverBuffers ? ReadRegister (kVRegNumDmaDriverBuffers, *pNumDmaDriverBuffers) : false;
1122  }
1123 
1124  // Method: MapDMADriverBuffer(Maps 8 Frames worth of memory from kernel space to user space.
1125  // Input:
1126  // Output:
1128  {
1129 #if 0
1131  {
1132  ULWord numDmaDriverBuffers;
1133  if (!GetDMANumDriverBuffers(&numDmaDriverBuffers))
1134  {
1135  LDIFAIL("GetDMANumDriverBuffers() failed");
1136  return false;
1137  }
1138 
1139  if (!numDmaDriverBuffers)
1140  {
1141  LDIFAIL("numDmaDriverBuffers == 0");
1142  return false;
1143  }
1144 
1145  // the offset of 0x2000 in the call to mmap tells mmap to map the DMA Buffer into user space
1146  // 2.4 kernel interprets offset as number of pages, so 0x2000 works. This won't work on a 2.2
1147  // kernel
1148  _pDMADriverBufferAddress = reinterpret_cast<ULWord*>(mmap (AJA_NULL, GetFrameBufferSize() * numDmaDriverBuffers,
1149  PROT_READ | PROT_WRITE,MAP_SHARED,
1150  _hDevice, 0x2000));
1151  if (_pDMADriverBufferAddress == MAP_FAILED)
1152  {
1154  return false;
1155  }
1156  }
1157 #endif
1158  return true;
1159  }
1160 
1162  {
1163 #if 0
1165  if (!MapDMADriverBuffer())
1166  return false;
1167  *pDMADriverBufferAddress = _pDMADriverBufferAddress;
1168 #endif
1169  return true;
1170  }
1171 
1172  // Method: UnmapDMADriverBuffer
1173  // Input: NONE
1174  // Output: NONE
1176  {
1177 #if 0
1179  {
1180  ULWord numDmaDriverBuffers;
1181  if (!GetDMANumDriverBuffers(&numDmaDriverBuffers))
1182  {
1183  LDIFAIL("GetDMANumDriverBuffers() failed");
1184  return false;
1185  }
1186  if (!numDmaDriverBuffers)
1187  {
1188 
1189  LDIFAIL("numDmaDriverBuffers == 0");
1190  return false;
1191  }
1192  munmap(_pDMADriverBufferAddress, GetFrameBufferSize() * numDmaDriverBuffers);
1193  }
1195 #endif
1196  return true;
1197  }
1198 #endif // !defined(NTV2_DEPRECATE_16_0)
1199 
1201 {
1203 }
1204 
1206 {
1208 }
1209 
1210 #if !defined(NTV2_DEPRECATE_16_0)
1211  // Method: DmaBufferWriteFrameDriverBuffer
1212  // NTV2DMAEngine - DMAEngine
1213  // ULWord frameNumber(0 .. NUM_FRAMEBUFFERS-1)
1214  // ULWord dmaBufferFrame(0 .. numDmaDriverBuffers-1)
1215  // ULWord bytes - number of bytes to dma
1216  // ULWord poll - 0=block 1=return immediately and poll
1217  // via register 48
1218  // When the board is opened the driver allocates
1219  // a user-definable number of frames for dmaing
1220  // This allows dma's to be done without scatter/gather
1221  // which should help performance.
1222  bool CNTV2BareMetalDriverInterface::DmaWriteFrameDriverBuffer (NTV2DMAEngine DMAEngine, ULWord frameNumber, unsigned long dmaBufferFrame, ULWord bytes, ULWord poll)
1223  {
1224 #if 0
1225  if (IsRemote())
1226  return false;
1227  if (!IsOpen())
1228  return false;
1229 
1230  NTV2_DMA_CONTROL_STRUCT dmaControlBuf;
1231  dmaControlBuf.engine = DMAEngine;
1232  dmaControlBuf.dmaChannel = NTV2_CHANNEL1;
1233  dmaControlBuf.frameNumber = frameNumber;
1234  dmaControlBuf.frameBuffer = PULWord(dmaBufferFrame);
1235  dmaControlBuf.frameOffsetSrc = 0;
1236  dmaControlBuf.frameOffsetDest = 0;
1237  dmaControlBuf.numBytes = bytes;
1238  dmaControlBuf.downSample = 0;
1239  dmaControlBuf.linePitch = 0;
1240  dmaControlBuf.poll = poll;
1241  if (ioctl(int(_hDevice), IOCTL_NTV2_DMA_WRITE_FRAME, &dmaControlBuf))
1242  {LDIFAIL("IOCTL_NTV2_DMA_WRITE_FRAME failed"); return false;}
1243 #endif
1244  return true;
1245  }
1246 
1247  // Method: DmaBufferWriteFrameDriverBuffer
1248  // NTV2DMAEngine - DMAEngine
1249  // ULWord frameNumber(0-NUM_FRAMEBUFFERS-1)
1250  // ULWord dmaBufferFrame(0 .. numDmaDriverBuffers-1)
1251  // ULWord bytes - number of bytes to dma
1252  // ULWord poll - 0=block 1=return immediately and poll
1253  // via register 48
1254  // When the board is opened the driver allocates
1255  // a user-definable number of frames for dmaing
1256  // This allows dma's to be done without scatter/gather
1257  // which should help performance.
1258  bool CNTV2BareMetalDriverInterface::DmaWriteFrameDriverBuffer (NTV2DMAEngine DMAEngine, ULWord frameNumber, unsigned long dmaBufferFrame, ULWord offsetSrc, ULWord offsetDest, ULWord bytes, ULWord poll)
1259  {
1260 #if 0
1261  if (IsRemote())
1262  return false;
1263  if (!IsOpen())
1264  return false;
1265 
1266  NTV2_DMA_CONTROL_STRUCT dmaControlBuf;
1267  dmaControlBuf.engine = DMAEngine;
1268  dmaControlBuf.dmaChannel = NTV2_CHANNEL1;
1269  dmaControlBuf.frameNumber = frameNumber;
1270  dmaControlBuf.frameBuffer = PULWord(dmaBufferFrame);
1271  dmaControlBuf.frameOffsetSrc = offsetSrc;
1272  dmaControlBuf.frameOffsetDest = offsetDest;
1273  dmaControlBuf.numBytes = bytes;
1274  dmaControlBuf.downSample = 0;
1275  dmaControlBuf.linePitch = 0;
1276  dmaControlBuf.poll = poll;
1277  if (ioctl(int(_hDevice), IOCTL_NTV2_DMA_WRITE_FRAME, &dmaControlBuf))
1278  {LDIFAIL("IOCTL_NTV2_DMA_WRITE_FRAME failed"); return false;}
1279 #endif
1280  return true;
1281  }
1282 
1283 
1284  // Method: DmaBufferReadFrameDriverBuffer
1285  // NTV2DMAEngine - DMAEngine
1286  // ULWord frameNumber(0-NUM_FRAMEBUFFERS-1)
1287  // ULWord dmaBufferFrame(0 .. numDmaDriverBuffers-1)
1288  // ULWord bytes - number of bytes to dma
1289  // ULWord poll - 0=block 1=return immediately and poll
1290  // via register 48
1291  // When the board is opened the driver allocates
1292  // a user-definable number of frames for dmaing
1293  // This allows dma's to be done without scatter/gather
1294  // which should help performance.
1295  bool CNTV2BareMetalDriverInterface::DmaReadFrameDriverBuffer (NTV2DMAEngine DMAEngine, ULWord frameNumber, unsigned long dmaBufferFrame, ULWord bytes, ULWord downSample, ULWord linePitch, ULWord poll)
1296  {
1297 #if 0
1298  if (IsRemote())
1299  return false;
1300  if (!IsOpen())
1301  return false;
1302 
1303  NTV2_DMA_CONTROL_STRUCT dmaControlBuf;
1304  dmaControlBuf.engine = DMAEngine;
1305  dmaControlBuf.dmaChannel = NTV2_CHANNEL1;
1306  dmaControlBuf.frameNumber = frameNumber;
1307  dmaControlBuf.frameBuffer = PULWord(dmaBufferFrame);
1308  dmaControlBuf.frameOffsetSrc = 0;
1309  dmaControlBuf.frameOffsetDest = 0;
1310  dmaControlBuf.numBytes = bytes;
1311  dmaControlBuf.downSample = downSample;
1312  dmaControlBuf.linePitch = linePitch == 0 ? 1 : linePitch;
1313  dmaControlBuf.poll = poll;
1314 
1315  static bool bPrintedDownsampleDeprecatedMsg = false;
1316  if (downSample && !bPrintedDownsampleDeprecatedMsg)
1317  {LDIWARN("downSample is deprecated"); bPrintedDownsampleDeprecatedMsg = true;}
1318 
1319  if (ioctl(int(_hDevice), IOCTL_NTV2_DMA_READ_FRAME, &dmaControlBuf))
1320  {LDIFAIL("IOCTL_NTV2_DMA_READ_FRAME failed"); return false;}
1321 #endif
1322  return true;
1323  }
1324 
1325  // Method: DmaBufferReadFrameDriverBuffer
1326  // NTV2DMAEngine - DMAEngine
1327  // ULWord frameNumber(0-NUM_FRAMEBUFFERS-1)
1328  // ULWord dmaBufferFrame(0 .. numDmaDriverBuffers-1)
1329  // ULWord bytes - number of bytes to dma
1330  // ULWord poll - 0=block 1=return immediately and poll
1331  // via register 48
1332  // When the board is opened the driver allocates
1333  // a user-definable number of frames for dmaing
1334  // This allows dma's to be done without scatter/gather
1335  // which should help performance.
1337  ULWord offsetSrc, ULWord offsetDest, ULWord bytes,
1338  ULWord downSample, ULWord linePitch, ULWord poll)
1339  {
1340 #if 0
1341  if (IsRemote())
1342  return false;
1343  if (!IsOpen())
1344  return false;
1345 
1346  NTV2_DMA_CONTROL_STRUCT dmaControlBuf;
1347  dmaControlBuf.engine = DMAEngine;
1348  dmaControlBuf.dmaChannel = NTV2_CHANNEL1;
1349  dmaControlBuf.frameNumber = frameNumber;
1350  dmaControlBuf.frameBuffer = PULWord(dmaBufferFrame);
1351  dmaControlBuf.frameOffsetSrc = offsetSrc;
1352  dmaControlBuf.frameOffsetDest = offsetDest;
1353  dmaControlBuf.numBytes = bytes;
1354  dmaControlBuf.downSample = downSample;
1355  if( linePitch == 0 ) linePitch = 1;
1356  dmaControlBuf.linePitch = linePitch;
1357  dmaControlBuf.poll = poll;
1358 
1359  static bool bPrintedDownsampleDeprecatedMsg = false;
1360  if (downSample && !bPrintedDownsampleDeprecatedMsg)
1361  {LDIWARN("downSample is deprecated"); bPrintedDownsampleDeprecatedMsg = true;}
1362 
1363  if (ioctl(int(_hDevice), IOCTL_NTV2_DMA_READ_FRAME, &dmaControlBuf))
1364  {LDIFAIL("IOCTL_NTV2_DMA_READ_FRAME failed"); return false;}
1365 #endif
1366  return true;
1367  }
1368 #endif // !defined(NTV2_DEPRECATE_16_0)
1369 
1371  ULWord offsetSrc, ULWord offsetDest, ULWord bytes)
1372 {
1373 #if 0
1374  // return DmaTransfer (DMAEngine, false, frameNumber, pFrameBuffer, (ULWord) 0, bytes, bSync);
1375  if (IsRemote())
1376  return false;
1377  if (!IsOpen())
1378  return false;
1379  // NOTE: BareMetal driver assumes driver buffers to be used if
1380  // pFrameBuffer < numDmaDriverBuffers
1381  NTV2_DMA_CONTROL_STRUCT dmaControlBuf;
1382  dmaControlBuf.engine = DMAEngine;
1383  dmaControlBuf.dmaChannel = NTV2_CHANNEL1;
1384  dmaControlBuf.frameNumber = frameNumber;
1385  dmaControlBuf.frameBuffer = pFrameBuffer;
1386  dmaControlBuf.frameOffsetSrc = offsetSrc;
1387  dmaControlBuf.frameOffsetDest = offsetDest;
1388  dmaControlBuf.numBytes = bytes;
1389 
1390  // The following are used only for driver-created buffers.
1391  // Set them to known values.
1392  dmaControlBuf.downSample = 0; // Not applicable to this mode
1393  dmaControlBuf.linePitch = 1; // Not applicable to this mode
1394  dmaControlBuf.poll = 0; // currently can't poll with a usermode allocated dma buffer
1395 
1396  ULWord request;
1397  const char *errMsg = AJA_NULL;
1398 #define ERRMSG(s) #s " failed"
1399 
1400  // Usermode buffer stuff
1401  if (offsetSrc == 0 && offsetDest == 0) // Frame ( or field 0? )
1402  {
1403  request = IOCTL_NTV2_DMA_WRITE_FRAME;
1405  }
1406  else // Field 1 or audio
1407  {
1408  request = IOCTL_NTV2_DMA_WRITE;
1409  errMsg = ERRMSG(IOCTL_NTV2_DMA_WRITE);
1410  }
1411 
1412  if (ioctl(int(_hDevice), request, &dmaControlBuf))
1413  {LDIFAIL(errMsg); return false;}
1414 #endif
1415  return true;
1416 }
1417 
1419  ULWord offsetSrc, ULWord offsetDest, ULWord bytes)
1420 {
1421 #if 0
1422  // return DmaTransfer (DMAEngine, false, frameNumber, pFrameBuffer, (ULWord) 0, bytes, bSync);
1423  if (IsRemote())
1424  return false;
1425  if (!IsOpen())
1426  return false;
1427 
1428  // NOTE: BareMetal driver assumes driver buffers to be used if
1429  // pFrameBuffer < numDmaDriverBuffers
1430  NTV2_DMA_CONTROL_STRUCT dmaControlBuf;
1431  dmaControlBuf.engine = DMAEngine;
1432  dmaControlBuf.dmaChannel = NTV2_CHANNEL1;
1433  dmaControlBuf.frameNumber = frameNumber;
1434  dmaControlBuf.frameBuffer = pFrameBuffer;
1435  dmaControlBuf.frameOffsetSrc = offsetSrc;
1436  dmaControlBuf.frameOffsetDest = offsetDest;
1437  dmaControlBuf.numBytes = bytes;
1438 
1439  // The following are used only for driver-created buffers.
1440  // Set them to known values.
1441  dmaControlBuf.downSample = 0; // Not applicable to this mode
1442  dmaControlBuf.linePitch = 1; // Not applicable to this mode
1443  dmaControlBuf.poll = 0; // currently can't poll with a usermode allocated dma buffer
1444  ULWord request;
1445  const char *errMsg = AJA_NULL;
1446 #define ERRMSG(s) #s " failed"
1447 
1448  // Usermode buffer stuff
1449  if (offsetSrc == 0 && offsetDest == 0) // Frame ( or field 0? )
1450  {
1451  request = IOCTL_NTV2_DMA_READ_FRAME;
1453  }
1454  else // Field 1 or audio
1455  {
1456  request = IOCTL_NTV2_DMA_READ;
1457  errMsg = ERRMSG(IOCTL_NTV2_DMA_READ);
1458  }
1459 
1460  if (ioctl(int(_hDevice), request, &dmaControlBuf))
1461  {LDIFAIL(errMsg); return false;}
1462 #endif
1463  return true;
1464 #undef ERRMSG
1465 }
AJA_DebugStat_GetInterruptCount
@ AJA_DebugStat_GetInterruptCount
Definition: debugshare.h:240
CNTV2BareMetalDriverInterface::OpenLocalPhysical
virtual bool OpenLocalPhysical(const UWord inDeviceIndex)
Opens the local/physical device connection.
Definition: ntv2baremetaldriverinterface.cpp:65
AJA_DebugStat_DMATransferEx
@ AJA_DebugStat_DMATransferEx
Definition: debugshare.h:242
eInput3
@ eInput3
Definition: ntv2publicinterface.h:3739
IOCTL_NTV2_SETUP_BOARD
#define IOCTL_NTV2_SETUP_BOARD
Definition: ntv2baremetalpublicinterface.h:77
AJADebug::StatTimerStop
static AJAStatus StatTimerStop(const uint32_t inKey)
Definition: debug.cpp:1154
AUTOCIRCULATE_DATA::channelSpec
NTV2Crosspoint channelSpec
Definition: ntv2publicinterface.h:4341
CNTV2BareMetalDriverInterface::GetBA0MemorySize
virtual bool GetBA0MemorySize(ULWord *memSize)
Definition: ntv2baremetaldriverinterface.cpp:464
NTV2_DMA_CONTROL_STRUCT::frameBuffer
PULWord frameBuffer
Definition: ntv2baremetalpublicinterface.h:154
FRAME_STAMP_STRUCT::channelSpec
NTV2Crosspoint channelSpec
Definition: ntv2publicinterface.h:4407
NTV2_DMA_P2P_CONTROL_STRUCT::dmaEngine
NTV2DMAEngine dmaEngine
Definition: ntv2baremetalpublicinterface.h:184
CNTV2BareMetalDriverInterface::NTV2Message
virtual bool NTV2Message(NTV2_HEADER *pInOutMessage)
Sends a message to the NTV2 driver (the new, improved, preferred way).
Definition: ntv2baremetaldriverinterface.cpp:1075
kRegBoardID
@ kRegBoardID
Definition: ntv2publicinterface.h:124
NTV2_WAITFOR_INTERRUPT_STRUCT::eInterruptType
INTERRUPT_ENUMS eInterruptType
Definition: ntv2baremetalpublicinterface.h:209
AsFrameStampStructPtr
#define AsFrameStampStructPtr(_p_)
Definition: ntv2baremetaldriverinterface.cpp:32
INTERRUPT_ENUMS
enum _INTERRUPT_ENUMS_ INTERRUPT_ENUMS
CNTV2BareMetalDriverInterface::MapDMADriverBuffer
virtual bool MapDMADriverBuffer()
Definition: ntv2baremetaldriverinterface.cpp:1127
CNTV2BareMetalDriverInterface::UnmapDMADriverBuffer
virtual bool UnmapDMADriverBuffer()
Definition: ntv2baremetaldriverinterface.cpp:1175
ERRMSG
#define ERRMSG(s)
NTV2_DMA_CONTROL_STRUCT::frameOffsetDest
ULWord frameOffsetDest
Definition: ntv2baremetalpublicinterface.h:157
NTV2_INTERRUPT_CONTROL_STRUCT::eInterruptType
INTERRUPT_ENUMS eInterruptType
Definition: ntv2baremetalpublicinterface.h:201
NTV2_DriverDebugMessageSet
NTV2_DriverDebugMessageSet
Definition: ntv2enums.h:3743
CNTV2DriverInterface::_pXena2FlashBaseAddress
ULWord * _pXena2FlashBaseAddress
Definition: ntv2driverinterface.h:692
NTV2_DMA_CONTROL_STRUCT::numBytes
ULWord numBytes
Definition: ntv2baremetalpublicinterface.h:158
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
eOutput6
@ eOutput6
Definition: ntv2publicinterface.h:3755
AsPTaskStruct
#define AsPTaskStruct(_p_)
Definition: ntv2baremetaldriverinterface.cpp:36
IOCTL_NTV2_DMA_READ
#define IOCTL_NTV2_DMA_READ
Definition: ntv2baremetalpublicinterface.h:44
AJA_DebugStat_HEVCSendMessage
@ AJA_DebugStat_HEVCSendMessage
Definition: debugshare.h:247
NTV2GetSupportedDevices
NTV2DeviceIDSet NTV2GetSupportedDevices(const NTV2DeviceKinds inKinds=NTV2_DEVICEKIND_ALL)
Returns an NTV2DeviceIDSet of devices supported by the SDK.
Definition: ntv2utils.cpp:7552
NTV2Channel
NTV2Channel
These enum values are mostly used to identify a specific Frame Store. They're also commonly used to i...
Definition: ntv2enums.h:1305
CNTV2DriverInterface::_boardOpened
bool _boardOpened
True if I'm open and connected to the device.
Definition: ntv2driverinterface.h:675
NTV2_DMA_P2P_CONTROL_STRUCT::ullVideoBusAddress
ULWord64 ullVideoBusAddress
Definition: ntv2baremetalpublicinterface.h:192
AJA_DebugStat_NTV2Message
@ AJA_DebugStat_NTV2Message
Definition: debugshare.h:246
CNTV2BareMetalDriverInterface::_pDMADriverBufferAddress
ULWord * _pDMADriverBufferAddress
Definition: ntv2baremetaldriverinterface.h:146
IOCTL_NTV2_AUTOCIRCULATE_TRANSFER
#define IOCTL_NTV2_AUTOCIRCULATE_TRANSFER
Definition: ntv2baremetalpublicinterface.h:107
AJADebug::StatTimerStart
static AJAStatus StatTimerStart(const uint32_t inKey)
Definition: debug.cpp:1134
IOCTL_NTV2_DMA_WRITE_FRAME
#define IOCTL_NTV2_DMA_WRITE_FRAME
Definition: ntv2baremetalpublicinterface.h:34
NTV2_ASSERT
#define NTV2_ASSERT(_expr_)
Definition: ajatypes.h:601
IOCTL_NTV2_DMA_READ_FRAME_SEGMENT
#define IOCTL_NTV2_DMA_READ_FRAME_SEGMENT
Definition: ntv2baremetalpublicinterface.h:37
CNTV2BareMetalDriverInterface::UnmapDNXRegisters
virtual bool UnmapDNXRegisters(void)
Definition: ntv2baremetaldriverinterface.cpp:574
CNTV2BareMetalDriverInterface::_pDNXRegisterBaseAddress
ULWord * _pDNXRegisterBaseAddress
Definition: ntv2baremetaldriverinterface.h:148
AJA_DebugStat_AutoCirculate
@ AJA_DebugStat_AutoCirculate
Definition: debugshare.h:244
AJA_DebugStat_WaitForInterruptOthers
@ AJA_DebugStat_WaitForInterruptOthers
Definition: debugshare.h:239
CNTV2DriverInterface::WaitForInterrupt
virtual bool WaitForInterrupt(const INTERRUPT_ENUMS eInterrupt, const ULWord timeOutMs=68)
Definition: ntv2driverinterface.cpp:536
NTV2_DMA_P2P_CONTROL_STRUCT::bRead
bool bRead
Definition: ntv2baremetalpublicinterface.h:183
AsVoidPtr
#define AsVoidPtr(_p_)
Definition: ntv2baremetaldriverinterface.cpp:38
eInput2
@ eInput2
Definition: ntv2publicinterface.h:3716
AJA_DebugStat_WaitForInterruptIn2
@ AJA_DebugStat_WaitForInterruptIn2
Definition: debugshare.h:227
ntv2baremetaldriverinterface.h
Declares the CNTV2BareMetalDriverInterface class.
LDIFAIL
#define LDIFAIL(__x__)
Definition: ntv2baremetaldriverinterface.cpp:26
eInput7
@ eInput7
Definition: ntv2publicinterface.h:3748
CNTV2BareMetalDriverInterface::UnmapFrameBuffers
virtual bool UnmapFrameBuffers(void)
Definition: ntv2baremetaldriverinterface.cpp:386
sIntEnumToStatKeys
static const uint32_t sIntEnumToStatKeys[]
Definition: ntv2baremetaldriverinterface.cpp:244
NTV2_DMA_CONTROL_STRUCT::poll
ULWord poll
Definition: ntv2baremetalpublicinterface.h:161
CNTV2BareMetalDriverInterface::_BA4MemorySize
ULWord _BA4MemorySize
Definition: ntv2baremetaldriverinterface.h:150
kVRegBA1MemorySize
@ kVRegBA1MemorySize
Definition: ntv2virtualregisters.h:257
LDIWARN
#define LDIWARN(__x__)
Definition: ntv2baremetaldriverinterface.cpp:27
IOCTL_NTV2_DMA_READ_FRAME
#define IOCTL_NTV2_DMA_READ_FRAME
Definition: ntv2baremetalpublicinterface.h:31
NTV2DeviceID
NTV2DeviceID
Identifies a specific AJA NTV2 device model number. The NTV2DeviceID is actually the PROM part number...
Definition: ntv2enums.h:20
NTV2_DMA_P2P_CONTROL_STRUCT
Definition: ntv2baremetalpublicinterface.h:182
CNTV2BareMetalDriverInterface::RestoreHardwareProcampRegisters
virtual bool RestoreHardwareProcampRegisters(void)
Definition: ntv2baremetaldriverinterface.cpp:157
AUTOCIRCULATE_TRANSFER_STRUCT::audioBufferSize
ULWord audioBufferSize
Definition: ntv2publicinterface.h:4549
CNTV2BareMetalDriverInterface::_BA0MemorySize
ULWord _BA0MemorySize
Definition: ntv2baremetaldriverinterface.h:147
NTV2_DMA_CONTROL_STRUCT::engine
NTV2DMAEngine engine
Definition: ntv2baremetalpublicinterface.h:151
NTV2_CONTROL_DRIVER_DEBUG_MESSAGES_STRUCT::success
ULWord success
Definition: ntv2baremetalpublicinterface.h:219
PULWord
uint32_t * PULWord
Definition: ajatypes.h:247
CNTV2DriverInterface::_boardNumber
UWord _boardNumber
My device index number.
Definition: ntv2driverinterface.h:673
IOCTL_NTV2_CONTROL_DRIVER_DEBUG_MESSAGES
#define IOCTL_NTV2_CONTROL_DRIVER_DEBUG_MESSAGES
Definition: ntv2baremetalpublicinterface.h:72
NTV2_DMA_P2P_CONTROL_STRUCT::ulFrameOffset
ULWord ulFrameOffset
Definition: ntv2baremetalpublicinterface.h:187
NTV2_CHANNEL1
@ NTV2_CHANNEL1
Specifies channel or Frame Store 1 (or the first item).
Definition: ntv2enums.h:1307
kVRegGlobalAudioPlaybackMode
@ kVRegGlobalAudioPlaybackMode
Definition: ntv2virtualregisters.h:34
CNTV2DriverInterface::_boardID
NTV2DeviceID _boardID
My cached device ID.
Definition: ntv2driverinterface.h:674
ePrerollAutoCirculate
@ ePrerollAutoCirculate
Definition: ntv2publicinterface.h:4220
eGetIntCount
@ eGetIntCount
Definition: ntv2publicinterface.h:3725
CNTV2BareMetalDriverInterface::MapXena2Flash
virtual bool MapXena2Flash(void)
Definition: ntv2baremetaldriverinterface.cpp:484
CNTV2BareMetalDriverInterface::_hDevice
HANDLE _hDevice
Definition: ntv2baremetaldriverinterface.h:144
AJA_DebugStat_WaitForInterruptIn8
@ AJA_DebugStat_WaitForInterruptIn8
Definition: debugshare.h:233
NTV2_CONTROL_DRIVER_DEBUG_MESSAGES_STRUCT::msgSet
NTV2_DriverDebugMessageSet msgSet
Definition: ntv2baremetalpublicinterface.h:217
CNTV2BareMetalDriverInterface::UnmapXena2Flash
virtual bool UnmapXena2Flash(void)
Definition: ntv2baremetaldriverinterface.cpp:520
eInput4
@ eInput4
Definition: ntv2publicinterface.h:3740
NTV2_DMA_CONTROL_STRUCT::linePitch
ULWord linePitch
Definition: ntv2baremetalpublicinterface.h:160
CNTV2BareMetalDriverInterface::UnmapRegisters
virtual bool UnmapRegisters(void)
Definition: ntv2baremetaldriverinterface.cpp:450
AUTOCIRCULATE_DATA::pvVal4
void * pvVal4
Definition: ntv2publicinterface.h:4362
NTV2_DMA_CONTROL_STRUCT::frameNumber
ULWord frameNumber
Definition: ntv2baremetalpublicinterface.h:153
AUTOCIRCULATE_DATA::pvVal3
void * pvVal3
Definition: ntv2publicinterface.h:4361
CNTV2BareMetalDriverInterface::~CNTV2BareMetalDriverInterface
virtual ~CNTV2BareMetalDriverInterface()
Definition: ntv2baremetaldriverinterface.cpp:54
CNTV2DriverInterface::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: ntv2driverinterface.cpp:393
NTV2_DMA_SEGMENT_CONTROL_STRUCT::videoSegmentHostPitch
ULWord videoSegmentHostPitch
Definition: ntv2baremetalpublicinterface.h:177
IOCTL_NTV2_WAITFOR_INTERRUPT
#define IOCTL_NTV2_WAITFOR_INTERRUPT
Definition: ntv2baremetalpublicinterface.h:67
NTV2RoutingTable
Definition: ntv2publicinterface.h:4026
AJA_DebugStat_DMATransferP2P
@ AJA_DebugStat_DMATransferP2P
Definition: debugshare.h:243
eOutput7
@ eOutput7
Definition: ntv2publicinterface.h:3756
NTV2_GlobalAudioPlaybackMode
NTV2_GlobalAudioPlaybackMode
Definition: ntv2enums.h:2047
eAbortAutoCirc
@ eAbortAutoCirc
Definition: ntv2publicinterface.h:4222
eTransferAutoCirculate
@ eTransferAutoCirculate
Definition: ntv2publicinterface.h:4221
CNTV2BareMetalDriverInterface::_BA2MemorySize
ULWord _BA2MemorySize
Definition: ntv2baremetaldriverinterface.h:149
NTV2DMAEngine
NTV2DMAEngine
Definition: ntv2enums.h:1801
AUTOCIRCULATE_TRANSFER_COMBO_STRUCT::acTask
AUTOCIRCULATE_TASK_STRUCT acTask
Definition: ntv2baremetalpublicinterface.h:228
CNTV2BareMetalDriverInterface::DmaWriteWithOffsets
virtual bool DmaWriteWithOffsets(NTV2DMAEngine DMAEngine, ULWord frameNumber, ULWord *pFrameBuffer, ULWord offsetSrc, ULWord offsetDest, ULWord bytes)
Definition: ntv2baremetaldriverinterface.cpp:1370
NTV2_DMA_P2P_CONTROL_STRUCT::ulVidSegmentCardPitch
ULWord ulVidSegmentCardPitch
Definition: ntv2baremetalpublicinterface.h:191
ntv2baremetalpublicinterface.h
Types and defines shared between NTV2 user application interface and BareMetal device driver.
eGetFrameStamp
@ eGetFrameStamp
Definition: ntv2publicinterface.h:4218
FRAME_STAMP_STRUCT
Definition: ntv2publicinterface.h:4405
AUTOCIRCULATE_DATA::eCommand
AUTO_CIRC_COMMAND eCommand
Definition: ntv2publicinterface.h:4340
CNTV2BareMetalDriverInterface::GetDMANumDriverBuffers
virtual bool GetDMANumDriverBuffers(ULWord *pNumDmaDriverBuffers)
Definition: ntv2baremetaldriverinterface.cpp:1119
NTV2_DMA_SEGMENT_CONTROL_STRUCT::frameOffsetDest
ULWord frameOffsetDest
Definition: ntv2baremetalpublicinterface.h:173
CHANNEL_P2P_STRUCT
struct AUTOCIRCULATE_P2P_STRUCT CHANNEL_P2P_STRUCT
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:246
IOCTL_NTV2_DMA_WRITE
#define IOCTL_NTV2_DMA_WRITE
Definition: ntv2baremetalpublicinterface.h:47
NTV2_DMA_P2P_CONTROL_STRUCT::dmaChannel
NTV2Channel dmaChannel
Definition: ntv2baremetalpublicinterface.h:185
AsPTransferStruct
#define AsPTransferStruct(_p_)
Definition: ntv2baremetaldriverinterface.cpp:37
eInput8
@ eInput8
Definition: ntv2publicinterface.h:3749
AUTOCIRCULATE_P2P_STRUCT::videoBusSize
ULWord videoBusSize
Definition: ntv2publicinterface.h:4632
CNTV2DriverInterface::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: ntv2driverinterface.cpp:472
NTV2_DMA_SEGMENT_CONTROL_STRUCT
Definition: ntv2baremetalpublicinterface.h:165
AJA_DebugStat_WaitForInterruptUartTx1
@ AJA_DebugStat_WaitForInterruptUartTx1
Definition: debugshare.h:236
NTV2_DMA_SEGMENT_CONTROL_STRUCT::frameOffsetSrc
ULWord frameOffsetSrc
Definition: ntv2baremetalpublicinterface.h:172
AUTOCIRCULATE_P2P_STRUCT::messageBusAddress
ULWord64 messageBusAddress
Definition: ntv2publicinterface.h:4631
NTV2_DMA_P2P_CONTROL_STRUCT::ulVidSegmentHostPitch
ULWord ulVidSegmentHostPitch
Definition: ntv2baremetalpublicinterface.h:190
AUTOCIRCULATE_TRANSFER_STRUCT
Definition: ntv2publicinterface.h:4542
IOCTL_AJANTV2_MESSAGE
#define IOCTL_AJANTV2_MESSAGE
Definition: ntv2baremetalpublicinterface.h:113
AJA_DebugStat_AutoCirculateXfer
@ AJA_DebugStat_AutoCirculateXfer
Definition: debugshare.h:245
NTV2_WAITFOR_INTERRUPT_STRUCT::timeOutMs
ULWord timeOutMs
Definition: ntv2baremetalpublicinterface.h:210
eOutput2
@ eOutput2
Definition: ntv2publicinterface.h:3751
NTV2DeviceIDToString
std::string NTV2DeviceIDToString(const NTV2DeviceID inValue, const bool inForRetailDisplay=false)
Definition: ntv2utils.cpp:4673
eFlushAutoCirculate
@ eFlushAutoCirculate
Definition: ntv2publicinterface.h:4219
kVRegNumDmaDriverBuffers
@ kVRegNumDmaDriverBuffers
Definition: ntv2virtualregisters.h:259
NTV2_WAITFOR_INTERRUPT_STRUCT::success
ULWord success
Definition: ntv2baremetalpublicinterface.h:211
AJA_DebugStat_WaitForInterruptUartTx2
@ AJA_DebugStat_WaitForInterruptUartTx2
Definition: debugshare.h:238
eGetAutoCirc
@ eGetAutoCirc
Definition: ntv2publicinterface.h:4217
kVRegBA2MemorySize
@ kVRegBA2MemorySize
Definition: ntv2virtualregisters.h:261
NTV2_DMA_P2P_CONTROL_STRUCT::ulVidNumSegments
ULWord ulVidNumSegments
Definition: ntv2baremetalpublicinterface.h:189
LDIDBG
#define LDIDBG(__x__)
Definition: ntv2baremetaldriverinterface.cpp:30
CNTV2BareMetalDriverInterface::SetupBoard
virtual bool SetupBoard(void)
Definition: ntv2baremetaldriverinterface.cpp:312
CNTV2BareMetalDriverInterface::HevcSendMessage
virtual bool HevcSendMessage(HevcMessageHeader *pMessage)
Sends an HEVC message to the NTV2 driver.
Definition: ntv2baremetaldriverinterface.cpp:1094
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
AUTOCIRCULATE_FRAME_STAMP_COMBO_STRUCT
Definition: ntv2baremetalpublicinterface.h:231
AUTOCIRCULATE_TRANSFER_STRUCT::audioBuffer
ULWord * audioBuffer
Definition: ntv2publicinterface.h:4548
NTV2_HEADER
All new NTV2 structs start with this common header.
Definition: ntv2publicinterface.h:6899
UWord
uint16_t UWord
Definition: ajatypes.h:244
NTV2_DMA_SEGMENT_CONTROL_STRUCT::videoSegmentCardPitch
ULWord videoSegmentCardPitch
Definition: ntv2baremetalpublicinterface.h:178
CNTV2BareMetalDriverInterface::DmaReadFrameDriverBuffer
virtual bool DmaReadFrameDriverBuffer(NTV2DMAEngine DMAEngine, ULWord frameNumber, unsigned long dmaBufferFrame, ULWord bytes, ULWord downSample, ULWord linePitch, ULWord poll)
Definition: ntv2baremetaldriverinterface.cpp:1295
IOCTL_NTV2_AUTOCIRCULATE_CAPTURETASK
#define IOCTL_NTV2_AUTOCIRCULATE_CAPTURETASK
Definition: ntv2baremetalpublicinterface.h:110
DMAEngine
DMAEngine
Definition: ntv2macpublicinterface.h:103
eInput6
@ eInput6
Definition: ntv2publicinterface.h:3747
ntv2utils.h
Declares numerous NTV2 utility functions.
AsTransferStatusStruct
#define AsTransferStatusStruct(_p_)
Definition: ntv2baremetaldriverinterface.cpp:34
NTV2_DMA_CONTROL_STRUCT::dmaChannel
NTV2Channel dmaChannel
Definition: ntv2baremetalpublicinterface.h:152
NTV2_DMA_P2P_CONTROL_STRUCT::ulFrameNumber
ULWord ulFrameNumber
Definition: ntv2baremetalpublicinterface.h:186
CNTV2BareMetalDriverInterface::CNTV2BareMetalDriverInterface
CNTV2BareMetalDriverInterface()
Definition: ntv2baremetaldriverinterface.cpp:41
NTV2_DMA_P2P_CONTROL_STRUCT::ullMessageBusAddress
ULWord64 ullMessageBusAddress
Definition: ntv2baremetalpublicinterface.h:193
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
AsStatusStructPtr
#define AsStatusStructPtr(_p_)
Definition: ntv2baremetaldriverinterface.cpp:33
eTransferAutoCirculateEx
@ eTransferAutoCirculateEx
Definition: ntv2publicinterface.h:4224
CNTV2BareMetalDriverInterface::DmaReadWithOffsets
virtual bool DmaReadWithOffsets(NTV2DMAEngine DMAEngine, ULWord frameNumber, ULWord *pFrameBuffer, ULWord offsetSrc, ULWord offsetDest, ULWord bytes)
Definition: ntv2baremetaldriverinterface.cpp:1418
NTV2_DMA_CONTROL_STRUCT::downSample
ULWord downSample
Definition: ntv2baremetalpublicinterface.h:159
NTV2DeviceIsDirectAddressable
bool NTV2DeviceIsDirectAddressable(const NTV2DeviceID inDeviceID)
Definition: ntv2devicefeatures.hpp:7813
eStartAutoCirc
@ eStartAutoCirc
Definition: ntv2publicinterface.h:4214
eSetCaptureTask
@ eSetCaptureTask
Definition: ntv2publicinterface.h:4227
AUTOCIRCULATE_TRANSFER_COMBO_STRUCT::acStatus
AUTOCIRCULATE_TRANSFER_STATUS_STRUCT acStatus
Definition: ntv2baremetalpublicinterface.h:226
hevcMessageHeader
Definition: ntv2publicinterface.h:9761
NTV2_DMA_P2P_CONTROL_STRUCT::ulVideoBusSize
ULWord ulVideoBusSize
Definition: ntv2baremetalpublicinterface.h:194
AUTOCIRCULATE_P2P_STRUCT::videoBusAddress
ULWord64 videoBusAddress
Definition: ntv2publicinterface.h:4630
NTV2_DMA_SEGMENT_CONTROL_STRUCT::frameBuffer
PULWord frameBuffer
Definition: ntv2baremetalpublicinterface.h:170
NTV2_DMA_SEGMENT_CONTROL_STRUCT::videoNumSegments
ULWord videoNumSegments
Definition: ntv2baremetalpublicinterface.h:176
AJA_DebugStat_WaitForInterruptUartRx2
@ AJA_DebugStat_WaitForInterruptUartRx2
Definition: debugshare.h:237
AJA_NULL
#define AJA_NULL
Definition: ajatypes.h:190
NTV2_CONTROL_DRIVER_DEBUG_MESSAGES_STRUCT
Definition: ntv2baremetalpublicinterface.h:215
IOCTL_NTV2_DMA_WRITE_SEGMENT
#define IOCTL_NTV2_DMA_WRITE_SEGMENT
Definition: ntv2baremetalpublicinterface.h:53
AsRoutingTablePtr
#define AsRoutingTablePtr(_p_)
Definition: ntv2baremetaldriverinterface.cpp:35
IOCTL_NTV2_DMA_P2P
#define IOCTL_NTV2_DMA_P2P
Definition: ntv2baremetalpublicinterface.h:56
IOCTL_NTV2_AUTOCIRCULATE_FRAMESTAMP
#define IOCTL_NTV2_AUTOCIRCULATE_FRAMESTAMP
Definition: ntv2baremetalpublicinterface.h:104
file_io.h
Declares the AJAFileIO class.
AJA_DebugStat_WaitForInterruptIn7
@ AJA_DebugStat_WaitForInterruptIn7
Definition: debugshare.h:232
AJA_DebugStat_WaitForInterruptIn6
@ AJA_DebugStat_WaitForInterruptIn6
Definition: debugshare.h:231
AJA_DebugStat_WaitForInterruptUartRx1
@ AJA_DebugStat_WaitForInterruptUartRx1
Definition: debugshare.h:235
DEC
#define DEC(__x__)
Definition: ntv2publicinterface.h:5579
IOCTL_NTV2_INTERRUPT_CONTROL
#define IOCTL_NTV2_INTERRUPT_CONTROL
Definition: ntv2baremetalpublicinterface.h:62
AUTOCIRCULATE_P2P_STRUCT::messageData
ULWord messageData
Definition: ntv2publicinterface.h:4633
eInput1
@ eInput1
Definition: ntv2publicinterface.h:3715
CNTV2BareMetalDriverInterface::GetAudioOutputMode
virtual bool GetAudioOutputMode(NTV2_GlobalAudioPlaybackMode *mode)
Definition: ntv2baremetaldriverinterface.cpp:1205
kVRegBA0MemorySize
@ kVRegBA0MemorySize
Definition: ntv2virtualregisters.h:256
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
NTV2_INTERRUPT_CONTROL_STRUCT::enable
ULWord enable
Definition: ntv2baremetalpublicinterface.h:202
AUTOCIRCULATE_FRAME_STAMP_COMBO_STRUCT::acFrameStamp
FRAME_STAMP_STRUCT acFrameStamp
Definition: ntv2baremetalpublicinterface.h:233
kVRegDMADriverBufferPhysicalAddress
@ kVRegDMADriverBufferPhysicalAddress
Definition: ntv2virtualregisters.h:260
NTV2_DMA_SEGMENT_CONTROL_STRUCT::poll
ULWord poll
Definition: ntv2baremetalpublicinterface.h:175
AJA_DebugStat_WaitForInterruptOut1
@ AJA_DebugStat_WaitForInterruptOut1
Definition: debugshare.h:234
NTV2_DMA_P2P_CONTROL_STRUCT::ulVidNumBytes
ULWord ulVidNumBytes
Definition: ntv2baremetalpublicinterface.h:188
IOCTL_HEVC_MESSAGE
#define IOCTL_HEVC_MESSAGE
Definition: ntv2baremetalpublicinterface.h:251
ULWord64
uint64_t ULWord64
Definition: ajatypes.h:249
NTV2_DMA_P2P_CONTROL_STRUCT::ulMessageData
ULWord ulMessageData
Definition: ntv2baremetalpublicinterface.h:195
AUTOCIRCULATE_TRANSFER_STATUS_STRUCT
Definition: ntv2publicinterface.h:4491
AJAFileIO::Close
AJAStatus Close()
Definition: file_io.cpp:281
NTV2_DMA_SEGMENT_CONTROL_STRUCT::frameNumber
ULWord frameNumber
Definition: ntv2baremetalpublicinterface.h:169
AUTOCIRCULATE_TRANSFER_COMBO_STRUCT::channelSpec
NTV2Crosspoint channelSpec
Definition: ntv2baremetalpublicinterface.h:224
ePauseAutoCirc
@ ePauseAutoCirc
Definition: ntv2publicinterface.h:4216
CNTV2DriverInterface::_pCh1FrameBaseAddress
ULWord * _pCh1FrameBaseAddress
Definition: ntv2driverinterface.h:693
NTV2_DMA_SEGMENT_CONTROL_STRUCT::engine
NTV2DMAEngine engine
Definition: ntv2baremetalpublicinterface.h:167
eInitAutoCirc
@ eInitAutoCirc
Definition: ntv2publicinterface.h:4213
CNTV2BareMetalDriverInterface::DmaWriteFrameDriverBuffer
virtual bool DmaWriteFrameDriverBuffer(NTV2DMAEngine DMAEngine, ULWord frameNumber, unsigned long dmaBufferFrame, ULWord bytes, ULWord poll)
Definition: ntv2baremetaldriverinterface.cpp:1222
AUTOCIRCULATE_P2P_STRUCT
Definition: ntv2publicinterface.h:4626
eStopAutoCirc
@ eStopAutoCirc
Definition: ntv2publicinterface.h:4215
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
NTV2_DMA_CONTROL_STRUCT
Definition: ntv2baremetalpublicinterface.h:149
eOutput4
@ eOutput4
Definition: ntv2publicinterface.h:3753
CNTV2BareMetalDriverInterface::GetBA1MemorySize
virtual bool GetBA1MemorySize(ULWord *memSize)
Definition: ntv2baremetaldriverinterface.cpp:469
eGetFrameStampEx2
@ eGetFrameStampEx2
Definition: ntv2publicinterface.h:4226
CNTV2DriverInterface::GetFrameBufferSize
virtual ULWord GetFrameBufferSize(void) const
Definition: ntv2driverinterface.h:388
CNTV2BareMetalDriverInterface::MapRegisters
virtual bool MapRegisters(void)
Definition: ntv2baremetaldriverinterface.cpp:411
NTV2DeviceIDSet
std::set< NTV2DeviceID > NTV2DeviceIDSet
A set of NTV2DeviceIDs.
Definition: ntv2utils.h:1031
IOCTL_NTV2_RESTORE_HARDWARE_PROCAMP_REGISTERS
#define IOCTL_NTV2_RESTORE_HARDWARE_PROCAMP_REGISTERS
Definition: ntv2baremetalpublicinterface.h:81
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
NTV2_INTERRUPT_CONTROL_STRUCT::interruptCount
ULWord interruptCount
Definition: ntv2baremetalpublicinterface.h:203
IOCTL_NTV2_DMA_WRITE_FRAME_SEGMENT
#define IOCTL_NTV2_DMA_WRITE_FRAME_SEGMENT
Definition: ntv2baremetalpublicinterface.h:40
AJA_DebugStat_DMATransfer
@ AJA_DebugStat_DMATransfer
Definition: debugshare.h:241
NTV2_DMA_SEGMENT_CONTROL_STRUCT::numBytes
ULWord numBytes
Definition: ntv2baremetalpublicinterface.h:174
AUTOCIRCULATE_TRANSFER_COMBO_STRUCT::acXena2RoutingTable
NTV2RoutingTable acXena2RoutingTable
Definition: ntv2baremetalpublicinterface.h:227
AUTOCIRCULATE_TASK_STRUCT
Definition: ntv2publicinterface.h:4724
IOCTL_NTV2_DMA_READ_SEGMENT
#define IOCTL_NTV2_DMA_READ_SEGMENT
Definition: ntv2baremetalpublicinterface.h:50
NTV2_INTERRUPT_CONTROL_STRUCT
Definition: ntv2baremetalpublicinterface.h:199
CNTV2DriverInterface::AutoCirculate
virtual bool AutoCirculate(AUTOCIRCULATE_DATA &pAutoCircData)
Sends an AutoCirculate command to the NTV2 driver.
Definition: ntv2driverinterface.cpp:549
CNTV2DriverInterface::_pRegisterBaseAddress
ULWord * _pRegisterBaseAddress
Definition: ntv2driverinterface.h:690
CNTV2BareMetalDriverInterface::GetBA2MemorySize
virtual bool GetBA2MemorySize(ULWord *memSize)
Definition: ntv2baremetaldriverinterface.cpp:474
kVRegBA4MemorySize
@ kVRegBA4MemorySize
Definition: ntv2virtualregisters.h:258
NTV2_WAITFOR_INTERRUPT_STRUCT
Definition: ntv2baremetalpublicinterface.h:207
eOutput5
@ eOutput5
Definition: ntv2publicinterface.h:3754
eTransferAutoCirculateEx2
@ eTransferAutoCirculateEx2
Definition: ntv2publicinterface.h:4225
xHEX0N
#define xHEX0N(__x__, __n__)
Definition: ntv2publicinterface.h:5578
CNTV2DriverInterface::BumpEventCount
virtual void BumpEventCount(const INTERRUPT_ENUMS eInterruptType)
Atomically increments the event count tally for the given interrupt type.
Definition: ntv2driverinterface.cpp:1220
AUTOCIRCULATE_TRANSFER_COMBO_STRUCT
Definition: ntv2baremetalpublicinterface.h:222
AUTOCIRCULATE_DATA::pvVal1
void * pvVal1
Definition: ntv2publicinterface.h:4359
IOCTL_NTV2_AUTOCIRCULATE_STATUS
#define IOCTL_NTV2_AUTOCIRCULATE_STATUS
Definition: ntv2baremetalpublicinterface.h:101
AJA_DebugStat_WaitForInterruptIn1
@ AJA_DebugStat_WaitForInterruptIn1
Definition: debugshare.h:226
CNTV2BareMetalDriverInterface::GetDMADriverBufferAddress
virtual bool GetDMADriverBufferAddress(ULWord **pDMADriverBuffer)
Definition: ntv2baremetaldriverinterface.cpp:1161
AJA_DebugStat_WaitForInterruptIn3
@ AJA_DebugStat_WaitForInterruptIn3
Definition: debugshare.h:228
INVALID_HANDLE_VALUE
#define INVALID_HANDLE_VALUE
Definition: ajatypes.h:318
NTV2_CONTROL_DRIVER_DEBUG_MESSAGES_STRUCT::enable
bool enable
Definition: ntv2baremetalpublicinterface.h:218
AUTOCIRCULATE_DATA::pvVal2
void * pvVal2
Definition: ntv2publicinterface.h:4360
eInput5
@ eInput5
Definition: ntv2publicinterface.h:3746
CNTV2BareMetalDriverInterface::GetDMADriverBufferPhysicalAddress
virtual bool GetDMADriverBufferPhysicalAddress(ULWord *physAddr)
Definition: ntv2baremetaldriverinterface.cpp:1114
CNTV2DriverInterface::NTV2Message
virtual bool NTV2Message(NTV2_HEADER *pInMessage)
Sends a message to the NTV2 driver (the new, improved, preferred way).
Definition: ntv2driverinterface.cpp:573
AJA_DebugStat_WaitForInterruptIn4
@ AJA_DebugStat_WaitForInterruptIn4
Definition: debugshare.h:229
CNTV2DriverInterface::_pFrameBaseAddress
ULWord * _pFrameBaseAddress
Definition: ntv2driverinterface.h:689
eVerticalInterrupt
@ eVerticalInterrupt
Definition: ntv2publicinterface.h:3712
LDIINFO
#define LDIINFO(__x__)
Definition: ntv2baremetaldriverinterface.cpp:29
eOutput8
@ eOutput8
Definition: ntv2publicinterface.h:3757
CNTV2BareMetalDriverInterface::GetBA4MemorySize
virtual bool GetBA4MemorySize(ULWord *memSize)
Definition: ntv2baremetaldriverinterface.cpp:479
AUTOCIRCULATE_FRAME_STAMP_COMBO_STRUCT::acTask
AUTOCIRCULATE_TASK_STRUCT acTask
Definition: ntv2baremetalpublicinterface.h:234
CNTV2DriverInterface::Close
virtual bool Close(void)
Closes me, releasing host resources that may have been allocated in a previous Open call.
Definition: ntv2driverinterface.cpp:196
debug.h
Declares the AJADebug class.
AUTOCIRCULATE_DATA
Definition: ntv2publicinterface.h:4338
eAuxVerticalInterrupt
@ eAuxVerticalInterrupt
Definition: ntv2publicinterface.h:3731
AUTOCIRCULATE_TRANSFER_COMBO_STRUCT::acTransfer
AUTOCIRCULATE_TRANSFER_STRUCT acTransfer
Definition: ntv2baremetalpublicinterface.h:225
CNTV2BareMetalDriverInterface::SetAudioOutputMode
virtual bool SetAudioOutputMode(NTV2_GlobalAudioPlaybackMode mode)
Definition: ntv2baremetaldriverinterface.cpp:1200
AJA_DebugStat_WaitForInterruptIn5
@ AJA_DebugStat_WaitForInterruptIn5
Definition: debugshare.h:230
HEX8
#define HEX8(__x__)
Definition: ntv2baremetaldriverinterface.cpp:22
AUTOCIRCULATE_P2P_STRUCT::p2pSize
ULWord p2pSize
Definition: ntv2publicinterface.h:4628
NTV2_DMA_CONTROL_STRUCT::frameOffsetSrc
ULWord frameOffsetSrc
Definition: ntv2baremetalpublicinterface.h:156
IOCTL_NTV2_AUTOCIRCULATE_CONTROL
#define IOCTL_NTV2_AUTOCIRCULATE_CONTROL
Definition: ntv2baremetalpublicinterface.h:98
eOutput3
@ eOutput3
Definition: ntv2publicinterface.h:3752