init
This commit is contained in:
@@ -56,6 +56,18 @@ public class Ch34Plugin implements FlutterPlugin, MethodCallHandler {
|
|||||||
/** 全局 WCHUARTManager 实例 */
|
/** 全局 WCHUARTManager 实例 */
|
||||||
private WCHUARTManager manager;
|
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
|
@Override
|
||||||
public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) {
|
public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) {
|
||||||
channel = new MethodChannel(binding.getBinaryMessenger(), "ch34");
|
channel = new MethodChannel(binding.getBinaryMessenger(), "ch34");
|
||||||
@@ -545,6 +557,7 @@ public class Ch34Plugin implements FlutterPlugin, MethodCallHandler {
|
|||||||
manager.disconnect(device);
|
manager.disconnect(device);
|
||||||
openedDevices.remove(deviceName);
|
openedDevices.remove(deviceName);
|
||||||
usbStateStreamHandler.notifyStateChanged(deviceName, false);
|
usbStateStreamHandler.notifyStateChanged(deviceName, false);
|
||||||
|
resetModemStatusLevels();
|
||||||
}
|
}
|
||||||
result.success(null);
|
result.success(null);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@@ -578,6 +591,7 @@ public class Ch34Plugin implements FlutterPlugin, MethodCallHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
openedDevices.clear();
|
openedDevices.clear();
|
||||||
|
resetModemStatusLevels();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ==================== GPIO 功能 ====================
|
// ==================== GPIO 功能 ====================
|
||||||
@@ -752,14 +766,22 @@ public class Ch34Plugin implements FlutterPlugin, MethodCallHandler {
|
|||||||
@Override
|
@Override
|
||||||
public void onStatusChanged(int serialNumber, boolean isDCDRaised,
|
public void onStatusChanged(int serialNumber, boolean isDCDRaised,
|
||||||
boolean isDSRRaised, boolean isCTSRaised, boolean isRINGRaised) {
|
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
|
Log.d(TAG, "Modem onStatusChanged: serial=" + serialNumber
|
||||||
+ " dcd=" + isDCDRaised + " dsr=" + isDSRRaised
|
+ " dcd=" + currentDCDLevel + " dsr=" + currentDSRLevel
|
||||||
+ " cts=" + isCTSRaised + " ri=" + isRINGRaised);
|
+ " cts=" + currentCTSLevel + " ri=" + currentRINGLevel);
|
||||||
Map<String, Object> map = new HashMap<>();
|
Map<String, Object> map = new HashMap<>();
|
||||||
map.put("dcd", isDCDRaised);
|
map.put("dcd", currentDCDLevel);
|
||||||
map.put("dsr", isDSRRaised);
|
map.put("dsr", currentDSRLevel);
|
||||||
map.put("cts", isCTSRaised);
|
map.put("cts", currentCTSLevel);
|
||||||
map.put("ri", isRINGRaised);
|
map.put("ri", currentRINGLevel);
|
||||||
Log.d(TAG, "Sending modem status to Flutter: " + map);
|
Log.d(TAG, "Sending modem status to Flutter: " + map);
|
||||||
modemStreamHandler.sendStatus(map);
|
modemStreamHandler.sendStatus(map);
|
||||||
}
|
}
|
||||||
@@ -786,6 +808,8 @@ public class Ch34Plugin implements FlutterPlugin, MethodCallHandler {
|
|||||||
private void removeModemStatusCallback(@NonNull MethodCall call, @NonNull Result result) {
|
private void removeModemStatusCallback(@NonNull MethodCall call, @NonNull Result result) {
|
||||||
try {
|
try {
|
||||||
modemStreamHandler.stopListening();
|
modemStreamHandler.stopListening();
|
||||||
|
// 重置 Modem 信号绝对电平状态,防止重连时状态残留
|
||||||
|
resetModemStatusLevels();
|
||||||
result.success(null);
|
result.success(null);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Log.e(TAG, "removeModemStatusCallback error", 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() {
|
private void ensureManagerInitialized() {
|
||||||
if (manager == null) {
|
if (manager == null) {
|
||||||
Application app;
|
Application app;
|
||||||
|
|||||||
Reference in New Issue
Block a user