1.1. 按键,旋钮,继电器以及按键led灯对接

1.1.1. 概述-可对接项

a. 按键

  1. 监听每个按键的触发

b. 旋钮

  1. 监听旋钮开始旋转,结束旋转
  2. 监听旋钮按下,抬起
  3. 监听旋钮旋转进度

c. 继电器

  1. 获取当前继电器状态
  2. 控制继电器
  3. 接收继电器状态

d. led灯开关控制

  1. led灯各路节点的开关灯

1.1.2. 接入流程

准备阶段

拥有一台声必可背景音乐主机,带继电器按钮的(如M10,S10)

下载demo

链接: https://pan.baidu.com/s/179xcJ6HirWoDVofAcsJN5A 密码: 3vix,文件目录: 按键-旋钮-继电器-demo

注意事项

1. 对接旋钮时,系统的旋钮UI仍旧在,会响应旋钮事件,所以需要提前禁用系统的

2. 禁用步骤

  • 第一种方式,下载集成jdcommon库,进行属性设置。点击下载jdsmart-common 在应用里调用JdSystemProperty.setString("persist.sys.jd.hideBindDev", "1"), 设置persist.sys.jd.hideBindDev的值为1(1是隐藏,0是恢复)
  • 第二种方式(前提电脑有adb环境),usb连接主机和电脑,电脑上adb命令直接设置属性 adb shell setprop persist.sys.jd.hideBindDev 1 设置完,可以 getprop persist.sys.jd.hideBindDev 查看设置是否成功 设置成功再重启机器,此时对旋钮操作,不会出现系统的UI

1.1.3. 具体对接

1.AndroidManifest.xml 注册广播接收

    //继电器开关状态  
   <action android:name="com.judian.broadcast.relay.powerStatus" /> 

   //按键,旋钮
    <!--* S10带旋钮:
        * judian.intent.action.key1   //旋钮按下true,抬起flase
        * judian.intent.action.key2   //旋钮上方按键按下true,抬起flase
        * judian.intent.action.key3   //旋钮下方按键按下true,抬起flase
        * judian.intent.action.key4   //旋钮开始旋转true,结束旋转false
        *
        * M10不带旋钮,三个按键:
        * judian.intent.action.key1   //最上面按键1触发
        * judian.intent.action.key2   //中间按键2触发
        * judian.intent.action.key3   //最下面按键3触发-->
   <action android:name="judian.intent.action.key1" />
   <action android:name="judian.intent.action.key2" />
   <action android:name="judian.intent.action.key3" />
   <action android:name="judian.intent.action.key4" />

2.第三方对接控制继电器

通过广播 com.judian.broadcast.relay.control 发送
约定2路继电器id为judianRelayId-1, judianRelayId-2
广播参数 "relay":"json"
     json格式如下:
       {
           "id": "judianRelayId-1",
           "powerStatus": true
       }
如:  JSONObject jsonObject = new JSONObject();
      jsonObject.put("id",relayDevId);
      jsonObject.put("powerStatus",status);
      Intent intent = new Intent();
      intent.setAction("com.judian.broadcast.relay.control");
      intent.putExtra("relay", jsonObject.toJSONString());
      sendBroadcast(intent);

3.接收和主动查询继电器状态

主动查询继电器状态的话,可以读取节点信息 /sys/xfocus/xpower/relay1 /sys/xfocus/xpower/relay2 读取节点状态,1是打开

如:   public static String readFile(String path) {
        String status = "";
        if(new File(path).exists()){
            try {
                BufferedReader reader = new BufferedReader(new FileReader(path));
                status = reader.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return status;
      }

广播接收当前继电器的状态 com.judian.broadcast.relay.powerStatus 广播参数 "relay":"json",如deme中RelayReceiver接收内容

      json格式如下:
       {
           "id": "judianRelayId-1",
           "powerStatus": true
       }

4.按键和旋钮只需接收对应action

action参考->"1. AndroidManifest.xml 注册广播接收"

@Override
    public void onReceive(Context context, Intent intent) {
        final String key = intent.getAction();
        final boolean pressed = intent.getBooleanExtra("down", false);
    }

5.led 灯开关控制

M10, S10有三个LED,设备节点路径位于/sys/class/leds/下 注意,以下路径中ledx是可替换的(led1,led2,led3),取决于路径下的节点

//修改写入指定节点路径的值
    public static void writeFile(String path, String value) {
        File modefile = new File(path);
        if (modefile.exists()) {
            try {
                RandomAccessFile file = new RandomAccessFile(path, "rw");
                file.write(value.getBytes());
                file.close();
                Log.d(TAG, "setString = "+value);
            } catch (IOException re) {
                Log.e(TAG, "setString: "+re.toString());
            } catch (NumberFormatException re) {
                Log.e(TAG, "setString: "+re.toString());
            }
        }
    }
# 开灯(向brightness写1)
lily-c10-zigbee: # echo 1 > /sys/class/leds/ledx/brightness
如 writeFile("/sys/class/leds/led2/brightness","1");

# 关灯(向brightness写0)
lily-c10-zigbee: # echo 0 > /sys/class/leds/ledx/brightness
如 writeFile("/sys/class/leds/led2/brightness","0");

# 查看状态(读brightness一个字节)
lily-c10-zigbee: # cat /sys/class/leds/ledx/brightness
1
如readFile("/sys/class/leds/led2/brightness");

闪烁控制(以一定频率闪烁)

# 开始闪烁(默认以50HZ频率闪烁)
lily-c10-zigbee: # echo timer > /sys/class/leds/ledx/trigger
如 writeFile("/sys/class/leds/led2/trigger","timer");
# 关闭闪烁
lily-c10-zigbee: # echo none > /sys/class/leds/ledx/trigger
如 writeFile("/sys/class/leds/led2/trigger","none");

修改闪烁频率(在trigger设置为timer模式时才有效)

# 设置亮/灭时间(即修改闪烁频率),单位ms
lily-c10-zigbee: # echo 1000 > /sys/class/leds/ledx/delayon #亮1000ms
lily-c10-zigbee: # echo 500 > /sys/class/leds/ledx/delayoff #灭500ms

查看trigger状态 设备trigger被设置为timer,相应的应该可以看到输出有[timer],未触发[none]

lily-c10-zigbee: # cat /sys/class/leds/ledx/trigger
[none] rfkill0 mmc0 mmc1 mmc2 timer rfkill1

可以看到输出文本中的[none]被两个方括号框起来,意思时当前trigger未使用。 设备triger被设置为timer,相应的应该可以看到输出有[timer],即

none rfkill0 mmc0 mmc1 mmc2 [timer] rfkill1

results matching ""

    No results matching ""