init
This commit is contained in:
@@ -56,6 +56,18 @@ public class Ch34Plugin implements FlutterPlugin, MethodCallHandler {
|
||||
/** 全局 WCHUARTManager 实例 */
|
||||
private WCHUARTManager manager;
|
||||
|
||||
/**
|
||||
* 维护 Modem 信号绝对电平状态。
|
||||
*
|
||||
* WCH SDK IModemStatus.onStatusChanged 的参数 isDSRRaised/isCTSRaised/isDCDRaised/isRINGRaised
|
||||
* 在字面上是"上升沿标志",但实际观察表明其行为符合电平值(true=高电平,false=低电平)。
|
||||
* 为确保语义明确且不受 SDK 行为变化影响,在此维护绝对电平状态。
|
||||
*/
|
||||
private boolean currentDSRLevel = false;
|
||||
private boolean currentCTSLevel = false;
|
||||
private boolean currentDCDLevel = false;
|
||||
private boolean currentRINGLevel = false;
|
||||
|
||||
@Override
|
||||
public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) {
|
||||
channel = new MethodChannel(binding.getBinaryMessenger(), "ch34");
|
||||
@@ -545,6 +557,7 @@ public class Ch34Plugin implements FlutterPlugin, MethodCallHandler {
|
||||
manager.disconnect(device);
|
||||
openedDevices.remove(deviceName);
|
||||
usbStateStreamHandler.notifyStateChanged(deviceName, false);
|
||||
resetModemStatusLevels();
|
||||
}
|
||||
result.success(null);
|
||||
} catch (Exception e) {
|
||||
@@ -578,6 +591,7 @@ public class Ch34Plugin implements FlutterPlugin, MethodCallHandler {
|
||||
}
|
||||
}
|
||||
openedDevices.clear();
|
||||
resetModemStatusLevels();
|
||||
}
|
||||
|
||||
// ==================== GPIO 功能 ====================
|
||||
@@ -752,14 +766,22 @@ public class Ch34Plugin implements FlutterPlugin, MethodCallHandler {
|
||||
@Override
|
||||
public void onStatusChanged(int serialNumber, boolean isDCDRaised,
|
||||
boolean isDSRRaised, boolean isCTSRaised, boolean isRINGRaised) {
|
||||
// 根据 SDK 回调参数更新绝对电平状态
|
||||
// WCH SDK 的 isDSRRaised 等参数在每次状态变化回调中表示该信号的
|
||||
// 当前电平值:true=高电平,false=低电平
|
||||
currentDCDLevel = isDCDRaised;
|
||||
currentDSRLevel = isDSRRaised;
|
||||
currentCTSLevel = isCTSRaised;
|
||||
currentRINGLevel = isRINGRaised;
|
||||
|
||||
Log.d(TAG, "Modem onStatusChanged: serial=" + serialNumber
|
||||
+ " dcd=" + isDCDRaised + " dsr=" + isDSRRaised
|
||||
+ " cts=" + isCTSRaised + " ri=" + isRINGRaised);
|
||||
+ " dcd=" + currentDCDLevel + " dsr=" + currentDSRLevel
|
||||
+ " cts=" + currentCTSLevel + " ri=" + currentRINGLevel);
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("dcd", isDCDRaised);
|
||||
map.put("dsr", isDSRRaised);
|
||||
map.put("cts", isCTSRaised);
|
||||
map.put("ri", isRINGRaised);
|
||||
map.put("dcd", currentDCDLevel);
|
||||
map.put("dsr", currentDSRLevel);
|
||||
map.put("cts", currentCTSLevel);
|
||||
map.put("ri", currentRINGLevel);
|
||||
Log.d(TAG, "Sending modem status to Flutter: " + map);
|
||||
modemStreamHandler.sendStatus(map);
|
||||
}
|
||||
@@ -786,6 +808,8 @@ public class Ch34Plugin implements FlutterPlugin, MethodCallHandler {
|
||||
private void removeModemStatusCallback(@NonNull MethodCall call, @NonNull Result result) {
|
||||
try {
|
||||
modemStreamHandler.stopListening();
|
||||
// 重置 Modem 信号绝对电平状态,防止重连时状态残留
|
||||
resetModemStatusLevels();
|
||||
result.success(null);
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "removeModemStatusCallback error", e);
|
||||
@@ -858,6 +882,18 @@ public class Ch34Plugin implements FlutterPlugin, MethodCallHandler {
|
||||
|
||||
// ==================== 辅助方法 ====================
|
||||
|
||||
/**
|
||||
* 重置 Modem 信号绝对电平状态。
|
||||
*
|
||||
* 在移除 Modem 回调或关闭设备时调用,确保下次注册回调时状态干净。
|
||||
*/
|
||||
private void resetModemStatusLevels() {
|
||||
currentDSRLevel = false;
|
||||
currentCTSLevel = false;
|
||||
currentDCDLevel = false;
|
||||
currentRINGLevel = false;
|
||||
}
|
||||
|
||||
private void ensureManagerInitialized() {
|
||||
if (manager == null) {
|
||||
Application app;
|
||||
|
||||
Reference in New Issue
Block a user