Browse Source

update

master
zhaohe 2 years ago
parent
commit
7c4ab3505f
  1. 27
      README.md
  2. 2
      dep/iflytopcpp
  3. 18
      src/service/iflytop_hardware_ws_service.cpp
  4. 4
      src/service/iflytop_hardware_ws_service.hpp
  5. 22
      src/service/main_control_service.cpp

27
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
}
}
```

2
dep/iflytopcpp

@ -1 +1 @@
Subproject commit 5bcf536387d8b316efc986e3497c14c5e61cfdaa
Subproject commit 26a9bfa768e95a4c7d8761900b07370bfd3f866c

18
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> webSocket, shared_ptr<ConnectionState> 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> 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);

4
src/service/iflytop_hardware_ws_service.hpp

@ -47,6 +47,7 @@ class IflytopWSService : public enable_shared_from_this<IflytopWSService> {
// WebSocketServer的使用参考:http://192.168.1.3:3000/z3rd_lib/IXWebSocket/src/branch/master/docs/usage.md
//
shared_ptr<ix::WebSocketServer> m_server;
bool m_initialized = false;
public:
void initialize();
@ -55,7 +56,6 @@ class IflytopWSService : public enable_shared_from_this<IflytopWSService> {
void sendMessage(const string& message);
private:
void onMessageCallback(weak_ptr<WebSocket> webSocket, shared_ptr<ConnectionState> connectionState,
const ix::WebSocketMessagePtr& msg);
void onMessageCallback(weak_ptr<WebSocket> webSocket, shared_ptr<ConnectionState> connectionState, const ix::WebSocketMessagePtr& msg);
};
} // namespace iflytop

22
src/service/main_control_service.cpp

@ -61,21 +61,22 @@ bool MainControlService::createIflytopHardwareWSPacket(shared_ptr<icps::Packet>
return true;
}
bool MainControlService::createICPSPacket(json jin, shared_ptr<icps::Packet>& packetin) { //
shared_ptr<icps::Packet> packetout(new icps::Packet());
bool MainControlService::createICPSPacket(json jin, shared_ptr<icps::Packet>& packetout) { //
shared_ptr<icps::Packet> _packetout(new icps::Packet());
if (jin["protocol"] != "iflytopCanProtocolStackV1") {
logger->error("create ICPSPacket failed, protocol not match,protocol:{}", jin["protocol"].get<string>());
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);
}
});
}

Loading…
Cancel
Save