完善lua功能实现串口发送
parent
dcc5b389dd
commit
ffe1fd9bb8
12
README.md
12
README.md
|
@ -9,6 +9,14 @@
|
|||
- udp
|
||||
|
||||
#### 软件功能
|
||||
不仅仅能够显示收到的数据,还能基于自己编写脚本实现简单的协议。</br>
|
||||
提供lua脚本功能钩子</br>
|
||||
功能示意图如下:</br>
|
||||
|
||||
![image.png](https://www.testingcloud.club/sapi/api/image_download/000884f1-a057-11eb-a166-525400dc6cec.png)
|
||||
|
||||
</br>
|
||||
|
||||
串口配置:</br>
|
||||
![image.png](https://www.testingcloud.club/sapi/api/image_download/2184a3b1-a057-11eb-a166-525400dc6cec.png)
|
||||
|
||||
lua脚本调试</br>
|
||||
![image.png](https://www.testingcloud.club/sapi/api/image_download/36748542-a057-11eb-a166-525400dc6cec.png)
|
|
@ -96,7 +96,8 @@ Item {
|
|||
Layout.bottomMargin: 10
|
||||
|
||||
onClicked: {
|
||||
|
||||
lua_script_text = lua_script.text
|
||||
DataWrap.SaveLuaScript(lua_script_text)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#include "lua_bind.h"
|
||||
#include "sharedata.h"
|
||||
|
||||
// 在qml界面中显示lua层处理过的数据
|
||||
int LuaShowData(lua_State *vm)
|
||||
{
|
||||
// 获取函数参数:从栈底取一个参数
|
||||
|
@ -12,3 +13,16 @@ int LuaShowData(lua_State *vm)
|
|||
return 0;
|
||||
}
|
||||
|
||||
//
|
||||
int LuaWriteUart(lua_State *vm)
|
||||
{
|
||||
// 获取函数参数:从栈底取一个参数
|
||||
const char *k = lua_tostring(vm, 1);
|
||||
if (nullptr != k){
|
||||
//todo qml显示添加
|
||||
}
|
||||
gGlobal.SendUartData(k);
|
||||
qDebug()<<"send data "<< QString(k);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -9,5 +9,6 @@ extern "C" {
|
|||
|
||||
// 在界面中显示数据
|
||||
int LuaShowData(lua_State *);
|
||||
int LuaWriteUart(lua_State *vm);
|
||||
|
||||
#endif // LUA_BIND_H
|
||||
|
|
|
@ -24,6 +24,34 @@ void LuaDelegate::OnDataRecv(QString data){
|
|||
lua_call(mVM,2,0);
|
||||
}
|
||||
|
||||
void LuaDelegate::DumpStack()
|
||||
{
|
||||
static int count = 0;
|
||||
printf("begin dump lua stack:%d\n", count);
|
||||
int top = lua_gettop(mVM);
|
||||
for (int i = top; i > 0; --i)
|
||||
{
|
||||
int t = lua_type(mVM, i);
|
||||
switch (t)
|
||||
{
|
||||
case LUA_TSTRING:
|
||||
qDebug()<<("%s\n", lua_tostring(mVM, i));
|
||||
break;
|
||||
case LUA_TBOOLEAN:
|
||||
qDebug()<<(lua_toboolean(mVM, i) ? "true\n" : "false\n");
|
||||
break;
|
||||
case LUA_TNUMBER:
|
||||
qDebug()<<("%g\n", lua_tonumber(mVM, i));
|
||||
break;
|
||||
default:
|
||||
qDebug()<<("%s\n", lua_typename(mVM, t));
|
||||
break;
|
||||
}
|
||||
}
|
||||
++count;
|
||||
}
|
||||
|
||||
|
||||
LuaDelegate::~LuaDelegate()
|
||||
{
|
||||
if(nullptr != mVM){
|
||||
|
@ -40,6 +68,8 @@ LuaDelegate::LuaDelegate():
|
|||
}
|
||||
luaL_openlibs(mVM); //打开标准库
|
||||
lua_register(mVM, "showbuffer", LuaShowData);
|
||||
lua_register(mVM, "resp", LuaWriteUart);
|
||||
|
||||
}
|
||||
|
||||
int LuaDelegate::DoFile(QString path)
|
||||
|
@ -55,11 +85,3 @@ int LuaDelegate::DoFile(QString path)
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void TestLua()
|
||||
{
|
||||
LuaDelegate v;
|
||||
qDebug()<<typeid (int).name();
|
||||
v.DoFile("Test.lua");
|
||||
v.CallFuntion<int,void*,bool>("test",13,(void *)"sds",false);
|
||||
}
|
||||
|
|
|
@ -23,7 +23,6 @@ public:
|
|||
int DoFile(QString);
|
||||
void Stop();
|
||||
int DoString(QString);
|
||||
|
||||
void pushstack() {
|
||||
// const std::type_info &t1 = std::bad_typeid(arg1);
|
||||
// std::cout << t1.name() << std::endl;
|
||||
|
@ -45,7 +44,7 @@ public:
|
|||
}
|
||||
/* 收到数据发送给lua层进行处理*/
|
||||
void OnDataRecv(QString);
|
||||
|
||||
void DumpStack();
|
||||
|
||||
~LuaDelegate();
|
||||
private:
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#include <QtSerialPort/QSerialPort>
|
||||
#include <QtSerialPort/QSerialPortInfo>
|
||||
#include <QFile>
|
||||
#include <QThread>
|
||||
|
||||
ShareData::ShareData(QObject *parent) : QObject(parent),
|
||||
mView(nullptr)
|
||||
|
@ -14,7 +15,10 @@ ShareData::ShareData(QObject *parent) : QObject(parent),
|
|||
QTextStream in(&file);
|
||||
mLuaScript = in.readAll();
|
||||
qDebug()<< mLuaScript;
|
||||
mLua.DoString(mLuaScript);
|
||||
int ret = mLua.DoString(mLuaScript);
|
||||
if(ret < 0){
|
||||
qDebug()<<"默认lua脚本加载错误";
|
||||
}
|
||||
}
|
||||
|
||||
int ShareData::SetQuickView(QQuickView *view)
|
||||
|
@ -41,10 +45,6 @@ int ShareData::SetQuickView(QQuickView *view)
|
|||
|
||||
int ShareData::OnDataRecv(QByteArray arr)
|
||||
{
|
||||
// qDebug()<<QString(arr)<<"data";
|
||||
// if(nullptr != mProtoDebug){
|
||||
// QMetaObject::invokeMethod(mProtoDebug, "addString",Q_ARG(QVariant, QString(arr)));
|
||||
// }
|
||||
mLua.OnDataRecv(QString(arr));
|
||||
}
|
||||
|
||||
|
@ -55,6 +55,15 @@ int ShareData::ShowDataInQML(QString x)
|
|||
}
|
||||
}
|
||||
|
||||
int ShareData::SendUartData(const char *data)
|
||||
{
|
||||
if(nullptr != data){
|
||||
this->mSerialController->SendData((uint8_t *)data,strlen(data));
|
||||
return 0;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
int ShareData::OpenUart(QString port, QString baudRate, QString dataBits, QString stopBits, QString flow)
|
||||
{
|
||||
qDebug()<<port<<baudRate<<dataBits<<stopBits<<flow;
|
||||
|
@ -90,4 +99,16 @@ int ShareData::TestShowData()
|
|||
return 0;
|
||||
}
|
||||
|
||||
int ShareData::SaveLuaScript(QString str)
|
||||
{
|
||||
qDebug()<<QThread::currentThreadId();
|
||||
mLuaScript = str;
|
||||
qDebug()<<str;
|
||||
int ret = mLua.DoString(mLuaScript);
|
||||
if(ret < 0){
|
||||
qDebug()<<"保存qml失败";
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -17,9 +17,7 @@ extern ShareData gGlobal;
|
|||
class ShareData : public QObject ,SerialController::SerialListener
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
Q_PROPERTY(QString _txt READ rtxt WRITE settxt NOTIFY txtchanged)
|
||||
|
||||
public:
|
||||
explicit ShareData(QObject *parent = nullptr);
|
||||
int SetQuickView(QQuickView *);
|
||||
|
@ -32,6 +30,7 @@ public:
|
|||
}
|
||||
int OnDataRecv(QByteArray);
|
||||
int ShowDataInQML(QString x);
|
||||
int SendUartData(const char *);
|
||||
|
||||
Q_INVOKABLE void getValFromQml(int v) {
|
||||
qDebug() << "value from qml is :" << v;
|
||||
|
@ -43,6 +42,7 @@ public:
|
|||
Q_INVOKABLE int CloseSerial();
|
||||
Q_INVOKABLE int TestLua();
|
||||
Q_INVOKABLE int TestShowData();
|
||||
Q_INVOKABLE int SaveLuaScript(QString);
|
||||
|
||||
QString _txt = "hello world\r\n";
|
||||
|
||||
|
|
Loading…
Reference in New Issue