366 lines
10 KiB
C#
366 lines
10 KiB
C#
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
|
||
}
|
||
} |