You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
VideoClient98/src/commandwidget.cpp

612 lines
17 KiB
C++

#include "commandwidget.h"
#include "ui_commandwidget.h"
#include <QIntValidator>
#include "utils/switchbutton.h"
CommandWidget::CommandWidget(QWidget *parent)
: QWidget(parent), ui(new Ui::CommandWidget) {
ui->setupUi(this);
m_commandUdpSocket = new QUdpSocket(this);
// 将套接字绑定到指定端口
if (m_commandUdpSocket->bind(QHostAddress::Any, 1200)) {
qDebug() << "UDP 套接字已绑定到端口 1200";
} else {
qDebug() << "绑定 UDP 套接字失败";
}
//创建自定义套接字
m_CUdpSocket = new CUdpSocket(this);
initmUdpParam();
}
CommandWidget::~CommandWidget() {
delete ui;
if (m_commandUdpSocket) m_commandUdpSocket->deleteLater();
}
void CommandWidget::receiveMessageSlots(QString message, int type) {
emit sendErrorMessage(message, type);
}
unsigned char CommandWidget::getCrc(quint8 *data, quint8 length) {
quint16 crc = 0;
int i = 0;
while (length-- > 0) {
crc = CRC8TAB[crc ^ (data[i] & 0x00FF)];
i++;
}
return crc & 0x00ff;
}
ProtocalKB CommandWidget::EncodeCommandCmd(quint8 cmd) {
std::unique_ptr<ProtocalKB> pBuff = std::make_unique<ProtocalKB>();
pBuff->head[0] = PROTOCOL_HEAD_0;
pBuff->head[1] = PROTOCOL_HEAD_1;
pBuff->reserved = PROTOCOL_RESERVED;
pBuff->data[0] = cmd;
pBuff->data[1] = cmd;
pBuff->data[2] = cmd;
pBuff->curPage = PROTOCOL_CUR_PAGE;
quint8 *ptr = reinterpret_cast<quint8 *>(&pBuff);
pBuff->CHKSUM = getCrc(ptr, sizeof(pBuff) - sizeof(pBuff->CHKSUM));
return *pBuff;
}
bool CommandWidget::writeBufferToClient(const QByteArray &data) {
// 目标地址和端口
QHostAddress destination("172.10.1.216"); // 目标 IP 地址
quint16 port = 9003; // 目标端口
// 发送数据
qint64 bytesSent =
m_commandUdpSocket->writeDatagram(data, destination, port);
if (bytesSent == -1) {
qDebug() << "发送失败:" << m_commandUdpSocket->errorString();
return false;
} else {
qDebug() << "发送成功,字节数:" << bytesSent;
return true;
}
}
void CommandWidget::buttonResponse(quint8 cmd) {
ProtocalKB packet = EncodeCommandCmd(cmd);
// 将 ProtocalKB 结构体转换为 QByteArray
QByteArray data;
data.append(reinterpret_cast<const char *>(&packet), sizeof(ProtocalKB));
for (int i = 0; i < 3; i++) {
writeBufferToClient(data);
}
}
void CommandWidget::receiveUavTypeIndex(int index)
{
switch (index)
{
case FP98:
ui->cmdStackedWidget->setCurrentWidget(ui->stackedWidgetPage1);
break;
case MEDICAL_UNIVERSITY:
ui->cmdStackedWidget->setCurrentWidget(ui->stackedWidgePage2);
break;
default:
break;
}
}
void CommandWidget::on_pushButton_clicked() {
buttonResponse(0x75);
}
void CommandWidget::on_pushButton_2_clicked() {
buttonResponse(0x76);
}
void CommandWidget::on_pushButton_5_clicked() {
buttonResponse(0x7D);
}
void CommandWidget::on_pushButton_6_clicked() {
buttonResponse(0x7C);
}
void CommandWidget::on_pushButton_10_clicked() {
buttonResponse(0x69);
}
void CommandWidget::on_pushButton_9_clicked() {
buttonResponse(0x6A);
}
void CommandWidget::on_pushButton_4_clicked() {
buttonResponse(0x77);
}
void CommandWidget::on_pushButton_3_clicked() {
buttonResponse(0x78);
}
void CommandWidget::on_pushButton_14_clicked() {
buttonResponse(0x79);
}
void CommandWidget::on_pushButton_13_clicked() {
buttonResponse(0xC6);
}
void CommandWidget::on_pushButton_17_clicked() {
buttonResponse(0x66);
}
void CommandWidget::on_pushButton_8_clicked() {
buttonResponse(0x67);
}
void CommandWidget::on_pushButton_7_clicked() {
buttonResponse(0x68);
}
void CommandWidget::on_pushButton_12_clicked() {
buttonResponse(0x7B);
}
void CommandWidget::on_pushButton_11_clicked() {
buttonResponse(0x7A);
}
void CommandWidget::on_pushButton_16_clicked() {
buttonResponse(0xC8);
}
void CommandWidget::on_pushButton_15_clicked() {
buttonResponse(0xC9);
}
/** 武汉天进吊舱 */
void CommandWidget::on_pushButton_left_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("7000"),
m_protocolPodTJ.cmdLeft(ui->cmdSlider->value())));
}
void CommandWidget::on_pushButton_left_released()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("7000"),
QByteArray::fromHex("00000000")));
}
void CommandWidget::on_pushButton_right_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("7000"),
m_protocolPodTJ.cmdRight(ui->cmdSlider->value())));
}
void CommandWidget::on_pushButton_right_released()
{
on_pushButton_left_released();
}
void CommandWidget::on_pushButton_up_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("7000"),
m_protocolPodTJ.cmdUp(ui->cmdSlider->value())));
}
void CommandWidget::on_pushButton_up_released()
{
on_pushButton_left_released();
}
void CommandWidget::on_pushButton_down_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("7000"),
m_protocolPodTJ.cmdDown(ui->cmdSlider->value())));
}
void CommandWidget::on_pushButton_down_released()
{
on_pushButton_left_released();
}
void CommandWidget::on_pushButton_center_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("7100")));
}
void CommandWidget::on_pushButton_guid_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("7200"),
m_protocolPodTJ.digitalGuid(ui->guidLineEdit->text().toInt(), ui->poseLineEdit->text().toInt())));
}
void CommandWidget::on_pushButton_pose_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("7C00"),
m_protocolPodTJ.digitalGuid(ui->guidLineEdit->text().toInt(), ui->poseLineEdit->text().toInt())));
}
void CommandWidget::on_pushButton_directL_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("7A00")));
}
void CommandWidget::on_pushButton_directS_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("7B00")));
}
void CommandWidget::on_pushButton_lookDown_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("7300")));
}
void CommandWidget::on_pushButton_packUp_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("7400")));
}
void CommandWidget::on_pushButton_scanning_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("7900")));
}
void CommandWidget::on_pushButton_close_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("7500")));
}
void CommandWidget::on_comboBox1_activated(int index)
{
if (index >= 0)
{
QByteArray data = ui->comboBox1->currentData().toByteArray();
//qDebug() << data.toHex();
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("2300"),data));
}
}
void CommandWidget::on_comboBox2_activated(int index)
{
if (index >= 0)
{
QByteArray data = ui->comboBox2->currentData().toByteArray();
//qDebug() << data.toHex();
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("2500"), data));
}
}
void CommandWidget::on_pushButton_videoSwitch_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("3100")));
}
void CommandWidget::on_pushButton_video_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("3300")));
}
void CommandWidget::on_pushButton_photo_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("3200")));
}
void CommandWidget::on_pushButton_zoomp_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("4500"),
m_protocolPodTJ.cmdZoom(0x01,ui->comboBox3->currentIndex())));
}
void CommandWidget::on_pushButton_zoomp_released()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("4500")));
}
void CommandWidget::on_pushButton_zoomd_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("4500"),
m_protocolPodTJ.cmdZoom(0x02, ui->comboBox3->currentIndex())));
}
void CommandWidget::on_pushButton_zoomd_released()
{
on_pushButton_zoomp_released();
}
void CommandWidget::on_pushButton_focusP_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("4500"),
m_protocolPodTJ.cmdZoom(0x03, ui->comboBox3->currentIndex())));
}
void CommandWidget::on_pushButton_focusP_released()
{
on_pushButton_zoomp_released();
}
void CommandWidget::on_pushButton_focusD_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("4500"),
m_protocolPodTJ.cmdZoom(0x04, ui->comboBox3->currentIndex())));
}
void CommandWidget::on_pushButton_focusD_released()
{
on_pushButton_zoomp_released();
}
void CommandWidget::on_pushButton_auto_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("4500"),
m_protocolPodTJ.cmdZoom(0x05, 0x00)));
}
void CommandWidget::on_pushButton_auto_released()
{
on_pushButton_zoomp_released();
}
void CommandWidget::on_pushButton_contrastP_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("4100"),
QByteArray::fromHex("01010000")));
}
void CommandWidget::on_pushButton_contrastD_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("4100"),
QByteArray::fromHex("01020000")));
}
void CommandWidget::on_pushButton_lightP_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("4100"),
QByteArray::fromHex("02010000")));
}
void CommandWidget::on_pushButton_lightD_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("4100"),
QByteArray::fromHex("02020000")));
}
void CommandWidget::on_comboBox4_activated(int index)
{
if (index >= 0)
{
QByteArray data = ui->comboBox4->currentData().toByteArray();
//qDebug() << data.toHex();
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("4A00"), data));
}
}
void CommandWidget::on_pushButton_zoomp_2_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("5000"),
QByteArray::fromHex("0F000000")));
}
void CommandWidget::on_pushButton_zoomp_2_released()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("5000"),
QByteArray::fromHex("00000000")));
}
void CommandWidget::on_pushButton_zoomd_2_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("5000"),
QByteArray::fromHex("10000000")));
}
void CommandWidget::on_pushButton_zoomd_2_released()
{
on_pushButton_zoomp_2_released();
}
void CommandWidget::on_pushButton_contrastP_2_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("5A00")));
}
void CommandWidget::on_pushButton_contrastD_2_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("5A00"),
QByteArray::fromHex("01000000")));
}
void CommandWidget::on_pushButton_color_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("5300")));
}
void CommandWidget::on_comboBox5_activated(int index)
{
if (index >= 0)
{
QByteArray data = ui->comboBox5->currentData().toByteArray();
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("5300"), data));
}
}
void CommandWidget::on_pushButton_distance_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("3D00")));
}
void CommandWidget::on_pushButton_distanceC_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("3E00"),
m_protocolPodTJ.cmdLaser(ui->comboBox6->currentIndex() + 1)));
}
void CommandWidget::on_pushButton_distanceS_pressed()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("3F00")));
}
void CommandWidget::on_cmdLineEdit_textChanged(const QString text)
{
qDebug() << text;
if (text.toInt() < 10)//数据小于10不响应
{
return;
}
ui->cmdSlider->setMaximum(text.toInt());
}
void CommandWidget::setPodIPConfig(NetworkIPStruct networkIP, bool isConnect)
{
qDebug() << "ip设置槽函数调用了";
if (!isConnect)
{
m_CUdpSocket->close();
return;
}
if (m_CUdpSocket->close())
{
if (!m_CUdpSocket->bind(networkIP.localIP, networkIP.localPort))
{
qDebug() << "端口号绑定失败";
}
if (!m_CUdpSocket->joinMulticast())
{
qDebug() << "加入组播失败";
}
//绑定目标IP Port
m_CUdpSocket->setTargetInfo(networkIP.remoteIP, networkIP.remotePort);
}
}
void CommandWidget::setMoveParm(QPointF size)
{
int x = std::clamp(static_cast<int>(size.x() / 10), -60, 60);
int y = std::clamp(static_cast<int>(-size.y() / 10), -60, 60);
qDebug() << "缩减之后的屏幕滑动参数==>" << "x:" << x << "y:" << y;
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("7000"),
m_protocolPodTJ.cmdServo(x, y)));
}
void CommandWidget::stopServo()
{
on_pushButton_left_released();
}
void CommandWidget::setTargetTracking(double dir, double pitch)
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("3A00"),
m_protocolPodTJ.targetTracking(static_cast<int>(std::round(dir)), static_cast<int>(std::round(pitch)))));
}
void CommandWidget::setStopTracking()
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("3B00")));
}
/***武汉天进吊舱控制***/
void CommandWidget::initmUdpParam()
{
QIntValidator* validator = new QIntValidator(0, 100, this);
ui->cmdLineEdit->setValidator(validator);
ui->cmdLineEdit->setText("40");
ui->cmdSlider->setValue(20);
//AI开关
connect(ui->switchButton1, &WBSwitchButton::sigSwitchChanged, this, [=](bool onOroff){
if (onOroff) //开关打开
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("9100"),
QByteArray::fromHex("01000000")));
}
else
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("9100")));
}
});
ui->comboBox1->addItem("16 * 16", QByteArray::fromHex("01000000"));
ui->comboBox1->addItem("32 * 32", QByteArray::fromHex("02000000"));
ui->comboBox1->addItem("64 * 64", QByteArray::fromHex("03000000"));
ui->comboBox1->addItem("128 * 128", QByteArray::fromHex("04000000"));
ui->comboBox2->addItem("红外", QByteArray::fromHex("00000000"));
ui->comboBox2->addItem("可见光", QByteArray::fromHex("01000000"));
ui->comboBox2->addItem("上下分屏", QByteArray::fromHex("02000000"));
ui->comboBox2->addItem("画中画1", QByteArray::fromHex("03000000"));
ui->comboBox2->addItem("画中画2", QByteArray::fromHex("04000000"));
ui->comboBox2->addItem("左右分屏", QByteArray::fromHex("05000000"));
ui->comboBox3->setCurrentIndex(4);
//低照度
connect(ui->btn_light, &WBSwitchButton::sigSwitchChanged, this, [=](bool onOroff) {
if (onOroff) //开关打开
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("4B00"),
QByteArray::fromHex("01000000")));
}
else
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("4B00")));
}
});
//电子稳像
connect(ui->btn_stable, &WBSwitchButton::sigSwitchChanged, this, [=](bool onOroff) {
if (onOroff) //开关打开
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("4100"),
QByteArray::fromHex("04010000")));
}
else
{
m_CUdpSocket->sendData(ProtocolPodTJ::encode(QByteArray::fromHex("4100"),
QByteArray::fromHex("04020000")));
}
});
//图像去雾
ui->comboBox4->addItem("", QByteArray::fromHex("00000000"));
ui->comboBox4->addItem("", QByteArray::fromHex("01000000"));
ui->comboBox4->addItem("", QByteArray::fromHex("02000000"));
ui->comboBox4->addItem("", QByteArray::fromHex("03000000"));
//伪彩选择
ui->comboBox5->addItem("白热", QByteArray::fromHex("01000000"));
ui->comboBox5->addItem("黑热", QByteArray::fromHex("01010000"));
ui->comboBox5->addItem("蓝红黄", QByteArray::fromHex("01020000"));
ui->comboBox5->addItem("紫红黄", QByteArray::fromHex("01030000"));
ui->comboBox5->addItem("蓝绿红", QByteArray::fromHex("01040000"));
ui->comboBox5->addItem("彩虹1", QByteArray::fromHex("01050000"));
ui->comboBox5->addItem("彩虹2", QByteArray::fromHex("01060000"));
ui->comboBox5->addItem("黑-红", QByteArray::fromHex("01070000"));
ui->comboBox5->addItem("墨绿-红", QByteArray::fromHex("01080000"));
ui->comboBox5->addItem("蓝绿红-粉", QByteArray::fromHex("01090000"));
ui->comboBox5->addItem("混合色", QByteArray::fromHex("010A0000"));
ui->comboBox5->addItem("红头", QByteArray::fromHex("010B0000"));
}