Browse Source

fix Gpio Relay

dev
MTing 3 weeks ago
parent
commit
ee24f46bfc
  1. 84
      app/src/main/java/com/ouxuan/oxface/device/RelayController.java

84
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);
// 第二次尝试

Loading…
Cancel
Save