From 3e421853dc1bae83e9967cfed5b2ac58a169d9c5 Mon Sep 17 00:00:00 2001 From: Paul Oliver Date: Fri, 5 Sep 2025 00:18:12 +0000 Subject: Makes all FFI calls safe --- hsm-cam/Hsm/Cam/FFI.hs | 34 +++++++++++++++++----------------- hsm-gpio/Hsm/GPIO/FFI.hs | 40 ++++++++++++++++++++-------------------- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/hsm-cam/Hsm/Cam/FFI.hs b/hsm-cam/Hsm/Cam/FFI.hs index 6ee648d..50acf10 100644 --- a/hsm-cam/Hsm/Cam/FFI.hs +++ b/hsm-cam/Hsm/Cam/FFI.hs @@ -29,36 +29,36 @@ type Logger = Int -> CString -> IO () type RequestCallback = IO () -foreign import capi unsafe "Cam.hpp value FRAME_WIDTH" frameWidth :: Int +foreign import capi safe "Cam.hpp value FRAME_WIDTH" frameWidth :: Int -foreign import capi unsafe "Cam.hpp value FRAME_HEIGHT" frameHeight :: Int +foreign import capi safe "Cam.hpp value FRAME_HEIGHT" frameHeight :: Int -foreign import ccall unsafe "wrapper" makeLogger :: Logger -> IO (FunPtr Logger) +foreign import ccall safe "wrapper" makeLogger :: Logger -> IO (FunPtr Logger) -foreign import ccall safe "Cam.hpp register_logger" registerLogger :: FunPtr Logger -> IO () +foreign import capi safe "Cam.hpp register_logger" registerLogger :: FunPtr Logger -> IO () -foreign import ccall unsafe "wrapper" makeRequestCallback :: RequestCallback -> IO (FunPtr RequestCallback) +foreign import ccall safe "wrapper" makeRequestCallback :: RequestCallback -> IO (FunPtr RequestCallback) -foreign import ccall safe "Cam.hpp register_request_callback" registerRequestCallback :: FunPtr RequestCallback -> IO () +foreign import capi safe "Cam.hpp register_request_callback" registerRequestCallback :: FunPtr RequestCallback -> IO () -foreign import ccall safe "Cam.hpp start_camera_manager" startCameraManager :: IO Int +foreign import capi safe "Cam.hpp start_camera_manager" startCameraManager :: IO () -foreign import ccall safe "Cam.hpp stop_camera_manager" stopCameraManager :: IO () +foreign import capi safe "Cam.hpp stop_camera_manager" stopCameraManager :: IO () -foreign import ccall safe "Cam.hpp acquire_camera" acquireCamera :: IO Int +foreign import capi safe "Cam.hpp acquire_camera" acquireCamera :: IO () -foreign import ccall safe "Cam.hpp release_camera" releaseCamera :: IO () +foreign import capi safe "Cam.hpp release_camera" releaseCamera :: IO () -foreign import ccall safe "Cam.hpp allocate_frame_buffer" allocateFrameBuffer :: IO Int +foreign import capi safe "Cam.hpp allocate_frame_buffer" allocateFrameBuffer :: IO () -foreign import ccall safe "Cam.hpp free_frame_buffer" freeFrameBuffer :: IO () +foreign import capi safe "Cam.hpp free_frame_buffer" freeFrameBuffer :: IO () -foreign import ccall safe "Cam.hpp start_camera" startCamera :: IO Int +foreign import capi safe "Cam.hpp start_camera" startCamera :: IO () -foreign import ccall safe "Cam.hpp stop_camera" stopCamera :: IO () +foreign import capi safe "Cam.hpp stop_camera" stopCamera :: IO () -foreign import ccall safe "Cam.hpp create_request" createRequest :: IO Int +foreign import capi safe "Cam.hpp create_request" createRequest :: IO () -foreign import ccall safe "Cam.hpp get_dma_buffer_fd" getDmaBufferFd :: IO Fd +foreign import capi safe "Cam.hpp get_dma_buffer_fd" getDmaBufferFd :: IO Fd -foreign import ccall safe "Cam.hpp request_frame" requestFrame :: IO () +foreign import capi safe "Cam.hpp request_frame" requestFrame :: IO () diff --git a/hsm-gpio/Hsm/GPIO/FFI.hs b/hsm-gpio/Hsm/GPIO/FFI.hs index e0d6d07..2589e5e 100644 --- a/hsm-gpio/Hsm/GPIO/FFI.hs +++ b/hsm-gpio/Hsm/GPIO/FFI.hs @@ -38,9 +38,9 @@ import Foreign.Storable (Storable) data Chip -foreign import ccall unsafe "gpiod.h gpiod_chip_open" chipOpen :: CString -> IO (Ptr Chip) +foreign import capi safe "gpiod.h gpiod_chip_open" chipOpen :: CString -> IO (Ptr Chip) -foreign import ccall unsafe "gpiod.h gpiod_chip_close" chipClose :: Ptr Chip -> IO () +foreign import capi safe "gpiod.h gpiod_chip_close" chipClose :: Ptr Chip -> IO () data LineSettings @@ -48,48 +48,48 @@ newtype LineDirection = LineDirection CInt deriving (Show) -foreign import capi unsafe "gpiod.h value GPIOD_LINE_DIRECTION_INPUT" input :: LineDirection +foreign import capi safe "gpiod.h value GPIOD_LINE_DIRECTION_INPUT" input :: LineDirection -foreign import capi unsafe "gpiod.h value GPIOD_LINE_DIRECTION_OUTPUT" output :: LineDirection +foreign import capi safe "gpiod.h value GPIOD_LINE_DIRECTION_OUTPUT" output :: LineDirection newtype LineValue = LineValue CInt deriving (Show, Storable) -foreign import capi unsafe "gpiod.h value GPIOD_LINE_VALUE_ACTIVE" active :: LineValue +foreign import capi safe "gpiod.h value GPIOD_LINE_VALUE_ACTIVE" active :: LineValue -foreign import capi unsafe "gpiod.h value GPIOD_LINE_VALUE_INACTIVE" inactive :: LineValue +foreign import capi safe "gpiod.h value GPIOD_LINE_VALUE_INACTIVE" inactive :: LineValue -foreign import ccall unsafe "gpiod.h gpiod_line_settings_new" lineSettingsNew :: IO (Ptr LineSettings) +foreign import capi safe "gpiod.h gpiod_line_settings_new" lineSettingsNew :: IO (Ptr LineSettings) -foreign import ccall unsafe "gpiod.h gpiod_line_settings_free" lineSettingsFree :: Ptr LineSettings -> IO () +foreign import capi safe "gpiod.h gpiod_line_settings_free" lineSettingsFree :: Ptr LineSettings -> IO () -foreign import ccall unsafe "gpiod.h gpiod_line_settings_set_direction" lineSettingsSetDirection :: Ptr LineSettings -> LineDirection -> IO CInt +foreign import capi safe "gpiod.h gpiod_line_settings_set_direction" lineSettingsSetDirection :: Ptr LineSettings -> LineDirection -> IO CInt -foreign import ccall unsafe "gpiod.h gpiod_line_settings_set_output_value" lineSettingsSetOutputValue :: Ptr LineSettings -> LineValue -> IO CInt +foreign import capi safe "gpiod.h gpiod_line_settings_set_output_value" lineSettingsSetOutputValue :: Ptr LineSettings -> LineValue -> IO CInt data LineConfig -foreign import ccall unsafe "gpiod.h gpiod_line_config_new" lineConfigNew :: IO (Ptr LineConfig) +foreign import capi safe "gpiod.h gpiod_line_config_new" lineConfigNew :: IO (Ptr LineConfig) -foreign import ccall unsafe "gpiod.h gpiod_line_config_free" lineConfigFree :: Ptr LineConfig -> IO () +foreign import capi safe "gpiod.h gpiod_line_config_free" lineConfigFree :: Ptr LineConfig -> IO () -foreign import ccall unsafe "gpiod.h gpiod_line_config_add_line_settings" lineConfigAddLineSettings :: Ptr LineConfig -> Ptr CUInt -> CSize -> Ptr LineSettings -> IO CInt +foreign import capi safe "gpiod.h gpiod_line_config_add_line_settings" lineConfigAddLineSettings :: Ptr LineConfig -> Ptr CUInt -> CSize -> Ptr LineSettings -> IO CInt data RequestConfig -foreign import ccall unsafe "gpiod.h gpiod_request_config_new" requestConfigNew :: IO (Ptr RequestConfig) +foreign import capi safe "gpiod.h gpiod_request_config_new" requestConfigNew :: IO (Ptr RequestConfig) -foreign import ccall unsafe "gpiod.h gpiod_request_config_free" requestConfigFree :: Ptr RequestConfig -> IO () +foreign import capi safe "gpiod.h gpiod_request_config_free" requestConfigFree :: Ptr RequestConfig -> IO () -foreign import ccall unsafe "gpiod.h gpiod_request_config_set_consumer" requestConfigSetConsumer :: Ptr RequestConfig -> CString -> IO () +foreign import capi safe "gpiod.h gpiod_request_config_set_consumer" requestConfigSetConsumer :: Ptr RequestConfig -> CString -> IO () data LineRequest -foreign import ccall unsafe "gpiod.h gpiod_chip_request_lines" chipRequestLines :: Ptr Chip -> Ptr RequestConfig -> Ptr LineConfig -> IO (Ptr LineRequest) +foreign import capi safe "gpiod.h gpiod_chip_request_lines" chipRequestLines :: Ptr Chip -> Ptr RequestConfig -> Ptr LineConfig -> IO (Ptr LineRequest) -foreign import ccall unsafe "gpiod.h gpiod_line_request_release" lineRequestRelease :: Ptr LineRequest -> IO () +foreign import capi safe "gpiod.h gpiod_line_request_release" lineRequestRelease :: Ptr LineRequest -> IO () -foreign import ccall unsafe "gpiod.h gpiod_line_request_set_value" lineRequestSetValue :: Ptr LineRequest -> CUInt -> LineValue -> IO CInt +foreign import capi safe "gpiod.h gpiod_line_request_set_value" lineRequestSetValue :: Ptr LineRequest -> CUInt -> LineValue -> IO CInt -foreign import ccall unsafe "gpiod.h gpiod_line_request_set_values" lineRequestSetValues :: Ptr LineRequest -> Ptr LineValue -> IO CInt +foreign import capi safe "gpiod.h gpiod_line_request_set_values" lineRequestSetValues :: Ptr LineRequest -> Ptr LineValue -> IO CInt -- cgit v1.2.1