46 lines
1.2 KiB
C++
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;
|
||
|
}
|