Browse Source

update

master
zhaohe 1 year ago
parent
commit
f1fb3a5ee5
  1. 22
      src/protocol/zfpga_commander/zfpga_commander.cpp
  2. 25
      src/protocol/zfpga_commander/zfpga_commander.hpp

22
src/protocol/zfpga_commander/zfpga_commander.cpp

@ -170,7 +170,9 @@ void ZFPGACommander::resetRxContext(int32_t cmdIndex) {
m_rxReceiptContext.receiptLen = 0;
}
void ZFPGACommander::sendPacket(zaf_packet_header_t *packet, uint32_t len, uint32_t overtime) {
shared_ptr<Receipt> ZFPGACommander::sendPacket(zaf_packet_header_t *packet, uint32_t len, uint32_t overtime) {
lock_guard<recursive_mutex> lock(m_tx_lock);
zaf_packet_header_t *rxpacket = (zaf_packet_header_t *)&m_rxReceiptContext.receipt[0];
resetRxContext(packet->index);
@ -199,7 +201,9 @@ void ZFPGACommander::sendPacket(zaf_packet_header_t *packet, uint32_t len, uint3
if (rxpacket->data[0] != 0) {
throw zexception(rxpacket->data[0], zaf_ecode_to_string((zaf_error_code_t)rxpacket->data[0]));
} else {
return;
shared_ptr<Receipt> receipt;
receipt.reset(new Receipt(m_rxReceiptContext.receipt, m_rxReceiptContext.receiptLen));
return receipt;
}
} else {
}
@ -207,9 +211,10 @@ void ZFPGACommander::sendPacket(zaf_packet_header_t *packet, uint32_t len, uint3
throw zexception(ke_overtime, "overtime");
}
zaf_packet_header_t *ZFPGACommander::getReceipt() { return (zaf_packet_header_t *)&(m_rxReceiptContext.receipt[0]); }
void ZFPGACommander::writeReg(uint32_t regadd, uint32_t regvalue, uint32_t &regbackvalue, int32_t overtime_ms) {
lock_guard<recursive_mutex> lock(m_tx_lock);
Reginfo *reg = GetRegInfo(regadd);
if (reg->flag & kreg_flag_force_write) {
@ -224,6 +229,9 @@ void ZFPGACommander::writeReg(uint32_t regadd, uint32_t regvalue, uint32_t &regb
return;
}
void ZFPGACommander::readReg(uint32_t regadd, uint32_t &regvalue, int32_t overtime_ms) {
lock_guard<recursive_mutex> lock(m_tx_lock);
Reginfo *reg = GetRegInfo(regadd);
if ((reg->flag & kreg_flag_force_read)) {
@ -239,7 +247,6 @@ void ZFPGACommander::readReg(uint32_t regadd, uint32_t &regvalue, int32_t overti
void ZFPGACommander::_writeReg(uint32_t regadd, uint32_t regvalue, uint32_t &regbackvalue, int32_t overtime_ms) {
//
lock_guard<mutex> lock(m_tx_lock);
uint8_t txdata[128] = {0};
@ -267,8 +274,6 @@ void ZFPGACommander::_writeReg(uint32_t regadd, uint32_t regvalue, uint32_t &reg
regbackvalue = rxpacket->data[1];
}
void ZFPGACommander::_readReg(uint32_t regadd, uint32_t &regvalue, int32_t overtime_ms) {
lock_guard<mutex> lock(m_tx_lock);
uint8_t txdata[128] = {0};
zaf_packet_header_t *txpacket = (zaf_packet_header_t *)txdata;
@ -337,7 +342,8 @@ bool ZFPGACommander::ping() {
}
void ZFPGACommander::callcmd(uint32_t cmd, uint32_t delayms) {
lock_guard<mutex> lock(m_tx_lock);
lock_guard<recursive_mutex> lock(m_tx_lock);
uint8_t txdata[128] = {0};

25
src/protocol/zfpga_commander/zfpga_commander.hpp

@ -37,6 +37,18 @@ class ZFPGARxReceiptContext {
size_t receiptLen;
};
class Receipt {
uint8_t data[1024] = {0};
uint32_t datalen = 0;
public:
Receipt(uint8_t *data, uint32_t len) {
memcpy(this->data, data, len);
this->datalen = len;
}
zaf_packet_header_t *getpacket() { return (zaf_packet_header_t *)data; }
};
typedef enum {
kreg_flag_r = 0x01, // 可读
@ -70,15 +82,14 @@ class ZFPGACommander {
uint8_t m_rxcache[1024];
size_t m_rxlen = 0;
mutex lock_;
unique_ptr<thread> m_thread;
mutex lock_;
unique_ptr<thread> m_online_detect_thread;
ZFPGARxReceiptContext m_rxReceiptContext;
mutex m_rxReceiptContext_lock;
mutex m_tx_lock;
recursive_mutex m_tx_lock;
binary_cb_t m_raw_data_cb;
StateCbFn_t m_stateCbFn;
@ -99,11 +110,9 @@ class ZFPGACommander {
bool chIsOn();
public:
void writeReg(uint32_t regadd, uint32_t regvalue, uint32_t &regbackvalue, int32_t overtime_ms);
void readReg(uint32_t regadd, uint32_t &regvalue, int32_t overtime_ms);
void sendPacket(zaf_packet_header_t *packet, uint32_t len, uint32_t overtime);
zaf_packet_header_t *getReceipt();
void writeReg(uint32_t regadd, uint32_t regvalue, uint32_t &regbackvalue, int32_t overtime_ms);
void readReg(uint32_t regadd, uint32_t &regvalue, int32_t overtime_ms);
shared_ptr<Receipt> sendPacket(zaf_packet_header_t *packet, uint32_t len, uint32_t overtime);
public:
void readFPGAVersion(Version &version);

Loading…
Cancel
Save