You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//
// Created by zwsd
//
#pragma once
#include <mutex>
#include "cmd.hpp"
#include "iflytop/core/basic/nlohmann/json.hpp"
#include "iflytop/core/core.hpp"
#include "iflytop/core/driver/socketcan/socket_can.hpp"
#include "iflytop/core/spdlogfactory/logger.hpp"
#include "zservice_container/zservice_container.hpp"
namespace iflytop {
using namespace std; using namespace zcr;
class ZCanReceiverCMD { public: uint16_t packetindex; uint16_t cmdid; uint8_t subcmdid; uint8_t data[255 * 8]; size_t len; };
class ZCanReceiverHost { ENABLE_LOGGER(ZCanReceiverHost);
public: class CanPacketRxBuffer { public: uint16_t id; shared_ptr<SocketCanFrame> m_canPacket[256]; // 用于接收can消息
uint8_t m_rxdata[255 * 8]; uint8_t m_canPacketNum = 0; uint8_t m_rxdataLen = 0; };
class TxContext { public: shared_ptr<ZCanReceiverCMD> txcmdcache; shared_ptr<ZCanReceiverCMD> rx; bool isReady; };
typedef function<void(CanPacketRxBuffer *rxbuf, uint8_t *packet, size_t len)> onpacket_t;
public: uint8_t m_sendbuf[1000]; CanPacketRxBuffer m_canPacketRxBuffer[255]; onpacket_t m_onpacket; uint8_t m_deviceId = 1;
shared_ptr<SocketCan> m_socketCan;
mutex m_txblocklock; mutex m_txContextLock; TxContext m_txContext;
string m_can_if_name; int m_baudrate; bool m_enablLoopback;
public: ZCanReceiverHost();
void initialize(string can_if_name, int baudrate, bool enablLoopback); void registerListener(onpacket_t onpacket);
shared_ptr<ZCanReceiverCMD> sendcmdblock(shared_ptr<ZCanReceiverCMD> cmd, int overtime_ms);
private: void processRx(shared_ptr<SocketCanFrame> frame); void processOnePacket(CanPacketRxBuffer *rxbuf, uint8_t *packet, size_t len); void resetSocketCan(); void sendcmd(uint16_t packetindex, uint16_t cmdid, uint8_t subcmdid, uint8_t *data, size_t len); void sendPacket(uint8_t *packet, size_t len); bool sendPacketSub(int npacket, int packetIndex, uint8_t *packet, size_t len, int overtimems); };
} // namespace iflytop
|