{-| 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 () bladeRFDACWrite dev v = do c'bladerf_dac_write (unDeviceHandle dev) v return () -- ignores ret -- | Get module's current frequency in Hz bladeRFGetFrequency :: DeviceHandle -- ^ Device handle -> BladeRFModule -- ^ Module to configure -> IO Int -- ^ Returned frequency bladeRFGetFrequency dev m = do pf <- malloc :: IO (Ptr CUInt) c'bladerf_get_frequency (unDeviceHandle dev) ((fromIntegral . fromEnum) m) pf f <- peek pf free pf return $ fromIntegral f -- | Set module's frequency in Hz. bladeRFSetFrequency :: DeviceHandle -- ^ Device handle -> BladeRFModule -- ^ Module to configure -> Int -- ^ Desired frequency -> IO () bladeRFSetFrequency dev m f = do c'bladerf_set_frequency (unDeviceHandle dev) ((fromIntegral . fromEnum) m) (fromIntegral f) return () -- ignores 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 Word16 -- ^ Current value bladeRFGetCorrection dev m c = do pc <- malloc :: IO (Ptr Word16) c'bladerf_get_correction (unDeviceHandle dev) ((fromIntegral . fromEnum) m) ((fromIntegral . fromEnum) c) pc c <- peek pc free pc return c -- | 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 () bladeRFSetCorrection dev m c v = do c'bladerf_set_correction (unDeviceHandle dev) ((fromIntegral . fromEnum) m) ((fromIntegral . fromEnum) c) v return () -- ignores ret