nim_duilib/examples/proto_debuger/new_monitor_form.cpp

335 lines
10 KiB
C++
Raw Normal View History

2021-09-15 17:37:26 +08:00
#include "new_monitor_form.h"
2021-09-20 22:37:32 +08:00
#include <atlstr.h>
#include <setupapi.h>
#include <vector>
2021-09-20 23:46:15 +08:00
#include <windows.h>
#include <iostream>
#include <winspool.h>
2021-09-22 00:01:02 +08:00
#include "serial_port.h"
#include "base_form.h"
2021-10-11 00:00:10 +08:00
#include "tcp_client.h"
2022-02-09 10:53:43 +08:00
#include "udp_libevent.h"
2021-10-11 00:00:10 +08:00
#include "utils.h"
#include <string>
2021-09-20 22:37:32 +08:00
using namespace std;
2021-09-15 17:37:26 +08:00
const std::wstring NewMonitorForm::kClassName = L"Basic";
2021-09-20 22:37:32 +08:00
vector<wstring> EnumPortsWdm()
{
2021-09-20 23:46:15 +08:00
std::vector<std::wstring> ret;
LPCTSTR Reg_Path = _T("HARDWARE\\DEVICEMAP\\SERIALCOMM"); //<2F><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
//TCHAR pnum[8];
HKEY H_Key;
static UINT portlist[255]; //һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>255<35><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9B9BB><EFBFBD>ˡ<EFBFBD>
long Status;
UINT PortNum;
DWORD count = 0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DWORD Com_Length, Type_Length, Type;
TCHAR Com_Name[256];//<2F><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TCHAR Type_Name[256];//<2F><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Status = RegOpenKeyEx(HKEY_LOCAL_MACHINE, Reg_Path, 0, KEY_READ, &H_Key); //<2F><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>long
memset(portlist, 0, sizeof(portlist)); // <20><>0
if (Status) //<2F><><EFBFBD><EFBFBD>ֵΪ0<CEAA><30>ʾ<EFBFBD>򿪳ɹ<F2BFAAB3><C9B9><EFBFBD><EFBFBD><EFBFBD>Ϊ0<CEAA><30><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
2021-09-20 22:37:32 +08:00
{
return ret;
}
2021-09-20 23:46:15 +08:00
while (true)
2021-09-20 22:37:32 +08:00
{
2021-09-20 23:46:15 +08:00
Com_Length = 256; //<2F><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD>ÿ<EFBFBD>ζ<EFBFBD>Ҫ<EFBFBD><D2AA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>Ȼ<EFBFBD>´ο<C2B4><CEBF>ܻ<EFBFBD>ʧ<EFBFBD><CAA7>,Com_lengthֵ<68><D6B5><EFBFBD><EFBFBD>
Type_Length = 256;
PortNum = 0;
Status = RegEnumValue(H_Key, count++, Type_Name, &Type_Length
, 0, &Type, PUCHAR(Com_Name), &Com_Length);
if (Status) //<2F><>ѯʧ<D1AF><CAA7>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD>
2021-09-20 22:37:32 +08:00
{
break;
}
2021-09-20 23:46:15 +08:00
ret.push_back(Com_Name);
for (int i = 3; Com_Name[i]; i++) //ת<><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
2021-09-20 22:37:32 +08:00
{
2021-09-20 23:46:15 +08:00
PortNum = PortNum * 10 + (Com_Name[i] - '0');
2021-09-20 22:37:32 +08:00
}
2021-09-20 23:46:15 +08:00
portlist[count - 1] = PortNum;
2021-09-20 22:37:32 +08:00
}
return ret;
}
2021-09-15 17:37:26 +08:00
2021-09-22 00:01:02 +08:00
NewMonitorForm::NewMonitorForm(ui::Window* parent)
{
m_parent = parent;
2021-10-11 00:00:10 +08:00
m_tcp_client = nullptr;
2021-12-30 11:29:04 +08:00
m_tcp_server = nullptr;
2021-09-15 17:37:26 +08:00
}
NewMonitorForm::~NewMonitorForm()
{
}
std::wstring NewMonitorForm::GetSkinFolder()
{
return L"basic";
}
std::wstring NewMonitorForm::GetSkinFile()
{
return L"newmonitor.xml";
}
std::wstring NewMonitorForm::GetWindowClassName() const
{
return kClassName;
}
LRESULT NewMonitorForm::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
return WindowImplBase::HandleMessage(uMsg, wParam, lParam);
}
void NewMonitorForm::InitWindow()
{
2021-09-20 23:46:15 +08:00
ui::Button* btnclose = dynamic_cast<ui::Button*>(FindControl(L"exit_button"));
if (nullptr != btnclose) {
btnclose->SetText(L"<EFBFBD>˳<EFBFBD>");
btnclose->AttachClick([this](ui::EventArgs*) {
this->Close();
return true;
});
}
ui::Button* btn_add_new = dynamic_cast<ui::Button*>(FindControl(L"open_button"));
if (nullptr != btn_add_new) {
btn_add_new->AttachClick([this](ui::EventArgs*) {
2021-09-26 23:30:37 +08:00
if(m_combo_type->GetText() == L"uart"){
2021-09-22 00:01:02 +08:00
UINT PortNum = 0;
for (int i = 3; m_uart_select_combo->GetText()[i] != '\0'; i++) //ת<><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
{
PortNum = PortNum * 10 + (m_uart_select_combo->GetText()[i] - '0');
}
if (1 == SerialPort::InitPort(PortNum, 115200, 0, 8, 0)) {
// <20>򿪳ɹ<F2BFAAB3>
MessageBox(0, L"<EFBFBD>򿪳ɹ<EFBFBD>", L"", 0);
UartInfo* p = new UartInfo;
2022-01-27 00:42:33 +08:00
p->port_num = PortNum;
2021-09-22 00:01:02 +08:00
p->name = m_uart_select_combo->GetText();
p->baurate = 115200;
p->data_bits = 8;
p->flow_control = 0;
p->verify = 0;
p->stop_bits = 1;
auto succ = ::PostMessage(m_parent->GetHWND(), WM_ADD_UART_MONITOR, (WPARAM)p, 0);
if (!succ) {
printf("postmessage error :%d\r\n", GetLastError());
}
this->Close();
return true;
2022-01-27 00:42:33 +08:00
}else {
2021-09-22 00:01:02 +08:00
}
}
2022-02-07 10:06:38 +08:00
2022-02-09 10:53:43 +08:00
2021-10-09 00:14:49 +08:00
if (m_combo_type->GetText() == L"tcp client") {
2021-11-22 23:53:21 +08:00
wprintf(L"%s\r\n", m_ip_select->GetText().c_str());
2021-10-11 00:00:10 +08:00
wprintf(L"%s\r\n", m_port_select->GetText().c_str());
int port = atoi(wstring2string(m_port_select->GetText()).c_str());
2021-11-22 23:53:21 +08:00
m_tcp_client = new TcpClientLibevent(wstring2string(m_ip_select->GetText()), port, nullptr);
TcpClientInfo* p = new TcpClientInfo;
p->ip = m_ip_select->GetText();
p->port = port;
p->socket_fd = m_tcp_client->SocketFd();
printf("<EFBFBD><EFBFBD><EFBFBD>ӳɹ<EFBFBD> %d \r\n", p->socket_fd);
auto succ = ::PostMessage(m_parent->GetHWND(),
WM_ADD_TCPCLIENT_MONITOR, (WPARAM)p, (LPARAM)m_tcp_client);
if (!succ) {
printf("postmessage error :%d\r\n", GetLastError());
2021-10-11 00:00:10 +08:00
}
2021-09-26 23:30:37 +08:00
}
2021-10-09 00:14:49 +08:00
if (m_combo_type->GetText() == L"tcp server") {
2021-12-30 11:29:04 +08:00
wprintf(L"%s\r\n", m_ip_select->GetText().c_str());
wprintf(L"%s\r\n", m_port_select->GetText().c_str());
int port = atoi(wstring2string(m_port_select->GetText()).c_str());
m_tcp_server = new TcpServerLibevent(port, wstring2string(m_ip_select->GetText().c_str()));
2021-12-30 16:56:16 +08:00
m_tcp_server->StartServerAsync();
2021-12-30 11:29:04 +08:00
TcpServerInfo* p = new TcpServerInfo;
p->ip = m_ip_select->GetText();
p->port = port;
p->socket_fd = m_tcp_server->SocketFd();
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d \r\n", p->socket_fd);
2021-10-09 00:14:49 +08:00
2021-12-30 11:29:04 +08:00
auto succ = ::PostMessage(m_parent->GetHWND(),
2021-12-31 15:35:46 +08:00
WM_ADD_TCPSERVER_MONITOR, (WPARAM)p, (LPARAM)m_tcp_server);
2021-12-30 11:29:04 +08:00
if (!succ) {
printf("postmessage error :%d\r\n", GetLastError());
}
2021-10-09 00:14:49 +08:00
}
2021-12-30 11:29:04 +08:00
2022-02-09 10:53:43 +08:00
if (m_combo_type->GetText() == L"udp") {
wprintf(L"%s\r\n", m_ip_select->GetText().c_str());
wprintf(L"%s\r\n", m_port_select->GetText().c_str());
int port = atoi(wstring2string(m_port_select->GetText()).c_str());
UdpDataGramLibevent* udp = new UdpDataGramLibevent(wstring2string(m_ip_select->GetText().c_str()), port);
TcpServerInfo* p = new TcpServerInfo;
p->ip = m_ip_select->GetText();
p->port = port;
p->socket_fd = m_tcp_server->SocketFd();
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d \r\n", p->socket_fd);
2021-10-09 00:14:49 +08:00
2022-02-09 10:53:43 +08:00
auto succ = ::PostMessage(m_parent->GetHWND(),
WM_ADD_UDP_MONITOR, (WPARAM)p, (LPARAM)udp);
if (!succ) {
printf("postmessage error :%d\r\n", GetLastError());
}
2021-10-09 00:14:49 +08:00
}
return true;
});
}
2021-09-20 23:46:15 +08:00
2021-09-20 22:37:32 +08:00
m_combo_type = dynamic_cast<ui::Combo*>(FindControl(L"combo_type"));
if (NULL != m_combo_type) {
ui::ListContainerElement* element = new ui::ListContainerElement;
element->SetClass(L"listitem");
element->SetFixedHeight(30);
element->SetBkColor(L"white");
element->SetTextPadding({ 6,0,6,0 });
element->SetText(nbase::StringPrintf(L""));
2021-09-20 22:37:32 +08:00
m_combo_type->Add(element);
element = new ui::ListContainerElement;
element->SetClass(L"listitem");
element->SetFixedHeight(30);
element->SetBkColor(L"white");
element->SetTextPadding({ 6,0,6,0 });
element->SetText(nbase::StringPrintf(L"uart"));
2021-09-20 22:37:32 +08:00
m_combo_type->Add(element);
element = new ui::ListContainerElement;
element->SetClass(L"listitem");
element->SetFixedHeight(30);
element->SetBkColor(L"white");
element->SetTextPadding({ 6,0,6,0 });
element->SetText(nbase::StringPrintf(L"tcp client"));
2021-09-20 22:37:32 +08:00
m_combo_type->Add(element);
element = new ui::ListContainerElement;
element->SetClass(L"listitem");
element->SetFixedHeight(30);
element->SetBkColor(L"white");
element->SetTextPadding({ 6,0,6,0 });
element->SetText(nbase::StringPrintf(L"tcp server"));
2021-09-20 22:37:32 +08:00
m_combo_type->Add(element);
element = new ui::ListContainerElement;
element->SetClass(L"listitem");
element->SetFixedHeight(30);
element->SetBkColor(L"white");
element->SetTextPadding({ 6,0,6,0 });
2022-02-09 10:53:43 +08:00
element->SetText(nbase::StringPrintf(L"udp"));
2021-09-20 22:37:32 +08:00
m_combo_type->Add(element);
2021-09-15 17:37:26 +08:00
element = new ui::ListContainerElement;
element->SetClass(L"listitem");
element->SetFixedHeight(30);
element->SetBkColor(L"white");
element->SetTextPadding({ 6,0,6,0 });
2022-02-09 10:53:43 +08:00
element->SetText(nbase::StringPrintf(L"udp group"));
2021-09-20 22:37:32 +08:00
m_combo_type->Add(element);
}
2021-09-20 22:37:32 +08:00
m_ip_config_vbox = dynamic_cast<ui::VBox*>(FindControl(L"ip_config"));
m_uart_config_vbox = dynamic_cast<ui::VBox*>(FindControl(L"uart_config"));
2021-09-26 23:30:37 +08:00
2021-09-20 22:37:32 +08:00
m_uart_select_combo = dynamic_cast<ui::Combo*>(FindControl(L"uart_type"));
2021-09-22 00:01:02 +08:00
m_uart_select_combo->AttachAllEvents([this](ui::EventArgs* ev) {
if (ev->Type == 42) {
2022-02-09 10:53:43 +08:00
}
2021-09-22 00:01:02 +08:00
return true;
});
2021-09-20 22:37:32 +08:00
m_uart_baurate_select = dynamic_cast<ui::Combo*>(FindControl(L"uart_baurate_select"));
2021-09-26 23:30:37 +08:00
m_ip_select = dynamic_cast<ui::RichEdit*>(FindControl(L"ip_edit"));
m_port_select= dynamic_cast<ui::RichEdit*>(FindControl(L"port_input"));
2021-09-20 22:37:32 +08:00
m_combo_type->AttachAllEvents([this](ui::EventArgs* ev) {
if (nullptr != ev) {
2021-09-16 14:05:52 +08:00
auto p = static_cast<ui::Combo*>(ev->pSender);
if (ev->Type == 42) {
auto text = p->GetText();
wprintf(L"%s\r\n", text.c_str());
2021-09-18 11:45:45 +08:00
if (text == L"uart") {
2021-09-20 22:37:32 +08:00
this->m_ip_config_vbox->SetVisible(false);
this->m_uart_config_vbox->SetVisible(true);
auto ports = EnumPortsWdm();
this->m_uart_select_combo->RemoveAll();
for (auto x : ports) {
ui::ListContainerElement* element = new ui::ListContainerElement;
element->SetClass(L"listitem");
element->SetFixedHeight(30);
element->SetBkColor(L"white");
element->SetTextPadding({ 6,0,6,0 });
element->SetText(nbase::StringPrintf(L"%s", &x.c_str()[x.find(L"COM")]));
2021-09-20 23:46:15 +08:00
element->SetDataID(nbase::StringPrintf(L"%s", x.c_str()));
2021-09-20 22:37:32 +08:00
this->m_uart_select_combo->Add(element);
}
vector<wstring> baurate;
baurate.push_back(L"110");
baurate.push_back(L"300");
baurate.push_back(L"600");
baurate.push_back(L"1200");
baurate.push_back(L"2400");
baurate.push_back(L"4800");
baurate.push_back(L"9600");
baurate.push_back(L"14400");
baurate.push_back(L"19200");
baurate.push_back(L"38400");
baurate.push_back(L"56000");
baurate.push_back(L"57600");
baurate.push_back(L"115200");
baurate.push_back(L"128000");
baurate.push_back(L"256000");
m_uart_baurate_select->RemoveAll();
for (auto baus : baurate) {
ui::ListContainerElement* element = new ui::ListContainerElement;
element->SetClass(L"listitem");
element->SetFixedHeight(30);
element->SetBkColor(L"white");
element->SetTextPadding({ 6,0,6,0 });
element->SetText(nbase::StringPrintf(L"%s", baus.c_str()));
this->m_uart_baurate_select->Add(element);
}
}
if ((text == L"tcp client")|| (text == L"tcp server") ||
(text == L"udp client") || (text == L"udp server")) {
this->m_ip_config_vbox->SetVisible(true);
this->m_uart_config_vbox->SetVisible(false);
2021-09-26 23:30:37 +08:00
m_ip_select->SetText(L"127.0.0.1");
m_port_select->SetText(L"9001");
2021-09-18 11:45:45 +08:00
}
}
}
return true;
});
}
2021-09-16 14:05:52 +08:00
2021-09-15 17:37:26 +08:00
LRESULT NewMonitorForm::OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
return __super::OnClose(uMsg, wParam, lParam, bHandled);
}