Browse Source

update

master
zhaohe 2 years ago
parent
commit
0bb43f7007
  1. 2
      src/iflytop/components/iflytop_front_end_service/iflytop_front_end_service.hpp
  2. 19
      src/iflytop/components/simple_udp/simple_udp.cpp
  3. 55
      src/iflytop/components/zcanreceiver/zcanhost.cpp
  4. 24
      src/iflytop/components/zcanreceiver/zcanreceiverhost.cpp

2
src/iflytop/components/iflytop_front_end_service/iflytop_front_end_service.hpp

@ -65,7 +65,7 @@ class IflytopFrontEndService : public enable_shared_from_this<IflytopFrontEndSer
// void sendMessage(const string& message);
void sendReport(json& report);
void sendToUDP(struct sockaddr_in* from, char* data, size_t len) { m_udp->sendto(from, data, len); }
void sendToUDP(struct sockaddr_in* from,const char* data, size_t len) { m_udp->sendto(from, data, len); }
private:
void onMessageCallback(weak_ptr<WebSocket> webSocket, shared_ptr<ConnectionState> connectionState, const ix::WebSocketMessagePtr& msg);

19
src/iflytop/components/simple_udp/simple_udp.cpp

@ -1,7 +1,8 @@
#include "simple_udp.hpp"
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/socket.h>
using namespace std;
using namespace iflytop;
using namespace core;
@ -33,15 +34,15 @@ void SimpleUDP::initialize(int port) {
socklen_t peerlen;
while (true) {
memset(m_rxbuf, 0, sizeof(m_rxbuf));
// 网络节点的信息,用来保存客户端的网络信息
// sockaddr_in clientAddr;
memset(&peeraddr, 0, sizeof(sockaddr_in));
int clientAddrLen = sizeof(sockaddr);
// 接收客户端发来的数据
peerlen = sizeof(sockaddr_in);
int ret = recvfrom(m_socket, m_rxbuf, sizeof(m_rxbuf), 0, (struct sockaddr *)&peeraddr, &peerlen);
// printf("Recv msg:%s from IP:[%s] Port:[%d]\n", m_rxbuf, inet_ntoa(m_context.clientAddr.sin_addr), ntohs(m_context.clientAddr.sin_port));
// process_rx_cmd(m_rxbuf, ret);
// sendto(m_socket, "Hello World!", strlen("Hello World!"), 0, (sockaddr *)&m_context.clientAddr, clientAddrLen);
logger->debug("Recv msg {} from IP:{} Port:{}\n", m_rxbuf, inet_ntoa(peeraddr.sin_addr), ntohs(peeraddr.sin_port));
// int wret = ::sendto(m_socket, "Hello World!", strlen("Hello World!"), 0, (sockaddr *)&peeraddr, peerlen);
// logger->debug("sendto ret:{}", wret);
// perror("sendto");
if (ret < 0) {
logger->error("recvfrom failed, {}", strerror(errno));
continue;

55
src/iflytop/components/zcanreceiver/zcanhost.cpp

@ -7,9 +7,64 @@ using namespace zcr;
#define zint16p(x) ((int16_t*)(x))
#define zint32p(x) ((int32_t*)(x))
#define CHECK_ARGC_NUM(x) \
if (argc != (x + 1)) { \
logger->error("do {},argc error", argv[0]); \
retval = "argc num error"; \
return false; \
}
void ZCanHost::initialize(string can_if_name, int baudrate, bool enablLoopback) {
m_zcanReceiverHost = make_shared<ZCanReceiverHost>();
m_zcanReceiverHost->initialize(can_if_name, baudrate, enablLoopback);
m_cmdMap["pumpctrl_c1004"] = [this](int argc, char** argv, string& retval) {
CHECK_ARGC_NUM(4);
uint8_t id = atoi(argv[1]);
int16_t acc = atoi(argv[2]);
int16_t rpm = atoi(argv[3]);
return pumpctrl_c1004(id, acc, rpm) != 0;
};
// ZCanHost::readio(int id, bool& value)
// ZCanHost::writeio(int id, bool value)
// ZCanHost::readadc(int id, int& value)
m_cmdMap["readio"] = [this](int argc, char** argv, string& retval) {
CHECK_ARGC_NUM(1);
uint8_t id = atoi(argv[1]);
bool v = false;
if (readio(id, v) != 0) {
logger->error("readio fail");
return false;
}
retval = to_string(v);
return true;
};
m_cmdMap["writeio"] = [this](int argc, char** argv, string& retval) {
CHECK_ARGC_NUM(2);
uint8_t id = atoi(argv[1]);
bool v = atoi(argv[2]);
if (writeio(id, v) != 0) {
logger->error("writeio fail");
return false;
}
return true;
};
m_cmdMap["readadc"] = [this](int argc, char** argv, string& retval) {
CHECK_ARGC_NUM(1);
uint8_t id = atoi(argv[1]);
int v = 0;
if (readadc(id, v) != 0) {
logger->error("readadc fail");
return false;
}
logger->info("readadc:{},{}", id, v);
retval = fmt::format("ACK:{}", v);
return true;
};
}
static void prase_cmd(char* input, int inputlen, int& argc, char* argv[]) {

24
src/iflytop/components/zcanreceiver/zcanreceiverhost.cpp

@ -24,6 +24,15 @@ void ZCanReceiverHost::registerListener(onpacket_t onpacket) { m_onpacket = onpa
shared_ptr<ZCanReceiverCMD> ZCanReceiverHost::sendcmdblock(shared_ptr<ZCanReceiverCMD> cmd, int overtime_ms) { //
lock_guard<mutex> lock(m_txblocklock);
m_index++;
if (m_index == 0) {
m_index = 1;
}
if (m_index == UINT16_MAX) {
m_index = 1;
}
cmd->packetindex = m_index;
{
lock_guard<mutex> lock(m_txContextLock);
m_txContext.txcmdcache = cmd;
@ -52,15 +61,7 @@ shared_ptr<ZCanReceiverCMD> ZCanReceiverHost::sendcmdblock(shared_ptr<ZCanReceiv
void ZCanReceiverHost::sendcmd(uint16_t packetindex, uint16_t cmdid, uint8_t subcmdid, uint8_t *data, size_t len) {
Cmdheader_t *header = (Cmdheader_t *)m_sendbuf;
m_index++;
if (m_index == 0) {
m_index = 1;
}
if (m_index == UINT16_MAX) {
m_index = 1;
}
header->packetindex = m_index;
header->packetindex = packetindex;
header->cmdid = cmdid;
header->subcmdid = subcmdid;
header->packetType = 0x00;
@ -88,7 +89,7 @@ void ZCanReceiverHost::sendPacket(uint8_t *packet, size_t len) {
suc = sendPacketSub(npacket, i, packet + i * 8, 8, OVER_TIME_MS);
}
if (!suc) {
printf("sendPacket fail, packet(%d:%d)\n", npacket, i);
logger->warn("sendPacket fail, packet(%d:%d)\n", npacket, i);
return;
}
}
@ -123,9 +124,12 @@ void ZCanReceiverHost::processOnePacket(CanPacketRxBuffer *rxbuf, uint8_t *packe
/**
* @brief
*/
logger->debug("processOnePacket(index {}, packetType {} ,cmd {},subcmd {}),rx(index {})", header->packetindex, header->packetType, header->cmdid,
header->subcmdid, rx->packetindex);
if (header->packetType == kpt_ack || header->packetType == kpt_error_ack) {
if (header->packetindex == m_txContext.txcmdcache->packetindex) {
lock_guard<mutex> lock(m_txContextLock);
logger->debug("rx ack");
m_txContext.rx = rx;
m_txContext.isReady = true;
}

Loading…
Cancel
Save