IPBS_Station/SDK/Depend/CSerialPort/bindings/c/cserialport.cpp
2024-08-13 17:07:34 +08:00

477 lines
11 KiB
C++

#include "cserialport.h"
#include "CSerialPort/SerialPort.h"
#include "CSerialPort/SerialPortInfo.h"
#include "CSerialPort/iutils.hpp"
#include <vector>
class CSPListener : public itas109::CSerialPortListener
{
public:
CSPListener(void *pSerialPort, pFunReadEvent pFun)
: m_pSerialPort(pSerialPort)
, m_pFun(pFun){};
void onReadEvent(const char *portName, unsigned int readBufferLen)
{
m_pFun(m_pSerialPort, portName, readBufferLen);
};
private:
void *m_pSerialPort;
pFunReadEvent m_pFun;
};
void CSerialPortAvailablePortInfos(SerialPortInfoArray *portInfoArray)
{
std::vector<itas109::SerialPortInfo> portInfos = itas109::CSerialPortInfo::availablePortInfos();
portInfoArray->size = static_cast<unsigned int>(portInfos.size());
if (portInfoArray->size > 0)
{
portInfoArray->portInfo = new SerialPortInfo[portInfoArray->size];
for (unsigned int i = 0; i < portInfoArray->size; ++i)
{
itas109::IUtils::strncpy(portInfoArray->portInfo[i].portName, portInfos[i].portName, 256);
itas109::IUtils::strncpy(portInfoArray->portInfo[i].description, portInfos[i].description, 256);
itas109::IUtils::strncpy(portInfoArray->portInfo[i].hardwareId, portInfos[i].hardwareId, 256);
}
}
else
{
portInfoArray->portInfo = nullptr;
}
}
void CSerialPortAvailablePortInfosFree(struct SerialPortInfoArray *portInfoArray)
{
if (portInfoArray)
{
delete[] portInfoArray->portInfo;
portInfoArray->portInfo = nullptr;
portInfoArray->size = 0;
}
}
void *CSerialPortMalloc()
{
return new itas109::CSerialPort();
}
void CSerialPortFree(void *pSerialPort)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
delete pCSP;
pCSP = nullptr;
}
}
void CSerialPortInit(void *pSerialPort,
const char *portName,
int baudRate,
Parity parity,
DataBits dataBits,
StopBits stopbits,
FlowControl flowControl,
unsigned int readBufferSize)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
pCSP->init(portName, baudRate, itas109::Parity(parity), itas109::DataBits(dataBits), itas109::StopBits(stopbits), itas109::FlowControl(flowControl), readBufferSize);
}
}
void CSerialPortSetOperateMode(void *pSerialPort, OperateMode operateMode)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
pCSP->setOperateMode(itas109::OperateMode(operateMode));
}
}
int CSerialPortOpen(void *pSerialPort)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
return pCSP->open();
}
return 0;
}
void CSerialPortClose(void *pSerialPort)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
pCSP->close();
}
}
int CSerialPortIsOpen(void *pSerialPort)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
return pCSP->isOpen();
}
return 0;
}
int CSerialPortConnectReadEvent(void *pSerialPort, pFunReadEvent pFun)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
// TODO: delete new CSPListener
CSPListener *listen = new CSPListener(pSerialPort, pFun);
return pCSP->connectReadEvent(listen);
}
return -1;
}
int CSerialPortDisconnectReadEvent(void *pSerialPort)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
return pCSP->disconnectReadEvent();
}
return -1;
}
unsigned int CSerialPortGetReadBufferUsedLen(void *pSerialPort)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
return pCSP->getReadBufferUsedLen();
}
return 0;
}
int CSerialPortReadData(void *pSerialPort, void *data, int size)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
return pCSP->readData(data, size);
}
return -1;
}
int CSerialPortReadAllData(void *pSerialPort, void *data)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
return pCSP->readAllData(data);
}
return -1;
}
int CSerialPortReadLineData(void *pSerialPort, void *data, int size)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
return pCSP->readLineData(data, size);
}
return -1;
}
int CSerialPortWriteData(void *pSerialPort, const void *data, int size)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
return pCSP->writeData(data, size);
}
return -1;
}
void CSerialPortSetDebugModel(void *pSerialPort, int isDebug)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
pCSP->setDebugModel(isDebug);
}
}
void CSerialPortSetReadIntervalTimeout(void *pSerialPort, unsigned int msecs)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
pCSP->setReadIntervalTimeout(msecs);
}
}
unsigned int CSerialPortGetReadIntervalTimeout(void *pSerialPort)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
return pCSP->getReadIntervalTimeout();
}
return 0;
}
void CSerialPortSetMinByteReadNotify(void *pSerialPort, unsigned int minByteReadNotify)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
pCSP->setMinByteReadNotify(minByteReadNotify);
}
}
int CSerialPortFlushBuffers(void *pSerialPort)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
pCSP->flushBuffers();
}
return 0;
}
int CSerialPortFlushReadBuffers(void *pSerialPort)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
pCSP->flushReadBuffers();
}
return 0;
}
int CSerialPortFlushWriteBuffers(void *pSerialPort)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
return pCSP->flushWriteBuffers();
}
return 0;
}
int CSerialPortGetLastError(void *pSerialPort)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
return pCSP->getLastError();
}
return 0;
}
const char *CSerialPortGetLastErrorMsg(void *pSerialPort)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
return pCSP->getLastErrorMsg();
}
return "";
}
void CSerialPortClearError(void *pSerialPort)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
pCSP->clearError();
}
}
void CSerialPortSetPortName(void *pSerialPort, const char *portName)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
pCSP->setPortName(portName);
}
}
const char *CSerialPortGetPortName(void *pSerialPort)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
return pCSP->getPortName();
}
return "";
}
void CSerialPortSetBaudRate(void *pSerialPort, int baudRate)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
pCSP->setBaudRate(baudRate);
}
}
int CSerialPortGetBaudRate(void *pSerialPort)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
return pCSP->getBaudRate();
}
return 0;
}
void CSerialPortSetParity(void *pSerialPort, Parity parity)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
pCSP->setParity(itas109::Parity(parity));
}
}
Parity CSerialPortGetParity(void *pSerialPort)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
return Parity(pCSP->getParity());
}
return ParityNone;
}
void CSerialPortSetDataBits(void *pSerialPort, DataBits dataBits)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
pCSP->setDataBits(itas109::DataBits(dataBits));
}
}
DataBits CSerialPortGetDataBits(void *pSerialPort)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
return DataBits(pCSP->getDataBits());
}
return DataBits8;
}
void CSerialPortSetStopBits(void *pSerialPort, StopBits stopbits)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
pCSP->setStopBits(itas109::StopBits(stopbits));
}
}
StopBits CSerialPortGetStopBits(void *pSerialPort)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
return StopBits(pCSP->getStopBits());
}
return StopOne;
}
void CSerialPortSetFlowControl(void *pSerialPort, FlowControl flowControl)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
pCSP->setFlowControl(itas109::FlowControl(flowControl));
}
}
FlowControl CSerialPortGetFlowControl(void *pSerialPort)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
return FlowControl(pCSP->getFlowControl());
}
return FlowNone;
}
void CSerialPortSetReadBufferSize(void *pSerialPort, unsigned int size)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
pCSP->setReadBufferSize(size);
}
}
unsigned int CSerialPortGetReadBufferSize(void *pSerialPort)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
return pCSP->getReadBufferSize();
}
return 0;
}
void CSerialPortSetDtr(void *pSerialPort, int set)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
pCSP->setDtr(set);
}
}
void CSerialPortSetRts(void *pSerialPort, int set)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
pCSP->setRts(set);
}
}
const char *CSerialPortGetVersion(void *pSerialPort)
{
itas109::CSerialPort *pCSP = reinterpret_cast<itas109::CSerialPort *>(pSerialPort);
if (pCSP)
{
return pCSP->getVersion();
}
return "";
}