#############################################################
#
# FILE: SimpleCirc.py
# DATE: 1/14/2022
# AUTHOR: Arjun Krishna
# COMPANY: BitFlow, Inc.
# DESCRIPTION: A simple example of capturing data
# to a circular buffer from a single frame grabber
# board.
#
#############################################################
import sys
if (sys.version_info.major >= 3 and sys.version_info.minor >= 8):
import os
#Following lines specifying, the location of DLLs, are required for Python Versions 3.8 and greater
os.add_dll_directory("C:\BitFlow SDK 6.5\Bin64")
os.add_dll_directory("C:\Program Files\CameraLink\Serial")
import BFModule.BufferAcquisition as Buf
import BFModule.Display as Disp
import time
import msvcrt
from datetime import datetime
# The main function
def main():
numBuffers = 1000
print('Circular Acquisition Example')
print('---------------------------------')
CirAq = Buf.clsCircularAcquisition()
#Call Open board function by showing the Board select dialog
CirAq.Open()
#CirAq.Open(0) # Use this to open board 0 without displaying the board select dialog
#Get board info parameters
xsize = CirAq.GetBoardInfo(Buf.InquireParams.XSize)
ysize = CirAq.GetBoardInfo(Buf.InquireParams.YSize)
dispBitsPerPix = CirAq.GetBoardInfo(Buf.InquireParams.BitsPerPixDisplay) #Number of bits per pixel of the display. Currently this value must = 8, 24, or 32.
imageBitsPerPix = CirAq.GetBoardInfo(Buf.InquireParams.BitsPerPix)
#Create and open Display surface using the above parameters
dispSurf = Disp.clsDispSurf(xsize, ysize, dispBitsPerPix, imageBitsPerPix)
#Allocate the requested number of buffers
CirAq.BufferSetup(numBuffers)
#Setup acquisition using the default options
CirAq.AqSetup(Buf.SetupOptions.DisableAqErrorSig)
#Open the display surface
dispSurf.Open()
#Get pointer to the memory buffer of the bitmap behind a display surface
dispSurf.getBitmap()
#Start Acquisition
CirAq.AqControl(Buf.AcqCommands.Start, Buf.AcqControlOptions.Wait)
print("Acquisition Started.")
print("\nPress \'X\' to close acquisition and exit.\n")
keepUpdating = True
while keepUpdating:
if (msvcrt.kbhit()):
try:
keyPressed = msvcrt.getch().decode('utf-8').upper()
except Exception as e:
print(e)
else:
try:
if (keyPressed == 'X'):
#Stop acquisition
CirAq.AqControl(Buf.AcqCommands.Stop, Buf.AcqControlOptions.Async)
keepUpdating = False
print("Acquisition Stopped.\n")
break
except Exception as e:
print(e, '\n')
break
else:
try:
if(CirAq.GetAcqStatus().Start == True):
BufInfo = CirAq.WaitForFrame_BufInfo(0)
TS = BufInfo.TimeStamp
print(TS.hour, ':', TS.min, '.', TS.sec)
if (dispSurf.isOpen()):
dispSurf.updateDisplay(CirAq.GetBufArray(), BufInfo.FrameCount, Disp.DispOptions.FORMAT_NORMAL)
except Exception as e:
print(e)
pass
#Print capture stats
capStatus = CirAq.GetCaptureStatus()
print("Frames Captured = ", capStatus[0])
print("Frames Missed = ", capStatus[1])
#Cleanup acquisition
CirAq.AqCleanup()
#Close the display surface and free the resources
dispSurf.Close()
#Free allocated resources
CirAq.BufferCleanup()
#Close the board
CirAq.Close()
if __name__ == "__main__":
main()