module LibBladeRF.Sampling ( bladeRFSetSampleRate
, bladeRFSetRationalSampleRate
, bladeRFSetBandwidth
) where
import Foreign
import Foreign.C.Types
import Foreign.C.String
import Bindings.LibBladeRF
import LibBladeRF.LibBladeRF
import LibBladeRF.Types
bladeRFSetSampleRate :: DeviceHandle
-> BladeRFModule
-> Int
-> IO Int
bladeRFSetSampleRate dev m r = do
par <- malloc :: IO (Ptr CUInt)
c'bladerf_set_sample_rate (unDeviceHandle dev) ((fromIntegral . fromEnum) m) (fromIntegral r) par
actual <- peek par
free par
return $ fromIntegral actual
bladeRFSetRationalSampleRate :: DeviceHandle
-> BladeRFModule
-> BladeRFRationalRate
-> IO BladeRFRationalRate
bladeRFSetRationalSampleRate dev m r = do
pr <- malloc :: IO (Ptr C'bladerf_rational_rate)
par <- malloc :: IO (Ptr C'bladerf_rational_rate)
let rate = C'bladerf_rational_rate { c'bladerf_rational_rate'integer = integer r
, c'bladerf_rational_rate'num = num r
, c'bladerf_rational_rate'den = den r
}
poke pr rate
c'bladerf_set_rational_sample_rate (unDeviceHandle dev) ((fromIntegral . fromEnum) m) pr par
ar <- peek par
let actual = BladeRFRationalRate { integer = c'bladerf_rational_rate'integer ar
, num = c'bladerf_rational_rate'num ar
, den = c'bladerf_rational_rate'den ar
}
free pr
free par
return actual
bladeRFSetBandwidth :: DeviceHandle
-> BladeRFModule
-> Int
-> IO Int
bladeRFSetBandwidth dev m b = do
ab <- malloc :: IO (Ptr CUInt)
c'bladerf_set_bandwidth (unDeviceHandle dev) ((fromIntegral . fromEnum) m) (fromIntegral b) ab
actual <- peek ab
free ab
return $ fromIntegral actual