如果串口路径不为空时则开关一次设备
This commit is contained in:
@@ -16,7 +16,7 @@ author:
|
||||
* [dashboardclient_1.0.5.apk](dashboardclient_1.0.5.apk)
|
||||
|
||||
#### 更新记录
|
||||
* 仅串口路径为空时才自动检测设备
|
||||
* App 启动时如果串口路径为空时自动检测设备, 否则开关一次设备
|
||||
* 设置界面可清除串口路径
|
||||
|
||||
### [1.0.4.23] - 2026.1.5
|
||||
|
||||
@@ -119,19 +119,34 @@ public class BuildingDashboardActivity extends FullscreenActivity {
|
||||
|
||||
private void initSerialPort() {
|
||||
String portPath = PreferenceConfiguration.getSerialPortPath(this);
|
||||
|
||||
// 只有 portPath 为空时才进行串口检测
|
||||
if (TextUtils.isEmpty(portPath)) {
|
||||
int baudRate = PreferenceConfiguration.getSerialPortBaudRate(this);
|
||||
boolean sendPowerOnCmd = PreferenceConfiguration.getSendPowerOnCmd(this);
|
||||
|
||||
// 初始化串口检测器
|
||||
detector = new SerialPortDetector(portPath, baudRate);
|
||||
|
||||
// 只有 portPath 为空时才进行串口检测
|
||||
if (TextUtils.isEmpty(portPath)) {
|
||||
Log.i(TAG, "Starting serial port detection/verification...");
|
||||
// 参数 true 表示确保设备开机(发送两个命令)
|
||||
// 参数 false 表示仅检测串口(任一命令有响应即可)
|
||||
startSerialPortDetection(true);
|
||||
} else {
|
||||
Log.i(TAG, "Using saved serial port path: " + portPath);
|
||||
|
||||
// 如果勾选了"发送打开电源指令",则先发送关闭再发送打开
|
||||
if (sendPowerOnCmd) {
|
||||
Log.i(TAG, "Sending power on sequence...");
|
||||
new Thread(() -> {
|
||||
detector.sendPowerOffCommand();
|
||||
try {
|
||||
Thread.sleep(3000); // 等待 3 秒
|
||||
} catch (InterruptedException e) {
|
||||
Log.e(TAG, "Sleep interrupted", e);
|
||||
}
|
||||
detector.sendPowerOnCommand();
|
||||
}).start();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@ public class PreferenceConfiguration {
|
||||
|
||||
private static final String KEY_SERIAL_PORT_PATH = "k_serial_port_path";
|
||||
private static final String KEY_SERIAL_PORT_BAUD_RATE = "k_serial_baud";
|
||||
private static final String KEY_SEND_POWER_ON_CMD = "k_send_power_on_cmd";
|
||||
|
||||
public static String getSerialPortPath(Context context) {
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
@@ -29,4 +30,9 @@ public class PreferenceConfiguration {
|
||||
String baud = prefs.getString(KEY_SERIAL_PORT_BAUD_RATE, "9600");
|
||||
return Integer.parseInt(baud);
|
||||
}
|
||||
|
||||
public static boolean getSendPowerOnCmd(Context context) {
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
return prefs.getBoolean(KEY_SEND_POWER_ON_CMD, true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,6 +45,51 @@ public class SerialPortDetector {
|
||||
this.callback = callback;
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送关闭设备指令到已保存的串口(不等待响应)
|
||||
*/
|
||||
public void sendPowerOffCommand() {
|
||||
sendCommand(TEST_CMD_OFF);
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送打开设备指令到已保存的串口(不等待响应)
|
||||
*/
|
||||
public void sendPowerOnCommand() {
|
||||
sendCommand(TEST_CMD_ON);
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送指令到已保存的串口(不等待响应)
|
||||
* @param commandHex 十六进制命令字符串
|
||||
*/
|
||||
private void sendCommand(String commandHex) {
|
||||
if (TextUtils.isEmpty(savedPath)) {
|
||||
Log.w(TAG, "No serial port path configured");
|
||||
return;
|
||||
}
|
||||
|
||||
new Thread(() -> {
|
||||
SerialHelper serialHelper = null;
|
||||
try {
|
||||
serialHelper = new SimpleSerialHelper(savedPath, baudRate);
|
||||
serialHelper.open();
|
||||
serialHelper.sendHex(commandHex);
|
||||
Log.d(TAG, "Sent command: " + commandHex);
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Error sending command: " + e.getMessage());
|
||||
} finally {
|
||||
if (serialHelper != null) {
|
||||
try {
|
||||
serialHelper.close();
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Error closing port: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
|
||||
/**
|
||||
* 开始串口检测(智能检测)
|
||||
* 先验证已保存的串口,如果不可用再进行全局检测
|
||||
@@ -226,6 +271,20 @@ public class SerialPortDetector {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 简单的串口 Helper,用于只发送命令不等待响应
|
||||
*/
|
||||
private static class SimpleSerialHelper extends SerialHelper {
|
||||
public SimpleSerialHelper(String sPort, int iBaudRate) {
|
||||
super(sPort, iBaudRate);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDataReceived(ComBean comBean) {
|
||||
// 不需要处理响应
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 内部测试用的 SerialHelper
|
||||
*/
|
||||
|
||||
@@ -25,6 +25,11 @@
|
||||
app:title="串口波特率"
|
||||
app:defaultValue="9600"
|
||||
app:useSimpleSummaryProvider="true" />
|
||||
<CheckBoxPreference
|
||||
app:key="k_send_power_on_cmd"
|
||||
app:title="App 启动时发送打开电源指令"
|
||||
app:summary="每次启动 App 时先发送关闭再发送打开电源指令"
|
||||
app:defaultValue="true" />
|
||||
<Preference
|
||||
app:key="k_clear_device"
|
||||
app:title="清除设备"
|
||||
|
||||
Reference in New Issue
Block a user