2 Star 0 Fork 0

顾金龙/LPMSQtUi

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
httpserverobject.cpp 16.47 KB
一键复制 编辑 原始数据 按行查看 历史
顾金龙 提交于 2024-03-27 10:47 . 删除无用代码
#include "httpserverobject.h"
#include "SensorDataType.h"
#include <QByteArray>
#include <QDebug>
#include <QJsonObject>
#include <QJsonDocument>
#define IMAGE_W 640
#define IMAGE_H 480
#include <QImage>
// 转换函数,将 YUYV 数据转换为 RGB 数据
void yuyvToRgb(const unsigned char* yuyvData, unsigned char* rgbData, int width, int height) {
int size = width * height * 2;
int rgbIndex = 0;
for (int i = 0; i < size; i += 4) {
int y0 = yuyvData[i];
int u = yuyvData[i + 1] - 128;
int y1 = yuyvData[i + 2];
int v = yuyvData[i + 3] - 128;
int c = y0 - 16;
int d = u;
int e = v;
rgbData[rgbIndex++] = qBound(0, (298 * c + 516 * d + 128) >> 8, 255); // R
rgbData[rgbIndex++] = qBound(0, (298 * c - 100 * d - 208 * e + 128) >> 8, 255); // G
rgbData[rgbIndex++] = qBound(0, (298 * c + 409 * e + 128) >> 8, 255); // B
c = y1 - 16;
rgbData[rgbIndex++] = qBound(0, (298 * c + 516 * d + 128) >> 8, 255); // R
rgbData[rgbIndex++] = qBound(0, (298 * c - 100 * d - 208 * e + 128) >> 8, 255); // G
rgbData[rgbIndex++] = qBound(0, (298 * c + 409 * e + 128) >> 8, 255); // B
}
}
// 将 YUYV 数据转换为 QImage
QImage yuyvToQImage(const unsigned char* yuyvData, int width, int height) {
// 创建 RGB 数据缓冲区
int rgbSize = width * height * 3;
unsigned char* rgbData = new unsigned char[rgbSize];
// 执行 YUYV 到 RGB 的转换
yuyvToRgb(yuyvData, rgbData, width, height);
// 创建 QImage
QImage image(rgbData, width, height, QImage::Format_RGB888);
// 释放缓冲区内存
delete[] rgbData;
return image;
}
HttpServerObject::HttpServerObject(QObject *parent) : QObject{parent}
{
qDebug() << "Creating HttpServerObject instance...";
this->sensorServer = new QHttpServer();
std::function<QString(const QHttpServerRequest &)> handler = std::bind(&HttpServerObject::sensorRequestHandle, this, std::placeholders::_1);
sensorServer->route("/sensorData/", handler);
// this->videoServer = new QHttpServer();
// std::function<QString(const QHttpServerRequest &)> handler2 = std::bind(&HttpServerObject::videoRequestHandle, this, std::placeholders::_1);
// videoServer->route("/videoData/", handler2);
}
HttpServerObject::~HttpServerObject()
{
this->sensorServer->disconnect();
delete this->sensorServer;
}
bool HttpServerObject::startSensorServer(int post)
{
bool success = this->sensorServer->listen(QHostAddress::Any, post);
if (!success)
{
qDebug() << "Failed to start server!";
}
else
{
qDebug() << "Listening on port 8080...";
}
return success;
}
QString HttpServerObject::sensorRequestHandle(const QHttpServerRequest &request)
{
QByteArray requestData = request.body();
sensorPostDataHandle(requestData);
qDebug() << requestData;
// 下面仅仅是举例,要根据实际情况,给客户端回复
QJsonObject obj;
obj.insert("name", QJsonValue("zhangsan"));
QJsonDocument doc(obj);
QString s = doc.toJson(QJsonDocument::Compact);
return s;
}
void HttpServerObject::sensorPostDataHandle(const QByteArray &postData)
{
// 在此处处理 POST 数据
int temp = 0;
int buffer_length = postData.size();
int index_start = 0;
struct SensorData myData;
if (((postData.at(0) & 0x000000FF) == 0x3A) && ((postData.at(1) & 0x000000FF) == 0x01) && ((postData.at(2) & 0x000000FF) == 0x00) && ((postData.at(3) & 0x000000FF) == 0x09) && ((postData.at(4) & 0x000000FF) == 0x00) && ((postData.at(5) & 0x000000FF) == 0x9C) && ((postData.at(6) & 0x000000FF) == 0x00))
{
if (buffer_length >= 11)
{
index_start = 7;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.time = temp * 0.002;
}
if (buffer_length >= 15)
{
index_start = 11;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.initialAccelerationX = *(float *)&*(float *)&temp * 1.0;
}
if (buffer_length >= 19)
{
index_start = 15;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.initialAccelerationY = *(float *)&temp * 1.0;
}
if (buffer_length >= 23)
{
index_start = 19;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.initialAccelerationZ = *(float *)&temp * 1.0;
}
if (buffer_length >= 27)
{
index_start = 23;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.cAccelerationX = *(float *)&temp * 1.0;
}
if (buffer_length >= 31)
{
index_start = 27;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.cAccelerationY = *(float *)&temp * 1.0;
}
if (buffer_length >= 35)
{
index_start = 31;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.cAccelerationZ = *(float *)&temp * 1.0;
}
if (buffer_length >= 39)
{
index_start = 35;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.oGyroscopeIX = *(float *)&temp * 1.0;
}
if (buffer_length >= 43)
{
index_start = 39;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.oGyroscopeIY = *(float *)&temp * 1.0;
}
if (buffer_length >= 47)
{
index_start = 43;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.oGyroscopeIZ = *(float *)&temp * 1.0;
}
if (buffer_length >= 51)
{
index_start = 47;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.oGyroscopeIIX = *(float *)&temp * 1.0;
}
if (buffer_length >= 55)
{
index_start = 51;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.oGyroscopeIIY = *(float *)&temp * 1.0;
}
if (buffer_length >= 59)
{
index_start = 55;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.oGyroscopeIIZ = *(float *)&temp * 1.0;
}
if (buffer_length >= 63)
{
index_start = 59;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.sSCGyroscopeIX = *(float *)&temp * 1.0;
}
if (buffer_length >= 67)
{
index_start = 63;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.sSCGyroscopeIY = *(float *)&temp * 1.0;
}
if (buffer_length >= 71)
{
index_start = 67;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.sSCGyroscopeIZ = *(float *)&temp * 1.0;
}
if (buffer_length >= 75)
{
index_start = 71;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.sSCGyroscopeIIX = *(float *)&temp * 1.0;
}
if (buffer_length >= 79)
{
index_start = 75;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.sSCGyroscopeIIY = *(float *)&temp * 1.0;
}
if (buffer_length >= 83)
{
index_start = 79;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.sSCGyroscopeIIZ = *(float *)&temp * 1.0;
}
if (buffer_length >= 87)
{
index_start = 83;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.cACGyroscopeIX = *(float *)&temp * 1.0;
}
if (buffer_length >= 91)
{
index_start = 87;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.cACGyroscopeIY = *(float *)&temp * 1.0;
}
if (buffer_length >= 95)
{
index_start = 91;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.cACGyroscopeIZ = *(float *)&temp * 1.0;
}
if (buffer_length >= 99)
{
index_start = 95;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.cACGyroscopeIIX = *(float *)&temp * 1.0;
}
if (buffer_length >= 103)
{
index_start = 99;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.cACGyroscopeIIY = *(float *)&temp * 1.0;
}
if (buffer_length >= 107)
{
index_start = 103;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.cACGyroscopeIIZ = *(float *)&temp * 1.0;
}
if (buffer_length >= 111)
{
index_start = 107;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.oMagnetometerX = *(float *)&temp * 1.0;
}
if (buffer_length >= 115)
{
index_start = 111;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.oMagnetometerY = *(float *)&temp * 1.0;
}
if (buffer_length >= 119)
{
index_start = 115;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.oMagnetometerZ = *(float *)&temp * 1.0;
}
if (buffer_length >= 123)
{
index_start = 119;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.cMagnetometerX = *(float *)&temp * 1.0;
}
if (buffer_length >= 127)
{
index_start = 123;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.cMagnetometerY = *(float *)&temp * 1.0;
}
if (buffer_length >= 131)
{
index_start = 127;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.cMagnetometerZ = *(float *)&temp * 1.0;
}
if (buffer_length >= 151)
{
index_start = 147;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.eulerianAnglesX = *(float *)&temp * 1.0;
}
if (buffer_length >= 155)
{
index_start = 151;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.eulerianAnglesY = *(float *)&temp * 1.0;
}
if (buffer_length >= 159)
{
index_start = 155;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.eulerianAnglesZ = *(float *)&temp * 1.0;
}
if (buffer_length >= 163)
{
index_start = 159;
temp = (postData.at(index_start) & 0xFF) | ((postData.at(index_start + 1) & 0xFF) << 8) | ((postData.at(index_start + 2) & 0xFF) << 16) | ((postData.at(index_start + 3) & 0xFF) << 24);
myData.temputer = *(float *)&temp * 1.0;
}
// 处理好数据后,使用信号发送走
emit sendSensorDataToUISignal(QVariant::fromValue(myData));
}
}
// void HttpServerObject::videoPostDataHandle(const QByteArray &postData)
// {
// // 使用方法:
// // 构建pixmap
// const unsigned char *yuyv_data = (const unsigned char *)postData.constData();
// QImage pixmap = yuyvToQImage(yuyv_data,IMAGE_W,IMAGE_H);
// // 发送图片
// emit sendImageToUISignal(pixmap);
// }
// QString HttpServerObject::videoRequestHandle(const QHttpServerRequest &request)
// {
// QByteArray requestData = request.body();
// videoPostDataHandle(requestData);
// qDebug() << requestData;
// // 下面仅仅是举例,要根据实际情况,给客户端回复
// QJsonObject obj;
// obj.insert("name", QJsonValue("lisi"));
// QJsonDocument doc(obj);
// QString s = doc.toJson(QJsonDocument::Compact);
// return s;
// }
// bool HttpServerObject::startVideoServer(int post)
// {
// bool success = this->videoServer->listen(QHostAddress::Any, post);
// if (!success)
// {
// qDebug() << "Failed to start server!";
// }
// else
// {
// qDebug() << "Listening on port 8080...";
// }
// return success;
// }
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/gu_jin_long/lpmsqt-ui.git
git@gitee.com:gu_jin_long/lpmsqt-ui.git
gu_jin_long
lpmsqt-ui
LPMSQtUi
master

搜索帮助

D67c1975 1850385 1daf7b77 1850385