|
@ -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_OUT_7 = "/sys/class/gpio/gpio88/direction"; |
|
|
private static final String PWM_FLASH_7 = "/sys/class/gpio/gpio88/value"; |
|
|
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操作命令 |
|
|
// GPIO操作命令 |
|
|
private static final byte[] OPEN_RELAY = {'1'}; |
|
|
private static final byte[] OPEN_RELAY = {'1'}; |
|
|
private static final byte[] CLOSE_RELAY = {'0'}; |
|
|
private static final byte[] CLOSE_RELAY = {'0'}; |
|
@ -93,6 +100,8 @@ public class RelayController { |
|
|
return PWM_FLASH; |
|
|
return PWM_FLASH; |
|
|
case 6: // 第7批设备 |
|
|
case 6: // 第7批设备 |
|
|
return PWM_FLASH_7; |
|
|
return PWM_FLASH_7; |
|
|
|
|
|
case 3: // 第4批设备 |
|
|
|
|
|
return PWM_FLASH_4; |
|
|
case 2: // 第2批设备(兼容旧逻辑) |
|
|
case 2: // 第2批设备(兼容旧逻辑) |
|
|
return PWM_FLASH_2; |
|
|
return PWM_FLASH_2; |
|
|
default: // 默认使用第6批设备路径 |
|
|
default: // 默认使用第6批设备路径 |
|
@ -111,6 +120,8 @@ public class RelayController { |
|
|
return PWM_FLASH_OUT; |
|
|
return PWM_FLASH_OUT; |
|
|
case 6: // 第7批设备 |
|
|
case 6: // 第7批设备 |
|
|
return PWM_FLASH_OUT_7; |
|
|
return PWM_FLASH_OUT_7; |
|
|
|
|
|
case 3: // 第4批设备 |
|
|
|
|
|
return PWM_FLASH_OUT_4; |
|
|
case 2: // 第2批设备(兼容旧逻辑) |
|
|
case 2: // 第2批设备(兼容旧逻辑) |
|
|
return PWM_FLASH_OUT_2; |
|
|
return PWM_FLASH_OUT_2; |
|
|
default: // 默认使用第6批设备路径 |
|
|
default: // 默认使用第6批设备路径 |
|
@ -128,6 +139,8 @@ public class RelayController { |
|
|
return PAD_TYPE_SEVEN; // deviceType=6表示第7批设备,使用DeviceType7Manager |
|
|
return PAD_TYPE_SEVEN; // deviceType=6表示第7批设备,使用DeviceType7Manager |
|
|
} else if (deviceType == 5) { |
|
|
} else if (deviceType == 5) { |
|
|
return PAD_TYPE_TWO; // deviceType=5表示第6批设备,使用第2批的GPIO路径 |
|
|
return PAD_TYPE_TWO; // deviceType=5表示第6批设备,使用第2批的GPIO路径 |
|
|
|
|
|
} else if (deviceType == 3) { |
|
|
|
|
|
return PAD_TYPE_DEFAULT; // deviceType=3表示第4批设备,使用默认GPIO路径(可根据需要调整) |
|
|
} else { |
|
|
} else { |
|
|
// 其他情况返回默认 |
|
|
// 其他情况返回默认 |
|
|
return PAD_TYPE_DEFAULT; |
|
|
return PAD_TYPE_DEFAULT; |
|
@ -230,6 +243,9 @@ public class RelayController { |
|
|
LogManager.logInfo(TAG, "DeviceType7Manager读取GPIO值成功: " + strValue); |
|
|
LogManager.logInfo(TAG, "DeviceType7Manager读取GPIO值成功: " + strValue); |
|
|
return strValue; |
|
|
return strValue; |
|
|
} |
|
|
} |
|
|
|
|
|
} else if (deviceType == 3) { |
|
|
|
|
|
// 第4批设备使用继电器控制文件 |
|
|
|
|
|
return readRelayControlValue(RELAY_CONTROL_4); |
|
|
} else { |
|
|
} else { |
|
|
// 其他设备使用文件操作,根据deviceType动态获取路径 |
|
|
// 其他设备使用文件操作,根据deviceType动态获取路径 |
|
|
BufferedReader reader = null; |
|
|
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值到文件 |
|
|
* 直接写入GPIO值到文件 |
|
|
* @param value 要写入的值 |
|
|
* @param value 要写入的值 |
|
|
* @param valuePath GPIO值文件路径 |
|
|
* @param valuePath GPIO值文件路径 |
|
@ -280,13 +349,6 @@ public class RelayController { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 写入GPIO值 |
|
|
|
|
|
* @param value 要写入的值 |
|
|
|
|
|
* @param padType 设备类型(保留兼容性) |
|
|
|
|
|
* @return 是否成功 |
|
|
|
|
|
*/ |
|
|
|
|
|
private boolean writeGpioValue(byte[] value, String padType) { |
|
|
private boolean writeGpioValue(byte[] value, String padType) { |
|
|
if (PAD_TYPE_SEVEN.equals(padType) && deviceType7Manager != null) { |
|
|
if (PAD_TYPE_SEVEN.equals(padType) && deviceType7Manager != null) { |
|
|
// 第七批设备使用DeviceType7Manager |
|
|
// 第七批设备使用DeviceType7Manager |
|
@ -298,6 +360,9 @@ public class RelayController { |
|
|
LogManager.logError(TAG, "DeviceType7Manager写入GPIO值失败"); |
|
|
LogManager.logError(TAG, "DeviceType7Manager写入GPIO值失败"); |
|
|
} |
|
|
} |
|
|
return success; |
|
|
return success; |
|
|
|
|
|
} else if (deviceType == 3) { |
|
|
|
|
|
// 第4批设备使用继电器控制文件 |
|
|
|
|
|
return writeRelayControlDirect(value, RELAY_CONTROL_4); |
|
|
} else { |
|
|
} else { |
|
|
// 其他设备使用文件操作,根据deviceType动态获取路径 |
|
|
// 其他设备使用文件操作,根据deviceType动态获取路径 |
|
|
String valuePath = getGpioValuePath(deviceType); |
|
|
String valuePath = getGpioValuePath(deviceType); |
|
|