Files
gcs-nf/MavLinkNode/Terminal.cpp
T

110 lines
2.5 KiB
C++
Raw Normal View History

2020-12-16 16:49:51 +08:00
#include "Terminal.h"
2021-11-13 20:06:59 +08:00
terminal::terminal(QObject *parent) : ThreadTemplet(parent)
2020-12-16 16:49:51 +08:00
{
setRunFrq(1);//默认10Hz频率运行
2020-12-16 16:49:51 +08:00
status.m_Mode = Nop_Mode;
}
2021-11-13 20:06:59 +08:00
terminal::~terminal()
2020-12-16 16:49:51 +08:00
{
2021-11-13 20:06:59 +08:00
qDebug() << "stop terminal" << QThread::currentThreadId();
2020-12-16 16:49:51 +08:00
}
void terminal::process()//线程函数
{
2022-04-07 21:07:19 +08:00
QThread::msleep(5000);//5s后再发送
2020-12-16 16:49:51 +08:00
uint8_t count = 0;
2021-11-13 20:06:59 +08:00
while (true)
2020-12-16 16:49:51 +08:00
{
count ++;
2021-11-13 20:06:59 +08:00
2020-12-16 16:49:51 +08:00
switch(status.m_Mode)
{
default:
2021-11-13 20:06:59 +08:00
case Nop_Mode : QThread::msleep(1000/frq());break;
2022-04-24 16:35:27 +08:00
case RecieveMode : ReadStateMachine();QApplication::processEvents();break;
case TransmitMode : WriteStateMachine();QApplication::processEvents();break;
2020-12-16 16:49:51 +08:00
}
2021-11-13 20:06:59 +08:00
if(isInterruptionRequested())//退出
{
break;
}
}
2020-12-16 16:49:51 +08:00
}
void terminal::Transmit(QString msg)
{
if(status.m_Mode == Nop_Mode)//没有任务在上传
{
SerialData.clear();
SerialData.append(msg);
status.transmit.type = 0;
status.m_Mode = TransmitMode;//发送模式
}
}
//这个函数类似中断,专门处理接收到的状态
void terminal::Parse(mavlink_message_t msg)
{
switch (msg.msgid) {
case MAVLINK_MSG_ID_SERIAL_CONTROL :
mavlink_serial_control_t serial_control;
mavlink_msg_serial_control_decode(&msg,&serial_control);
2021-11-13 20:06:59 +08:00
QByteArray str;
2020-12-16 16:49:51 +08:00
str.append((char *)serial_control.data,serial_control.count);
emit Recieve(str);
break;
}
}
2021-11-13 20:06:59 +08:00
//读状态机
2020-12-16 16:49:51 +08:00
void terminal::ReadStateMachine(void)
{
static uint8_t step = 0;
static uint8_t timeout_count = 0;
static int time = 0;
status.m_Mode = _modetype::Nop_Mode;
}
2021-11-13 20:06:59 +08:00
//写状态机
2020-12-16 16:49:51 +08:00
void terminal::WriteStateMachine(void)
{
serial_control();
status.m_Mode = _modetype::Nop_Mode;
}
void terminal::serial_control(void)
{
static mavlink_message_t msg;
static mavlink_serial_control_t serial_control;
serial_control.baudrate = 115200;
serial_control.count = SerialData.size();
memcpy(serial_control.data,SerialData.toLocal8Bit().data(),SerialData.size());
serial_control.flags = SERIAL_CONTROL_FLAG_EXCLUSIVE | SERIAL_CONTROL_FLAG_RESPOND | SERIAL_CONTROL_FLAG_MULTI;
serial_control.device = SERIAL_CONTROL_DEV_SHELL;
serial_control.timeout = 5000;
2021-11-13 20:06:59 +08:00
mavlink_msg_serial_control_encode(GCS_SysID,GCS_CompID, &msg,&serial_control);
Send(msg);
2020-12-16 16:49:51 +08:00
}