144 lines
5.0 KiB
C++
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
|