Device class diagram
This is the class diagram of device structure.
Note
You can zoom and move around the diagram using the mouse.
classDiagram
direction TB
namespace PublicClasses {
class DeviceHandle {
+string media
+string name
+string addr
+string serial
+Serialize() string
+ToString() string
}
class DeviceRegistryEntry {
<<abstract>>
+enumerate(DeviceHandle hint) DeviceHandle[] *
+make(DeviceHandle handle) SDRDevice *
}
class DeviceRegistry {
+enumerate(DeviceHandle hint) DeviceHandle[] $
+makeDevice(DeviceHandle handle) SDRDevice$
+freeDevice(SDRDevice conn)$
+moduleNames() string[]$
}
class LMS7002M {
-ISPI controlPort
+Device control functions()
}
class SDRDevice {
<<abstract>>
+Configure(...) *
+GetDescriptor() SDRDescriptor *
+Init() *
+Reset() *
+GetGPSLock(...) *
+EnableChannel(...) *
+GetClockFreq(...) double*
+SetClockFreq(...) *
+GetFrequency(...) double*
+SetFrequency(...) *
+GetNCOFrequency(...) double*
+SetNCOFrequency(...) *
+GetNCOOffset(...) double*
+GetNCOIndex(...) int*
+SetNCOIndex(...) *
+GetSampleRate(...) double*
+SetSampleRate(...) *
+GetGain(...) *
+SetGain(...) *
+GetLowPassFilter(...) double*
+SetLowPassFilter(...) *
+GetAntenna(...) uint8_t*
+SetAntenna(...) *
+GetTestSignal(...) TestSignal*
+SetTestSignal(...) *
+GetDCOffsetMode(...) bool*
+SetDCOffsetMode(...) *
+GetDCOffset(...) complex64f_t*
+SetDCOffset(...) *
+GetIQBalance(...) complex64f_t*
+SetIQBalance(...) *
+GetCGENLocked(...) bool*
+GetTemperature(...) double*
+GetSXLocked(...) bool*
+ReadRegister(...) uint*
+WriteRegister(...) *
+LoadConfig(...) *
+SaveConfig(...) *
+GetParameter(...) uint16_t*
+SetParameter(...) *
+Calibrate(...) *
+ConfigureGFIR(...) *
+GetGFIRCoefficients(...) double[]*
+SetGFIRCoefficients(...) *
+SetGFIR(...) *
+Synchronize(...) *
+EnableCache(...) *
+GetHardwareTimestamp(...) uint64_t*
+SetHardwareTimestamp(...) *
+StreamSetup(...) *
+StreamStart(...) *
+StreamStop(...) *
+StreamRx(...) uint32_t*
+StreamTx(...) uint32_t*
+StreamStatus(...) *
+UploadTxWaveform(...)
+SPI(...)
+I2CWrite(...)
+I2CRead(...)
+GPIOWrite(...)
+GPIORead(...)
+GPIODirWrite(...)
+GPIODirRead(...)
+CustomParameterWrite(...)
+CustomParameterRead(...)
+SetMessageLogCallback(...)
+GetInternalChip(...) *
+UploadMemory(...)
+MemoryWrite(...)
+MemoryRead(...)
+OEMTest(...)
+WriteSerialNumber(...)
}
}
%%namespace DeviceEntries {
class DeviceFactoryFX3 {
+enumerate(DeviceHandle hint) DeviceHandle[]
+make(DeviceHandle handle) SDRDevice
}
class DeviceFactoryFTDI {
+enumerate(DeviceHandle hint) DeviceHandle[]
+make(DeviceHandle handle) SDRDevice
}
class DeviceFactoryPCIe {
+enumerate(DeviceHandle hint) DeviceHandle[]
+make(DeviceHandle handle) SDRDevice
}
class USBEntry {
<<abstract>>
+enumerate(DeviceHandle hint) DeviceHandle[]
+make(DeviceHandle handle) SDRDevice *
}
%%}
%%namespace USBCommunications {
class LMS64C_LMS7002M_Over_USB {
+SPI(...)
+ResetDevice(...) int
}
class LMS64C_FPGA_Over_USB {
+SPI(...)
+GPIODirRead(...) int *
+GPIORead(...) int *
+GPIODirWrite(...) int *
+GPIOWrite(...) int *
+CustomParameterWrite(...) int *
+CustomParameterRead(...) int *
+ProgramWrite(...) int *
+MemoryWrite(...) *
+MemoryRead(...) *
}
class USB_CSR_Pipe_Mini {
+Write(...) int
+Read(...) int
#FT601 port
}
class USB_CSR_Pipe_SDR {
+Write(...) int
+Read(...) int
#FX3 port
}
class IUSB {
<<interface>>
+enumerateDevices()*
+Connect(...) bool*
+IsConnected() bool*
+Disconnect()*
+BulkTransfer(...) int32_t*
+ControlTransfer(...) int32_t*
+AllocateAsyncContext()*
+BeginDataXfer(...) int*
+WaitForXfer(...) bool*
+FinishDataXfer(...) int*
+AbortXfer(...)*
+FreeAsyncContext()*
}
class FT601 {
+enumerateDevices()
+Connect(...) bool
+IsConnected() bool
+Disconnect()
+BulkTransfer(...) int32_t
+ControlTransfer(...) int32_t
+AllocateAsyncContext()
+BeginDataXfer(...) int
+WaitForXfer(...) bool
+FinishDataXfer(...) int
+AbortXfer(...)
+FreeAsyncContext()
}
class FX3 {
+enumerateDevices()
+Connect(...) bool
+IsConnected() bool
+Disconnect()
+BulkTransfer(...) int32_t
+ControlTransfer(...) int32_t
+AllocateAsyncContext()
+BeginDataXfer(...) int
+WaitForXfer(...) bool
+FinishDataXfer(...) int
+AbortXfer(...)
+FreeAsyncContext()
}
class USB_CSR_Pipe {
<<abstract>>
+Write(...) int *
+Read(...) int *
}
class USBGeneric {
+enumerateDevices()
+Connect(...) bool
+IsConnected() bool
+Disconnect()
+BulkTransfer(...) int32_t
+ControlTransfer(...) int32_t
+AllocateAsyncContext()
+BeginDataXfer(...) int
+WaitForXfer(...) bool
+FinishDataXfer(...) int
+AbortXfer(...)
+FreeAsyncContext()
}
class USBDMAEmulation {
+Enable(bool)
+EnableContinuous(...)
+GetCounters() State
+SubmitRequest(...)
+Wait()
+BufferOwnership(...)
+GetBuffers() Buffer[]
-AbortAllTransfers()
-UpdateProducerStates()
}
%%}
%%namespace Devices {
class LimeSDR {
+Configure(...)
+Init(...)
+Reset(...)
+EnableChannel(...)
+GetClockFreq(...)double
+SetClockFreq(...)
+SetSampleRate(...)
+SPI(...)
+StreamSetup(...)
+StreamStart(...)
+StreamStop(...)
+GetInternalChip(...)*
+GPIODirRead(...)
+GPIORead(...)
+GPIODirWrite(...)
+GPIOWrite(...)
+CustomParameterWrite(...)
+CustomParameterRead(...)
+UploadMemory(...)
+MemoryRead(...)
+MemoryWrite(...)
#GetDeviceInfo() SDRDescriptor
#ResetUSBFIFO()
#UpdateFPGAInterface(...) $
-USBGeneric mStreamPort
-ISerialPort mSerialPort
-IComms mlms7002mPort
-IComms mfpgaPort
}
class LimeSDR_Mini {
+Configure(...)
+Init(...)
+Reset(...)
+SetSampleRate(...)
+GetClockFreq(...)double
+SetClockFreq(...)
+GetTemperature(...)double
+Synchronize(...)
+SPI(...)
+StreamSetup(...)
+StreamStart(...)
+StreamStop(...)
+GPIODirRead(...)
+GPIORead(...)
+GPIODirWrite(...)
+GPIOWrite(...)
+CustomParameterWrite(...)
+CustomParameterRead(...)
+SetSerialNumber(...)
#GetDeviceInfo() SDRDescriptor
#UpdateFPGAInterface(...) $
-USBGeneric mStreamPort
-ISerialPort mSerialPort
-IComms mlms7002mPort
-IComms mfpgaPort
}
class LimeSDR_X3 {
+Configure(...)
+Init(...)
+Reset(...)
+GetSampleRate(...)double
+SetSampleRate(...)
+GetClockFreq(...)double
+SetClockFreq(...)
+SPI(...)
+StreamSetup(...)
+StreamStop(...)
+CustomParameterWrite(...)
+CustomParameterRead(...)
+UploadMemory(...)
+MemoryRead(...)
+MemoryWrite(...)
+UploadTxWaveform(...)
-CDCM_Dev mClockGeneratorCDCM
-Equalizer mEqualizer
-LimePCIe mTRXStreamPorts[]
-SlaveSelectShim mLMS7002Mcomms[3]
-IComms fpgaPort
}
class LimeSDR_XTRX {
+Configure(...)
+Init(...)
+SetSampleRate(...)
+GetClockFreq(...)double
+SetClockFreq(...)
+SPI(...)
+StreamSetup(...)
+StreamStop(...)
+CustomParameterWrite(...)
+CustomParameterRead(...)
+UploadMemory(...)
+MemoryWrite(...)
+MemoryRead(...)
+OEMTest(...)
+WriteSerialNumber(...)
-IComms lms7002mPort
-IComms fpgaPort
-LimePCIe mStreamPort
-ISerialPort mSerialPort
}
class LimeSDR_MMX8 {
+Configure(...)
+GetDescriptor() SDRDescriptor
+Init()
+Reset()
+GetGPSLock(...)
+EnableChannel(...)
+GetFrequency(...) double
+SetFrequency(...)
+GetNCOFrequency(...) double
+SetNCOFrequency(...)
+GetNCOIndex(...) int
+SetNCOIndex(...)
+GetNCOOffset(...) double
+GetSampleRate(...) double
+SetSampleRate(...)
+GetLowPassFilter(...) double
+SetLowPassFilter(...)
+GetAntenna(...) uint8_t
+SetAntenna(...)
+GetTestSignal(...) TestSignal
+SetTestSignal(...)
+GetClockFreq(...) double
+SetClockFreq(...)
+GetGain(...)
+SetGain(...)
+GetDCOffsetMode(...) bool
+SetDCOffsetMode(...)
+GetDCOffset(...) complex64f_t
+SetDCOffset(...)
+GetIQBalance(...) complex64f_t
+SetIQBalance(...)
+GetCGENLocked(...) bool
+GetTemperature(...) double
+GetSXLocked(...) bool
+ReadRegister(...) uint
+WriteRegister(...)
+LoadConfig(...)
+SaveConfig(...)
+GetParameter(...) uint16_t
+SetParameter(...)
+Synchronize(...)
+EnableCache(...)
+Calibrate(...)
+ConfigureGFIR(...)
+GetGFIRCoefficients(...) double[]
+SetGFIRCoefficients(...)
+SetGFIR(...)
+GetHardwareTimestamp(...) uint64_t
+SetHardwareTimestamp(...)
+StreamSetup(...)
+StreamStart(...)
+StreamStop(...)
+StreamRx(...) uint32_t
+StreamTx(...) uint32_t
+StreamStatus(...)
+SPI(...)
+CustomParameterWrite(...)
+CustomParameterRead(...)
+SetMessageLogCallback(...)
+GetInternalChip(...)
+UploadMemory(...)
+MemoryWrite(...)
+MemoryRead(...)
+UploadTxWaveform(...)
-IComms mMainFPGAcomms
-LimePCIe mTRXStreamPorts[]
-LimeSDR_XTRX mSubDevices[]
-ADF4002 mADF
}
%%}
%%namespace Interfaces {
class ISPI {
<<interface>>
+SPI(...) *
}
class IComms {
<<interface>>
+GPIODirRead(...) *
+GPIORead(...) *
+GPIODirWrite(...) *
+GPIOWrite(...) *
+CustomParameterWrite(...) *
+CustomParameterRead(...) *
+ProgramWrite(...) *
+ResetDevice(...) *
}
class ISerialPort {
<<interface>>
+Write(...) int *
+Read(...) int *
}
class IDMA {
<<interface>>
+Enable(bool) *
+EnableContinuous(...) *
+GetCounters() State *
+SubmitRequest(...) *
+Wait() *
+BufferOwnership(...) *
+GetBuffers() Buffer[] *
}
%%}
%%namespace PCIeCommunications {
class LimePCIeDMA {
+Enable(bool)
+EnableContinuous(...)
+GetCounters() State
+SubmitRequest(...)
+Wait()
+BufferOwnership(...)
+GetBuffers() Buffer[]
}
class LimePCIe {
+Device communication functions()
}
class LMS64C_LMS7002M_Over_PCIe {
+SPI(...)
+ResetDevice(...)
-LimePCIe port
}
class LMS64C_FPGA_Over_PCIe {
+SPI(...)
+CustomParameterWrite(...)
+CustomParameterRead(...)
+ProgramWrite(...)
-LimePCIe port
}
class LMS64C_LMS7002M_Over_PCIe_MMX8 {
+SPI(...)
+ResetDevice(...)
-LimePCIe port
}
class LMS64C_FPGA_Over_PCIe_MMX8 {
+SPI(...)
+CustomParameterWrite(...)
+CustomParameterRead(...)
+ProgramWrite(...)
-LimePCIe port
}
class LMS64C_ADF_Over_PCIe_MMX8 {
+SPI(...)
-LimePCIe port
}
class PCIE_CSR_Pipe {
+Write(...) int
+Read(...) int
#LimePCIe port
}
%%}
%%namespace Components {
class ADF4002 {
-ISPI controlPort
+Device control functions()
}
class CDCM_Dev {
-ISPI controlPort
+Device control functions()
}
class Equalizer {
-ISPI controlPort
+Device control functions()
}
class FPGA {
-ISPI fpgaPort
-ISPI lms7002mPort
+Device control functions()
}
class FPGA_Mini {
+Device control functions()
}
class FPGA_X3 {
+Device control functions()
}
class FPGA_XTRX {
+Device control functions()
}
%%}
class LMS7002M_SDRDevice {
<<abstract>>
+GetDescriptor(...) SDRDescriptor
+Reset(...)
+GetGPSLock(...)
+EnableChannel(...)
+GetFrequency(...) double
+SetFrequency(...)
+GetNCOFrequency(...) double
+SetNCOFrequency(...)
+GetNCOIndex(...) int
+SetNCOIndex(...)
+GetNCOOffset(...) double
+GetSampleRate(...)double
+GetGain(...)
+SetGain(...)
+GetLowPassFilter(...) double
+SetLowPassFilter(...)
+GetAntenna(...) uint8_t
+SetAntenna(...)
+GetTestSignal(...) TestSignal
+SetTestSignal(...)
+GetDCOffsetMode(...) bool
+SetDCOffsetMode(...)
+GetDCOffset(...) complex64f_t
+SetDCOffset(...)
+GetIQBalance(...) complex64f_t
+SetIQBalance(...)
+GetCGENLocked(...) bool
+GetTemperature(...) double
+GetSXLocked(...) bool
+ReadRegister(...) uint
+WriteRegister(...)
+LoadConfig(...)
+SaveConfig(...)
+GetParameter(...) uint16_t
+SetParameter(...)
+Calibrate(...)
+ConfigureGFIR(...)
+GetGFIRCoefficients(...) double[]
+SetGFIRCoefficients(...)
+SetGFIR(...)
+Synchronize(...)
+EnableCache(...)
+GetHardwareTimestamp(...) uint64_t
+SetHardwareTimestamp(...)
+StreamStart(...)
+StreamStop(...)
+StreamRx(...)int
+StreamTx(...)int
+StreamStatus(...)
+SPI(...)
+SetMessageLogCallback(...)
+GetInternalChip(...)
+UploadMemory(...)
#UpdateFPGAInterfaceFrequency(...) $
#SetGainInformationInDescriptor(...)
#LMS7002M mLMSChips[]
#TRXLooper mStreamers[]
#FPGA mFPGA
}
class SlaveSelectShim {
-IComms port
+SPI(...)
+ResetDevice(...)
}
class TRXLooper {
+GetHardwareTimestamp() uint64_t
+SetHardwareTimestamp(uint64_t now)
+Setup(...)
+Start()
+Stop()
+StreamRx(...)int
+StreamTx(...)int
#RxSetup()int
#ReceivePacketsLoop()
#RxTeardown()
#TxSetup()int
#TransmitPacketsLoop()
#TxTeardown()
#FPGA fpga
#LMS7002M lms
}
%% Device entry tree
DeviceRegistryEntry <|-- USBEntry
DeviceFactoryFX3 --|> USBEntry
DeviceFactoryFTDI --|> USBEntry
DeviceRegistryEntry <|-- DeviceFactoryPCIe
SDRDevice <.. DeviceRegistry
DeviceRegistry ..> DeviceHandle
DeviceHandle <.. DeviceRegistryEntry
DeviceRegistry ..> DeviceRegistryEntry
%% Interface implementations
IComms ..|> ISPI
USB_CSR_Pipe ..|> ISerialPort
LMS64C_LMS7002M_Over_USB ..|> IComms
LMS64C_FPGA_Over_USB ..|> IComms
SlaveSelectShim ..|> ISPI
PCIE_CSR_Pipe ..|> ISerialPort
LMS64C_FPGA_Over_PCIe ..|> IComms
LMS64C_LMS7002M_Over_PCIe ..|> IComms
LMS64C_ADF_Over_PCIe_MMX8 ..|> ISPI
LMS64C_FPGA_Over_PCIe_MMX8 ..|> IComms
LMS64C_LMS7002M_Over_PCIe_MMX8 ..|> IComms
USBDMAEmulation ..|> IDMA
LimePCIeDMA ..|> IDMA
%% SDRDevice implementations
SDRDevice <|-- LMS7002M_SDRDevice
SDRDevice <|-- LimeSDR_MMX8
LMS7002M_SDRDevice <|-- LimeSDR
LMS7002M_SDRDevice <|-- LimeSDR_Mini
LMS7002M_SDRDevice <|-- LimeSDR_X3
LMS7002M_SDRDevice <|-- LimeSDR_XTRX
LimeSDR_XTRX <|-- XSDR
%% USB entry connections
DeviceFactoryFX3 ..> FX3
DeviceFactoryFX3 ..> USB_CSR_Pipe_SDR
DeviceFactoryFX3 ..> LMS64C_LMS7002M_Over_USB
DeviceFactoryFX3 ..> LMS64C_FPGA_Over_USB
DeviceFactoryFTDI ..> FT601
DeviceFactoryFTDI ..> USB_CSR_Pipe_Mini
DeviceFactoryFTDI ..> LMS64C_LMS7002M_Over_USB
DeviceFactoryFTDI ..> LMS64C_FPGA_Over_USB
%% USB connections
LMS64C_LMS7002M_Over_USB --* USB_CSR_Pipe
LMS64C_FPGA_Over_USB --* USB_CSR_Pipe
USB_CSR_Pipe_Mini --* FT601
USB_CSR_Pipe_SDR --* FX3
USB_CSR_Pipe_Mini --|> USB_CSR_Pipe
USB_CSR_Pipe_SDR --|> USB_CSR_Pipe
FT601 --|> IUSB
FX3 --|> IUSB
USBGeneric --|> IUSB
%% USB devices
LimeSDR ..> IUSB
LimeSDR ..> ISerialPort
LimeSDR ..> IComms
LimeSDR_Mini ..> IUSB
LimeSDR_Mini ..> ISerialPort
LimeSDR_Mini ..> IComms
LimeSDR_Mini ..> FPGA_Mini
USBDMAEmulation ..> IUSB
%% PCIe connections
PCIE_CSR_Pipe ..> LimePCIe
SlaveSelectShim ..> IComms
LMS64C_FPGA_Over_PCIe ..> PCIE_CSR_Pipe
LMS64C_LMS7002M_Over_PCIe ..> PCIE_CSR_Pipe
LMS64C_ADF_Over_PCIe_MMX8 ..> PCIE_CSR_Pipe
LMS64C_FPGA_Over_PCIe_MMX8 ..> PCIE_CSR_Pipe
LMS64C_LMS7002M_Over_PCIe_MMX8 ..> PCIE_CSR_Pipe
LimePCIeDMA ..> LimePCIe
%% PCIe entry connections
DeviceFactoryPCIe ..> LimePCIe
DeviceFactoryPCIe ..> LMS64C_LMS7002M_Over_PCIe
DeviceFactoryPCIe ..> LMS64C_FPGA_Over_PCIe
DeviceFactoryPCIe ..> LMS64C_LMS7002M_Over_PCIe_MMX8
DeviceFactoryPCIe ..> LMS64C_FPGA_Over_PCIe_MMX8
DeviceFactoryPCIe ..> LMS64C_ADF_Over_PCIe_MMX8
%% PCIe devices
LimeSDR_X3 ..> CDCM_Dev
LimeSDR_X3 ..> Equalizer
LimeSDR_X3 ..> LimePCIe
LimeSDR_X3 ..> SlaveSelectShim
LimeSDR_X3 ..> IComms
FPGA_X3 <.. LimeSDR_X3
LimeSDR_XTRX ..> IComms
LimeSDR_XTRX ..> LimePCIe
LimeSDR_XTRX ..> FPGA_XTRX
LimeSDR_MMX8 ..> IComms
LimeSDR_MMX8 ..> LimePCIe
LimeSDR_MMX8 ..> LimeSDR_XTRX
LimeSDR_MMX8 ..> ADF4002
%% Component dependencies
LMS7002M ..> ISPI
LMS7002M_SDRDevice ..> LMS7002M
LMS7002M_SDRDevice ..> TRXLooper
LMS7002M_SDRDevice ..> FPGA
FPGA_Mini --|> FPGA
FPGA <|-- FPGA_X3
FPGA_XTRX --|> FPGA
TRXLooper ..> FPGA
TRXLooper ..> LMS7002M
TRXLooper ..> IDMA
ADF4002 ..> ISPI
CDCM_Dev ..> ISPI
Equalizer ..> ISPI
FPGA ..> ISPI