{-# LANGUAGE CApiFFI #-} module Hsm.Cam.FFI ( frameStride , frameBufferLength , frameWidth , frameHeight , frameLine , makeLogger , registerLogger , makeCallback , registerCallback , startCameraManager , stopCameraManager , acquireCamera , releaseCamera , allocateFrameBuffer , freeFrameBuffer , startCamera , stopCamera , createRequest , getDmaBufferFd , requestFrame ) where import Foreign.C.String (CString) import Foreign.C.Types (CInt(CInt)) import Foreign.Ptr (FunPtr) import System.Posix.Types (Fd(Fd)) type Logger = Int -> CString -> IO () type Callback = IO () foreign import capi unsafe "Cam.hpp value FRAME_WIDTH" frameWidth :: Int foreign import capi unsafe "Cam.hpp value FRAME_HEIGHT" frameHeight :: Int foreign import capi unsafe "Cam.hpp value FRAME_LINE" frameLine :: Int foreign import capi unsafe "Cam.hpp value FRAME_STRIDE" frameStride :: Int foreign import capi unsafe "Cam.hpp value FRAME_BUFFER_LENGTH" frameBufferLength :: Int foreign import ccall unsafe "wrapper" makeLogger :: Logger -> IO (FunPtr Logger) foreign import ccall safe "Cam.hpp register_logger" registerLogger :: FunPtr Logger -> IO () foreign import ccall unsafe "wrapper" makeCallback :: Callback -> IO (FunPtr Callback) foreign import ccall safe "Cam.hpp register_callback" registerCallback :: FunPtr Callback -> IO () foreign import ccall safe "Cam.hpp start_camera_manager" startCameraManager :: IO Int foreign import ccall safe "Cam.hpp stop_camera_manager" stopCameraManager :: IO () foreign import ccall safe "Cam.hpp acquire_camera" acquireCamera :: IO Int foreign import ccall safe "Cam.hpp release_camera" releaseCamera :: IO () foreign import ccall safe "Cam.hpp allocate_frame_buffer" allocateFrameBuffer :: IO Int foreign import ccall safe "Cam.hpp free_frame_buffer" freeFrameBuffer :: IO () foreign import ccall safe "Cam.hpp start_camera" startCamera :: IO Int foreign import ccall safe "Cam.hpp stop_camera" stopCamera :: IO () foreign import ccall safe "Cam.hpp create_request" createRequest :: IO Int foreign import ccall safe "Cam.hpp get_dma_buffer_fd" getDmaBufferFd :: IO Fd foreign import ccall safe "Cam.hpp request_frame" requestFrame :: IO ()