Files
openairinterface5g/targets/ARCH/LMSSDR/USERSPACE/LIB/lmsSDR/LMS_SDR.h
T

144 lines
5.0 KiB
C++

/**
@author Lime Microsystems
@brief Interface for implementing SDR using Lime microsystems boards
*/
#ifndef LMS_SDR_INTERFACE_H
#define LMS_SDR_INTERFACE_H
#include <stdint.h>
#ifdef __cplusplus
class LMScomms;
#else
typedef void LMScomms;
#endif
#define BUILD_DLL
#ifndef __unix__
#ifdef BUILD_DLL
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT __declspec(dllimport)
#endif
#else
#define DLL_EXPORT
#endif
#ifdef __cplusplus
extern "C" {
#endif
/** @brief Returns stats of internal buffers
@param RxBufSize Receiver buffer size in samples
@param RxBufFilled Number of samples currently in the receiver buffer
@param RxSamplingRate Approximate receiver sampling rate, calculated from incomming data
@param TxBufSize Transmitter buffer size in samples
@param TxBufFilled Number of samples currently in the transmitter buffer
@param TxSamplingRate Approximate transmitter sampling rate, calculated from incomming data
*/
DLL_EXPORT void LMS_Stats(uint32_t *RxBufSize, uint32_t *RxBufFilled, uint32_t *RxSamplingRate, uint32_t *TxBufSize, uint32_t *TxBufFilled, uint32_t *TxSamplingRate);
/** @brief Initializes internal memory for samples buffering to hardware
@param OperationMode samples transfering mode: 0-packets synchronized, 1-packets not synchronized
@param trxBuffersLength Rx and Tx internal buffers size in samples
@return 0 success, -1 failure
Generally trxBuffersSamplesCount should be more than 65536
*/
DLL_EXPORT int LMS_Init(const int OperationMode, uint32_t trxBuffersLength);
/** @brief Stops internal threads and frees internal buffers memory
@return 0 success, -1 failure
*/
DLL_EXPORT int LMS_Destroy();
///@name Device connection
/** @return object for communicating over USB port
*/
DLL_EXPORT LMScomms* LMS_GetUSBPort();
/** @return object for communicating over COM port
*/
DLL_EXPORT LMScomms* LMS_GetCOMPort();
/** @brief Refreshes currently connected device list
@param port Communications port to update
@return number of devices connected
*/
DLL_EXPORT int LMS_UpdateDeviceList(LMScomms* port);
/** @brief Returns pointer to static null terminated c-string name of selected device
@param port Communications port object
@param deviceIndex index from communications port device list
*/
DLL_EXPORT const char* LMS_GetDeviceName(LMScomms* port, unsigned int deviceIndex);
/** @brief Connects to selected device on given port
@param port Communications port object
@param deviceIndex index from communications port device list
@return 0-success
*/
DLL_EXPORT int LMS_DeviceOpen(LMScomms* port, const uint32_t deviceIndex);
/** @brief Closes connection on given port
@param port Communications port to close
*/
DLL_EXPORT void LMS_DeviceClose(LMScomms* port);
///@}
///@name Communications
/** @brief Writes given data to control port
@param port Port for communications
@param buffer data to be written
@param bufLen buffer length in bytes
@return number of bytes written
*/
DLL_EXPORT uint32_t LMS_ControlWrite(LMScomms* port, const uint8_t *buffer, const uint16_t bufLen);
/** @brief Reads given data from SPI regiter
@param port Port for communications
@param buffer destination buffer for data
@param bufLen number of bytes to read
@return number of bytes read
*/
DLL_EXPORT uint32_t LMS_ControlRead(LMScomms* port, uint8_t* buffer, const uint16_t bufLen);
/** @brief Starts thread for samples receiving
@return 0-success
*/
DLL_EXPORT int LMS_RxStart();
/** @brief Stops samples receiving thread
@return 0:success, 1:failed
*/
DLL_EXPORT int LMS_RxStop();
/** @brief Adds given samples to transmitter buffer, to be sent at specified timestamp
@param buffer source array for interleaved values (IQIQIQ...), each value amplitude should be from -2048 to 2047
@param samplesCount number of samples in buffer, 1 sample = 2 bytes I + 2 bytes Q
@param channel_id destination channel
@param timestamp timestamp when the first sample in buffer should be transmitted (used only in synchronized operating mode)
@param timeout_ms time amount in milliseconds to try adding samples
@return number of samples written
*/
DLL_EXPORT uint32_t LMS_TRxWrite(const int16_t *buffer, const uint32_t samplesCount, const uint32_t channel_id, uint64_t timestamp);
/** @brief Reads samples from receiver buffer
@param buffer destination array for interleaved values (IQIQIQ...), must be big enough to store requested number of samples, each value amplitude will be from -2048 to 2047
@param samplesCount number of samples to read, 1 sample = 2 bytes I + 2 bytes Q
@param antenna_id source channel
@param timestamp returns timestamp of the first sample in the buffer (used only in synchronized operating mode)
@param timeout_ms time amount in milliseconds to try reading samples
@return number of samples read
*/
DLL_EXPORT uint32_t LMS_TRxRead(int16_t *buffer, const uint32_t samplesCount, const uint32_t channel_id, uint64_t *timestamp, const uint32_t timeout_ms);
///@}
#ifdef __cplusplus
} //extern "C"
#endif
#endif //LMS_SDR_INTERFACE_H