hlibBladeRF-0.1.0.6: src/LibBladeRF/Frequency.hs
{-|
Module : $Header$
Copyright : (c) 2014 Edward O'Callaghan
License : LGPL-2.1
Maintainer : eocallaghan@alterapraxis.com
Stability : provisional
Portability : portable
This module encapsulates frequency adjustments libbladeRF library functions.
-}
module LibBladeRF.Frequency ( bladeRFDACWrite
, bladeRFGetFrequency
, bladeRFSetFrequency
, bladeRFGetCorrection
, bladeRFSetCorrection
) where
import Foreign
import Foreign.C.Types
import Foreign.C.String
import Bindings.LibBladeRF
import LibBladeRF.LibBladeRF
import LibBladeRF.Types
-- | Write value to VCTCXO DAC.
bladeRFDACWrite :: DeviceHandle -- ^ Device handle
-> Word16 -- ^ Data to write to DAC register
-> IO (BladeRFReturnType ())
bladeRFDACWrite dev v = do
ret <- c'bladerf_dac_write (unDeviceHandle dev) v
return $ bladeRFErrorTy ret
-- | Get module's current frequency in Hz.
bladeRFGetFrequency :: DeviceHandle -- ^ Device handle
-> BladeRFModule -- ^ Module to configure
-> IO (BladeRFReturnType Int) -- ^ Returned frequency
bladeRFGetFrequency dev m = alloca $ \pf -> do
ret <- c'bladerf_get_frequency (unDeviceHandle dev) ((fromIntegral . fromEnum) m) pf
if ret < 0 then (return . Left . toEnum . fromIntegral) ret -- C ret code to typed error
else do freq <- peek pf
(return . Right . fromIntegral) freq
-- | Set module's frequency in Hz.
bladeRFSetFrequency :: DeviceHandle -- ^ Device handle
-> BladeRFModule -- ^ Module to configure
-> Int -- ^ Desired frequency
-> IO (BladeRFReturnType ())
bladeRFSetFrequency dev m f = do
ret <- c'bladerf_set_frequency (unDeviceHandle dev) ((fromIntegral . fromEnum) m) (fromIntegral f)
return $ bladeRFErrorTy ret
-- | Obtain the current value of the specified configuration parameter.
bladeRFGetCorrection :: DeviceHandle -- ^ Device handle
-> BladeRFModule -- ^ Module to retrieve correction information from
-> BladeRFCorrection -- ^ Correction type
-> IO (BladeRFReturnType Word16) -- ^ Current value
bladeRFGetCorrection dev m c = alloca $ \pc -> do
ret <- c'bladerf_get_correction (unDeviceHandle dev) ((fromIntegral . fromEnum) m) ((fromIntegral . fromEnum) c) pc
if ret < 0 then (return . Left . toEnum . fromIntegral) ret -- C ret code to typed error
else do corr <- peek pc
(return . Right) corr
-- | Set the value of the specified configuration parameter.
bladeRFSetCorrection :: DeviceHandle -- ^ Device handle
-> BladeRFModule -- ^ Module to apply correction to
-> BladeRFCorrection -- ^ Correction type
-> Word16 -- ^ Value to apply
-> IO (BladeRFReturnType ())
bladeRFSetCorrection dev m c v = do
ret <- c'bladerf_set_correction (unDeviceHandle dev) ((fromIntegral . fromEnum) m) ((fromIntegral . fromEnum) c) v
return $ bladeRFErrorTy ret