{-# LANGUAGE CApiFFI #-} module Hsm.Cam.FFI ( frameWidth , frameHeight , makeLogger , registerLogger , makeRequestCallback , registerRequestCallback , 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 RequestCallback = IO () foreign import capi safe "Cam.hpp value FRAME_WIDTH" frameWidth :: Int foreign import capi safe "Cam.hpp value FRAME_HEIGHT" frameHeight :: Int foreign import ccall safe "wrapper" makeLogger :: Logger -> IO (FunPtr Logger) foreign import capi safe "Cam.hpp register_logger" registerLogger :: FunPtr Logger -> IO () foreign import ccall safe "wrapper" makeRequestCallback :: RequestCallback -> IO (FunPtr RequestCallback) foreign import capi safe "Cam.hpp register_request_callback" registerRequestCallback :: FunPtr RequestCallback -> IO () foreign import capi safe "Cam.hpp start_camera_manager" startCameraManager :: IO () foreign import capi safe "Cam.hpp stop_camera_manager" stopCameraManager :: IO () foreign import capi safe "Cam.hpp acquire_camera" acquireCamera :: IO () foreign import capi safe "Cam.hpp release_camera" releaseCamera :: IO () foreign import capi safe "Cam.hpp allocate_frame_buffer" allocateFrameBuffer :: IO () foreign import capi safe "Cam.hpp free_frame_buffer" freeFrameBuffer :: IO () foreign import capi safe "Cam.hpp start_camera" startCamera :: IO () foreign import capi safe "Cam.hpp stop_camera" stopCamera :: IO () foreign import capi safe "Cam.hpp create_request" createRequest :: IO () foreign import capi safe "Cam.hpp get_dma_buffer_fd" getDmaBufferFd :: IO Fd foreign import capi safe "Cam.hpp request_frame" requestFrame :: IO ()