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
actual <- alloca $ \par -> do
c'bladerf_set_sample_rate (unDeviceHandle dev) ((fromIntegral . fromEnum) m) (fromIntegral r) par
peek par
return $ fromIntegral actual
bladeRFSetRationalSampleRate :: DeviceHandle
-> BladeRFModule
-> BladeRFRationalRate
-> IO BladeRFRationalRate
bladeRFSetRationalSampleRate dev m r = do
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
}
ar <- alloca $ \pr -> do
poke pr rate
alloca $ \par -> do
c'bladerf_set_rational_sample_rate (unDeviceHandle dev) ((fromIntegral . fromEnum) m) pr par
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
}
return actual
bladeRFSetBandwidth :: DeviceHandle
-> BladeRFModule
-> Int
-> IO Int
bladeRFSetBandwidth dev m b = do
actual <- alloca $ \ab -> do
c'bladerf_set_bandwidth (unDeviceHandle dev) ((fromIntegral . fromEnum) m) (fromIntegral b) ab
peek ab
return $ fromIntegral actual