// // Created by iflytop // #pragma once #include #include #include #include #include #include #include #include #include #include "configs/gconfig.hpp" #include "iflytopcpp/core/basic/nlohmann/json.hpp" #include "iflytopcpp/core/driver/socketcan/socket_can.hpp" #include "iflytopcpp/core/spdlogfactory/logger.hpp" #include "zlinuxcomponents/iflytop_can_protocol_stack/iflytop_can_protocol_stack.hpp" #include "zservice_container/zservice_container.hpp" /** * @brief * * service: CanService * * 1. 负责监听,分流IflytopSubDevice的CAN消息和哈美顿的CAN消息 * 2. 负责将CanFrame转换成IflytopCanPacket */ namespace iflytop { using namespace std; using namespace iflytop; using namespace core; using namespace nlohmann; class CanService : public enable_shared_from_this { ENABLE_LOGGER(CanService); shared_ptr m_socketCan; shared_ptr m_config; shared_ptr m_iflytopCanProtocolStack; public: nod::signal packet)> onIflytopCanSubDevicePacket; void initialize(); void startListen(); SocketCan::SocketCanError_t sendPacketToIflytopCanSubDevice(shared_ptr icps_packet, int overtime_ms); private: void processRx(shared_ptr frame); // 处理iflytop子设备的CAN消息 void processIflytopRxPacket(shared_ptr frame); // 处理哈美顿的CAN消息 void processHamiltonCanRxPacket(shared_ptr frame); private: }; } // namespace iflytop