Browse Source

update

master
zhaohe 2 years ago
parent
commit
3b3ff3d15c
  1. 5
      components/zcanreceiver/cmd.hpp
  2. 5
      components/zcanreceiver/zcanreceiver.cpp
  3. 4
      components/zcanreceiver/zcanreceiver.hpp

5
components/zcanreceiver/cmd.hpp

@ -31,11 +31,16 @@ typedef enum {
kcmd_high_power_electrical_ctl = 1003, kcmd_high_power_electrical_ctl = 1003,
kcmd_peristaltic_pump_ctl = 1004, kcmd_peristaltic_pump_ctl = 1004,
kcmd_read_huacheng_pressure_sensor = 1005, kcmd_read_huacheng_pressure_sensor = 1005,
kcmd_set_proportional_valve = 1006, // {4:valveId,4:valveValue}
kcmd_air_compressor_ch_ctrl = 1007, // {4:chstate}
} CmdID_t; } CmdID_t;
} // namespace zcr } // namespace zcr
} // namespace iflytop } // namespace iflytop
#define IS_CMD(cmdheader, cmd, subcmd) ((cmdheader->cmdid == cmd) && (cmdheader->subcmdid == subcmd))
#define CMD_GET_PARAM(cmdheader, index) (((int32_t*)cmdheader->data)[index])
/** /**
* @brief * @brief
*/ */

5
components/zcanreceiver/zcanreceiver.cpp

@ -198,6 +198,8 @@ bool ZCanReceiver::getRxMessage(CAN_RxHeaderTypeDef *pHeader, uint8_t aData[] /*
} }
return false; return false;
} }
void ZCanReceiver::registerListener(CanPacketRxBufferCB_t cb) { m_listenerCBList.push_back(cb); }
void ZCanReceiver::STM32_HAL_onCAN_RxFifo0MsgPending(CAN_HandleTypeDef *canHandle) { void ZCanReceiver::STM32_HAL_onCAN_RxFifo0MsgPending(CAN_HandleTypeDef *canHandle) {
/** /**
* @brief * @brief
@ -268,6 +270,9 @@ void ZCanReceiver::loop() {
for (auto &var : m_listenerList) { for (auto &var : m_listenerList) {
var->onRceivePacket(rxbuf, rxdata, dataoff); var->onRceivePacket(rxbuf, rxdata, dataoff);
} }
for (auto &var : m_listenerCBList) {
if (var) var(rxbuf, rxdata, dataoff);
}
rxbuf->dataIsReady = false; rxbuf->dataIsReady = false;
} }
} }

4
components/zcanreceiver/zcanreceiver.hpp

@ -34,6 +34,8 @@ class ZCanRceiverListener {
virtual void onRceivePacket(CanPacketRxBuffer *rxbuf, uint8_t *packet, size_t len) = 0; virtual void onRceivePacket(CanPacketRxBuffer *rxbuf, uint8_t *packet, size_t len) = 0;
}; };
typedef function<void(CanPacketRxBuffer *rxbuf, uint8_t *packet, size_t len)> CanPacketRxBufferCB_t;
class ZCanReceiver : public ZCanIRQListener { class ZCanReceiver : public ZCanIRQListener {
public: public:
class CFG { class CFG {
@ -65,6 +67,7 @@ class ZCanReceiver : public ZCanIRQListener {
HAL_StatusTypeDef m_lastTransmitStatus; // 上次调用can发送方法的返回值 HAL_StatusTypeDef m_lastTransmitStatus; // 上次调用can发送方法的返回值
list<ZCanRceiverListener *> m_listenerList; list<ZCanRceiverListener *> m_listenerList;
list<CanPacketRxBufferCB_t> m_listenerCBList;
CanPacketRxBuffer m_canPacketRxBuffer[1]; CanPacketRxBuffer m_canPacketRxBuffer[1];
public: public:
@ -73,6 +76,7 @@ class ZCanReceiver : public ZCanIRQListener {
void init(CFG *cfg); void init(CFG *cfg);
void registerListener(ZCanRceiverListener *listener); void registerListener(ZCanRceiverListener *listener);
void registerListener(CanPacketRxBufferCB_t cb);
void sendPacket(uint8_t *packet, size_t len); void sendPacket(uint8_t *packet, size_t len);
void sendAck(Cmdheader_t *cmdheader, uint8_t *data, size_t len); void sendAck(Cmdheader_t *cmdheader, uint8_t *data, size_t len);
void sendErrorAck(Cmdheader_t *cmdheader, int16_t errcode); void sendErrorAck(Cmdheader_t *cmdheader, int16_t errcode);

Loading…
Cancel
Save