219 lines
7.5 KiB
C++
Executable File
219 lines
7.5 KiB
C++
Executable File
/*
|
|
* @Author: zjk 1553836110@qq.com
|
|
* @Date: 2023-11-07 14:59:47
|
|
* @LastEditors: zhaojingkui 1553836110@qq.com
|
|
* @LastEditTime: 2023-11-30 11:58:46
|
|
* @FilePath: /moos-ivp-pi/src/pEmulator/_150server.cpp
|
|
* @Description:
|
|
*
|
|
* Copyright (c) 2023 by ${git_name_email}, All Rights Reserved.
|
|
*/
|
|
#include "_150server.hpp"
|
|
#include <unistd.h>
|
|
|
|
uint16_t _150server::serializeFields(AUVEmbedded &embeddedInfo, uint8_t* bfr)
|
|
{
|
|
memcpy(bfr, &(embeddedInfo.header), sizeof(embeddedInfo.header));
|
|
bfr += sizeof(embeddedInfo.header);
|
|
|
|
memcpy(bfr, &(embeddedInfo.count), sizeof(embeddedInfo.count));
|
|
bfr += sizeof(embeddedInfo.count);
|
|
|
|
memcpy(bfr, &(embeddedInfo.size), sizeof(embeddedInfo.size));
|
|
bfr += sizeof(embeddedInfo.size);
|
|
|
|
memcpy(bfr, &(embeddedInfo.drive_mode), sizeof(embeddedInfo.drive_mode));
|
|
bfr += sizeof(embeddedInfo.drive_mode);
|
|
|
|
memcpy(bfr, &(embeddedInfo.height), sizeof(embeddedInfo.height));
|
|
bfr += sizeof(embeddedInfo.height);
|
|
|
|
memcpy(bfr, &(embeddedInfo.depth), sizeof(embeddedInfo.depth));
|
|
bfr += sizeof(embeddedInfo.depth);
|
|
|
|
memcpy(bfr, &(embeddedInfo.yaw), sizeof(embeddedInfo.yaw));
|
|
bfr += sizeof(embeddedInfo.yaw);
|
|
|
|
memcpy(bfr, &(embeddedInfo.pitch), sizeof(embeddedInfo.pitch));
|
|
bfr += sizeof(embeddedInfo.pitch);
|
|
|
|
memcpy(bfr, &(embeddedInfo.roll), sizeof(embeddedInfo.roll));
|
|
bfr += sizeof(embeddedInfo.roll);
|
|
|
|
memcpy(bfr, &(embeddedInfo.ins_vx), sizeof(embeddedInfo.ins_vx));
|
|
bfr += sizeof(embeddedInfo.ins_vx);
|
|
|
|
memcpy(bfr, &(embeddedInfo.ins_vy), sizeof(embeddedInfo.ins_vy));
|
|
bfr += sizeof(embeddedInfo.ins_vy);
|
|
|
|
memcpy(bfr, &(embeddedInfo.ins_vz), sizeof(embeddedInfo.ins_vz));
|
|
bfr += sizeof(embeddedInfo.ins_vz);
|
|
|
|
memcpy(bfr, &(embeddedInfo.lon), sizeof(embeddedInfo.lon));
|
|
bfr += sizeof(embeddedInfo.lon);
|
|
|
|
memcpy(bfr, &(embeddedInfo.lat), sizeof(embeddedInfo.lat));
|
|
bfr += sizeof(embeddedInfo.lat);
|
|
|
|
memcpy(bfr, &(embeddedInfo.alt), sizeof(embeddedInfo.alt));
|
|
bfr += sizeof(embeddedInfo.alt);
|
|
|
|
memcpy(bfr, &(embeddedInfo.dvl_vx), sizeof(embeddedInfo.dvl_vx));
|
|
bfr += sizeof(embeddedInfo.dvl_vx);
|
|
|
|
memcpy(bfr, &(embeddedInfo.dvl_vy), sizeof(embeddedInfo.dvl_vy));
|
|
bfr += sizeof(embeddedInfo.dvl_vy);
|
|
|
|
memcpy(bfr, &(embeddedInfo.dvl_vz), sizeof(embeddedInfo.dvl_vz));
|
|
bfr += sizeof(embeddedInfo.dvl_vz);
|
|
|
|
memcpy(bfr, &(embeddedInfo.rpm), sizeof(embeddedInfo.rpm));
|
|
bfr += sizeof(embeddedInfo.rpm);
|
|
|
|
memcpy(bfr, &(embeddedInfo.lightEnable), sizeof(embeddedInfo.lightEnable));
|
|
bfr += sizeof(embeddedInfo.lightEnable);
|
|
|
|
memcpy(bfr, &(embeddedInfo.battery_voltage), sizeof(embeddedInfo.battery_voltage));
|
|
bfr += sizeof(embeddedInfo.battery_voltage);
|
|
|
|
memcpy(bfr, &(embeddedInfo.battery_level), sizeof(embeddedInfo.battery_level));
|
|
bfr += sizeof(embeddedInfo.battery_level);
|
|
|
|
memcpy(bfr, &(embeddedInfo.battery_temp), sizeof(embeddedInfo.battery_temp));
|
|
bfr += sizeof(embeddedInfo.battery_temp);
|
|
|
|
memcpy(bfr, &(embeddedInfo.fault_leakSensor), sizeof(embeddedInfo.fault_leakSensor));
|
|
bfr += sizeof(embeddedInfo.fault_leakSensor);
|
|
|
|
memcpy(bfr, &(embeddedInfo.fault_battery), sizeof(embeddedInfo.fault_battery));
|
|
bfr += sizeof(embeddedInfo.fault_battery);
|
|
|
|
memcpy(bfr, &(embeddedInfo.fault_emergencyBattery), sizeof(embeddedInfo.fault_emergencyBattery));
|
|
bfr += sizeof(embeddedInfo.fault_emergencyBattery);
|
|
|
|
memcpy(bfr, &(embeddedInfo.fault_thrust), sizeof(embeddedInfo.fault_thrust));
|
|
bfr += sizeof(embeddedInfo.fault_thrust);
|
|
|
|
memcpy(bfr, &(embeddedInfo.iridium), sizeof(embeddedInfo.iridium));
|
|
bfr += sizeof(embeddedInfo.iridium);
|
|
|
|
memcpy(bfr, &(embeddedInfo.throwing_load), sizeof(embeddedInfo.throwing_load));
|
|
bfr += sizeof(embeddedInfo.throwing_load);
|
|
|
|
memcpy(bfr, &(embeddedInfo.dvl_status), sizeof(embeddedInfo.dvl_status));
|
|
bfr += sizeof(embeddedInfo.dvl_status);
|
|
|
|
memcpy(bfr, &(embeddedInfo.crc), sizeof(embeddedInfo.crc));
|
|
bfr += sizeof(embeddedInfo.crc);
|
|
|
|
memcpy(bfr, &(embeddedInfo.footer), sizeof(embeddedInfo.footer));
|
|
bfr += sizeof(embeddedInfo.footer);
|
|
}
|
|
void _150server::postInfo()
|
|
{
|
|
bzero(embeddedBuffer, 0);
|
|
serializeFields(embeddedInfoSrc, embeddedBuffer);
|
|
write(cfd, embeddedBuffer, 59);
|
|
};
|
|
bool _150server::listenInfo()
|
|
{
|
|
while (1)
|
|
{
|
|
int lens = read(cfd, recvbuf, sizeof(recvbuf));
|
|
if(lens>0)
|
|
{
|
|
_150_recive++;
|
|
uint16_t* buf16;
|
|
printf("header: %u, %u\n", recvbuf[0], recvbuf[1]);
|
|
printf("count: %u\n", recvbuf[2], recvbuf[3]);
|
|
printf("size: %u\n", recvbuf[4]);
|
|
printf("drive_mode: %u\n", recvbuf[5]);
|
|
printf("thrust: %u\n", recvbuf[6]);
|
|
_150cmd.thrust = (double)recvbuf[6];
|
|
printf("yaw: %u, %u\n", recvbuf[7], recvbuf[8]);
|
|
memcpy(buf16, &recvbuf[7], 2*sizeof(recvbuf[7]));
|
|
_150cmd.yaw = *((double*)buf16);
|
|
printf("depth: %u, %u\n", recvbuf[9], recvbuf[10]);
|
|
memcpy(buf16, &recvbuf[9], 2*sizeof(recvbuf[9]));
|
|
_150cmd.depth = *((double*)buf16);
|
|
printf("helm_top_angle: %u\n", recvbuf[11]);
|
|
_150cmd.helm_top_angle = (double)recvbuf[11];
|
|
printf("helm_bottom_angle: %u\n", recvbuf[12]);
|
|
_150cmd.helm_bottom_angle = (double)recvbuf[12];
|
|
_150cmd.helm_left_angle = (double)recvbuf[13];
|
|
printf("helm_left_angle: %u\n", recvbuf[13]);
|
|
_150cmd.helm_right_angle = (double)recvbuf[14];
|
|
printf("helm_right_angle: %u\n", recvbuf[14]);
|
|
_150cmd.light_enable = (double)recvbuf[15];
|
|
printf("light_enable: %u\n", recvbuf[15]);
|
|
printf("dvl_enable: %u\n", recvbuf[16]);
|
|
_150cmd.dvl_enable = (double)recvbuf[16];
|
|
printf("throwing_load_enable: %u\n", recvbuf[17]);
|
|
_150cmd.throwing_load_enable = (double)recvbuf[16];
|
|
printf("crc: %u\n", recvbuf[18]);
|
|
_150cmd.crc = (double)recvbuf[18];
|
|
printf("footer: %u, %u\n", recvbuf[19], recvbuf[20]);
|
|
memcpy(buf16, &recvbuf[19], 2*sizeof(recvbuf[19]));
|
|
_150cmd.footer = *((double*)buf16);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
void _150server::_150_startServer()
|
|
{
|
|
std::cout << "--------------------" << std::endl;
|
|
lfd = socket(AF_INET, SOCK_STREAM, 0);
|
|
if(lfd==-1)
|
|
{
|
|
perror("socket");
|
|
exit(-1);
|
|
}
|
|
//2.绑定
|
|
struct sockaddr_in saddr;
|
|
saddr.sin_family = PF_INET;
|
|
saddr.sin_addr.s_addr = INADDR_ANY; //0.0.0.0
|
|
saddr.sin_port = htons(8001);
|
|
int ret = -1;
|
|
do
|
|
{
|
|
ret = bind(lfd, (struct sockaddr *)&saddr, sizeof(saddr));
|
|
std::cout << "Try bind adress..." << std::endl;
|
|
sleep(1);
|
|
} while (ret==-1);
|
|
|
|
if(ret == -1)
|
|
{
|
|
perror("bind");
|
|
exit(-1);
|
|
}
|
|
|
|
//3.监听
|
|
do
|
|
{
|
|
listen(lfd, 5);
|
|
std::cout << "Try to listening..." << std::endl;
|
|
sleep(1);
|
|
} while (ret==-1);
|
|
|
|
if(ret==-1)
|
|
{
|
|
perror("listen");
|
|
exit(-1);
|
|
}
|
|
//4.接受客户端连接
|
|
struct sockaddr_in caddr;
|
|
socklen_t len = sizeof(caddr);
|
|
cfd = accept(lfd, (struct sockaddr *)&caddr, &len);
|
|
|
|
if(cfd==-1)
|
|
{
|
|
perror("accept");
|
|
exit(-1);
|
|
}
|
|
std::cout << "--------------------" << std::endl;
|
|
//输出客户端的信息
|
|
char cip[16];
|
|
inet_ntop(AF_INET, &caddr.sin_addr.s_addr, cip, sizeof(cip));
|
|
unsigned short cport = ntohs(caddr.sin_port);
|
|
printf("client ip is %s,port is %d\n", cip, cport);
|
|
} |