diff --git a/README.md b/README.md index 86dd975..819b6cb 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,15 @@ 2. 解析CAN消息,并上报给ws 3. 解析ws消息并发送给CAN +TOOD: + 1. 机械臂扫码功能 + 2. + +测试: + 1. websocket下发一条can指令,can卡能够收到 + 2. can卡上报一条指令,websocket能够收到 + + ``` ## 编译RK3328 @@ -45,4 +54,20 @@ ``` - +测试指令 +```json +{ + "channel":"can0", + "protocol":"iflytopCanProtocolStackV1", + "message": { + "attribute": "normal", + "priority": 4, + "type": "read", + "targetId": 129, + "sourceId": 1, + "seq": 0, + "regAdd": 0, + "regValue": 100 + } +} +``` \ No newline at end of file diff --git a/dep/iflytopcpp b/dep/iflytopcpp index 5bcf536..26a9bfa 160000 --- a/dep/iflytopcpp +++ b/dep/iflytopcpp @@ -1 +1 @@ -Subproject commit 5bcf536387d8b316efc986e3497c14c5e61cfdaa +Subproject commit 26a9bfa768e95a4c7d8761900b07370bfd3f866c diff --git a/src/service/iflytop_hardware_ws_service.cpp b/src/service/iflytop_hardware_ws_service.cpp index f54ad6b..4d92200 100644 --- a/src/service/iflytop_hardware_ws_service.cpp +++ b/src/service/iflytop_hardware_ws_service.cpp @@ -6,7 +6,9 @@ using namespace core; using namespace ix; void IflytopWSService::initialize() { - m_server.reset(new WebSocketServer(19001)); + logger->info("IflytopWSService initialize {}", 19001); + + m_server.reset(new WebSocketServer(19001,"0.0.0.0")); m_server->setOnConnectionCallback([this](weak_ptr webSocket, shared_ptr connectionState) { logger->info("Remote ip: {}", connectionState->getRemoteIp()); auto ws = webSocket.lock(); @@ -27,12 +29,19 @@ void IflytopWSService::initialize() { } m_server->disablePerMessageDeflate(); m_server->start(); - m_server->wait(); + // m_server->wait(); + logger->info("IflytopWSService initialize done"); + m_initialized = false; } void IflytopWSService::sendMessage(const string& message) { + if (!m_initialized) { + logger->error("IflytopWSService not initialized"); + return; + } /** * @brief 广播消息给所有连接的客户端 */ + logger->debug("uplink msg: {}", message); auto clients = m_server->getClients(); for (auto& each : clients) { if (each) { @@ -52,10 +61,7 @@ void IflytopWSService::onMessageCallback(weak_ptr webSocket, shared_p } onConnect(webSocket, msg); } else if (msg->type == ix::WebSocketMessageType::Message) { - // auto ws = webSocket.lock(); - // if (ws) { - // ws->send(msg->str, msg->binary); - // } + logger->debug("downlink msg: {}", msg->str); onMessage(webSocket, msg); } else if (msg->type == ix::WebSocketMessageType::Close) { logger->info("{} Closed connection", msg->closeInfo.remote); diff --git a/src/service/iflytop_hardware_ws_service.hpp b/src/service/iflytop_hardware_ws_service.hpp index bebced5..caadcfc 100644 --- a/src/service/iflytop_hardware_ws_service.hpp +++ b/src/service/iflytop_hardware_ws_service.hpp @@ -47,6 +47,7 @@ class IflytopWSService : public enable_shared_from_this { // WebSocketServer的使用参考:http://192.168.1.3:3000/z3rd_lib/IXWebSocket/src/branch/master/docs/usage.md // shared_ptr m_server; + bool m_initialized = false; public: void initialize(); @@ -55,7 +56,6 @@ class IflytopWSService : public enable_shared_from_this { void sendMessage(const string& message); private: - void onMessageCallback(weak_ptr webSocket, shared_ptr connectionState, - const ix::WebSocketMessagePtr& msg); + void onMessageCallback(weak_ptr webSocket, shared_ptr connectionState, const ix::WebSocketMessagePtr& msg); }; } // namespace iflytop \ No newline at end of file diff --git a/src/service/main_control_service.cpp b/src/service/main_control_service.cpp index 8ac977e..399595c 100644 --- a/src/service/main_control_service.cpp +++ b/src/service/main_control_service.cpp @@ -61,21 +61,22 @@ bool MainControlService::createIflytopHardwareWSPacket(shared_ptr return true; } -bool MainControlService::createICPSPacket(json jin, shared_ptr& packetin) { // - shared_ptr packetout(new icps::Packet()); +bool MainControlService::createICPSPacket(json jin, shared_ptr& packetout) { // + shared_ptr _packetout(new icps::Packet()); if (jin["protocol"] != "iflytopCanProtocolStackV1") { logger->error("create ICPSPacket failed, protocol not match,protocol:{}", jin["protocol"].get()); return false; } - packetin->setAttributeByStr(jin["message"]["attribute"]); - packetin->setPriority(jin["message"]["priority"]); - packetin->setTypeByStr(jin["message"]["type"]); - packetin->setTargetId(jin["message"]["targetId"]); - packetin->setSourceId(jin["message"]["sourceId"]); - packetin->setSeq(jin["message"]["seq"]); - packetin->setRegAdd(jin["message"]["regAdd"]); - packetin->setRegValue(jin["message"]["regValue"]); + _packetout->setAttributeByStr(jin["message"]["attribute"]); + _packetout->setPriority(jin["message"]["priority"]); + _packetout->setTypeByStr(jin["message"]["type"]); + _packetout->setTargetId(jin["message"]["targetId"]); + _packetout->setSourceId(jin["message"]["sourceId"]); + _packetout->setSeq(jin["message"]["seq"]); + _packetout->setRegAdd(jin["message"]["regAdd"]); + _packetout->setRegValue(jin["message"]["regValue"]); + packetout = _packetout; return true; } @@ -110,6 +111,7 @@ void MainControlService::websocketServerInitialize() { json message = json::parse(msgtext); processIflytopWSMsg(message); } catch (const std::exception& e) { + logger->error("m_iflytopWSService:onMessag,parse json failed,exception:{},{}", e.what(), msgtext); } }); }