|
@ -80,17 +80,44 @@ public class RelayController { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 设置设备类型 |
|
|
|
|
|
|
|
|
* 根据设备类型获取GPIO值文件路径 |
|
|
* @param deviceType 设备类型(5=第6批,6=第7批等) |
|
|
* @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() { |
|
|
private String getCurrentPadType() { |
|
|
// 根据设备类型返回对应的padType |
|
|
// 根据设备类型返回对应的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方向为输出模式 |
|
|
* 设置GPIO方向为输出模式 |
|
|
* @param padType 设备类型 |
|
|
|
|
|
|
|
|
* @param padType 设备类型(保留兼容性) |
|
|
*/ |
|
|
*/ |
|
|
private void setGpioDirection(String padType) { |
|
|
private void setGpioDirection(String padType) { |
|
|
if (PAD_TYPE_SEVEN.equals(padType) && deviceType7Manager != null) { |
|
|
if (PAD_TYPE_SEVEN.equals(padType) && deviceType7Manager != null) { |
|
@ -129,15 +165,15 @@ public class RelayController { |
|
|
deviceType7Manager.setGpioDirection(DeviceType7Manager.YxGpioConstants.GPIO_RELAY, |
|
|
deviceType7Manager.setGpioDirection(DeviceType7Manager.YxGpioConstants.GPIO_RELAY, |
|
|
DeviceType7Manager.YxGpioConstants.GPIO_DIRECTION_OUTPUT); |
|
|
DeviceType7Manager.YxGpioConstants.GPIO_DIRECTION_OUTPUT); |
|
|
} else { |
|
|
} else { |
|
|
// 其他设备使用文件操作 |
|
|
|
|
|
|
|
|
// 其他设备使用文件操作,根据deviceType动态获取路径 |
|
|
FileOutputStream fos = null; |
|
|
FileOutputStream fos = null; |
|
|
try { |
|
|
try { |
|
|
String directionPath = PAD_TYPE_TWO.equals(padType) ? PWM_FLASH_OUT_2 : PWM_FLASH_OUT; |
|
|
|
|
|
|
|
|
String directionPath = getGpioDirectionPath(deviceType); |
|
|
fos = new FileOutputStream(directionPath); |
|
|
fos = new FileOutputStream(directionPath); |
|
|
fos.write(GPIO_OUT); |
|
|
fos.write(GPIO_OUT); |
|
|
LogManager.logInfo(TAG, "GPIO方向设置为输出模式成功, 设备类型: " + padType); |
|
|
|
|
|
|
|
|
LogManager.logInfo(TAG, "GPIO方向设置为输出模式成功, 设备类型: " + deviceType + ", 路径: " + directionPath); |
|
|
} catch (Exception e) { |
|
|
} catch (Exception e) { |
|
|
LogManager.logError(TAG, "设置GPIO方向失败", e); |
|
|
|
|
|
|
|
|
LogManager.logError(TAG, "设置GPIO方向失败, 设备类型: " + deviceType, e); |
|
|
} finally { |
|
|
} finally { |
|
|
if (fos != null) { |
|
|
if (fos != null) { |
|
|
try { |
|
|
try { |
|
@ -152,17 +188,17 @@ public class RelayController { |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 设置GPIO方向为输入模式 |
|
|
* 设置GPIO方向为输入模式 |
|
|
* @param padType 设备类型 |
|
|
|
|
|
|
|
|
* @param padType 设备类型(保留兼容性) |
|
|
*/ |
|
|
*/ |
|
|
private void setGpioDirectionInput(String padType) { |
|
|
private void setGpioDirectionInput(String padType) { |
|
|
FileOutputStream fos = null; |
|
|
FileOutputStream fos = null; |
|
|
try { |
|
|
try { |
|
|
String directionPath = PAD_TYPE_TWO.equals(padType) ? PWM_FLASH_OUT_2 : PWM_FLASH_OUT; |
|
|
|
|
|
|
|
|
String directionPath = getGpioDirectionPath(deviceType); |
|
|
fos = new FileOutputStream(directionPath); |
|
|
fos = new FileOutputStream(directionPath); |
|
|
fos.write(GPIO_IN); |
|
|
fos.write(GPIO_IN); |
|
|
LogManager.logInfo(TAG, "GPIO方向设置为输入模式成功, 设备类型: " + padType); |
|
|
|
|
|
|
|
|
LogManager.logInfo(TAG, "GPIO方向设置为输入模式成功, 设备类型: " + deviceType + ", 路径: " + directionPath); |
|
|
} catch (Exception e) { |
|
|
} catch (Exception e) { |
|
|
LogManager.logError(TAG, "设置GPIO方向为输入模式失败", e); |
|
|
|
|
|
|
|
|
LogManager.logError(TAG, "设置GPIO方向为输入模式失败, 设备类型: " + deviceType, e); |
|
|
} finally { |
|
|
} finally { |
|
|
if (fos != null) { |
|
|
if (fos != null) { |
|
|
try { |
|
|
try { |
|
@ -176,7 +212,7 @@ public class RelayController { |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 读取GPIO值 |
|
|
* 读取GPIO值 |
|
|
* @param padType 设备类型 |
|
|
|
|
|
|
|
|
* @param padType 设备类型(保留兼容性) |
|
|
* @return GPIO值字符串,失败返回null |
|
|
* @return GPIO值字符串,失败返回null |
|
|
*/ |
|
|
*/ |
|
|
public String readGpioValue(String padType) { |
|
|
public String readGpioValue(String padType) { |
|
@ -192,16 +228,16 @@ public class RelayController { |
|
|
return strValue; |
|
|
return strValue; |
|
|
} |
|
|
} |
|
|
} else { |
|
|
} else { |
|
|
// 其他设备使用文件操作 |
|
|
|
|
|
|
|
|
// 其他设备使用文件操作,根据deviceType动态获取路径 |
|
|
BufferedReader reader = null; |
|
|
BufferedReader reader = null; |
|
|
try { |
|
|
try { |
|
|
String valuePath = PAD_TYPE_TWO.equals(padType) ? PWM_FLASH_2 : PWM_FLASH; |
|
|
|
|
|
|
|
|
String valuePath = getGpioValuePath(deviceType); |
|
|
reader = new BufferedReader(new FileReader(valuePath)); |
|
|
reader = new BufferedReader(new FileReader(valuePath)); |
|
|
String value = reader.readLine(); |
|
|
String value = reader.readLine(); |
|
|
LogManager.logInfo(TAG, "读取GPIO值成功: " + value + ", 设备类型: " + padType); |
|
|
|
|
|
|
|
|
LogManager.logInfo(TAG, "读取GPIO值成功: " + value + ", 设备类型: " + deviceType + ", 路径: " + valuePath); |
|
|
return value; |
|
|
return value; |
|
|
} catch (IOException e) { |
|
|
} catch (IOException e) { |
|
|
LogManager.logError(TAG, "读取GPIO值失败", e); |
|
|
|
|
|
|
|
|
LogManager.logError(TAG, "读取GPIO值失败, 设备类型: " + deviceType, e); |
|
|
return null; |
|
|
return null; |
|
|
} finally { |
|
|
} finally { |
|
|
if (reader != null) { |
|
|
if (reader != null) { |
|
@ -245,7 +281,7 @@ public class RelayController { |
|
|
/** |
|
|
/** |
|
|
* 写入GPIO值 |
|
|
* 写入GPIO值 |
|
|
* @param value 要写入的值 |
|
|
* @param value 要写入的值 |
|
|
* @param padType 设备类型 |
|
|
|
|
|
|
|
|
* @param padType 设备类型(保留兼容性) |
|
|
* @return 是否成功 |
|
|
* @return 是否成功 |
|
|
*/ |
|
|
*/ |
|
|
private boolean writeGpioValue(byte[] value, String padType) { |
|
|
private boolean writeGpioValue(byte[] value, String padType) { |
|
@ -260,8 +296,8 @@ public class RelayController { |
|
|
} |
|
|
} |
|
|
return success; |
|
|
return success; |
|
|
} else { |
|
|
} else { |
|
|
// 其他设备使用文件操作 |
|
|
|
|
|
String valuePath = PAD_TYPE_TWO.equals(padType) ? PWM_FLASH_2 : PWM_FLASH; |
|
|
|
|
|
|
|
|
// 其他设备使用文件操作,根据deviceType动态获取路径 |
|
|
|
|
|
String valuePath = getGpioValuePath(deviceType); |
|
|
|
|
|
|
|
|
// 第一次尝试 |
|
|
// 第一次尝试 |
|
|
if (writeGpioValueDirect(value, valuePath)) { |
|
|
if (writeGpioValueDirect(value, valuePath)) { |
|
@ -269,7 +305,7 @@ public class RelayController { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// 如果失败,尝试设置GPIO方向后重试 |
|
|
// 如果失败,尝试设置GPIO方向后重试 |
|
|
LogManager.logWarning(TAG, "GPIO写入失败,尝试设置方向后重试"); |
|
|
|
|
|
|
|
|
LogManager.logWarning(TAG, "GPIO写入失败,尝试设置方向后重试, 设备类型: " + deviceType + ", 路径: " + valuePath); |
|
|
setGpioDirection(padType); |
|
|
setGpioDirection(padType); |
|
|
|
|
|
|
|
|
// 第二次尝试 |
|
|
// 第二次尝试 |
|
|