Files
openairinterface5g/targets/ARCH/LMSSDR/USERSPACE/LIB/lms7002m/lmsComms.h
T

112 lines
2.7 KiB
C++

/**
@file LMScomms.h
@author Lime Microsystems (www.limemicro.com)
@brief Class for handling data transmission to LMS boards
*/
#ifndef LMS_COMMS_H
#define LMS_COMMS_H
#include "lms7002_defines.h"
#include "connectionManager/ConnectionManager.h"
#include <string.h>
#include <mutex>
struct LMSinfo
{
eLMS_DEV device;
eEXP_BOARD expansion;
int firmware;
int hardware;
int protocol;
};
/* @brief Class for abstracting transfering data to and from chip
*/
class LMScomms : public ConnectionManager
{
public:
enum TransferStatus
{
TRANSFER_SUCCESS,
TRANSFER_FAILED,
NOT_CONNECTED
};
enum eLMS_PROTOCOL
{
LMS_PROTOCOL_UNDEFINED = 0,
LMS_PROTOCOL_DIGIC,
LMS_PROTOCOL_LMS64C,
LMS_PROTOCOL_NOVENA,
};
struct ProtocolDIGIC
{
static const int pktLength = 64;
static const int maxDataLength = 60;
ProtocolDIGIC() : cmd(0), i2cAddr(0), blockCount(0) {};
unsigned char cmd;
unsigned char i2cAddr;
unsigned char blockCount;
unsigned char reserved;
unsigned char data[maxDataLength];
};
struct ProtocolLMS64C
{
static const int pktLength = 64;
static const int maxDataLength = 56;
ProtocolLMS64C() :cmd(0),status(STATUS_UNDEFINED),blockCount(0)
{
memset(reserved, 0, 5);
};
unsigned char cmd;
unsigned char status;
unsigned char blockCount;
unsigned char reserved[5];
unsigned char data[maxDataLength];
};
struct ProtocolNovena
{
static const int pktLength = 128;
static const int maxDataLength = 128;
ProtocolNovena() :cmd(0),status(0) {};
unsigned char cmd;
unsigned char status;
unsigned char blockCount;
unsigned char data[maxDataLength];
};
struct GenericPacket
{
GenericPacket()
{
cmd = CMD_GET_INFO;
status = STATUS_UNDEFINED;
}
eCMD_LMS cmd;
eCMD_STATUS status;
vector<unsigned char> outBuffer;
vector<unsigned char> inBuffer;
};
LMScomms();
~LMScomms();
virtual TransferStatus TransferPacket(GenericPacket &pkt);
LMSinfo GetInfo();
void SetDataLogCallback(std::function<void(bool, const unsigned char*, const unsigned int)> callback);
protected:
std::function<void(bool, const unsigned char*, const unsigned int)> callback_logData;
std::mutex mControlPortLock;
unsigned char* PreparePacket(const GenericPacket &pkt, int &length, const eLMS_PROTOCOL protocol);
int ParsePacket(GenericPacket &pkt, const unsigned char* buffer, const int length, const eLMS_PROTOCOL protocol);
protected:
bool mSystemBigEndian;
};
#endif // LMS_COMMS_H