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_peristaltic_pump_ctl = 1004,
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;
} // namespace zcr
} // 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
*/

5
components/zcanreceiver/zcanreceiver.cpp

@ -198,6 +198,8 @@ bool ZCanReceiver::getRxMessage(CAN_RxHeaderTypeDef *pHeader, uint8_t aData[] /*
}
return false;
}
void ZCanReceiver::registerListener(CanPacketRxBufferCB_t cb) { m_listenerCBList.push_back(cb); }
void ZCanReceiver::STM32_HAL_onCAN_RxFifo0MsgPending(CAN_HandleTypeDef *canHandle) {
/**
* @brief
@ -268,6 +270,9 @@ void ZCanReceiver::loop() {
for (auto &var : m_listenerList) {
var->onRceivePacket(rxbuf, rxdata, dataoff);
}
for (auto &var : m_listenerCBList) {
if (var) var(rxbuf, rxdata, dataoff);
}
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;
};
typedef function<void(CanPacketRxBuffer *rxbuf, uint8_t *packet, size_t len)> CanPacketRxBufferCB_t;
class ZCanReceiver : public ZCanIRQListener {
public:
class CFG {
@ -65,6 +67,7 @@ class ZCanReceiver : public ZCanIRQListener {
HAL_StatusTypeDef m_lastTransmitStatus; // 上次调用can发送方法的返回值
list<ZCanRceiverListener *> m_listenerList;
list<CanPacketRxBufferCB_t> m_listenerCBList;
CanPacketRxBuffer m_canPacketRxBuffer[1];
public:
@ -73,6 +76,7 @@ class ZCanReceiver : public ZCanIRQListener {
void init(CFG *cfg);
void registerListener(ZCanRceiverListener *listener);
void registerListener(CanPacketRxBufferCB_t cb);
void sendPacket(uint8_t *packet, size_t len);
void sendAck(Cmdheader_t *cmdheader, uint8_t *data, size_t len);
void sendErrorAck(Cmdheader_t *cmdheader, int16_t errcode);

Loading…
Cancel
Save