串口通信的lua binding 逻辑实现。
This commit is contained in:
parent
ee86da70c6
commit
d2ed2516aa
@ -79,8 +79,6 @@ LRESULT BasicForm::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||||||
auto key = info->ip + L":" + std::to_wstring(gTcpClientCnt);
|
auto key = info->ip + L":" + std::to_wstring(gTcpClientCnt);
|
||||||
node->SetText(key);
|
node->SetText(key);
|
||||||
node->SetClass(L"listitem");
|
node->SetClass(L"listitem");
|
||||||
node->SetFixedHeight(20);
|
|
||||||
node->SetMargin({ 20, 0, 0, 0 });
|
|
||||||
mMonitor->GetRootNode()->GetChildNode(1)->AddChildNode(node);
|
mMonitor->GetRootNode()->GetChildNode(1)->AddChildNode(node);
|
||||||
gTcpClientCnt++;
|
gTcpClientCnt++;
|
||||||
if (mTcpClientForm.find(key) == mTcpClientForm.end())
|
if (mTcpClientForm.find(key) == mTcpClientForm.end())
|
||||||
@ -101,13 +99,11 @@ LRESULT BasicForm::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||||||
|
|
||||||
if (p != nullptr) {
|
if (p != nullptr) {
|
||||||
printf("GetCurSel %d\r\n", mRightSide->GetCurSel());
|
printf("GetCurSel %d\r\n", mRightSide->GetCurSel());
|
||||||
|
|
||||||
p->SetAutoDestroy(true);
|
p->SetAutoDestroy(true);
|
||||||
if (mRightShow != nullptr) {
|
if (mRightShow != nullptr) {
|
||||||
mRightShow->SetVisible(false);
|
mRightShow->SetVisible(false);
|
||||||
p->SetVisible(true);
|
p->SetVisible(true);
|
||||||
mRightShow = p;
|
mRightShow = p;
|
||||||
wprintf(L"%s",p->GetName());
|
|
||||||
mRightSide->SelectItem(p->GetName());
|
mRightSide->SelectItem(p->GetName());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -132,8 +128,6 @@ LRESULT BasicForm::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||||||
auto key = info->ip + L":" + std::to_wstring(info->port);
|
auto key = info->ip + L":" + std::to_wstring(info->port);
|
||||||
node->SetText(key);
|
node->SetText(key);
|
||||||
node->SetClass(L"listitem");
|
node->SetClass(L"listitem");
|
||||||
node->SetFixedHeight(20);
|
|
||||||
std::cout << "node heigjt" << node->GetHeight();
|
|
||||||
gTcpServerCnt++;
|
gTcpServerCnt++;
|
||||||
|
|
||||||
printf("WM_ADD_TCPSERVER_MONITOR\r\n");
|
printf("WM_ADD_TCPSERVER_MONITOR\r\n");
|
||||||
@ -149,7 +143,6 @@ LRESULT BasicForm::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||||||
printf("error 1");
|
printf("error 1");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
node->AttachAllEvents(
|
node->AttachAllEvents(
|
||||||
[this](ui::EventArgs* ev) {
|
[this](ui::EventArgs* ev) {
|
||||||
if (ui::EventType::kEventSelect == ev->Type) {
|
if (ui::EventType::kEventSelect == ev->Type) {
|
||||||
|
27
examples/proto_debuger/lua_bind.cpp
Normal file
27
examples/proto_debuger/lua_bind.cpp
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#include "lua_bind.h"
|
||||||
|
|
||||||
|
// 在qml界面中显示lua层处理过的数据
|
||||||
|
int LuaShowData(lua_State* vm)
|
||||||
|
{
|
||||||
|
// 获取函数参数:从栈底取一个参数
|
||||||
|
const char* k = lua_tostring(vm, 1);
|
||||||
|
if (nullptr != k) {
|
||||||
|
//todo qml显示添加
|
||||||
|
}
|
||||||
|
// gGlobal.ShowDataInQML(QString(k));
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
14
examples/proto_debuger/lua_bind.h
Normal file
14
examples/proto_debuger/lua_bind.h
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#ifndef LUA_BIND_H
|
||||||
|
#define LUA_BIND_H
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
#include "lua.h"
|
||||||
|
#include "lauxlib.h"
|
||||||
|
#include "lualib.h"
|
||||||
|
}
|
||||||
|
|
||||||
|
// 在界面中显示数据
|
||||||
|
int LuaShowData(lua_State*);
|
||||||
|
int LuaWriteUart(lua_State* vm);
|
||||||
|
|
||||||
|
#endif // LUA_BIND_H
|
@ -14,6 +14,7 @@ int LuaDelegate::DoString(std::string scr) {
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
this->mScript = scr;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -23,12 +24,13 @@ int LuaDelegate::UpdateScript(std::string scr) {
|
|||||||
}
|
}
|
||||||
free(mVM);
|
free(mVM);
|
||||||
mVM = luaL_newstate(); //打开lua
|
mVM = luaL_newstate(); //打开lua
|
||||||
if(nullptr != mVM) {
|
if (nullptr != mVM) {
|
||||||
printf("shit is nullptr");
|
return -1;
|
||||||
}
|
}
|
||||||
for (auto x : mFunc) {
|
for (auto x : mFunc) {
|
||||||
lua_register(mVM, x.first.c_str(), x.second);
|
lua_register(mVM, x.first.c_str(), x.second);
|
||||||
}
|
}
|
||||||
|
mScript = scr;
|
||||||
if (mVM != nullptr) {
|
if (mVM != nullptr) {
|
||||||
int ret = luaL_dostring(mVM,scr.c_str());
|
int ret = luaL_dostring(mVM,scr.c_str());
|
||||||
if (ret > 0){
|
if (ret > 0){
|
||||||
@ -44,15 +46,25 @@ void LuaDelegate::PrintError(lua_State *L) {
|
|||||||
std::cout<<"\nFATAL ERROR:%s\n\n"<< lua_tostring(L, -1);
|
std::cout<<"\nFATAL ERROR:%s\n\n"<< lua_tostring(L, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int LuaDelegate::BindFunction(std::string name, lua_CFunction function)
|
||||||
|
{
|
||||||
|
if ((nullptr == function) || (name == ""))
|
||||||
|
return -1;
|
||||||
|
this->mFunc[name] = function;
|
||||||
|
lua_register(mVM, "serial_send", function);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void LuaDelegate::OnSerialData(std::string data) {
|
void LuaDelegate::OnSerialData(std::string data) {
|
||||||
int i = lua_getglobal(mVM,"OnDataReady");
|
int i = lua_getglobal(mVM,"OnUartData");
|
||||||
if(i == 0)
|
if(i == 0){
|
||||||
|
std::cout << "OnSerialData not found\r\n";
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
lua_pushstring(mVM,data.data());
|
lua_pushstring(mVM,data.data());
|
||||||
lua_call(mVM,1,0);
|
lua_call(mVM,1,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void LuaDelegate::DumpStack() {
|
void LuaDelegate::DumpStack() {
|
||||||
static int count = 0;
|
static int count = 0;
|
||||||
printf("begin dump lua stack:%d\n", count);
|
printf("begin dump lua stack:%d\n", count);
|
||||||
@ -79,7 +91,6 @@ void LuaDelegate::DumpStack() {
|
|||||||
++count;
|
++count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
LuaDelegate::~LuaDelegate() {
|
LuaDelegate::~LuaDelegate() {
|
||||||
if(nullptr != mVM){
|
if(nullptr != mVM){
|
||||||
lua_close(mVM);
|
lua_close(mVM);
|
||||||
|
@ -25,8 +25,8 @@ public:
|
|||||||
void Stop();
|
void Stop();
|
||||||
int DoString(std::string);
|
int DoString(std::string);
|
||||||
int UpdateScript(std::string);
|
int UpdateScript(std::string);
|
||||||
template <typename T>
|
|
||||||
void pushstack(T arg1);
|
|
||||||
void pushstack(lua_Number arg) {
|
void pushstack(lua_Number arg) {
|
||||||
lua_pushnumber(mVM, arg);
|
lua_pushnumber(mVM, arg);
|
||||||
}
|
}
|
||||||
@ -48,8 +48,7 @@ public:
|
|||||||
void pushstack(lua_CFunction fn, int n) {
|
void pushstack(lua_CFunction fn, int n) {
|
||||||
lua_pushcclosure(mVM, fn, n);
|
lua_pushcclosure(mVM, fn, n);
|
||||||
}
|
}
|
||||||
template <typename T, typename ... Types>
|
|
||||||
void pushstack(T arg1, Types... rest);
|
|
||||||
template <typename ... Types>
|
template <typename ... Types>
|
||||||
void pushstack(lua_Number arg1, Types... rest) {
|
void pushstack(lua_Number arg1, Types... rest) {
|
||||||
lua_pushnumber(mVM, arg1);
|
lua_pushnumber(mVM, arg1);
|
||||||
@ -95,18 +94,15 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void PrintError(lua_State *L);
|
void PrintError(lua_State *L);
|
||||||
|
int BindFunction(std::string name, lua_CFunction);
|
||||||
void OnSerialData(std::string);
|
void OnSerialData(std::string);
|
||||||
void OnNetworkData(char*,char*,uint32_t port);
|
|
||||||
void OnNewTcpClient(std::string ip,uint32_t port,uint32_t sockptr);
|
|
||||||
void OnClientLeave(std::string ip,uint32_t port,uint32_t sockptr);
|
|
||||||
|
|
||||||
void DumpStack();
|
void DumpStack();
|
||||||
|
|
||||||
~LuaDelegate();
|
~LuaDelegate();
|
||||||
private:
|
private:
|
||||||
lua_State *mVM;
|
lua_State *mVM;
|
||||||
std::string mFile;
|
std::string mFile;
|
||||||
|
std::string mScript;
|
||||||
std::map<std::string, lua_CFunction> mFunc;
|
std::map<std::string, lua_CFunction> mFunc;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -172,11 +172,13 @@
|
|||||||
<ClCompile Include="tcp_client.cpp" />
|
<ClCompile Include="tcp_client.cpp" />
|
||||||
<ClCompile Include="tcp_client_form.cpp" />
|
<ClCompile Include="tcp_client_form.cpp" />
|
||||||
<ClCompile Include="tcp_server_libevent.cpp" />
|
<ClCompile Include="tcp_server_libevent.cpp" />
|
||||||
<ClCompile Include="uart_process.cpp" />
|
<ClCompile Include="uart_form.cpp" />
|
||||||
<ClCompile Include="utils.cpp" />
|
<ClCompile Include="utils.cpp" />
|
||||||
|
<ClCompile Include="lua_bind.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="base_form.h" />
|
<ClInclude Include="base_form.h" />
|
||||||
|
<ClInclude Include="lua_bind.h" />
|
||||||
<ClInclude Include="lua_wraper.h" />
|
<ClInclude Include="lua_wraper.h" />
|
||||||
<ClInclude Include="main.h" />
|
<ClInclude Include="main.h" />
|
||||||
<ClInclude Include="msgdef.h" />
|
<ClInclude Include="msgdef.h" />
|
||||||
@ -194,6 +196,7 @@
|
|||||||
<Xml Include="..\Debug\resources\themes\default\basic\uart_form.xml" />
|
<Xml Include="..\Debug\resources\themes\default\basic\uart_form.xml" />
|
||||||
<Xml Include="..\x64\Debug\resources\themes\default\basic\tcp_form.xml" />
|
<Xml Include="..\x64\Debug\resources\themes\default\basic\tcp_form.xml" />
|
||||||
<Xml Include="..\x64\Debug\resources\themes\default\basic\tcp_server_form.xml" />
|
<Xml Include="..\x64\Debug\resources\themes\default\basic\tcp_server_form.xml" />
|
||||||
|
<Xml Include="Debug\themes\default\global.xml" />
|
||||||
<Xml Include="x64\Debug\themes\default\global.xml" />
|
<Xml Include="x64\Debug\themes\default\global.xml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
<ClCompile Include="new_monitor_form.cpp">
|
<ClCompile Include="new_monitor_form.cpp">
|
||||||
<Filter>源文件</Filter>
|
<Filter>源文件</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="uart_process.cpp">
|
<ClCompile Include="uart_form.cpp">
|
||||||
<Filter>源文件</Filter>
|
<Filter>源文件</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="serial_port.cpp">
|
<ClCompile Include="serial_port.cpp">
|
||||||
@ -51,6 +51,9 @@
|
|||||||
<ClCompile Include="tcp_server_form.cpp">
|
<ClCompile Include="tcp_server_form.cpp">
|
||||||
<Filter>源文件</Filter>
|
<Filter>源文件</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="lua_bind.cpp">
|
||||||
|
<Filter>源文件</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="main.h">
|
<ClInclude Include="main.h">
|
||||||
@ -86,6 +89,9 @@
|
|||||||
<ClInclude Include="tcp_server_form.h">
|
<ClInclude Include="tcp_server_form.h">
|
||||||
<Filter>头文件</Filter>
|
<Filter>头文件</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="lua_bind.h">
|
||||||
|
<Filter>头文件</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Xml Include="..\Debug\resources\themes\default\basic\basic.xml">
|
<Xml Include="..\Debug\resources\themes\default\basic\basic.xml">
|
||||||
@ -106,6 +112,9 @@
|
|||||||
<Xml Include="x64\Debug\themes\default\global.xml">
|
<Xml Include="x64\Debug\themes\default\global.xml">
|
||||||
<Filter>资源文件</Filter>
|
<Filter>资源文件</Filter>
|
||||||
</Xml>
|
</Xml>
|
||||||
|
<Xml Include="Debug\themes\default\global.xml">
|
||||||
|
<Filter>资源文件</Filter>
|
||||||
|
</Xml>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="proto_debuger.rc">
|
<ResourceCompile Include="proto_debuger.rc">
|
||||||
|
@ -2,7 +2,8 @@
|
|||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
TcpClientForm::TcpClientForm(ui::Window* hwnd,std::string url, uint32_t port, TcpClientLibevent* p):
|
TcpClientForm::TcpClientForm(ui::Window* hwnd,std::string url, uint32_t port, TcpClientLibevent* p):
|
||||||
m_connected(false)
|
m_connected(false),
|
||||||
|
mLua(nullptr)
|
||||||
{
|
{
|
||||||
mClient = p;
|
mClient = p;
|
||||||
mClient->SetObserver(this);
|
mClient->SetObserver(this);
|
||||||
@ -11,6 +12,7 @@ TcpClientForm::TcpClientForm(ui::Window* hwnd,std::string url, uint32_t port, Tc
|
|||||||
}
|
}
|
||||||
m_url = url;
|
m_url = url;
|
||||||
m_port = port;
|
m_port = port;
|
||||||
|
mLua = new LuaDelegate();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TcpClientForm::Init()
|
void TcpClientForm::Init()
|
||||||
|
@ -14,6 +14,9 @@
|
|||||||
#include "duilib/UIlib.h"
|
#include "duilib/UIlib.h"
|
||||||
#include "tcp_client.h"
|
#include "tcp_client.h"
|
||||||
|
|
||||||
|
#include "lua_wraper.h"
|
||||||
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
class TcpClientForm :
|
class TcpClientForm :
|
||||||
public ui::ChildBox,
|
public ui::ChildBox,
|
||||||
@ -48,4 +51,5 @@ private:
|
|||||||
std::string m_url;
|
std::string m_url;
|
||||||
int m_port;
|
int m_port;
|
||||||
bool m_connected;
|
bool m_connected;
|
||||||
|
LuaDelegate* mLua;
|
||||||
};
|
};
|
@ -12,7 +12,9 @@ extern "C" {
|
|||||||
#include "event2/thread.h"
|
#include "event2/thread.h"
|
||||||
};
|
};
|
||||||
|
|
||||||
TcpServerFrom::TcpServerFrom(ui::Window* hwnd, string url, uint32_t port, TcpServerLibevent* p)
|
TcpServerFrom::TcpServerFrom(ui::Window* hwnd, string url,
|
||||||
|
uint32_t port, TcpServerLibevent* p):
|
||||||
|
mLua(nullptr)
|
||||||
{
|
{
|
||||||
m_server = p;
|
m_server = p;
|
||||||
m_url = url;
|
m_url = url;
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
#include "duilib/UIlib.h"
|
#include "duilib/UIlib.h"
|
||||||
#include "tcp_server_libevent.h"
|
#include "tcp_server_libevent.h"
|
||||||
#include <map>
|
#include <map>
|
||||||
|
#include "lua_wraper.h"
|
||||||
|
|
||||||
class TcpServerFrom :
|
class TcpServerFrom :
|
||||||
public ui::ChildBox
|
public ui::ChildBox
|
||||||
@ -18,7 +18,6 @@ public:
|
|||||||
virtual void Init() override;
|
virtual void Init() override;
|
||||||
void OnNewConnAccept(ConnectionLibevent*);
|
void OnNewConnAccept(ConnectionLibevent*);
|
||||||
void OnDisConnected(ConnectionLibevent*);
|
void OnDisConnected(ConnectionLibevent*);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -42,6 +41,7 @@ private:
|
|||||||
ui::Button* m_button_3;
|
ui::Button* m_button_3;
|
||||||
std::map<uint32_t, ConnectionLibevent*> mClients;
|
std::map<uint32_t, ConnectionLibevent*> mClients;
|
||||||
bool mFlagSelectClient;
|
bool mFlagSelectClient;
|
||||||
|
LuaDelegate *mLua;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
138
examples/proto_debuger/uart_form.cpp
Normal file
138
examples/proto_debuger/uart_form.cpp
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
#include "uart_process.h"
|
||||||
|
#include "utils.h"
|
||||||
|
#include "msgdef.h"
|
||||||
|
#include "utils.h"
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
|
UartForm::UartForm(ui::Window* hwnd,std::wstring name,
|
||||||
|
uint32_t baurate,
|
||||||
|
uint8_t data_bits, uint8_t stop_bits,
|
||||||
|
uint8_t verify, uint8_t flow_control):
|
||||||
|
m_thread_recv(nullptr),
|
||||||
|
mEditRecv(nullptr),
|
||||||
|
mLua(nullptr)
|
||||||
|
{
|
||||||
|
m_name = name;
|
||||||
|
m_baurate = baurate;
|
||||||
|
m_data_bits = data_bits;
|
||||||
|
m_stop_bits = stop_bits;
|
||||||
|
m_verify = verify;
|
||||||
|
m_flow_contro = flow_control;
|
||||||
|
|
||||||
|
m_runing = true;
|
||||||
|
mLua = new LuaDelegate;
|
||||||
|
|
||||||
|
std::ifstream infile;
|
||||||
|
infile.open("D:\\project\\c++\\nim_duilib\\examples\\x64\\script.lua");
|
||||||
|
std::string lua_script;
|
||||||
|
if (infile.is_open()) {
|
||||||
|
std::string s;
|
||||||
|
while (getline(infile, s)) {
|
||||||
|
lua_script += s;
|
||||||
|
}
|
||||||
|
infile.close();
|
||||||
|
}
|
||||||
|
mLuaScript = lua_script;
|
||||||
|
mLua->DoString(lua_script);
|
||||||
|
std::cout << "lua script is " << lua_script << std::endl;
|
||||||
|
|
||||||
|
m_thread_recv = new std::thread([this]() {
|
||||||
|
UINT PortNum = 0;
|
||||||
|
for (int i = 3; m_name[i] != '\0'; i++)
|
||||||
|
{
|
||||||
|
PortNum = PortNum * 10 + (m_name[i] - '0');
|
||||||
|
}
|
||||||
|
char recv[1024] = {0};
|
||||||
|
while (this->m_runing) {
|
||||||
|
if (0 < SerialPort::ReadPort(PortNum, recv, 1024)) {
|
||||||
|
printf("recv data: %s", recv);
|
||||||
|
this->m_show_recv += string2wstring(recv);
|
||||||
|
this->mLua->OnSerialData(recv);
|
||||||
|
if (this->mEditRecv != nullptr) {
|
||||||
|
this->mEditRecv->AppendText(string2wstring(recv), false);
|
||||||
|
::PostMessage(this->GetWindow()->GetHWND(), WM_ADD_UART_RECVDATA,0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Sleep(300);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (nullptr != hwnd) {
|
||||||
|
// set window so we get getwindow by GetWindow funtion
|
||||||
|
this->SetWindow(hwnd, nullptr, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void UartForm::OnUpdateUart()
|
||||||
|
{
|
||||||
|
//if(mEditRecv != nullptr)
|
||||||
|
// this->mEditRecv->SetText(this->m_show_recv );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void UartForm::Init()
|
||||||
|
{
|
||||||
|
ui::ChildBox::Init();
|
||||||
|
auto mRightSide = dynamic_cast<ui::Label*> (FindSubControl(L"uart_info_label"));
|
||||||
|
wchar_t p[100] = { 0 };
|
||||||
|
wsprintf(p,L"串口号: %s 波特率%d 数据位: %d 停止位: %d ",
|
||||||
|
m_name.c_str(),m_baurate,
|
||||||
|
m_data_bits,m_stop_bits);
|
||||||
|
mRightSide->SetText(std::wstring(p));
|
||||||
|
|
||||||
|
mEditSend = dynamic_cast<ui::RichEdit*>(FindSubControl(L"uart_send_edit"));
|
||||||
|
mEditRecv = dynamic_cast<ui::RichEdit*>(FindSubControl(L"uart_recv_eidt"));
|
||||||
|
mEditLua = dynamic_cast<ui::RichEdit*>(FindSubControl(L"lua_script"));
|
||||||
|
|
||||||
|
mEditRecv->SetReadOnly(true);
|
||||||
|
mEditRecv->SetRich(false);
|
||||||
|
mEditRecv->SetAttribute(L"autovscroll", L"true");
|
||||||
|
mEditRecv->SetAttribute(L"multiline", L"true");
|
||||||
|
mEditRecv->SetReturnMsgWantCtrl(true);
|
||||||
|
mEditRecv->SetNeedReturnMsg(true);
|
||||||
|
mEditRecv->SetWordWrap(true);
|
||||||
|
|
||||||
|
auto mBtnSend = static_cast<ui::Button*>(FindSubControl(L"btn_send_data"));
|
||||||
|
if (mBtnSend != nullptr) {
|
||||||
|
mBtnSend->AttachClick([this](ui::EventArgs*) {
|
||||||
|
UINT PortNum = 0;
|
||||||
|
for (int i = 3; m_name[i] != '\0'; i++) //转换为数字
|
||||||
|
{
|
||||||
|
PortNum = PortNum * 10 + (m_name[i] - '0');
|
||||||
|
}
|
||||||
|
|
||||||
|
auto x = mEditSend->GetText();
|
||||||
|
auto tmp = wstring2string(x);
|
||||||
|
wprintf(L"%s\r\n", x.c_str());
|
||||||
|
SerialPort::WritePort(PortNum, tmp.c_str(), tmp.size());
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
auto mBtnClose = static_cast<ui::Button*>(FindSubControl(L"btn_close_uart"));
|
||||||
|
if (mBtnClose != nullptr) {
|
||||||
|
mBtnClose->AttachClick([this](ui::EventArgs*) {
|
||||||
|
wstring* name = new wstring(this->GetName());
|
||||||
|
::PostMessage(this->GetWindow()->GetHWND(),
|
||||||
|
WM_ADD_UART_CLOSE, (WPARAM)name, 0);
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void UartForm::UpdateRecvEdit()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void UartForm::HandleMessage(ui::EventArgs& msg)
|
||||||
|
{
|
||||||
|
if (msg.Type == WM_ADD_UART_RECVDATA) {
|
||||||
|
printf("hello world\r\n");
|
||||||
|
this->mEditRecv->SetText(L"123");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -13,6 +13,7 @@
|
|||||||
#include "serial_port.h"
|
#include "serial_port.h"
|
||||||
// duilib
|
// duilib
|
||||||
#include "duilib/UIlib.h"
|
#include "duilib/UIlib.h"
|
||||||
|
#include "lua_wraper.h"
|
||||||
|
|
||||||
class UartForm : public ui::ChildBox
|
class UartForm : public ui::ChildBox
|
||||||
{
|
{
|
||||||
@ -41,9 +42,13 @@ public:
|
|||||||
|
|
||||||
ui::RichEdit* mEditSend;
|
ui::RichEdit* mEditSend;
|
||||||
ui::RichEdit* mEditRecv;
|
ui::RichEdit* mEditRecv;
|
||||||
|
ui::RichEdit* mEditLua;
|
||||||
|
|
||||||
|
|
||||||
HWND m_hwnd;
|
HWND m_hwnd;
|
||||||
|
LuaDelegate* mLua;
|
||||||
|
std::string mLuaScript;
|
||||||
private:
|
private:
|
||||||
virtual void HandleMessage(ui::EventArgs& msg);
|
virtual void HandleMessage(ui::EventArgs& msg);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -135,7 +135,9 @@
|
|||||||
|
|
||||||
<!--列表通用样式-->
|
<!--列表通用样式-->
|
||||||
<Class name="list" bkcolor="bk_wnd_lightcolor" vscrollbar="true" />
|
<Class name="list" bkcolor="bk_wnd_lightcolor" vscrollbar="true" />
|
||||||
<Class name="listitem" hotcolor="bk_listitem_hovered" pushedcolor="bk_listitem_selected" selectednormalcolor="bk_listitem_selected" fadehot="false" />
|
<Class name="listitem" height="25" hotcolor="bk_listitem_hovered"
|
||||||
|
pushedcolor="bk_listitem_selected" selectednormalcolor="bk_listitem_selected"
|
||||||
|
fadehot="false" margin="10,0,0,0" />
|
||||||
<Class name="list_topitem" height="30" font="system_14" normalcolor="bk_topitem_normal" hotcolor="bk_topitem_hovered" pushedcolor="bk_topitem_selected" selectednormalcolor="bk_topitem_selected" fadehot="false" />
|
<Class name="list_topitem" height="30" font="system_14" normalcolor="bk_topitem_normal" hotcolor="bk_topitem_hovered" pushedcolor="bk_topitem_selected" selectednormalcolor="bk_topitem_selected" fadehot="false" />
|
||||||
|
|
||||||
<!--进度条通用样式, 注意进度条的值使用`_value`属性-->
|
<!--进度条通用样式, 注意进度条的值使用`_value`属性-->
|
||||||
|
Loading…
Reference in New Issue
Block a user