module LibBladeRF.Types ( BladeRFLogLevel(..)
, BladeRFVersion(..)
, BladeRFDeviceInfo(..)
, BladeRFFPGASize(..)
, BladeRFBackend(..)
, BladeRFRationalRate(..)
, BladeRFModule(..)
, BladeRFFormat(..)
, BladeRFLNAGain(..)
, BladeRFVGAGainBounds(..)
, BladeRFCorrection(..)
, BladeRFSpeed(..)
, BladeRFMetadata(..)
, BladeRFLoopback(..)
) where
import Bindings.LibBladeRF
import Foreign.C.Types
import Data.Word
import Data.Maybe
import Data.Tuple
data BladeRFLogLevel = LOG_LEVEL_VERBOSE
| LOG_LEVEL_DEBUG
| LOG_LEVEL_INFO
| LOG_LEVEL_WARNING
| LOG_LEVEL_ERROR
| LOG_LEVEL_CRITICAL
| LOG_LEVEL_SILENT
deriving (Eq)
instance Enum BladeRFLogLevel where
fromEnum = fromJust . flip lookup loglevels
toEnum = fromJust . flip lookup (map swap loglevels)
loglevels = [ (LOG_LEVEL_VERBOSE, c'BLADERF_LOG_LEVEL_VERBOSE)
, (LOG_LEVEL_DEBUG, c'BLADERF_LOG_LEVEL_DEBUG)
, (LOG_LEVEL_INFO, c'BLADERF_LOG_LEVEL_INFO)
, (LOG_LEVEL_WARNING, c'BLADERF_LOG_LEVEL_WARNING)
, (LOG_LEVEL_ERROR, c'BLADERF_LOG_LEVEL_ERROR)
, (LOG_LEVEL_CRITICAL, c'BLADERF_LOG_LEVEL_CRITICAL)
, (LOG_LEVEL_SILENT, c'BLADERF_LOG_LEVEL_SILENT)
]
data BladeRFVersion = BladeRFVersion { major :: Word16
, minor :: Word16
, patch :: Word16
, descr :: String
} deriving (Eq)
instance Show BladeRFVersion where
show a = show (major a) ++ "." ++
show (minor a) ++ "." ++
show (patch a) ++ " (" ++
descr a ++ ")"
data BladeRFDeviceInfo = BladeRFDeviceInfo { backend :: BladeRFBackend
, serial :: String
, usbBus :: Word8
, usbAddr :: Word8
, inst :: CUInt
} deriving (Eq)
instance Show BladeRFDeviceInfo where
show a = " Backend : " ++ show (backend a) ++ "\n" ++
" Serial #: " ++ serial a ++ "\n" ++
" USB bus: " ++ show (usbBus a) ++ "\n" ++
" USB address: " ++ show (usbAddr a) ++ "\n" ++
" Instance: " ++ show (inst a)
data BladeRFFPGASize = FPGA_UNKNOWN
| FPGA_40KLE
| FPGA_115KLE
deriving (Eq)
instance Show BladeRFFPGASize where
show FPGA_UNKNOWN = "Unable to determine FPGA variant"
show FPGA_40KLE = "40 kLE FPGA"
show FPGA_115KLE = "115 kLE FPGA"
instance Enum BladeRFFPGASize where
fromEnum = fromJust . flip lookup sizes
toEnum = fromJust . flip lookup (map swap sizes)
sizes = [ (FPGA_UNKNOWN, c'BLADERF_FPGA_UNKNOWN)
, (FPGA_40KLE, c'BLADERF_FPGA_40KLE)
, (FPGA_115KLE, c'BLADERF_FPGA_115KLE)
]
data BladeRFBackend = BACKEND_ANY
| BACKEND_LINUX
| BACKEND_LIBUSB
| BACKEND_CYPRESS
| BACKEND_DUMMY
deriving (Eq)
instance Show BladeRFBackend where
show BACKEND_ANY = "Don't Care, use any available backend"
show BACKEND_LINUX = "Linux kernel driver"
show BACKEND_LIBUSB = "libusb"
show BACKEND_CYPRESS = "CyAPI"
show BACKEND_DUMMY = "Dummy used for development purposes"
instance Enum BladeRFBackend where
fromEnum = fromJust . flip lookup backends
toEnum = fromJust . flip lookup (map swap backends)
backends = [ (BACKEND_ANY, c'BLADERF_BACKEND_ANY)
, (BACKEND_LINUX, c'BLADERF_BACKEND_LINUX)
, (BACKEND_LIBUSB, c'BLADERF_BACKEND_LIBUSB)
, (BACKEND_CYPRESS, c'BLADERF_BACKEND_CYPRESS)
, (BACKEND_DUMMY, c'BLADERF_BACKEND_DUMMY)
]
data BladeRFRationalRate = BladeRFRationalRate { integer :: Word64
, num :: Word64
, den :: Word64
} deriving (Eq, Show)
data BladeRFModule = MODULE_RX
| MODULE_TX
deriving (Eq)
instance Enum BladeRFModule where
fromEnum = fromJust . flip lookup modules
toEnum = fromJust . flip lookup (map swap modules)
modules = [ (MODULE_RX, c'BLADERF_MODULE_RX)
, (MODULE_TX, c'BLADERF_MODULE_TX)
]
data BladeRFFormat
= FORMAT_SC16_Q11
| FORMAT_SC16_Q11_META
deriving (Eq)
instance Enum BladeRFFormat where
fromEnum = fromJust . flip lookup formats
toEnum = fromJust . flip lookup (map swap formats)
formats = [ (FORMAT_SC16_Q11, c'BLADERF_FORMAT_SC16_Q11)
, (FORMAT_SC16_Q11_META, c'BLADERF_FORMAT_SC16_Q11_META)
]
data BladeRFLNAGain = LNA_GAIN_UNKNOWN
| LNA_GAIN_BYPASS
| LNA_GAIN_MID
| LNA_GAIN_MAX
deriving (Eq)
instance Enum BladeRFLNAGain where
fromEnum = fromJust . flip lookup lgains
toEnum = fromJust . flip lookup (map swap lgains)
lgains = [ (LNA_GAIN_UNKNOWN, c'BLADERF_LNA_GAIN_UNKNOWN)
, (LNA_GAIN_BYPASS, c'BLADERF_LNA_GAIN_BYPASS)
, (LNA_GAIN_MID, c'BLADERF_LNA_GAIN_MID)
, (LNA_GAIN_MAX, c'BLADERF_LNA_GAIN_MAX)
]
data BladeRFVGAGainBounds = RXVGA1_GAIN_MIN
| RXVGA1_GAIN_MAX
| RXVGA2_GAIN_MIN
| RXVGA2_GAIN_MAX
| TXVGA1_GAIN_MIN
| TXVGA1_GAIN_MAX
| TXVGA2_GAIN_MIN
| TXVGA2_GAIN_MAX
deriving (Eq)
instance Enum BladeRFVGAGainBounds where
fromEnum = fromJust . flip lookup vgains
toEnum = fromJust . flip lookup (map swap vgains)
vgains = [ (RXVGA1_GAIN_MIN, c'BLADERF_RXVGA1_GAIN_MIN)
, (RXVGA1_GAIN_MAX, c'BLADERF_RXVGA1_GAIN_MAX)
, (RXVGA2_GAIN_MIN, c'BLADERF_RXVGA2_GAIN_MIN)
, (RXVGA2_GAIN_MAX, c'BLADERF_RXVGA2_GAIN_MAX)
, (TXVGA1_GAIN_MIN, c'BLADERF_TXVGA1_GAIN_MIN)
, (TXVGA1_GAIN_MAX, c'BLADERF_TXVGA1_GAIN_MAX)
, (TXVGA2_GAIN_MIN, c'BLADERF_TXVGA2_GAIN_MIN)
, (TXVGA2_GAIN_MAX, c'BLADERF_TXVGA2_GAIN_MAX)
]
data BladeRFCorrection = CORR_LMS_DCOFF_I
| CORR_LMS_DCOFF_Q
| CORR_FPGA_PHASE
| CORR_FPGA_GAIN
deriving (Eq)
instance Enum BladeRFCorrection where
fromEnum = fromJust . flip lookup corrections
toEnum = fromJust . flip lookup (map swap corrections)
corrections = [ (CORR_LMS_DCOFF_I, c'BLADERF_CORR_LMS_DCOFF_I)
, (CORR_LMS_DCOFF_Q, c'BLADERF_CORR_LMS_DCOFF_Q)
, (CORR_FPGA_PHASE, c'BLADERF_CORR_FPGA_PHASE)
, (CORR_FPGA_GAIN, c'BLADERF_CORR_FPGA_GAIN)
]
data BladeRFSpeed = DEVICE_SPEED_UNKNOWN
| DEVICE_SPEED_HIGH
| DEVICE_SPEED_SUPER
deriving (Eq)
instance Show BladeRFSpeed where
show DEVICE_SPEED_UNKNOWN = "unknown speed"
show DEVICE_SPEED_HIGH = "high speed"
show DEVICE_SPEED_SUPER = "super speed"
instance Enum BladeRFSpeed where
fromEnum = fromJust . flip lookup speeds
toEnum = fromJust . flip lookup (map swap speeds)
speeds = [ (DEVICE_SPEED_UNKNOWN, c'BLADERF_DEVICE_SPEED_UNKNOWN)
, (DEVICE_SPEED_HIGH, c'BLADERF_DEVICE_SPEED_HIGH)
, (DEVICE_SPEED_SUPER, c'BLADERF_DEVICE_SPEED_SUPER)
]
data BladeRFMetadata = BladeRFMetadata { timestamp :: Word64
, flags :: Word32
, status :: Word32
, count :: Int
}
data BladeRFLoopback = LB_FIRMWARE
| LB_BB_TXLPF_RXVGA2
| LB_BB_TXVGA1_RXVGA2
| LB_BB_TXLPF_RXLPF
| LB_BB_TXVGA1_RXLPF
| LB_RF_LNA1
| LB_RF_LNA2
| LB_RF_LNA3
| LB_NONE
deriving (Eq)
instance Enum BladeRFLoopback where
fromEnum = fromJust . flip lookup loopbacks
toEnum = fromJust . flip lookup (map swap loopbacks)
loopbacks = [ (LB_FIRMWARE, c'BLADERF_LB_FIRMWARE)
, (LB_BB_TXLPF_RXVGA2, c'BLADERF_LB_BB_TXLPF_RXVGA2)
, (LB_BB_TXVGA1_RXVGA2, c'BLADERF_LB_BB_TXVGA1_RXVGA2)
, (LB_BB_TXLPF_RXLPF, c'BLADERF_LB_BB_TXLPF_RXLPF)
, (LB_BB_TXVGA1_RXLPF, c'BLADERF_LB_BB_TXVGA1_RXLPF)
, (LB_RF_LNA1, c'BLADERF_LB_RF_LNA1)
, (LB_RF_LNA2, c'BLADERF_LB_RF_LNA2)
, (LB_RF_LNA3, c'BLADERF_LB_RF_LNA3)
, (LB_NONE, c'BLADERF_LB_NONE)
]