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