RK3308 按键Key与LED灯

硬件原理图

LED指示灯

麦克风阵列子板上使用12颗RGB灯作为效果指示灯。用户可以通过I2C总线配置LED灯驱动IC来是实现不同场景下的灯效。
在这里插入图片描述
在这里插入图片描述

按键Key

在这里插入图片描述
麦克风阵列子板上集成五个控制按键,分别为:控制音量增减的VOL-和VOL+、禁止MIC录音的
MIC_MUTE、切换设备模式的MODE、控制设备播放或者暂停的Play/Pause

POWER Control

在这里插入图片描述

  • GPIO 要选 GPIO0 的 pin,一般主控休眠时,GPIO0控制器是带电工作的,其他的断电了,不能唤醒(设置中断,linux 系统下,要在 dts 中设置)
  • 休眠(suspend)是指,系统冻结进程,然后依次挂起设备的电源停止工作,进入低功耗模式;休眠命令:echo mem > /sys/power/state
  • 唤醒(resume)是指,从休眠模式恢复到正常工作模式。EVB 上 power 键具有唤醒功能,按下 power 键,系统就将唤醒

在这里插入图片描述

软件上的配置

按键Key的配置

相关文件:

  • Rockchip_Developer_Guide_DeviceIo_Key_CN.pdf
  • Rockchip_RK3308_Developer_Guide_Linux_Input_CN.pdf
  • Y:\hxy\RK3308\sdk-1.5\buildroot\board\rockchip\rk3308\fs-overlay\etc\input-event-daemon.conf
  • Y:\hxy\RK3308\sdk-1.5\buildroot\output\rockchip_rk3308_release\target\etc\input-event-daemon.conf(与上面的相同)
  • Y:\hxy\RK3308\sdk-1.5\buildroot\output\rockchip_rk3308_release\build\input-event-daemon-v0.1.3\input-event-daemon.h
  • Y:\hxy\RK3308\sdk-1.5\kernel\drivers\input\keyboard\adc-keys.c

相关指令:

  • cd work/hxy/RK3308/sdk-1.5
  • cd buildroot/output/rockchip_rk3308_release
  • make input-event-daemon-dirclean && make input-event-daemon-rebuild
  • grep -rwn "Keys" --include "*.conf"(-i: 不区分大小写 -n: 显示行号 -r: 逐层遍历目录查找 -w: 按单词搜索 --include: 指定匹配的文件类型)

客户需求:

  • 按下按键Mode,执行客户的APP,并亮蓝灯
  • 按下按键MIC_Mute,关闭客户的APP,并亮红灯
  • 按下按键VOL+,进行录音增益

实现方式:用 input-event-daemon+shell 脚本实现

buildroot编译配置

1.源码路径:Y:\hxy\RK3308\sdk-1.5\buildroot\output\rockchip_rk3308_release\build\input-event-daemon-v0.1.3

2.代码目录说明:

  • input-event-daemon.c 监听内核event事件,然后根据配置文件来响应对应事件
  • target\etc\input-event-daemon.conf 按键事件设置

3.buildroot添加对应编译配置:

  • #cd buildroot/output/rockchip_rk3308_release
  • #make menuconfig
  • 选择 Target packages -> Hardware handling -> input-event-daemon
  • #make input-event-daemon-dirclean && make input-event-daemon-rebuild
  • #./build.sh

对conf文件进行配置及编写shell脚本

input-event-daemon.conf文件配置如下(Keys的名字不是随便写的,是看input-event-table.h中的配置的):
Linux中&&和&,|和||

[Global]
listen = /dev/input/event0
listen = /dev/input/event1
#listen = /dev/input/event2
#listen = /dev/input/event3

[Keys]
MODE          = ./data/LedTest 2&&echo 1 > /sys/class/leds/led33/brightness&&echo 0 > /sys/class/leds/led14/brightness&&source /data/openAPP.sh
PLAY		  = echo "-----Press PLAY-----"
MUTE          = ./data/LedTest 2&&echo 0 > /sys/class/leds/led33/brightness&&echo 1 > /sys/class/leds/led14/brightness&&source /data/closeAPP.sh
VOLUMEDOWN	  = export ALSA_LIB_ADD_GAIN=2
VOLUMEUP      = ./data/LedTest 2&&export ALSA_LIB_ADD_GAIN=4&&echo 1 > /sys/class/leds/led4/brightness
#PLAY		  = source /data/closeAPP.sh
#MUTE          = echo "-----Press MUTE-----"
#POWER        = echo mem > /sys/power/state
#MUTE         = amixer -q set Master mute
#FN+VOLUMEUP  = factory_reset_cfg
#CTRL+ALT+ESC = beep
#FN = softapServer Rockchip-Echo-123 &

[Switches]
RADIO:0 = ifconfig wlan0 down

[Idle]
1h 30m = vbetool dpms off
reset  = vbetool dpms on 

小板上有12个LED灯,从有三角形标号的LED开始,按照 绿、红、蓝 的顺序(对应 led1、led2、led3 )排序

openAPP.sh的配置如下:(注意最后不能以Enter键结尾,不然会报错)

#!/bin/sh
echo "open APP"
./data/rk_hw_vad

closeAPP.sh的配置如下:

#!/bin/sh
echo "close APP"
kill -9 $(pidof rk_hw_vad)

LED灯配置

echo 1 > /sys/class/leds/led33/brightness 点亮蓝灯(改变数字大小能够调节亮度0~255)
echo 0 > /sys/class/leds/led14/brightness 熄灭红灯
echo 1 > /sys/class/leds/led4/brightness 点亮绿灯

自己程序demo编写

LED_Demo编写


版权声明:本文为Black_Cat_33原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。