package com.nodka.zysjtest;
|
|
import android.app.ZysjSystemManager;
|
import android.content.Context;
|
|
import java.lang.reflect.Field;
|
import java.util.ArrayList;
|
import java.util.Arrays;
|
import java.util.List;
|
|
public class GpioActivity extends BaseTestActivity {
|
private static final String SERVICE_NOT_FOUND_MESSAGE = "未获取到 ZysjSystemManager 系统服务";
|
|
private ZysjSystemManager zysjSystemManager;
|
|
@Override
|
protected String getPageTitle() {
|
return "GPIO 控制接口测试";
|
}
|
|
@Override
|
protected List<TestItem> getTestItems() {
|
return Arrays.asList(
|
new TestItem(
|
"控制系统 GPIO 电平",
|
"set_zysj_gpio_value",
|
"which:GPIO 编号,value:0 表示低电平,1 表示高电平。",
|
this::setZysjGpioValue,
|
TestItem.InputField.number(
|
"请输入 which:GPIO1 对应 1,GPIO2 对应 2",
|
"2",
|
"which"),
|
TestItem.InputField.number(
|
"请输入 value:0=低电平,1=高电平",
|
"1",
|
"value")),
|
new TestItem(
|
"获取系统 GPIO 状态",
|
"get_zysj_gpio_value",
|
"which:GPIO 编号,返回 0 表示低电平,1 表示高电平,-1 表示获取失败。",
|
this::getZysjGpioValue,
|
TestItem.InputField.number(
|
"请输入 which:GPIO1 对应 1,GPIO2 对应 2",
|
"2",
|
"which"))
|
);
|
}
|
|
private ZysjSystemManager zysjSystemManager() {
|
if (zysjSystemManager != null) {
|
return zysjSystemManager;
|
}
|
|
for (String serviceName : getServiceNameCandidates()) {
|
Object service = getSystemService(serviceName);
|
if (service instanceof ZysjSystemManager) {
|
zysjSystemManager = (ZysjSystemManager) service;
|
return zysjSystemManager;
|
}
|
}
|
|
throw new IllegalStateException(SERVICE_NOT_FOUND_MESSAGE);
|
}
|
|
private List<String> getServiceNameCandidates() {
|
List<String> candidates = new ArrayList<>();
|
addContextFieldCandidate(candidates, "ZYSJ_SYSTEM_SERVICE");
|
addContextFieldCandidate(candidates, "ZYSJ_SERVICE");
|
candidates.add("zysj_system");
|
candidates.add("zysj");
|
candidates.add("zysj_system_service");
|
return candidates;
|
}
|
|
private void addContextFieldCandidate(List<String> candidates, String fieldName) {
|
try {
|
Field field = Context.class.getField(fieldName);
|
Object value = field.get(null);
|
if (value instanceof String && !candidates.contains(value)) {
|
candidates.add((String) value);
|
}
|
} catch (NoSuchFieldException ignored) {
|
} catch (IllegalAccessException e) {
|
throw new IllegalStateException("读取 Context." + fieldName + " 失败", e);
|
}
|
}
|
|
private String setZysjGpioValue(TestItem item, String[] inputs) {
|
int which = parseInt(inputs, 0, 1, Integer.MAX_VALUE, "which 必须是大于 0 的 GPIO 编号");
|
int value = parseInt(inputs, 1, 0, 1, "value 只能是 0 或 1");
|
int result = zysjSystemManager().set_zysj_gpio_value(which, value);
|
if (result == 0) {
|
return "调用成功:set_zysj_gpio_value(" + which + ", " + value + ") 返回值:0,设置成功";
|
} else if (result == -1) {
|
return "调用成功:set_zysj_gpio_value(" + which + ", " + value + ") 返回值:-1,设置失败";
|
}
|
return "调用成功:set_zysj_gpio_value(" + which + ", " + value + ") 返回值:" + result;
|
}
|
|
private String getZysjGpioValue(TestItem item, String[] inputs) {
|
int which = parseInt(inputs, 0, 1, Integer.MAX_VALUE, "which 必须是大于 0 的 GPIO 编号");
|
int result = zysjSystemManager().get_zysj_gpio_value(which);
|
if (result == 0) {
|
return "调用成功:get_zysj_gpio_value(" + which + ") 返回值:0,低电平";
|
} else if (result == 1) {
|
return "调用成功:get_zysj_gpio_value(" + which + ") 返回值:1,高电平";
|
} else if (result == -1) {
|
return "调用成功:get_zysj_gpio_value(" + which + ") 返回值:-1,获取失败";
|
}
|
return "调用成功:get_zysj_gpio_value(" + which + ") 返回值:" + result;
|
}
|
|
private int parseInt(String[] inputs, int index, int minValue, int maxValue, String errorMessage) {
|
if (index >= inputs.length) {
|
throw new IllegalArgumentException(errorMessage);
|
}
|
try {
|
int value = Integer.parseInt(inputs[index].trim());
|
if (value < minValue || value > maxValue) {
|
throw new IllegalArgumentException(errorMessage);
|
}
|
return value;
|
} catch (NumberFormatException e) {
|
throw new IllegalArgumentException(errorMessage);
|
}
|
}
|
}
|