25 #ifndef EDGEGRBLDEVICEBASE_HPP__
26 #define EDGEGRBLDEVICEBASE_HPP__
30 #include <condition_variable>
37 #include <fmc_mfe/libfmc_mfe.h>
39 #include "util/grbl/GrblDeviceBase.hpp"
60 const std::string &driverPath = std::string());
65 void write(
const std::string &data)
override;
66 bool wait(
const std::chrono::milliseconds &timeout)
override;
76 inline void read(
struct edge_reg *reg, uint32_t &value)
78 return read(reg, 0, value);
89 void read(
struct edge_reg *reg,
size_t offset, uint32_t &value);
98 void read(
struct edge_reg *reg, std::vector<uint32_t> &values);
107 inline void write(
struct edge_reg *reg, uint32_t value)
109 return write(reg, 0, value);
120 void write(
struct edge_reg *reg,
size_t offset, uint32_t value);
125 inline struct fmc_mfe_hdl *
getDrv()
const {
return m_edgeDrvHdl; }
130 void init(
int lun,
const std::string &driverPath);
146 bool waitIrq(
const std::chrono::milliseconds &timeout,
147 const struct edge_reg *
const expectedReg,
148 uint32_t expectedBit);
157 void drvOpen(
int lun,
const std::string &simPath,
bool isSim);
167 struct fmc_mfe_hdl *m_edgeDrvHdl;
168 std::vector<char> m_fifoBytes;
170 static const std::string loggerCat;
void drvOpen(int lun, const std::string &simPath, bool isSim)
Open FMC_MFE device with given driver.
void write(struct edge_reg *reg, uint32_t value)
Write a value to register.
void irqLoop()
Wait for irq using blocking API and set variables once available.
bool wait(const std::chrono::milliseconds &timeout) override
wait for input
struct fmc_mfe_hdl * getDrv() const
get driver handler
bool waitIrq(const std::chrono::milliseconds &timeout, const struct edge_reg *const expectedReg, uint32_t expectedBit)
Wait for irq from given source.
void drvClose()
Close the driver.
void write(const std::string &data) override
raw write some bytes
void read(struct edge_reg *reg, uint32_t &value)
Get a register value.
void wake() override
wake thread waiting for input
void read() override
fill LineBuffer with incoming bytes