如果串口路径不为空时则开关一次设备
This commit is contained in:
@@ -16,7 +16,7 @@ author:
|
|||||||
* [dashboardclient_1.0.5.apk](dashboardclient_1.0.5.apk)
|
* [dashboardclient_1.0.5.apk](dashboardclient_1.0.5.apk)
|
||||||
|
|
||||||
#### 更新记录
|
#### 更新记录
|
||||||
* 仅串口路径为空时才自动检测设备
|
* App 启动时如果串口路径为空时自动检测设备, 否则开关一次设备
|
||||||
* 设置界面可清除串口路径
|
* 设置界面可清除串口路径
|
||||||
|
|
||||||
### [1.0.4.23] - 2026.1.5
|
### [1.0.4.23] - 2026.1.5
|
||||||
|
|||||||
@@ -119,19 +119,34 @@ public class BuildingDashboardActivity extends FullscreenActivity {
|
|||||||
|
|
||||||
private void initSerialPort() {
|
private void initSerialPort() {
|
||||||
String portPath = PreferenceConfiguration.getSerialPortPath(this);
|
String portPath = PreferenceConfiguration.getSerialPortPath(this);
|
||||||
|
int baudRate = PreferenceConfiguration.getSerialPortBaudRate(this);
|
||||||
|
boolean sendPowerOnCmd = PreferenceConfiguration.getSendPowerOnCmd(this);
|
||||||
|
|
||||||
|
// 初始化串口检测器
|
||||||
|
detector = new SerialPortDetector(portPath, baudRate);
|
||||||
|
|
||||||
// 只有 portPath 为空时才进行串口检测
|
// 只有 portPath 为空时才进行串口检测
|
||||||
if (TextUtils.isEmpty(portPath)) {
|
if (TextUtils.isEmpty(portPath)) {
|
||||||
int baudRate = PreferenceConfiguration.getSerialPortBaudRate(this);
|
|
||||||
// 初始化串口检测器
|
|
||||||
detector = new SerialPortDetector(portPath, baudRate);
|
|
||||||
|
|
||||||
Log.i(TAG, "Starting serial port detection/verification...");
|
Log.i(TAG, "Starting serial port detection/verification...");
|
||||||
// 参数 true 表示确保设备开机(发送两个命令)
|
// 参数 true 表示确保设备开机(发送两个命令)
|
||||||
// 参数 false 表示仅检测串口(任一命令有响应即可)
|
// 参数 false 表示仅检测串口(任一命令有响应即可)
|
||||||
startSerialPortDetection(true);
|
startSerialPortDetection(true);
|
||||||
} else {
|
} else {
|
||||||
Log.i(TAG, "Using saved serial port path: " + portPath);
|
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_PATH = "k_serial_port_path";
|
||||||
private static final String KEY_SERIAL_PORT_BAUD_RATE = "k_serial_baud";
|
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) {
|
public static String getSerialPortPath(Context context) {
|
||||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
@@ -29,4 +30,9 @@ public class PreferenceConfiguration {
|
|||||||
String baud = prefs.getString(KEY_SERIAL_PORT_BAUD_RATE, "9600");
|
String baud = prefs.getString(KEY_SERIAL_PORT_BAUD_RATE, "9600");
|
||||||
return Integer.parseInt(baud);
|
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;
|
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
|
* 内部测试用的 SerialHelper
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -25,6 +25,11 @@
|
|||||||
app:title="串口波特率"
|
app:title="串口波特率"
|
||||||
app:defaultValue="9600"
|
app:defaultValue="9600"
|
||||||
app:useSimpleSummaryProvider="true" />
|
app:useSimpleSummaryProvider="true" />
|
||||||
|
<CheckBoxPreference
|
||||||
|
app:key="k_send_power_on_cmd"
|
||||||
|
app:title="App 启动时发送打开电源指令"
|
||||||
|
app:summary="每次启动 App 时先发送关闭再发送打开电源指令"
|
||||||
|
app:defaultValue="true" />
|
||||||
<Preference
|
<Preference
|
||||||
app:key="k_clear_device"
|
app:key="k_clear_device"
|
||||||
app:title="清除设备"
|
app:title="清除设备"
|
||||||
|
|||||||
Reference in New Issue
Block a user