From ee24f46bfcf6881a293032984bbd31b7de022003 Mon Sep 17 00:00:00 2001 From: MTing Date: Thu, 25 Sep 2025 16:03:15 +0800 Subject: [PATCH] fix Gpio Relay --- .../com/ouxuan/oxface/device/RelayController.java | 84 +++++++++++++++------- 1 file changed, 60 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/com/ouxuan/oxface/device/RelayController.java b/app/src/main/java/com/ouxuan/oxface/device/RelayController.java index 21147e9..398ac4a 100644 --- a/app/src/main/java/com/ouxuan/oxface/device/RelayController.java +++ b/app/src/main/java/com/ouxuan/oxface/device/RelayController.java @@ -80,17 +80,44 @@ public class RelayController { } /** - * 设置设备类型 + * 根据设备类型获取GPIO值文件路径 * @param deviceType 设备类型(5=第6批,6=第7批等) + * @return GPIO值文件路径 */ - public void setDeviceType(int deviceType) { - this.deviceType = deviceType; - LogManager.logInfo(TAG, "设置设备类型: " + deviceType); + private String getGpioValuePath(int deviceType) { + switch (deviceType) { + case 5: // 第6批设备 + return PWM_FLASH; + case 6: // 第7批设备 + return PWM_FLASH_7; + case 2: // 第2批设备(兼容旧逻辑) + return PWM_FLASH_2; + default: // 默认使用第6批设备路径 + return PWM_FLASH; + } + } + + /** + * 根据设备类型获取GPIO方向文件路径 + * @param deviceType 设备类型(5=第6批,6=第7批等) + * @return GPIO方向文件路径 + */ + private String getGpioDirectionPath(int deviceType) { + switch (deviceType) { + case 5: // 第6批设备 + return PWM_FLASH_OUT; + case 6: // 第7批设备 + return PWM_FLASH_OUT_7; + case 2: // 第2批设备(兼容旧逻辑) + return PWM_FLASH_OUT_2; + default: // 默认使用第6批设备路径 + return PWM_FLASH_OUT; + } } /** - * 获取当前设备类型(需要根据实际情况实现) - * @return 设备类型 + * 获取当前设备类型(兼容性方法,返回字符串类型) + * @return 设备类型字符串 */ private String getCurrentPadType() { // 根据设备类型返回对应的padType @@ -120,8 +147,17 @@ public class RelayController { } /** + * 设置设备类型 + * @param deviceType 设备类型(5=第6批,6=第7批等) + */ + public void setDeviceType(int deviceType) { + this.deviceType = deviceType; + LogManager.logInfo(TAG, "设置设备类型: " + deviceType); + } + + /** * 设置GPIO方向为输出模式 - * @param padType 设备类型 + * @param padType 设备类型(保留兼容性) */ private void setGpioDirection(String padType) { if (PAD_TYPE_SEVEN.equals(padType) && deviceType7Manager != null) { @@ -129,15 +165,15 @@ public class RelayController { deviceType7Manager.setGpioDirection(DeviceType7Manager.YxGpioConstants.GPIO_RELAY, DeviceType7Manager.YxGpioConstants.GPIO_DIRECTION_OUTPUT); } else { - // 其他设备使用文件操作 + // 其他设备使用文件操作,根据deviceType动态获取路径 FileOutputStream fos = null; try { - String directionPath = PAD_TYPE_TWO.equals(padType) ? PWM_FLASH_OUT_2 : PWM_FLASH_OUT; + String directionPath = getGpioDirectionPath(deviceType); fos = new FileOutputStream(directionPath); fos.write(GPIO_OUT); - LogManager.logInfo(TAG, "GPIO方向设置为输出模式成功, 设备类型: " + padType); + LogManager.logInfo(TAG, "GPIO方向设置为输出模式成功, 设备类型: " + deviceType + ", 路径: " + directionPath); } catch (Exception e) { - LogManager.logError(TAG, "设置GPIO方向失败", e); + LogManager.logError(TAG, "设置GPIO方向失败, 设备类型: " + deviceType, e); } finally { if (fos != null) { try { @@ -152,17 +188,17 @@ public class RelayController { /** * 设置GPIO方向为输入模式 - * @param padType 设备类型 + * @param padType 设备类型(保留兼容性) */ private void setGpioDirectionInput(String padType) { FileOutputStream fos = null; try { - String directionPath = PAD_TYPE_TWO.equals(padType) ? PWM_FLASH_OUT_2 : PWM_FLASH_OUT; + String directionPath = getGpioDirectionPath(deviceType); fos = new FileOutputStream(directionPath); fos.write(GPIO_IN); - LogManager.logInfo(TAG, "GPIO方向设置为输入模式成功, 设备类型: " + padType); + LogManager.logInfo(TAG, "GPIO方向设置为输入模式成功, 设备类型: " + deviceType + ", 路径: " + directionPath); } catch (Exception e) { - LogManager.logError(TAG, "设置GPIO方向为输入模式失败", e); + LogManager.logError(TAG, "设置GPIO方向为输入模式失败, 设备类型: " + deviceType, e); } finally { if (fos != null) { try { @@ -176,7 +212,7 @@ public class RelayController { /** * 读取GPIO值 - * @param padType 设备类型 + * @param padType 设备类型(保留兼容性) * @return GPIO值字符串,失败返回null */ public String readGpioValue(String padType) { @@ -192,16 +228,16 @@ public class RelayController { return strValue; } } else { - // 其他设备使用文件操作 + // 其他设备使用文件操作,根据deviceType动态获取路径 BufferedReader reader = null; try { - String valuePath = PAD_TYPE_TWO.equals(padType) ? PWM_FLASH_2 : PWM_FLASH; + String valuePath = getGpioValuePath(deviceType); reader = new BufferedReader(new FileReader(valuePath)); String value = reader.readLine(); - LogManager.logInfo(TAG, "读取GPIO值成功: " + value + ", 设备类型: " + padType); + LogManager.logInfo(TAG, "读取GPIO值成功: " + value + ", 设备类型: " + deviceType + ", 路径: " + valuePath); return value; } catch (IOException e) { - LogManager.logError(TAG, "读取GPIO值失败", e); + LogManager.logError(TAG, "读取GPIO值失败, 设备类型: " + deviceType, e); return null; } finally { if (reader != null) { @@ -245,7 +281,7 @@ public class RelayController { /** * 写入GPIO值 * @param value 要写入的值 - * @param padType 设备类型 + * @param padType 设备类型(保留兼容性) * @return 是否成功 */ private boolean writeGpioValue(byte[] value, String padType) { @@ -260,8 +296,8 @@ public class RelayController { } return success; } else { - // 其他设备使用文件操作 - String valuePath = PAD_TYPE_TWO.equals(padType) ? PWM_FLASH_2 : PWM_FLASH; + // 其他设备使用文件操作,根据deviceType动态获取路径 + String valuePath = getGpioValuePath(deviceType); // 第一次尝试 if (writeGpioValueDirect(value, valuePath)) { @@ -269,7 +305,7 @@ public class RelayController { } // 如果失败,尝试设置GPIO方向后重试 - LogManager.logWarning(TAG, "GPIO写入失败,尝试设置方向后重试"); + LogManager.logWarning(TAG, "GPIO写入失败,尝试设置方向后重试, 设备类型: " + deviceType + ", 路径: " + valuePath); setGpioDirection(padType); // 第二次尝试