|
@@ -1,20 +1,21 @@
|
|
-using System;
|
|
|
|
-using System.IO.Ports;
|
|
|
|
|
|
+using MySql.Data.MySqlClient;
|
|
|
|
+using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Data;
|
|
|
|
+using System.Data.SqlClient;
|
|
using System.Drawing;
|
|
using System.Drawing;
|
|
-using System.Linq;
|
|
|
|
-using System.Text;
|
|
|
|
-using System.Threading.Tasks;
|
|
|
|
-using System.Windows.Forms;
|
|
|
|
using System.IO;
|
|
using System.IO;
|
|
|
|
+using System.IO.Ports;
|
|
|
|
+using System.Linq;
|
|
using System.Net;
|
|
using System.Net;
|
|
-using System.Data.SqlClient;
|
|
|
|
using System.Runtime.Serialization;
|
|
using System.Runtime.Serialization;
|
|
-using MySql.Data.MySqlClient;
|
|
|
|
-using System.Threading;
|
|
|
|
|
|
+using System.Text;
|
|
using System.Text.RegularExpressions;
|
|
using System.Text.RegularExpressions;
|
|
|
|
+using System.Threading;
|
|
|
|
+using System.Threading.Tasks;
|
|
|
|
+using System.Windows.Forms;
|
|
|
|
+using System.Windows.Input;
|
|
|
|
|
|
|
|
|
|
namespace Bird_tool
|
|
namespace Bird_tool
|
|
@@ -73,6 +74,8 @@ namespace Bird_tool
|
|
private TestMode m_test_mode = TestMode.none;
|
|
private TestMode m_test_mode = TestMode.none;
|
|
private DeviceType m_device_type = DeviceType.LEWEI_DEVICE;
|
|
private DeviceType m_device_type = DeviceType.LEWEI_DEVICE;
|
|
|
|
|
|
|
|
+ private CommandManager m_command_manager;
|
|
|
|
+
|
|
private string test_tool_passwd = "szhfy";
|
|
private string test_tool_passwd = "szhfy";
|
|
private string wifi_ssid = "";
|
|
private string wifi_ssid = "";
|
|
private string wifi_password = "";
|
|
private string wifi_password = "";
|
|
@@ -301,12 +304,13 @@ namespace Bird_tool
|
|
{
|
|
{
|
|
|
|
|
|
load_app_config();
|
|
load_app_config();
|
|
-
|
|
|
|
_uart_ui_change(false);
|
|
_uart_ui_change(false);
|
|
SerialPort_Load();
|
|
SerialPort_Load();
|
|
|
|
+ RegisterCommands();
|
|
|
|
+
|
|
|
|
|
|
// 判断是什么厂商的设备配置模式
|
|
// 判断是什么厂商的设备配置模式
|
|
- if (appConfig.c_dev_key == "fy")
|
|
|
|
|
|
+ if (appConfig.c_dev_key == "fy" || appConfig.c_dev_key == "fanyue")
|
|
{
|
|
{
|
|
m_device_type = DeviceType.FANYUE_DEVICE;
|
|
m_device_type = DeviceType.FANYUE_DEVICE;
|
|
Log($"梵悦观鸟器配置工具启动中");
|
|
Log($"梵悦观鸟器配置工具启动中");
|
|
@@ -343,9 +347,11 @@ namespace Bird_tool
|
|
if (appConfig.enable_local_server)
|
|
if (appConfig.enable_local_server)
|
|
{
|
|
{
|
|
_imageSharpnessServer = new ImageSharpnessServer("*", appConfig.web_port);
|
|
_imageSharpnessServer = new ImageSharpnessServer("*", appConfig.web_port);
|
|
|
|
+ _imageSharpnessServer.OnLog += Log;
|
|
_ip_ui_change();
|
|
_ip_ui_change();
|
|
if (_imageSharpnessServer.Start())
|
|
if (_imageSharpnessServer.Start())
|
|
{
|
|
{
|
|
|
|
+ Log($"网络服务已经启动, localhost:{appConfig.web_port}");
|
|
Log_show($"网络服务已经启动, localhost:{appConfig.web_port}");
|
|
Log_show($"网络服务已经启动, localhost:{appConfig.web_port}");
|
|
}
|
|
}
|
|
else
|
|
else
|
|
@@ -382,9 +388,11 @@ namespace Bird_tool
|
|
m_excel_manager = new ExcelDataManager(appConfig);
|
|
m_excel_manager = new ExcelDataManager(appConfig);
|
|
m_excel_manager.OnLog += Log;
|
|
m_excel_manager.OnLog += Log;
|
|
m_excel_manager.OnLogShow += Log_show;
|
|
m_excel_manager.OnLogShow += Log_show;
|
|
|
|
+ m_excel_manager.StartLoad();
|
|
if (!m_excel_manager.IsValid)
|
|
if (!m_excel_manager.IsValid)
|
|
{
|
|
{
|
|
Log("excel 文件加载失败, 将禁用ecxel相关功能", LogLevel.error);
|
|
Log("excel 文件加载失败, 将禁用ecxel相关功能", LogLevel.error);
|
|
|
|
+
|
|
Log_show("excel 文件加载失败, 将禁用ecxel相关功能");
|
|
Log_show("excel 文件加载失败, 将禁用ecxel相关功能");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -408,6 +416,7 @@ namespace Bird_tool
|
|
|
|
|
|
private void SerialPort_Load()
|
|
private void SerialPort_Load()
|
|
{
|
|
{
|
|
|
|
+ m_command_manager = new CommandManager();
|
|
// 设置ComboBox数据源
|
|
// 设置ComboBox数据源
|
|
el_serialList.DataSource = _portList;
|
|
el_serialList.DataSource = _portList;
|
|
|
|
|
|
@@ -420,7 +429,7 @@ namespace Bird_tool
|
|
|
|
|
|
// 初始加载串口列表
|
|
// 初始加载串口列表
|
|
RefreshPortList();
|
|
RefreshPortList();
|
|
- _testExecutor = new TestExecutor(_serialManager);
|
|
|
|
|
|
+ _testExecutor = new TestExecutor(_serialManager, m_command_manager);
|
|
|
|
|
|
// 绑定事件处理
|
|
// 绑定事件处理
|
|
_testExecutor.OnLog += Log;
|
|
_testExecutor.OnLog += Log;
|
|
@@ -435,6 +444,8 @@ namespace Bird_tool
|
|
_testExecutor.OnTestEnd += TeseEndHandle;
|
|
_testExecutor.OnTestEnd += TeseEndHandle;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
|
|
+
|
|
// 刷新串口列表并保持选择
|
|
// 刷新串口列表并保持选择
|
|
public void RefreshPortList()
|
|
public void RefreshPortList()
|
|
{
|
|
{
|
|
@@ -640,19 +651,19 @@ namespace Bird_tool
|
|
el_btn_hw_test.BackColor = SystemColors.Control; // 标准按钮背景色
|
|
el_btn_hw_test.BackColor = SystemColors.Control; // 标准按钮背景色
|
|
el_btn_hw_test.ForeColor = SystemColors.ControlText; // 标准文本色
|
|
el_btn_hw_test.ForeColor = SystemColors.ControlText; // 标准文本色
|
|
el_btn_hw_test.FlatStyle = FlatStyle.Standard; // 恢复原始样式
|
|
el_btn_hw_test.FlatStyle = FlatStyle.Standard; // 恢复原始样式
|
|
- el_btn_hw_test.Cursor = Cursors.Default;
|
|
|
|
|
|
+ el_btn_hw_test.Cursor = System.Windows.Forms.Cursors.Default;
|
|
|
|
|
|
if (appConfig.enable_excel_load)
|
|
if (appConfig.enable_excel_load)
|
|
{
|
|
{
|
|
el_btn_config.BackColor = SystemColors.Control;
|
|
el_btn_config.BackColor = SystemColors.Control;
|
|
el_btn_config.ForeColor = SystemColors.ControlText;
|
|
el_btn_config.ForeColor = SystemColors.ControlText;
|
|
el_btn_config.FlatStyle = FlatStyle.Standard;
|
|
el_btn_config.FlatStyle = FlatStyle.Standard;
|
|
- el_btn_config.Cursor = Cursors.Default;
|
|
|
|
|
|
+ el_btn_config.Cursor = System.Windows.Forms.Cursors.Default;
|
|
}
|
|
}
|
|
el_btn_sd_test.BackColor = SystemColors.Control; // 标准按钮背景色
|
|
el_btn_sd_test.BackColor = SystemColors.Control; // 标准按钮背景色
|
|
el_btn_sd_test.ForeColor = SystemColors.ControlText; // 标准文本色
|
|
el_btn_sd_test.ForeColor = SystemColors.ControlText; // 标准文本色
|
|
el_btn_sd_test.FlatStyle = FlatStyle.Standard; // 恢复原始样式
|
|
el_btn_sd_test.FlatStyle = FlatStyle.Standard; // 恢复原始样式
|
|
- el_btn_sd_test.Cursor = Cursors.Default;
|
|
|
|
|
|
+ el_btn_sd_test.Cursor = System.Windows.Forms.Cursors.Default;
|
|
|
|
|
|
}
|
|
}
|
|
else
|
|
else
|
|
@@ -661,17 +672,17 @@ namespace Bird_tool
|
|
el_btn_hw_test.BackColor = SystemColors.Control; // 保持背景色
|
|
el_btn_hw_test.BackColor = SystemColors.Control; // 保持背景色
|
|
el_btn_hw_test.ForeColor = SystemColors.GrayText; // 标准禁用文本色
|
|
el_btn_hw_test.ForeColor = SystemColors.GrayText; // 标准禁用文本色
|
|
el_btn_hw_test.FlatStyle = FlatStyle.Flat; // 扁平化样式增强禁用感
|
|
el_btn_hw_test.FlatStyle = FlatStyle.Flat; // 扁平化样式增强禁用感
|
|
- el_btn_hw_test.Cursor = Cursors.No;
|
|
|
|
|
|
+ el_btn_hw_test.Cursor = System.Windows.Forms.Cursors.No;
|
|
|
|
|
|
el_btn_config.BackColor = SystemColors.Control;
|
|
el_btn_config.BackColor = SystemColors.Control;
|
|
el_btn_config.ForeColor = SystemColors.GrayText;
|
|
el_btn_config.ForeColor = SystemColors.GrayText;
|
|
el_btn_config.FlatStyle = FlatStyle.Flat;
|
|
el_btn_config.FlatStyle = FlatStyle.Flat;
|
|
- el_btn_config.Cursor = Cursors.No;
|
|
|
|
|
|
+ el_btn_config.Cursor = System.Windows.Forms.Cursors.No;
|
|
|
|
|
|
el_btn_sd_test.BackColor = SystemColors.Control; // 保持背景色
|
|
el_btn_sd_test.BackColor = SystemColors.Control; // 保持背景色
|
|
el_btn_sd_test.ForeColor = SystemColors.GrayText; // 标准禁用文本色
|
|
el_btn_sd_test.ForeColor = SystemColors.GrayText; // 标准禁用文本色
|
|
el_btn_sd_test.FlatStyle = FlatStyle.Flat; // 扁平化样式增强禁用感
|
|
el_btn_sd_test.FlatStyle = FlatStyle.Flat; // 扁平化样式增强禁用感
|
|
- el_btn_sd_test.Cursor = Cursors.No;
|
|
|
|
|
|
+ el_btn_sd_test.Cursor = System.Windows.Forms.Cursors.No;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1261,13 +1272,8 @@ namespace Bird_tool
|
|
PrivateCammand = true,
|
|
PrivateCammand = true,
|
|
Timeout = 3000,
|
|
Timeout = 3000,
|
|
DelayBefore = 300,
|
|
DelayBefore = 300,
|
|
- Validator = (response, ctx) =>
|
|
|
|
- {
|
|
|
|
- // 示例:检查MAC地址格式
|
|
|
|
- var mac = ctx.Variables["mac"];
|
|
|
|
- Log($"设备mac地址{mac}", LogLevel.info);
|
|
|
|
- return !IsValidMac(mac);
|
|
|
|
- }
|
|
|
|
|
|
+ MatchedValidator = "checkMac",
|
|
|
|
+ ValidatorParams = { "{{mac}}" }
|
|
},
|
|
},
|
|
// 版本号检查
|
|
// 版本号检查
|
|
new TestStepConfig
|
|
new TestStepConfig
|
|
@@ -1286,16 +1292,6 @@ namespace Bird_tool
|
|
Timeout = 6000,
|
|
Timeout = 6000,
|
|
DelayBefore = 300,
|
|
DelayBefore = 300,
|
|
MaxRetries = 10,
|
|
MaxRetries = 10,
|
|
- Validator = (response, ctx) =>
|
|
|
|
- {
|
|
|
|
- // 示例:检查MAC地址格式
|
|
|
|
- var hwVersion = ctx.Variables["hwVersion"];
|
|
|
|
- var hwTime = ctx.Variables["hwTime"];
|
|
|
|
- Log($"设备版本号 ${hwVersion}", LogLevel.info);
|
|
|
|
- Log($"固件时间 ${hwTime}", LogLevel.info);
|
|
|
|
- // 判断版本号是否为
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
},
|
|
},
|
|
// sd卡测试
|
|
// sd卡测试
|
|
new TestStepConfig
|
|
new TestStepConfig
|
|
@@ -1329,7 +1325,7 @@ namespace Bird_tool
|
|
Command = "AT+SEND=1,AT+CAMPARA?\r\n",
|
|
Command = "AT+SEND=1,AT+CAMPARA?\r\n",
|
|
Tips = "检查sd卡加载状态中",
|
|
Tips = "检查sd卡加载状态中",
|
|
SuccessPattern = "/mnt/sdcard",
|
|
SuccessPattern = "/mnt/sdcard",
|
|
- RetryFromKey = "sdLoad",
|
|
|
|
|
|
+ JumpKey = "sdLoad",
|
|
Timeout = 3000,
|
|
Timeout = 3000,
|
|
DelayBefore = 1000,
|
|
DelayBefore = 1000,
|
|
MaxJump = 5,
|
|
MaxJump = 5,
|
|
@@ -1385,14 +1381,15 @@ namespace Bird_tool
|
|
GroupName = "音频测试",
|
|
GroupName = "音频测试",
|
|
Name = "播放音频",
|
|
Name = "播放音频",
|
|
Command = "AT+SEND=1, AT+HWAUDIO=5\\,\"{{audioFile}}\"\\,800\r\n",
|
|
Command = "AT+SEND=1, AT+HWAUDIO=5\\,\"{{audioFile}}\"\\,800\r\n",
|
|
|
|
+ SuccessPattern = @"<=OK cmd:20",
|
|
//CommandGenerator = ctx =>
|
|
//CommandGenerator = ctx =>
|
|
// $"AT+SEND=1, AT+HWAUDIO=5\\,\"{ctx.Variables["audioFile"]}\"\\,800\r\n",
|
|
// $"AT+SEND=1, AT+HWAUDIO=5\\,\"{ctx.Variables["audioFile"]}\"\\,800\r\n",
|
|
RequiresUserPrompt = true,
|
|
RequiresUserPrompt = true,
|
|
- PromptQuestion = "是否听到音频?",
|
|
|
|
|
|
+ PromptQuestion = "听到音频播放后点击是",
|
|
Timeout = 10000,
|
|
Timeout = 10000,
|
|
DelayBefore = 500,
|
|
DelayBefore = 500,
|
|
MaxRetries = 2,
|
|
MaxRetries = 2,
|
|
- RetryFromKey = "audioTest",
|
|
|
|
|
|
+ JumpKey = "audioTest",
|
|
OnFailure = ctx =>
|
|
OnFailure = ctx =>
|
|
{
|
|
{
|
|
// 失败时重新录制
|
|
// 失败时重新录制
|
|
@@ -1496,9 +1493,82 @@ namespace Bird_tool
|
|
DelayBefore = 500,
|
|
DelayBefore = 500,
|
|
MaxRetries = 5,
|
|
MaxRetries = 5,
|
|
},
|
|
},
|
|
-
|
|
|
|
- // 上传测试
|
|
|
|
|
|
|
|
|
|
+ //new TestStepConfig
|
|
|
|
+ //{
|
|
|
|
+ // GroupId = "upload",
|
|
|
|
+ // Name = "获取MAC地址",
|
|
|
|
+ // Tips = "提取设备MAC地址",
|
|
|
|
+ // IsDeviceInfoItem = true,
|
|
|
|
+ // InfoDisplayName = "设备mac地址",
|
|
|
|
+ // Command = "AT+MAC?\r\n",
|
|
|
|
+ // SuccessPattern = "MAC:",
|
|
|
|
+ // FailurePattern = "ERROR|FAIL",
|
|
|
|
+ // ExtractPattern = @"MAC:([0-9A-Fa-f]{2}(?::[0-9A-Fa-f]{2}){5})",
|
|
|
|
+ // VariableNames = { "mac" },
|
|
|
|
+ // PrivateCammand = true,
|
|
|
|
+ // Timeout = 3000,
|
|
|
|
+ // DelayBefore = 300,
|
|
|
|
+ // MatchedValidator = "checkMac",
|
|
|
|
+ // ValidatorParams = { "{{mac}}" },
|
|
|
|
+ //},
|
|
|
|
+ //new TestStepConfig
|
|
|
|
+ //{
|
|
|
|
+ // GroupId = "upload",
|
|
|
|
+ // ShowStep = false,
|
|
|
|
+ // Name = "配置变量",
|
|
|
|
+ // Tips = "设置变量",
|
|
|
|
+ // PrivateCammand = false,
|
|
|
|
+ // Action = ActionMode.SetVal,
|
|
|
|
+ // VariableNames = { "tt" },
|
|
|
|
+ // VariableValues = { "{{timestamp}}" },
|
|
|
|
+ //},
|
|
|
|
+ //new TestStepConfig
|
|
|
|
+ //{
|
|
|
|
+ // GroupId = "upload",
|
|
|
|
+ // GroupName = "图像测试",
|
|
|
|
+ // Name = "上传测试",
|
|
|
|
+ // Tips = "配置上传地址",
|
|
|
|
+ // Command = "AT+SEND=1, at+campara=6\\,\"http://192.168.1.26:8081/upload/{{mac}}/{{tt}}\"\r\n",
|
|
|
|
+ // SuccessPattern = "<=OK cmd:20",
|
|
|
|
+ // Timeout = 6000,
|
|
|
|
+ // DelayBefore = 500,
|
|
|
|
+ // MaxRetries = 2,
|
|
|
|
+ //},
|
|
|
|
+ //new TestStepConfig
|
|
|
|
+ //{
|
|
|
|
+ // GroupId = "upload",
|
|
|
|
+ // GroupName = "图像测试",
|
|
|
|
+ // Name = "等待拍照",
|
|
|
|
+ // Tips = "等待设备开始拍照",
|
|
|
|
+ // Command = "AT+SEND=1, at+camtp=1\r\n",
|
|
|
|
+ // SuccessPattern = "<=OK cmd:20",
|
|
|
|
+ // Timeout = 6000,
|
|
|
|
+ // DelayBefore = 500,
|
|
|
|
+ // MaxRetries = 2,
|
|
|
|
+ //},
|
|
|
|
+ //new TestStepConfig
|
|
|
|
+ //{
|
|
|
|
+ // GroupId = "upload",
|
|
|
|
+ // GroupName = "图像测试",
|
|
|
|
+ // Name = "等待拍照",
|
|
|
|
+ // Tips = "等待拍照完成...",
|
|
|
|
+ // FailTips = "拍照失败, 分值计算错误",
|
|
|
|
+ // Command = "",
|
|
|
|
+ // // 使用正则匹配 score": 3548.6077951170178,
|
|
|
|
+ // SuccessPattern = @"""score"":\s*(\d+\.\d+)",
|
|
|
|
+ // ExtractPattern = @"(?<=""score"":\s*)[-+]?\d+\.\d+",
|
|
|
|
+ // VariableNames = { "score" },
|
|
|
|
+ // Timeout = 15000,
|
|
|
|
+ // DelayBefore = 500,
|
|
|
|
+ // MaxRetries = 2,
|
|
|
|
+ // MatchedValidator = "compare",
|
|
|
|
+ // ValidatorParams = { "{{score}}", "1000", ">=" },
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ //},
|
|
|
|
+ // 变量验证
|
|
|
|
+
|
|
};
|
|
};
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1537,7 +1607,7 @@ namespace Bird_tool
|
|
Tips = "尝试格式化SD卡中",
|
|
Tips = "尝试格式化SD卡中",
|
|
PrivateCammand = true,
|
|
PrivateCammand = true,
|
|
SuccessPattern = "Verify err:0",
|
|
SuccessPattern = "Verify err:0",
|
|
- RetryFromKey = "sdLoad",
|
|
|
|
|
|
+ JumpKey = "sdLoad",
|
|
Timeout = 60000,
|
|
Timeout = 60000,
|
|
DelayBefore = 1000,
|
|
DelayBefore = 1000,
|
|
MaxJump = 5,
|
|
MaxJump = 5,
|
|
@@ -1554,6 +1624,7 @@ namespace Bird_tool
|
|
}
|
|
}
|
|
Log($"用户输入id: {uuid}");
|
|
Log($"用户输入id: {uuid}");
|
|
var (names, values) = m_excel_manager.GetVariableListByKey(uuid);
|
|
var (names, values) = m_excel_manager.GetVariableListByKey(uuid);
|
|
|
|
+ Log($"names: {names}");
|
|
m_config_uuid = uuid;
|
|
m_config_uuid = uuid;
|
|
List<TestStepConfig> ret_steps = new List<TestStepConfig>();
|
|
List<TestStepConfig> ret_steps = new List<TestStepConfig>();
|
|
// 构建配置文件
|
|
// 构建配置文件
|
|
@@ -1571,13 +1642,9 @@ namespace Bird_tool
|
|
PrivateCammand = true,
|
|
PrivateCammand = true,
|
|
Timeout = 3000,
|
|
Timeout = 3000,
|
|
DelayBefore = 300,
|
|
DelayBefore = 300,
|
|
- Validator = (response, ctx) =>
|
|
|
|
- {
|
|
|
|
- // 示例:检查MAC地址格式
|
|
|
|
- var mac = ctx.Variables["mac"];
|
|
|
|
- Log($"设备mac地址{mac}", LogLevel.info);
|
|
|
|
- return !IsValidMac(mac);
|
|
|
|
- }
|
|
|
|
|
|
+ MatchedValidator = "checkMac",
|
|
|
|
+ ValidatorParams = { "{{mac}}" }
|
|
|
|
+
|
|
});
|
|
});
|
|
ret_steps.Add(new TestStepConfig
|
|
ret_steps.Add(new TestStepConfig
|
|
{
|
|
{
|
|
@@ -1598,7 +1665,7 @@ namespace Bird_tool
|
|
Name = "涂鸦id配置",
|
|
Name = "涂鸦id配置",
|
|
Key = "config_id",
|
|
Key = "config_id",
|
|
Tips = "配置涂鸦sdk账户中",
|
|
Tips = "配置涂鸦sdk账户中",
|
|
- Command = "AT+SCFG={\"target\":\"tuya\"\\,\"data\":{\"pid\":\"9kifakenvwsj1a9v\"\\,\"uuid\":\"{{uuid}}\"\\,\"authkey\":\"{{authkey}}\"\\,\"state\":\"0\"\r\n}}",
|
|
|
|
|
|
+ Command = "AT+SCFG={\"target\":\"tuya\"\\,\"data\":{\"pid\":\"9kifakenvwsj1a9v\"\\,\"uuid\":\"{{uuid}}\"\\,\"authkey\":\"{{authkey}}\"\\,\"state\":\"0\"}}\r\n",
|
|
SuccessPattern = "<=OK cmd:24",
|
|
SuccessPattern = "<=OK cmd:24",
|
|
Timeout = 6000,
|
|
Timeout = 6000,
|
|
DelayBefore = 1000,
|
|
DelayBefore = 1000,
|
|
@@ -1621,7 +1688,7 @@ namespace Bird_tool
|
|
Tips = "检查是否配置涂鸦uuid成功",
|
|
Tips = "检查是否配置涂鸦uuid成功",
|
|
Command = "AT+SEND=1,AT+FACTORY=4\\,\"cat /data/tuya_device_cfg.json | grep uuid | awk -F[:\\,] '{for(i=1;i<=NF;i++){if($i~/uuid/){print $(i+1)}}}'\"\r\n",
|
|
Command = "AT+SEND=1,AT+FACTORY=4\\,\"cat /data/tuya_device_cfg.json | grep uuid | awk -F[:\\,] '{for(i=1;i<=NF;i++){if($i~/uuid/){print $(i+1)}}}'\"\r\n",
|
|
SuccessText = "\"{{uuid}}",
|
|
SuccessText = "\"{{uuid}}",
|
|
- RetryFromKey = "config_id",
|
|
|
|
|
|
+ JumpKey = "config_id",
|
|
Timeout = 6000,
|
|
Timeout = 6000,
|
|
DelayBefore = 1000,
|
|
DelayBefore = 1000,
|
|
MaxJump = 5,
|
|
MaxJump = 5,
|
|
@@ -1633,7 +1700,7 @@ namespace Bird_tool
|
|
Tips = "检查是否配置涂鸦sdk成功",
|
|
Tips = "检查是否配置涂鸦sdk成功",
|
|
Command = "AT+SEND=1,AT+FACTORY=4\\,\"cat /data/tuya_device_cfg.json | grep storage | awk -F[:\\,] '{for(i=1;i<=NF;i++){if($i~/storage/){print $(i+1)}}}'\"\r\n",
|
|
Command = "AT+SEND=1,AT+FACTORY=4\\,\"cat /data/tuya_device_cfg.json | grep storage | awk -F[:\\,] '{for(i=1;i<=NF;i++){if($i~/storage/){print $(i+1)}}}'\"\r\n",
|
|
SuccessText = "\"/data",
|
|
SuccessText = "\"/data",
|
|
- RetryFromKey = "config_id",
|
|
|
|
|
|
+ JumpKey = "config_id",
|
|
Timeout = 6000,
|
|
Timeout = 6000,
|
|
DelayBefore = 1000,
|
|
DelayBefore = 1000,
|
|
MaxJump = 5,
|
|
MaxJump = 5,
|
|
@@ -1764,15 +1831,257 @@ namespace Bird_tool
|
|
var (names, values) = m_excel_manager.GetVariableListByKey(dev_id);
|
|
var (names, values) = m_excel_manager.GetVariableListByKey(dev_id);
|
|
m_config_uuid = dev_id;
|
|
m_config_uuid = dev_id;
|
|
List<TestStepConfig> ret_steps = new List<TestStepConfig>();
|
|
List<TestStepConfig> ret_steps = new List<TestStepConfig>();
|
|
- // 配置28项
|
|
|
|
- return false;
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ // todo 完善乐微需要用到的配置项
|
|
|
|
+ ret_steps.Add(new TestStepConfig
|
|
|
|
+ {
|
|
|
|
+ Name = "测试模式",
|
|
|
|
+ Command = "AT+OSLP=1,0\r\n",
|
|
|
|
+ Tips = "启用测试模式中",
|
|
|
|
+ SuccessPattern = "Wakeup, unsleep:1 debug:0",
|
|
|
|
+ FailurePattern = "ERROR|FAIL",
|
|
|
|
+ Timeout = 4000,
|
|
|
|
+ DelayBefore = 300,
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ ret_steps.Add(new TestStepConfig
|
|
|
|
+ {
|
|
|
|
+ Name = "获取MAC地址",
|
|
|
|
+ Tips = "提取设备MAC地址",
|
|
|
|
+ IsDeviceInfoItem = true,
|
|
|
|
+ InfoDisplayName = "设备mac地址",
|
|
|
|
+ Command = "AT+MAC?\r\n",
|
|
|
|
+ SuccessPattern = "MAC:",
|
|
|
|
+ FailurePattern = "ERROR|FAIL",
|
|
|
|
+ ExtractPattern = @"MAC:([0-9A-Fa-f]{2}(?::[0-9A-Fa-f]{2}){5})",
|
|
|
|
+ VariableNames = { "mac" },
|
|
|
|
+ PrivateCammand = true,
|
|
|
|
+ Timeout = 3000,
|
|
|
|
+ DelayBefore = 300,
|
|
|
|
+ MatchedValidator = "checkMac",
|
|
|
|
+ ValidatorParams = { "{{mac}}" }
|
|
|
|
+ });
|
|
|
|
+ ret_steps.Add(new TestStepConfig
|
|
|
|
+ {
|
|
|
|
+ Name = "获取版本信息",
|
|
|
|
+ Tips = "设备版本检查地址",
|
|
|
|
+ IsDeviceInfoItem = true,
|
|
|
|
+ InfoDisplayName = "设备固件",
|
|
|
|
+ InfoDisplayTemplate = "{{hwTime}} - {{hwVersion}}",
|
|
|
|
+ FailTips = "设备固件异常, 版本号:{{hwVersion}}{{hwTime}}",
|
|
|
|
+ Command = "AT+SEND=1, AT+HWCUST?\r\n",
|
|
|
|
+ SuccessPattern = @"\+HWCUST:",
|
|
|
|
+ FailurePattern = "ERROR|FAIL",
|
|
|
|
+ ExtractPattern = @"\+HWCUST:\s*\d+,\s*""([^""]+)"",\s*""([^""]+)""",
|
|
|
|
+ VariableNames = { "hwVersion", "hwTime" },
|
|
|
|
+ Timeout = 6000,
|
|
|
|
+ DelayBefore = 300,
|
|
|
|
+ MaxRetries = 10,
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ ret_steps.Add(new TestStepConfig
|
|
|
|
+ {
|
|
|
|
+ GroupId = "lewei_config",
|
|
|
|
+ GroupName = "配置乐微信息",
|
|
|
|
+ ShowStep = false,
|
|
|
|
+ IsDeviceInfoItem = true,
|
|
|
|
+ InfoDisplayName = "乐微ID",
|
|
|
|
+ Name = "配置乐微ID",
|
|
|
|
+ Tips = "配置乐微ID中",
|
|
|
|
+ Action = ActionMode.SetVal,
|
|
|
|
+ VariableNames = names,
|
|
|
|
+ VariableValues = values,
|
|
|
|
+ });
|
|
|
|
+ // 配置设备通道信息
|
|
|
|
+ ret_steps.Add(new TestStepConfig
|
|
|
|
+ {
|
|
|
|
+ GroupId = "lewei_config",
|
|
|
|
+ Name = "配置通道",
|
|
|
|
+ Tips = "配置设备sip通道信息",
|
|
|
|
+ Command = "AT+SEND=1, AT+CAMCHAN=1\\,1\\,0\\,\"{{dev_id}}\"\r\n",
|
|
|
|
+ SuccessPattern = "<=OK cmd:20",
|
|
|
|
+ Timeout = 6000,
|
|
|
|
+ DelayBefore = 1000,
|
|
|
|
+ });
|
|
|
|
+ ret_steps.Add(new TestStepConfig
|
|
|
|
+ {
|
|
|
|
+ GroupId = "lewei_config",
|
|
|
|
+ Name = "配置id",
|
|
|
|
+ Tips = "配置设备ID信息",
|
|
|
|
+ Command = "AT+SEND=1, AT+CAMPARA=28\\,\"{{dev_id}}\"\r\n",
|
|
|
|
+ SuccessPattern = "<=OK cmd:20",
|
|
|
|
+ Timeout = 6000,
|
|
|
|
+ DelayBefore = 1000,
|
|
|
|
+ });
|
|
|
|
+ ret_steps.Add(new TestStepConfig
|
|
|
|
+ {
|
|
|
|
+ GroupId = "lewei_config",
|
|
|
|
+ Name = "保存配置",
|
|
|
|
+ Tips = "设置设备CAMPARA配置",
|
|
|
|
+ Command = "AT+SEND=1, AT+CAMSCONT\r\n",
|
|
|
|
+ SuccessPattern = "<=OK cmd:20",
|
|
|
|
+ Timeout = 6000,
|
|
|
|
+ DelayBefore = 1000,
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ ret_steps.Add(new TestStepConfig
|
|
|
|
+ {
|
|
|
|
+ GroupId = "Video_config",
|
|
|
|
+ Key = "videoWidth",
|
|
|
|
+ Name = "配置视频宽度",
|
|
|
|
+ Tips = "分辨率 2560*1440",
|
|
|
|
+ Command = "AT+SEND=1, AT+CAMPARA=1\\,2560\\,1920\r\n",
|
|
|
|
+ SuccessPattern = "<=OK cmd:20",
|
|
|
|
+ Timeout = 6000,
|
|
|
|
+ DelayBefore = 1000,
|
|
|
|
+ MaxRetries = 2,
|
|
|
|
+ });
|
|
|
|
+ ret_steps.Add(new TestStepConfig
|
|
|
|
+ {
|
|
|
|
+ GroupId = "Video_config",
|
|
|
|
+ Key = "videoHeight",
|
|
|
|
+ Name = "配置视频高度",
|
|
|
|
+ Tips = "分辨率 2560*1440",
|
|
|
|
+ Command = "AT+SEND=1, AT+CAMPARA=2\\,1440\\,1080\r\n",
|
|
|
|
+ SuccessPattern = "<=OK cmd:20",
|
|
|
|
+ Timeout = 6000,
|
|
|
|
+ DelayBefore = 1000,
|
|
|
|
+ MaxRetries = 2,
|
|
|
|
+ });
|
|
|
|
+ ret_steps.Add(new TestStepConfig
|
|
|
|
+ {
|
|
|
|
+ GroupId = "Video_code",
|
|
|
|
+ Name = "配置视频格式",
|
|
|
|
+ Tips = "配置视频格式 为 mp4...",
|
|
|
|
+ Command = "AT+SEND=1, AT+CAMPARA=5\\,\"mp4\"\r\n",
|
|
|
|
+ SuccessPattern = "<=OK cmd:20",
|
|
|
|
+ Timeout = 6000,
|
|
|
|
+ DelayBefore = 1000,
|
|
|
|
+ });
|
|
|
|
+ ret_steps.Add(new TestStepConfig
|
|
|
|
+ {
|
|
|
|
+ Name = "配置录像时间",
|
|
|
|
+ Tips = "视频录制时长",
|
|
|
|
+ Command = "AT+SEND=1, AT+CAMPARA=12\\,10\r\n",
|
|
|
|
+ SuccessPattern = "<=OK cmd:20",
|
|
|
|
+ Timeout = 6000,
|
|
|
|
+ DelayBefore = 1000,
|
|
|
|
+ });
|
|
|
|
+ ret_steps.Add(new TestStepConfig
|
|
|
|
+ {
|
|
|
|
+ Name = "配置音量",
|
|
|
|
+ Tips = "设置设备音量与增益补偿",
|
|
|
|
+ Command = "AT+SEND=1, AT+CAMPARA=21\\,60\\,28\\,23\r\n",
|
|
|
|
+ SuccessPattern = "<=OK cmd:20",
|
|
|
|
+ Timeout = 6000,
|
|
|
|
+ DelayBefore = 1000,
|
|
|
|
+ });
|
|
|
|
+ ret_steps.Add(new TestStepConfig
|
|
|
|
+ {
|
|
|
|
+ Name = "配置补光灯",
|
|
|
|
+ Tips = "设置设备补光灯工作模式",
|
|
|
|
+ Command = "AT+SEND=1, AT+CAMPARA=22\\,0\r\n",
|
|
|
|
+ SuccessPattern = "<=OK cmd:20",
|
|
|
|
+ Timeout = 6000,
|
|
|
|
+ DelayBefore = 1000,
|
|
|
|
+ });
|
|
|
|
+ ret_steps.Add(new TestStepConfig
|
|
|
|
+ {
|
|
|
|
+ Name = "配置视频",
|
|
|
|
+ Tips = "设置设备视频编码",
|
|
|
|
+ Command = "AT+SEND=1, AT+CAMPARA=23\\,1\\,0\r\n",
|
|
|
|
+ SuccessPattern = "<=OK cmd:20",
|
|
|
|
+ Timeout = 6000,
|
|
|
|
+ DelayBefore = 1000,
|
|
|
|
+ });
|
|
|
|
+ ret_steps.Add(new TestStepConfig
|
|
|
|
+ {
|
|
|
|
+ Name = "配置通道",
|
|
|
|
+ Tips = "设置设备通道配置",
|
|
|
|
+ Command = "AT+SEND=1, AT+CAMPARA=26\\,1\\,0\r\n",
|
|
|
|
+ SuccessPattern = "<=OK cmd:20",
|
|
|
|
+ Timeout = 6000,
|
|
|
|
+ DelayBefore = 1000,
|
|
|
|
+ });
|
|
|
|
+ ret_steps.Add(new TestStepConfig
|
|
|
|
+ {
|
|
|
|
+ Name = "保存配置",
|
|
|
|
+ Tips = "设置设备CAMPARA配置",
|
|
|
|
+ Command = "AT+SEND=1, AT+CAMSCONT\r\n",
|
|
|
|
+ SuccessPattern = "<=OK cmd:20",
|
|
|
|
+ Timeout = 6000,
|
|
|
|
+ DelayBefore = 1000,
|
|
|
|
+ });
|
|
|
|
+ ret_steps.Add(new TestStepConfig
|
|
|
|
+ {
|
|
|
|
+ Name = "配置水印",
|
|
|
|
+ Tips = "设置设备水印信息",
|
|
|
|
+ Command = "AT+SEND=1, AT+CAMISP=5\\,0\\,0\r\n",
|
|
|
|
+ SuccessPattern = "<=OK cmd:20",
|
|
|
|
+ Timeout = 6000,
|
|
|
|
+ DelayBefore = 1000,
|
|
|
|
+ });
|
|
|
|
+ ret_steps.Add(new TestStepConfig
|
|
|
|
+ {
|
|
|
|
+ Name = "启用识别",
|
|
|
|
+ Tips = "启用设备识别功能",
|
|
|
|
+ Command = "AT+SEND=1, AT+CAMISP=12\\,1\r\n",
|
|
|
|
+ SuccessPattern = "<=OK cmd:20",
|
|
|
|
+ Timeout = 6000,
|
|
|
|
+ DelayBefore = 1000,
|
|
|
|
+ });
|
|
|
|
+ ret_steps.Add(new TestStepConfig
|
|
|
|
+ {
|
|
|
|
+ Name = "启用红外补光",
|
|
|
|
+ Tips = "启用设备红外补光功能",
|
|
|
|
+ Command = "AT+SEND=1, AT+CAMISP=15\\,1\r\n",
|
|
|
|
+ SuccessPattern = "<=OK cmd:20",
|
|
|
|
+ Timeout = 6000,
|
|
|
|
+ DelayBefore = 1000,
|
|
|
|
+ });
|
|
|
|
+ ret_steps.Add(new TestStepConfig
|
|
|
|
+ {
|
|
|
|
+ Name = "压缩比配置",
|
|
|
|
+ Tips = "设置设备压缩比",
|
|
|
|
+ Command = "AT+SEND=1, AT+CAMISP=11\\,85\r\n",
|
|
|
|
+ SuccessPattern = "<=OK cmd:20",
|
|
|
|
+ Timeout = 6000,
|
|
|
|
+ DelayBefore = 1000,
|
|
|
|
+ });
|
|
|
|
+ ret_steps.Add(new TestStepConfig
|
|
|
|
+ {
|
|
|
|
+ Name = "保存图像参数",
|
|
|
|
+ Tips = "保存图像参数",
|
|
|
|
+ Command = "AT+SEND=1, AT+CAMISP\r\n",
|
|
|
|
+ SuccessPattern = "<=OK cmd:20",
|
|
|
|
+ Timeout = 6000,
|
|
|
|
+ DelayBefore = 1000,
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ if (!_testExecutor.InitTest(ret_steps))
|
|
|
|
+ {
|
|
|
|
+ Log_show("无法创建乐微配置表");
|
|
|
|
+ StopTest(false, "生成乐微配置命令失败");
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ var groups = _testExecutor.GetGroupInfos();
|
|
|
|
+ foreach (var group in groups)
|
|
|
|
+ {
|
|
|
|
+ if (group.ShowStep)
|
|
|
|
+ {
|
|
|
|
+ progressPanel.AddTestStep(group.RowKey, group.GroupName);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ return true;
|
|
}
|
|
}
|
|
|
|
|
|
- private bool IsValidMac(string mac)
|
|
|
|
- {
|
|
|
|
- // 实现MAC地址验证逻辑
|
|
|
|
- return !string.IsNullOrEmpty(mac) && mac.Length == 17;
|
|
|
|
- }
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
|
|
private void HandleStepChanged(TestStepConfig step, TestContext context, bool isStarting)
|
|
private void HandleStepChanged(TestStepConfig step, TestContext context, bool isStarting)
|
|
@@ -1929,6 +2238,7 @@ namespace Bird_tool
|
|
return value.Length <= maxLength ? value : value.Substring(0, maxLength) + "...";
|
|
return value.Length <= maxLength ? value : value.Substring(0, maxLength) + "...";
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
|
|
|
|
// 加载成功图片
|
|
// 加载成功图片
|
|
private Image LoadSuccessImage()
|
|
private Image LoadSuccessImage()
|
|
@@ -2098,7 +2408,7 @@ namespace Bird_tool
|
|
Font = new Font("Microsoft YaHei UI", 9.5F),
|
|
Font = new Font("Microsoft YaHei UI", 9.5F),
|
|
BackColor = Color.White,
|
|
BackColor = Color.White,
|
|
FlatStyle = FlatStyle.Flat,
|
|
FlatStyle = FlatStyle.Flat,
|
|
- Cursor = Cursors.Hand
|
|
|
|
|
|
+ Cursor = System.Windows.Forms.Cursors.Hand
|
|
};
|
|
};
|
|
|
|
|
|
// 是按钮
|
|
// 是按钮
|
|
@@ -2110,7 +2420,7 @@ namespace Bird_tool
|
|
Font = new Font("Microsoft YaHei UI", 9.5F, FontStyle.Bold),
|
|
Font = new Font("Microsoft YaHei UI", 9.5F, FontStyle.Bold),
|
|
BackColor = Color.FromArgb(220, 235, 252),
|
|
BackColor = Color.FromArgb(220, 235, 252),
|
|
FlatStyle = FlatStyle.Flat,
|
|
FlatStyle = FlatStyle.Flat,
|
|
- Cursor = Cursors.Hand
|
|
|
|
|
|
+ Cursor = System.Windows.Forms.Cursors.Hand
|
|
};
|
|
};
|
|
|
|
|
|
// 计时器(用于倒计时)
|
|
// 计时器(用于倒计时)
|
|
@@ -2209,6 +2519,95 @@ namespace Bird_tool
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+ // 注册mac地址验证器
|
|
|
|
+ private void RegisterMacValid()
|
|
|
|
+ {
|
|
|
|
+ m_command_manager.RegisterCommand(new CommandInfo(
|
|
|
|
+ key: "checkMac",
|
|
|
|
+ name: "mac地址检查",
|
|
|
|
+ description: "检查mac地址是否正确",
|
|
|
|
+ failedMessage: "mac地址检查错误",
|
|
|
|
+ execute: args => {
|
|
|
|
+
|
|
|
|
+ string mac = (string)args[0];
|
|
|
|
+ if (string.IsNullOrEmpty(mac))
|
|
|
|
+ {
|
|
|
|
+ Log("请输入mac地址", LogLevel.error);
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ Log($"mac 地址为 {mac}");
|
|
|
|
+ // mac地址支持 多种分隔符
|
|
|
|
+ mac = mac.Replace("MAC:", "").Replace(":", "").Replace("-", "").Replace("_", "").Replace(".", "");
|
|
|
|
+ // 检查长度
|
|
|
|
+ if (mac.Length != 12)
|
|
|
|
+ {
|
|
|
|
+ Log("MAC地址长度错误", LogLevel.error);
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ // 检查每个字符是否是16进制字符
|
|
|
|
+ foreach (char c in mac)
|
|
|
|
+ {
|
|
|
|
+ if (!char.IsLetterOrDigit(c))
|
|
|
|
+ {
|
|
|
|
+ Log("MAC地址格式错误, 不为hex", LogLevel.error);
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return true;
|
|
|
|
+ },
|
|
|
|
+ parameters: new CommandParameter[] {
|
|
|
|
+ new CommandParameter("macStr", typeof(string), "mac地址字符串")
|
|
|
|
+ }
|
|
|
|
+ ));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 注册分值比较器
|
|
|
|
+ private void RegisterScoreComparer()
|
|
|
|
+ {
|
|
|
|
+ m_command_manager.RegisterCommand(new CommandInfo(
|
|
|
|
+ key: "compare",
|
|
|
|
+ name: "数值比较",
|
|
|
|
+ description: "比较两个数值",
|
|
|
|
+ failedMessage: "分值比较失败",
|
|
|
|
+ execute: args => {
|
|
|
|
+ double a = (double)args[0];
|
|
|
|
+ double b = (double)args[1];
|
|
|
|
+ string op = (string)args[2] ?? "==";
|
|
|
|
+
|
|
|
|
+ switch (op)
|
|
|
|
+ {
|
|
|
|
+ case "==":
|
|
|
|
+ return a == b || Math.Abs(a - b) < 0.000001;
|
|
|
|
+ case "!=":
|
|
|
|
+ return a != b || Math.Abs(a - b) >= 0.000001;
|
|
|
|
+ case ">":
|
|
|
|
+ return a > b;
|
|
|
|
+ case "<":
|
|
|
|
+ return a < b;
|
|
|
|
+ case ">=":
|
|
|
|
+ return a >= b;
|
|
|
|
+ case "<=":
|
|
|
|
+ return a <= b;
|
|
|
|
+ default:
|
|
|
|
+ Log("不受支持的比较符, 检查 compare 命令", LogLevel.error);
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ parameters: new CommandParameter[] {
|
|
|
|
+ new CommandParameter("a", typeof(double), "第一个值"),
|
|
|
|
+ new CommandParameter("b", typeof(double), "第二个值"),
|
|
|
|
+ new CommandParameter("operator", typeof(string), "比较运算符 (==, !=, >, >=, <, <=)", true, "==")
|
|
|
|
+ }
|
|
|
|
+ ));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ private void RegisterCommands()
|
|
|
|
+ {
|
|
|
|
+ RegisterMacValid();
|
|
|
|
+ RegisterScoreComparer();
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|