DCS/ruiyiweiUX/Assets/Scripts/Debug/AndroidTestConfigManager.cs

366 lines
10 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.IO;
using UnityEngine;
using GeneralTools;
/// <summary>
/// Android测试配置管理器
/// </summary>
public class AndroidTestConfigManager : MonoBehaviour
{
[Header("测试配置")]
public bool enableSerialTest = true;
public bool enableSimulatedData = false;
public string testSerialPort = "/dev/ttyS4";
public int testBaudRate = 115200;
[Header("调试选项")]
public bool verboseLogging = true;
public bool exportConfigOnStart = true;
void Start()
{
if (exportConfigOnStart)
{
// ExportCurrentConfig();
}
SetupAndroidTestEnvironment();
}
/// <summary>
/// 设置Android测试环境
/// </summary>
private void SetupAndroidTestEnvironment()
{
Debug.Log("=== 设置Android测试环境 ===");
#if UNITY_ANDROID && !UNITY_EDITOR
// 1. 确保配置文件存在
EnsureAndroidConfigExists();
// 2. 更新测试配置
UpdateTestConfig();
// 3. 设置日志级别
SetupLogging();
// 4. 检查文件权限
CheckFilePermissions();
#else
Debug.Log("当前不在Android平台跳过Android特定配置");
#endif
}
/// <summary>
/// 确保Android配置文件存在
/// </summary>
private void EnsureAndroidConfigExists()
{
string persistentConfigPath = Path.Combine(Application.persistentDataPath, "config_android.ini");
string streamingConfigPath = Path.Combine(Application.streamingAssetsPath, "config_android.ini");
Debug.Log($"持久化配置路径: {persistentConfigPath}");
Debug.Log($"StreamingAssets配置路径: {streamingConfigPath}");
if (!File.Exists(persistentConfigPath))
{
if (File.Exists(streamingConfigPath))
{
try
{
// 从StreamingAssets复制
string configContent = File.ReadAllText(streamingConfigPath);
File.WriteAllText(persistentConfigPath, configContent);
Debug.Log("已从StreamingAssets复制配置文件到持久化目录");
}
catch (Exception ex)
{
Debug.LogError($"复制配置文件失败: {ex.Message}");
CreateDefaultAndroidConfig(persistentConfigPath);
}
}
else
{
Debug.LogWarning("StreamingAssets中未找到Android配置文件创建默认配置");
CreateDefaultAndroidConfig(persistentConfigPath);
}
}
else
{
Debug.Log("Android配置文件已存在");
}
}
/// <summary>
/// 创建默认Android配置
/// </summary>
private void CreateDefaultAndroidConfig(string configPath)
{
string defaultConfig = $@"[config]
screen_width=1920
screen_height=1080
window_Left=0
window_Top=0
showcursor=false
fullscreen=2
screenDepth=2
isAllowPlayBGM=true
audioShotLimit=5
logType=0
saveLog=true
broadcastDebug=false
debugSocketMsgMode=1
targetFramerate=60
keyDownActionLevel=0
releaseTime=30
[SerialCommunication]
serialPortName={testSerialPort}
baudRate={testBaudRate}
enabled={enableSerialTest.ToString().ToLower()}
connectionTimeoutMs=5000
heartbeatIntervalSeconds=30
[SerialPort]
serialPortName={testSerialPort}
serialBaudRate={testBaudRate}
serialDataBits=8
serialStopBits=1
serialParity=None
serialFlowControl=false
heartbeatInterval=1000
communicationTimeout=5000
autoReconnect=true
maxReconnectAttempts=5
frameHeader1=0xAA
frameHeader2=0x55
frameTail1=0x0D
frameTail2=0x0A
dataReportInterval=1000
alarmCheckInterval=500
[Display]
brightness=47.0
[Audio]
volume=26
muteDurationMinutes=4
[Network]
mode=Dhcp
ipv4=
mask=255.255.255.0
gateway=
[System]
autoBackup=True
dataRetentionDays=30
[AlarmSettings]
enableLowPriorityAlarm=true
enableMediumPriorityAlarm=true
enableHighPriorityAlarm=true
batteryLowThreshold=40
batteryCriticalThreshold=20
batteryEmptyThreshold=5
bfiAbnormalThreshold=100.0
laserTempAbnormalThreshold=60.0
enableAlarmSound=true
enableAlarmLight=true
[DataProcessing]
bfiSamplingRate=100
dataSmoothingWindow=10
enableDataValidation=true
filterAbnormalData=true
enableDataStorage=true
dataStorageInterval=60
";
try
{
File.WriteAllText(configPath, defaultConfig);
Debug.Log($"已创建默认Android配置文件: {configPath}");
}
catch (Exception ex)
{
Debug.LogError($"创建默认配置文件失败: {ex.Message}");
}
}
/// <summary>
/// 更新测试配置
/// </summary>
private void UpdateTestConfig()
{
try
{
string configPath = Path.Combine(Application.persistentDataPath, "config_android.ini");
// 初始化ConfigHelper
ConfigHelper.Init(configPath);
// 验证配置读取
var serialPortName = ConfigHelper.GetConfig<string>("serialPortName", "SerialCommunication", "");
var baudRate = ConfigHelper.GetConfig<int>("baudRate", "SerialCommunication", 0);
var enabled = ConfigHelper.GetConfig<bool>("enabled", "SerialCommunication", false);
Debug.Log($"当前配置 - 串口: {serialPortName}, 波特率: {baudRate}, 启用: {enabled}");
if (verboseLogging)
{
LogDetailedConfig();
}
}
catch (Exception ex)
{
Debug.LogError($"更新测试配置失败: {ex.Message}");
}
}
/// <summary>
/// 设置日志记录
/// </summary>
private void SetupLogging()
{
if (verboseLogging)
{
Debug.Log("启用详细日志记录");
Application.SetStackTraceLogType(LogType.Log, StackTraceLogType.ScriptOnly);
Application.SetStackTraceLogType(LogType.Warning, StackTraceLogType.ScriptOnly);
Application.SetStackTraceLogType(LogType.Error, StackTraceLogType.Full);
}
}
/// <summary>
/// 检查文件权限
/// </summary>
private void CheckFilePermissions()
{
try
{
string testFilePath = Path.Combine(Application.persistentDataPath, "permission_test.txt");
File.WriteAllText(testFilePath, "权限测试");
File.Delete(testFilePath);
Debug.Log("文件读写权限正常");
}
catch (Exception ex)
{
Debug.LogError($"文件权限检查失败: {ex.Message}");
}
}
/// <summary>
/// 记录详细配置信息
/// </summary>
private void LogDetailedConfig()
{
Debug.Log("=== 详细配置信息 ===");
try
{
string configPath = Path.Combine(Application.persistentDataPath, "config_android.ini");
if (File.Exists(configPath))
{
string[] lines = File.ReadAllLines(configPath);
Debug.Log($"配置文件总行数: {lines.Length}");
foreach (string line in lines)
{
if (!string.IsNullOrWhiteSpace(line) && !line.StartsWith(";") && !line.StartsWith("["))
{
Debug.Log($"配置项: {line}");
}
}
}
}
catch (Exception ex)
{
Debug.LogError($"记录详细配置失败: {ex.Message}");
}
}
/// <summary>
/// 导出当前配置
/// </summary>
public void ExportCurrentConfig()
{
try
{
string exportPath = Path.Combine(Application.persistentDataPath, $"exported_config_{DateTime.Now:yyyyMMdd_HHmmss}.txt");
string configPath = Path.Combine(Application.persistentDataPath, "config_android.ini");
string exportContent = $"=== 配置导出 ===\n";
exportContent += $"导出时间: {DateTime.Now}\n";
exportContent += $"设备型号: {SystemInfo.deviceModel}\n";
exportContent += $"操作系统: {SystemInfo.operatingSystem}\n\n";
if (File.Exists(configPath))
{
exportContent += "=== 当前配置文件内容 ===\n";
exportContent += File.ReadAllText(configPath);
}
else
{
exportContent += "配置文件不存在\n";
}
File.WriteAllText(exportPath, exportContent);
Debug.Log($"配置已导出到: {exportPath}");
}
catch (Exception ex)
{
Debug.LogError($"导出配置失败: {ex.Message}");
}
}
/// <summary>
/// 重置为测试配置
/// </summary>
[ContextMenu("重置为测试配置")]
public void ResetToTestConfig()
{
string configPath = Path.Combine(Application.persistentDataPath, "config_android.ini");
CreateDefaultAndroidConfig(configPath);
Debug.Log("已重置为测试配置");
}
/// <summary>
/// 测试串口设备访问
/// </summary>
[ContextMenu("测试串口设备")]
public void TestSerialDeviceAccess()
{
Debug.Log("=== 测试串口设备访问 ===");
#if UNITY_ANDROID && !UNITY_EDITOR
string[] testPorts = { testSerialPort, "/dev/ttyS0", "/dev/ttyUSB0", "/dev/ttyACM0" };
foreach (string port in testPorts)
{
try
{
bool exists = File.Exists(port);
Debug.Log($"串口 {port}: {(exists ? "" : "")}");
if (exists)
{
// 尝试获取文件信息
var fileInfo = new FileInfo(port);
Debug.Log($" 文件大小: {fileInfo.Length}");
Debug.Log($" 最后修改: {fileInfo.LastWriteTime}");
}
}
catch (Exception ex)
{
Debug.LogError($"检查串口 {port} 失败: {ex.Message}");
}
}
#else
Debug.Log("非Android平台无法测试串口设备");
#endif
}
}