tx-gxx-linux/device/gxx-linux/regs/uartregaccessb.cpp

46 lines
1.2 KiB
C++

#include "uartregaccessb.h"
#include "uartregaccessb.h"
#include "serialib.h"
#include "stringex.hpp"
#include <thread>
UartRegsAccessB::UartRegsAccessB(std::string devName, int bauds, int readflag, int writeflag)
{
m_serial.reset(new serialib());
if(m_serial->Open(devName.c_str(), bauds) != 1){
std::this_thread::sleep_for(std::chrono::milliseconds(100));
m_serial->Open(devName.c_str(), bauds);
}
this->readflag = readflag;
this->writeflag = writeflag;
}
UartRegsAccessB::~UartRegsAccessB()
{
}
bool UartRegsAccessB::write(unsigned int addr, unsigned int val)
{
std::lock_guard<std::mutex> lck(mx_uart);
unsigned char* pdata = bufSend;
pdata[0] = writeflag;
pdata[1] = (unsigned char)addr;
*((unsigned int*)(pdata + 3)) = val;
m_serial->Write(bufSend, sizeof(bufSend));
return true;
}
bool UartRegsAccessB::read(unsigned int addr, unsigned int& val)
{
std::lock_guard<std::mutex> lck(mx_uart);
unsigned char *pdata = bufRecv;
pdata[0] = readflag;
pdata[1] = (unsigned char)addr;
m_serial->Write(bufRecv, 2);
if (m_serial->Read(bufRecv, 5, 200))
{
val = *((unsigned int*)(bufRecv + 1));
return true;
}
return false;
}