Browse Source

update

master
zhaohe 2 years ago
parent
commit
266a052b6a
  1. 5
      components/iflytop_can_slave_modules/device_base_control_service.cpp
  2. 6
      components/iflytop_can_slave_modules/device_base_control_service.hpp
  3. 13
      components/iflytop_can_slave_modules/idcard_reader_service.cpp
  4. 14
      components/iflytop_can_slave_modules/idcard_reader_service.hpp
  5. 41
      components/iflytop_can_slave_v1/iflytop_can_slave.cpp
  6. 16
      components/iflytop_can_slave_v1/iflytop_can_slave.hpp
  7. 9
      components/single_axis_motor_control_v2/i_iflytop_can_slave_module.cpp
  8. 13
      components/single_axis_motor_control_v2/i_iflytop_can_slave_module.hpp
  9. 2
      components/single_axis_motor_control_v2/single_axis_motor_control_v2.cpp

5
components/iflytop_can_slave_modules/device_base_control_service.cpp

@ -7,6 +7,7 @@ void DeviceBaseControlService::initialize(IflytopCanProtocolStackProcesser* prot
m_deviceId = deviceId;
ZASSERT(m_protocol_processer != NULL);
activeRegs();
m_protocol_processer->registerListener(this);
}
void DeviceBaseControlService::activeRegs() {
m_protocol_processer->activeReg(REG_DEVICE_ID, icps::kr, m_deviceId);
@ -14,7 +15,7 @@ void DeviceBaseControlService::activeRegs() {
m_protocol_processer->activeReg(REG_DEVICE_ENGINEER_MODE_MODE, icps::kwr, 0);
}
bool DeviceBaseControlService::isThisRegOwnToMe(icps::Reg_t* reg) {
bool DeviceBaseControlService::isThisRegOwnToMe(IflytopCanProtocolStackProcesser* processer, icps::Reg_t* reg) {
switch (reg->add) {
case REG_DEVICE_ID:
case REG_DEVICE_REBOOT:
@ -26,7 +27,7 @@ bool DeviceBaseControlService::isThisRegOwnToMe(icps::Reg_t* reg) {
return false;
}
icps::error_t DeviceBaseControlService::processIflytopCanRegisterWriteEvent(IflytopCanProtocolStackWriteEvent* writeEvent) {
icps::error_t DeviceBaseControlService::onHostRegisterWriteEvent(IflytopCanProtocolStackProcesser* processer, IflytopCanProtocolStackWriteEvent* writeEvent) {
switch (writeEvent->reg->add) {
case REG_DEVICE_ID:
return icps::kRegNotWritable;

6
components/iflytop_can_slave_modules/device_base_control_service.hpp

@ -15,7 +15,7 @@ class DeviceBaseControlService;
// public:
// virtual icps::error_t onSetEngineerMode(DeviceBaseControlService* service, int32_t engineer_mode) = 0;
// };
class DeviceBaseControlService {
class DeviceBaseControlService : public IflytopCanProtocolStackProcesserListener {
public:
typedef function<void(int32_t engineer_mode)> SetEngineerModeCallback_t;
@ -31,8 +31,8 @@ class DeviceBaseControlService {
void initialize(IflytopCanProtocolStackProcesser* protocol_processer, uint8_t deviceId);
void setListener(SetEngineerModeCallback_t listener) { m_listener = listener; }
bool isThisRegOwnToMe(icps::Reg_t* reg);
icps::error_t processIflytopCanRegisterWriteEvent(IflytopCanProtocolStackWriteEvent* writeEvent);
virtual bool isThisRegOwnToMe(IflytopCanProtocolStackProcesser* processer, icps::Reg_t* reg);
virtual icps::error_t onHostRegisterWriteEvent(IflytopCanProtocolStackProcesser* processer, IflytopCanProtocolStackWriteEvent* writeEvent);
private:
void activeRegs();

13
components/iflytop_can_slave_modules/idcard_reader_service.cpp

@ -16,7 +16,7 @@ static int32_t littleEndianBigEnd(int32_t data) {
return ret;
}
void IDCardReaderService::initialize(const char* name, IflytopCanProtocolStackProcesser* protocolProcesser, int32_t regStartOff,
void IDCardReaderService::initialize(const char* name, IflytopCanProtocolStackProcesser* protocolProcesser, int32_t regStartOff,
M3078CodeScanner* codeScanner) {
/*******************************************************************************
* *
@ -25,7 +25,7 @@ void IDCardReaderService::initialize(const char* name, IflytopCanProtocolStackP
m_protocolProcesser = protocolProcesser;
m_exceptionId = 0;
m_regStartOff = regStartOff;
m_stateMachine.initialize(m_name, 10, &IDCardReaderService::onProcessState, this);
m_stateMachine.initialize(m_name, 10, &IDCardReaderService::onProcessState, this);
/*******************************************************************************
* *
@ -37,9 +37,10 @@ void IDCardReaderService::initialize(const char* name, IflytopCanProtocolStackP
m_protocolProcesser->activeReg(m_regStartOff + REG_CODE_SCANER_STAT_STATUS, icps::kr, 0);
m_protocolProcesser->activeReg(m_regStartOff + REG_CODE_SCANER_STAT_EXCEPTION, icps::kr, 0);
m_codeReg = m_protocolProcesser->activeReg(m_regStartOff + REG_CODE_SCANER_CODE, icps::kr | icps::kextreg, 0);
m_protocolProcesser->registerListener(this);
}
icps::error_t IDCardReaderService::processWriteEvent(icps::WriteEvent* event) {
icps::error_t IDCardReaderService::onHostRegisterWriteEvent(IflytopCanProtocolStackProcesser* processer, IflytopCanProtocolStackWriteEvent* event) {
int regoff = event->reg->add - m_regStartOff;
int val = event->newvalue;
switch (regoff) {
@ -64,7 +65,7 @@ icps::error_t IDCardReaderService::processWriteEvent(icps::WriteEvent* event) {
}
return icps::kRegNotWritable;
}
icps::error_t IDCardReaderService::processReportEvent(icps::ReportEvent* event) {
void IDCardReaderService::onHostRegisterReportEvent(IflytopCanProtocolStackProcesser* processer, icps::ReportEvent* event) {
int regoff = event->reg->add - m_regStartOff;
int32_t* val = &event->value;
@ -79,7 +80,7 @@ icps::error_t IDCardReaderService::processReportEvent(icps::ReportEvent* event)
*val = data[event->extRegSubOff - 1];
}
}
return icps::kSuccess;
return;
}
void IDCardReaderService::onProcessState(StateMachine::StateProcessContext* context, StateMachine::Event* event) {
@ -183,7 +184,7 @@ void IDCardReaderService::onProcessState(void* module, StateMachine::StateProces
* *
*******************************************************************************/
void IDCardReaderService::writeRegVal(uint16_t regoff, uint16_t regval) { m_protocolProcesser->writeRegValue(uint16_t(m_regStartOff + regoff), regval, false); }
bool IDCardReaderService::isThisRegOwnToMe(icps::Reg_t* reg) {
bool IDCardReaderService::isThisRegOwnToMe(IflytopCanProtocolStackProcesser* processer, icps::Reg_t* reg) {
int regoff = reg->add;
if (regoff >= m_regStartOff && regoff < m_regStartOff + REG_CODE_SCANER_SIZE) {
return true;

14
components/iflytop_can_slave_modules/idcard_reader_service.hpp

@ -28,7 +28,7 @@ using namespace iflytop_can_slave_modules_pri;
* https://iflytop1.feishu.cn/wiki/OYZFwSNf2i0Hyek1zouc8eSsnsg
*
*/
class IDCardReaderService {
class IDCardReaderService : public IflytopCanProtocolStackProcesserListener {
public:
typedef enum {
kidle = 0,
@ -63,13 +63,15 @@ class IDCardReaderService {
bool m_oneShutScan;
public:
void initialize(const char* name, IflytopCanProtocolStackProcesser* protocolProcesser, int32_t regStartOff,
M3078CodeScanner* codeScanner);
void initialize(const char* name, IflytopCanProtocolStackProcesser* protocolProcesser, int32_t regStartOff, M3078CodeScanner* codeScanner);
bool isThisRegOwnToMe(icps::Reg_t* reg);
virtual bool isThisRegOwnToMe(IflytopCanProtocolStackProcesser* processer, icps::Reg_t* reg);
virtual icps::error_t onHostRegisterWriteEvent(IflytopCanProtocolStackProcesser* processer, IflytopCanProtocolStackWriteEvent* writeEvent);
virtual void onHostRegisterReportEvent(IflytopCanProtocolStackProcesser* processer, icps::ReportEvent* event);
icps::error_t processWriteEvent(icps::WriteEvent* event);
icps::error_t processReportEvent(icps::ReportEvent* event);
// bool isThisRegOwnToMe(icps::Reg_t* reg);
// icps::error_t processWriteEvent(icps::WriteEvent* event);
// icps::error_t processReportEvent(icps::ReportEvent* event);
void periodicJob();

41
components/iflytop_can_slave_v1/iflytop_can_slave.cpp

@ -2,8 +2,8 @@
#ifdef HAL_CAN_MODULE_ENABLED
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <string.h>
using namespace iflytop;
#define TAG "IflytopCanProtocolStackProcesser"
@ -12,7 +12,6 @@ using namespace iflytop;
IflytopCanProtocolStackProcesser::IflytopCanProtocolStackProcesser() {
memset(&m_config, 0, sizeof(m_config));
m_listener = NULL;
m_regList = NULL;
m_regListSize = 0;
m_canOnRxDataFlag = false;
@ -110,7 +109,9 @@ void IflytopCanProtocolStackProcesser::initialize(cfg_t *config) {
}
void IflytopCanProtocolStackProcesser::registerListener( //
IflytopCanProtocolStackProcesserListener *listener) { //
m_listener = listener;
ZASSERT(m_listenerSize < ZARRAY_SIZE(m_listeners));
m_listeners[m_listenerSize] = listener;
m_listenerSize++;
}
void IflytopCanProtocolStackProcesser::periodicJob() {
LoopJobContext loopContext = {0};
@ -436,7 +437,7 @@ HAL_StatusTypeDef IflytopCanProtocolStackProcesser::activateRxIT() {
return hal_status;
}
HAL_StatusTypeDef IflytopCanProtocolStackProcesser::deactivateRxIT() {
HAL_StatusTypeDef hal_status = HAL_ERROR;
HAL_StatusTypeDef hal_status = HAL_ERROR;
if (m_config->rxfifoNum == CAN_RX_FIFO0) {
hal_status = HAL_CAN_DeactivateNotification(m_config->canHandle, CAN_IT_RX_FIFO0_MSG_PENDING);
} else if (m_config->rxfifoNum == CAN_RX_FIFO1) {
@ -684,7 +685,13 @@ icps::error_t IflytopCanProtocolStackProcesser::callOnHostRegisterWriteEvent(icp
writeEvent.newvalue = newvalue;
writeEvent.oldvalue = oldvalue;
writeEvent.reg = reg;
if (m_listener) return m_listener->onHostRegisterWriteEvent(this, &writeEvent);
// if (m_listener) return m_listener->onHostRegisterWriteEvent(this, &writeEvent);
for (size_t i = 0; i < m_listenerSize; i++) {
if (m_listeners[i]->isThisRegOwnToMe(this, reg)) {
return m_listeners[i]->onHostRegisterWriteEvent(this, &writeEvent);
}
}
newvalue = writeEvent.newvalue;
return icps::kSuccess;
}
@ -692,7 +699,12 @@ icps::error_t IflytopCanProtocolStackProcesser::callOnHostRegisterReadEvent(icps
icps::ReadEvent eve = {0};
eve.reg = reg;
eve.value = value;
if (m_listener) return m_listener->onHostRegisterReadEvent(this, &eve);
for (size_t i = 0; i < m_listenerSize; i++) {
if (m_listeners[i]->isThisRegOwnToMe(this, reg)) {
return m_listeners[i]->onHostRegisterReadEvent(this, &eve);
}
}
value = eve.value;
return icps::kSuccess;
}
@ -700,7 +712,14 @@ void IflytopCanProtocolStackProcesser::callOnRegisterValueAutoReportEvent(icps::
icps::ReportEvent eve = {0};
eve.reg = reg;
eve.value = value;
if (m_listener) m_listener->onHostRegisterReportEvent(this, &eve);
// if (m_listener) m_listener->onHostRegisterReportEvent(this, &eve);
for (size_t i = 0; i < m_listenerSize; i++) {
if (m_listeners[i]->isThisRegOwnToMe(this, reg)) {
m_listeners[i]->onHostRegisterReportEvent(this, &eve);
}
}
value = eve.value;
}
#if 1
@ -709,7 +728,13 @@ void IflytopCanProtocolStackProcesser::callOnRegisterExtEvent(icps::Reg_t *reg,
eve.reg = reg;
eve.value = value;
eve.extRegSubOff = subregindex;
if (m_listener) m_listener->onHostRegisterReportEvent(this, &eve);
// if (m_listener) m_listener->onHostRegisterReportEvent(this, &eve);
for (size_t i = 0; i < m_listenerSize; i++) {
if (m_listeners[i]->isThisRegOwnToMe(this, reg)) {
m_listeners[i]->onHostRegisterReportEvent(this, &eve);
}
}
value = eve.value;
}
#endif

16
components/iflytop_can_slave_v1/iflytop_can_slave.hpp

@ -27,6 +27,7 @@ typedef icps::WriteEvent IflytopCanProtocolStackWriteEvent;
class IflytopCanProtocolStackProcesserListener {
public:
virtual bool isThisRegOwnToMe(IflytopCanProtocolStackProcesser *processer, icps::Reg_t *reg) { return false; }
/**
* @brief onHostRegisterWriteEvent
*
@ -35,7 +36,7 @@ class IflytopCanProtocolStackProcesserListener {
* @param newvalue
* @return icps::error_t kSuccess
*/
virtual icps::error_t onHostRegisterWriteEvent(IflytopCanProtocolStackProcesser *processer, icps::WriteEvent *event) = 0;
virtual icps::error_t onHostRegisterWriteEvent(IflytopCanProtocolStackProcesser *processer, icps::WriteEvent *event) { return icps::kSuccess; };
/**
* @brief
*
@ -43,12 +44,12 @@ class IflytopCanProtocolStackProcesserListener {
* @param value ,
* @return icps::error_t kSuccess
*/
virtual icps::error_t onHostRegisterReadEvent(IflytopCanProtocolStackProcesser *processer, icps::ReadEvent *event) = 0;
virtual icps::error_t onHostRegisterReadEvent(IflytopCanProtocolStackProcesser *processer, icps::ReadEvent *event) { return icps::kSuccess; };
/**
* @brief onRegisterValuePeriodicReportEvent
*
*/
virtual void onHostRegisterReportEvent(IflytopCanProtocolStackProcesser *processer, icps::ReportEvent *event) = 0;
virtual void onHostRegisterReportEvent(IflytopCanProtocolStackProcesser *processer, icps::ReportEvent *event){};
};
class IflytopCanProtocolStackProcesser : public ZCanIRQListener {
@ -84,9 +85,9 @@ class IflytopCanProtocolStackProcesser : public ZCanIRQListener {
private:
cfg_t *m_config; // 配置
// IflytopMicroOS *m_os; // 操作系统相关方法
IflytopCanProtocolStackProcesserListener *m_listener; // 监听者
icps::Reg_t *m_regList; // 寄存器列表
uint16_t m_regListSize; // 寄存器列表大小
// IflytopCanProtocolStackProcesserListener *m_listener; // 监听者
icps::Reg_t *m_regList; // 寄存器列表
uint16_t m_regListSize; // 寄存器列表大小
bool m_canOnRxDataFlag; // 是否有数据接收,用于从中断上下文转移到MainLoop上下文
@ -96,6 +97,9 @@ class IflytopCanProtocolStackProcesser : public ZCanIRQListener {
uint8_t m_reportSeq; // 上报序列号
ReportTask m_reportTask;
IflytopCanProtocolStackProcesserListener *m_listeners[30];
int m_listenerSize = 0;
public:
IflytopCanProtocolStackProcesser();
static cfg_t *createDefaultConfig(uint16_t deviceId, uint16_t regListSize);

9
components/single_axis_motor_control_v2/i_iflytop_can_slave_module.cpp

@ -165,6 +165,7 @@ void IIflytopCanSlaveModule::initialize(const char* name, IflytopCanProtocolStac
m_stateticket = 0;
m_listener = NULL;
m_protocolProcesser->registerListener(this);
}
void IIflytopCanSlaveModule::regConfigParas(icsm::ConfigPara* configParas, int configParaNum) {
@ -195,9 +196,9 @@ void IIflytopCanSlaveModule::writeRegValueByRegOff(uint16_t regaddoff, int32_t v
m_protocolProcesser->writeRegValue(m_regStart + regaddoff, value, forceupdate);
}
uint32_t IIflytopCanSlaveModule::getRegOff(IflytopCanProtocolStackWriteEvent* writeEvent) { return writeEvent->reg->add - m_regStart; }
bool IIflytopCanSlaveModule::isMyWriteEvent(IflytopCanProtocolStackWriteEvent* writeEvent) {
if (writeEvent->reg->add >= getRegStartAdd() && //
writeEvent->reg->add <= getRegEndAdd()) {
bool IIflytopCanSlaveModule::isThisRegOwnToMe(IflytopCanProtocolStackProcesser* processer, icps::Reg_t* reg) {
if (reg->add >= getRegStartAdd() && //
reg->add <= getRegEndAdd()) {
return true;
}
return false;
@ -257,7 +258,7 @@ void IIflytopCanSlaveModule::activeReg(uint16_t mappingAdd, uint16_t mask, int32
}
}
icps::error_t IIflytopCanSlaveModule::processIflytopCanRegisterWriteEvent(IflytopCanProtocolStackWriteEvent* writeEvent) {
icps::error_t IIflytopCanSlaveModule::onHostRegisterWriteEvent(IflytopCanProtocolStackProcesser* processer, IflytopCanProtocolStackWriteEvent* writeEvent) {
/**
* @brief
* 1.

13
components/single_axis_motor_control_v2/i_iflytop_can_slave_module.hpp

@ -135,12 +135,11 @@ class IIflytopCanSlaveModuleListener {
virtual void onException(IIflytopCanSlaveModule* service, int32_t exceptionId) = 0;
};
class IIflytopCanSlaveModule {
class IIflytopCanSlaveModule : public IflytopCanProtocolStackProcesserListener {
public:
const char* m_name;
private:
int32_t m_regStart;
int32_t m_regNum;
@ -185,7 +184,7 @@ class IIflytopCanSlaveModule {
virtual ~IIflytopCanSlaveModule(){};
protected:
void initialize(const char* name, IflytopCanProtocolStackProcesser* processer, int32_t regoff, int32_t retNum);
void initialize(const char* name, IflytopCanProtocolStackProcesser* processer, int32_t regoff, int32_t retNum);
void regConfigParas(icsm::ConfigPara* configParas, int configParaNum);
void regActions(icsm::Action* action, int actionNum);
@ -224,12 +223,14 @@ class IIflytopCanSlaveModule {
int32_t getModuleTicket();
/*******************************************************************************
* *
*******************************************************************************/
bool isMyWriteEvent(IflytopCanProtocolStackWriteEvent* writeEvent);
icps::error_t processIflytopCanRegisterWriteEvent(IflytopCanProtocolStackWriteEvent* writeEvent);
// bool isMyWriteEvent(IflytopCanProtocolStackWriteEvent* writeEvent);
// icps::error_t processIflytopCanRegisterWriteEvent(IflytopCanProtocolStackWriteEvent* writeEvent);
virtual bool isThisRegOwnToMe(IflytopCanProtocolStackProcesser* processer, icps::Reg_t* reg);
virtual icps::error_t onHostRegisterWriteEvent(IflytopCanProtocolStackProcesser* processer, IflytopCanProtocolStackWriteEvent* writeEvent);
/*******************************************************************************
* *
*******************************************************************************/

2
components/single_axis_motor_control_v2/single_axis_motor_control_v2.cpp

@ -531,7 +531,7 @@ icps::error_t SingleAxisMotorControlerV2::stop() {
writeEvent.reg = reg;
writeEvent.newvalue = 1;
writeEvent.oldvalue = reg->getValue();
processIflytopCanRegisterWriteEvent(&writeEvent);
onHostRegisterWriteEvent(getProtocolProcesser(), &writeEvent);
return icps::kSuccess;
}
#endif
Loading…
Cancel
Save