From e119b06dbdd7e06249fa3821cbf60d5f1e2e8a9e Mon Sep 17 00:00:00 2001 From: MTing Date: Tue, 30 Sep 2025 17:54:25 +0800 Subject: [PATCH] fix device 4 gpio & camera no test device 5 6 --- .../com/ouxuan/oxface/device/RelayController.java | 79 ++++++++++++++++++++-- .../face/main/finance/manager/FaceSDKManager.java | 7 ++ 2 files changed, 79 insertions(+), 7 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 3403ca6..04a3f86 100644 --- a/app/src/main/java/com/ouxuan/oxface/device/RelayController.java +++ b/app/src/main/java/com/ouxuan/oxface/device/RelayController.java @@ -39,6 +39,13 @@ public class RelayController { private static final String PWM_FLASH_OUT_7 = "/sys/class/gpio/gpio88/direction"; private static final String PWM_FLASH_7 = "/sys/class/gpio/gpio88/value"; + // 第4批设备GPIO路径 + private static final String PWM_FLASH_OUT_4 = "/sys/class/gpio/gpio32/direction"; // 需要根据实际硬件配置调整GPIO编号 + private static final String PWM_FLASH_4 = "/sys/class/gpio/gpio32/value"; // 需要根据实际硬件配置调整GPIO编号 + + // 第4批设备继电器控制路径(通过io_control驱动) + private static final String RELAY_CONTROL_4 = "/sys/devices/platform/io_control/relay_control"; + // GPIO操作命令 private static final byte[] OPEN_RELAY = {'1'}; private static final byte[] CLOSE_RELAY = {'0'}; @@ -93,6 +100,8 @@ public class RelayController { return PWM_FLASH; case 6: // 第7批设备 return PWM_FLASH_7; + case 3: // 第4批设备 + return PWM_FLASH_4; case 2: // 第2批设备(兼容旧逻辑) return PWM_FLASH_2; default: // 默认使用第6批设备路径 @@ -111,6 +120,8 @@ public class RelayController { return PWM_FLASH_OUT; case 6: // 第7批设备 return PWM_FLASH_OUT_7; + case 3: // 第4批设备 + return PWM_FLASH_OUT_4; case 2: // 第2批设备(兼容旧逻辑) return PWM_FLASH_OUT_2; default: // 默认使用第6批设备路径 @@ -128,6 +139,8 @@ public class RelayController { return PAD_TYPE_SEVEN; // deviceType=6表示第7批设备,使用DeviceType7Manager } else if (deviceType == 5) { return PAD_TYPE_TWO; // deviceType=5表示第6批设备,使用第2批的GPIO路径 + } else if (deviceType == 3) { + return PAD_TYPE_DEFAULT; // deviceType=3表示第4批设备,使用默认GPIO路径(可根据需要调整) } else { // 其他情况返回默认 return PAD_TYPE_DEFAULT; @@ -230,6 +243,9 @@ public class RelayController { LogManager.logInfo(TAG, "DeviceType7Manager读取GPIO值成功: " + strValue); return strValue; } + } else if (deviceType == 3) { + // 第4批设备使用继电器控制文件 + return readRelayControlValue(RELAY_CONTROL_4); } else { // 其他设备使用文件操作,根据deviceType动态获取路径 BufferedReader reader = null; @@ -255,6 +271,59 @@ public class RelayController { } /** + * 读取继电器控制值 + * @param controlPath 继电器控制文件路径 + * @return 控制值字符串,失败返回null + */ + private String readRelayControlValue(String controlPath) { + BufferedReader reader = null; + try { + reader = new BufferedReader(new FileReader(controlPath)); + String value = reader.readLine(); + LogManager.logInfo(TAG, "读取继电器控制值成功: " + value + ", 路径: " + controlPath); + return value; + } catch (IOException e) { + LogManager.logError(TAG, "读取继电器控制值失败, 路径: " + controlPath, e); + return null; + } finally { + if (reader != null) { + try { + reader.close(); + } catch (IOException e) { + LogManager.logError(TAG, "关闭BufferedReader失败", e); + } + } + } + } + + /** + * 直接写入继电器控制值到文件 + * @param value 要写入的值 + * @param controlPath 继电器控制文件路径 + * @return 是否成功 + */ + private boolean writeRelayControlDirect(byte[] value, String controlPath) { + FileOutputStream fos = null; + try { + fos = new FileOutputStream(controlPath); + fos.write(value); + LogManager.logInfo(TAG, "继电器控制值写入成功: " + controlPath + " -> " + new String(value)); + return true; + } catch (IOException e) { + LogManager.logError(TAG, "继电器控制值写入失败: " + controlPath + ", 错误: " + e.getMessage(), e); + return false; + } finally { + if (fos != null) { + try { + fos.close(); + } catch (IOException e) { + LogManager.logError(TAG, "关闭FileOutputStream失败", e); + } + } + } + } + + /** * 直接写入GPIO值到文件 * @param value 要写入的值 * @param valuePath GPIO值文件路径 @@ -280,13 +349,6 @@ public class RelayController { } } } - - /** - * 写入GPIO值 - * @param value 要写入的值 - * @param padType 设备类型(保留兼容性) - * @return 是否成功 - */ private boolean writeGpioValue(byte[] value, String padType) { if (PAD_TYPE_SEVEN.equals(padType) && deviceType7Manager != null) { // 第七批设备使用DeviceType7Manager @@ -298,6 +360,9 @@ public class RelayController { LogManager.logError(TAG, "DeviceType7Manager写入GPIO值失败"); } return success; + } else if (deviceType == 3) { + // 第4批设备使用继电器控制文件 + return writeRelayControlDirect(value, RELAY_CONTROL_4); } else { // 其他设备使用文件操作,根据deviceType动态获取路径 String valuePath = getGpioValuePath(deviceType); diff --git a/financelibrary/src/main/java/com/baidu/idl/face/main/finance/manager/FaceSDKManager.java b/financelibrary/src/main/java/com/baidu/idl/face/main/finance/manager/FaceSDKManager.java index 761c586..16ba259 100644 --- a/financelibrary/src/main/java/com/baidu/idl/face/main/finance/manager/FaceSDKManager.java +++ b/financelibrary/src/main/java/com/baidu/idl/face/main/finance/manager/FaceSDKManager.java @@ -866,6 +866,13 @@ public class FaceSDKManager { SingleBaseConfig.getBaseConfig().setVideoDirection(90); SingleBaseConfig.getBaseConfig().setRgbVideoDirection(90); SingleBaseConfig.getBaseConfig().setMirrorDetectRGB(1); + }else if(deviceType == 3){//switchCameraByDeviceType999: 3 + Log.e("FaceSDKManager", "switchCamera--第4批"); + SingleBaseConfig.getBaseConfig().setVideoDirection(90); + SingleBaseConfig.getBaseConfig().setRgbVideoDirection(90); + SingleBaseConfig.getBaseConfig().setDetectDirection(270); + SingleBaseConfig.getBaseConfig().setRgbDetectDirection(270); //检测方向 + SingleBaseConfig.getBaseConfig().setMirrorDetectRGB(1); }else{ Log.e("FaceSDKManager", "switchCamera--采用默认配置"); SingleBaseConfig.getBaseConfig().setVideoDirection(270);