Browse Source

update

master
zhaohe 2 years ago
parent
commit
7582ebcb56
  1. 6
      .project/cmake/deps.cmake
  2. 1
      .project/cmake/target.cmake
  3. 2
      dep/iflytopcpp
  4. 2
      dep/zlinuxcomponents
  5. 7
      src/configs/gconfig.hpp
  6. 0
      src/service/can.cpp
  7. 0
      src/service/can.hpp
  8. 63
      src/service/can_service.cpp
  9. 33
      src/service/can_service.hpp

6
.project/cmake/deps.cmake

@ -4,7 +4,11 @@ include(${CMAKE_SOURCE_DIR}/dep/websocketpp/module.cmake)
include(${CMAKE_SOURCE_DIR}/dep/zservice_container/module.cmake)
include(${CMAKE_SOURCE_DIR}/dep/zwebservice/module.cmake)
include(${CMAKE_SOURCE_DIR}/dep/zlinuxcomponents/alsaplayer/module.cmake)
include(${CMAKE_SOURCE_DIR}/dep/zlinuxcomponents/rootfs_auto_update/module.cmake)
include(
${CMAKE_SOURCE_DIR}/dep/zlinuxcomponents/rootfs_auto_update/module.cmake)
include(${CMAKE_SOURCE_DIR}/dep/zlinuxcomponents/mycroft_precise/module.cmake)
include(${CMAKE_SOURCE_DIR}/dep/zlinuxcomponents/audio/module.cmake)
include(${CMAKE_SOURCE_DIR}/dep/zlinuxcomponents/aiui_ws/module.cmake)
include(
${CMAKE_SOURCE_DIR}/dep/zlinuxcomponents/iflytop_can_protocol_stack/module.cmake
)

1
.project/cmake/target.cmake

@ -14,6 +14,7 @@ zadd_executable_simple(
# src/test/socketcan.cpp
src/service/main_control_service.cpp #
src/service/iflytop_hardware_ws_service.cpp
src/service/can_service.cpp
#
)

2
dep/iflytopcpp

@ -1 +1 @@
Subproject commit f186de7700bf4550ce2420d1cd87d43a5a1bfc39
Subproject commit 5bcf536387d8b316efc986e3497c14c5e61cfdaa

2
dep/zlinuxcomponents

@ -1 +1 @@
Subproject commit eb8fc79706c1d240c399db75fda5c9f4e592514c
Subproject commit 3be3c3ef0f52649cbc6e1b7d5fab7668d6b17edc

7
src/configs/gconfig.hpp

@ -14,7 +14,12 @@
#include "iflytopcpp/core/components/config_template/config_template.hpp"
#define ConfigELEMENT_LIST(marco) marco(string /* */, deviceId, "") /*设备ID*/
#define ConfigELEMENT_LIST(marco) \
marco(string /* */, deviceId, "") /*设备ID*/ \
marco(string /* */, iflytopSubDeviceCanIFName, "can0") /*子设备Can设备名称*/ \
marco(int32_t /* */, iflytopSubDeviceCanBitrate, 500000) /*子设备Can设备波特率*/ \
marco(string /* */, pipettingRobotCanIFName, "can1") /*移液臂Can设备名称*/ \
marco(int32_t /* */, pipettingRobotCanBitrate, 500000) /*移液臂Can设备波特率*/
configTemplateDEFILE_CONFIG_SERVICE2( //
GConfig, //

0
src/service/can.cpp

0
src/service/can.hpp

63
src/service/can_service.cpp

@ -0,0 +1,63 @@
#include "can_service.hpp"
using namespace std;
using namespace iflytop;
void CanService::initialize() {
GET_TO_SERVICE(m_config);
m_socketCan.reset(new SocketCan());
m_iflytopCanProtocolStack.reset(new IflytopCanProtocolStack());
auto socketCanConfig = make_shared<SocketCanConfig>();
socketCanConfig->enablLoopback = false; // 根据 SocketCan::dumpCanDriverInfo() 的输出,确定该标志位是false还是true
socketCanConfig->m_canName = m_config->get_iflytopSubDeviceCanIFName();
socketCanConfig->m_canBaudrate = m_config->get_iflytopSubDeviceCanBitrate();
socketCanConfig->m_canfilters = {};
logger->info("CanService::initialize() m_canName:{} {}", socketCanConfig->m_canName, socketCanConfig->m_canBaudrate);
m_socketCan->initialize(socketCanConfig);
m_socketCan->startListen();
m_socketCan->onSocketCanFrame.connect([this](shared_ptr<SocketCanFrame> canframe) { //
processRx(canframe);
});
// m_socketCan->initialize()
}
void CanService::processRx(shared_ptr<SocketCanFrame> frame) {
if (frame) {
return;
}
if (frame->getCanIdentifier() == socketcan::kextFrame && //
frame->getFanFrameType() == socketcan::kdataframe) {
processIflytopRxPacket(frame);
} else {
logger->warn("Rx unknown can frame");
}
}
void CanService::processHamiltonCanRxPacket(shared_ptr<SocketCanFrame> frame) { //
logger->info("Rx Hamilton packet : {}", frame->toString());
}
void CanService::processIflytopRxPacket(shared_ptr<SocketCanFrame> frame) {
shared_ptr<icps::Packet> icps_packet = m_iflytopCanProtocolStack->parseSocketCanFrame(frame);
if (!icps_packet) {
logger->error("parseSocketCanFrame fail,{}", frame->toString());
return;
}
onIflytopCanSubDevicePacket(icps_packet);
}
void CanService::sendPacketToIflytopCanSubDevice(shared_ptr<icps::Packet> icps_packet) {
auto frame = m_iflytopCanProtocolStack->createSocketCanFrame(icps_packet);
if (!frame) {
logger->error("createSocketCanFrame fail,{}", icps_packet->toString());
return;
}
SocketCan::SocketCanError_t erro = m_socketCan->sendFrame(frame);
if (erro != SocketCan::SocketCanError_t::kSuccess) {
logger->error("sendFrame fail,{}", SocketCan::SocketCanError_t2Str(erro));
}
}

33
src/service/can_service.hpp

@ -13,29 +13,50 @@
#include <string>
#include <vector>
#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<CanService> {
ENABLE_LOGGER(CanService);
shared_ptr<SocketCan> m_socketCan;
shared_ptr<GConfig> m_config;
shared_ptr<IflytopCanProtocolStack> m_iflytopCanProtocolStack;
public:
void initialize(){};
nod::signal<void(shared_ptr<icps::Packet> packet)> onIflytopCanSubDevicePacket;
void initialize();
void startListen();
void sendPacketToIflytopCanSubDevice(shared_ptr<icps::Packet> packet);
private:
void processRx(shared_ptr<SocketCanFrame> frame);
// 处理iflytop子设备的CAN消息
void processIflytopRxPacket(shared_ptr<SocketCanFrame> frame);
// 处理哈美顿的CAN消息
void processHamiltonCanRxPacket(shared_ptr<SocketCanFrame> frame);
private:
};
} // namespace iflytop
Loading…
Cancel
Save