aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Oliver <contact@pauloliver.dev>2025-09-05 00:18:12 +0000
committerPaul Oliver <contact@pauloliver.dev>2025-09-05 00:32:06 +0000
commit3e421853dc1bae83e9967cfed5b2ac58a169d9c5 (patch)
treeaf16e250a07ea33dfe4f6a4b66b8ccbd5fe73ef5
parent8f9eceffae1d0e4eb0b2fbcb22b70730bb75bd5e (diff)
Makes all FFI calls safe
-rw-r--r--hsm-cam/Hsm/Cam/FFI.hs34
-rw-r--r--hsm-gpio/Hsm/GPIO/FFI.hs40
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