首页 > 其他分享 >浅谈android设备sysfs接口硬件调用之手电筒,马达,呼吸灯

浅谈android设备sysfs接口硬件调用之手电筒,马达,呼吸灯

时间:2024-11-01 15:30:32浏览次数:1  
标签:leds activate led 浅谈 sysfs sys android i2c class

这篇文章我们来介绍下几个sysfs接口的调用。
事实上,驱动接口一般有两种方式调用:ioctl()和read()/write()。
前一种要么能读懂内核源码,要么照抄strace用户空间驱动得到的调用,因此不做研究。
需要注意的是,由于安卓内核碎片化过于严重,各个厂商之间的代码差异过大,因此直接和内核交互来调用驱动并不是一个通用思路。但是对于某些特定设备的驱动调用却是个简单可行的方法,比如nothing phone的灯带。

手电筒:

一般是个led类设备,小米10ultra的手电筒被注册到了/sys/class/leds/flashlight/下,当然也有部分设备叫led0或者其他,nothing的手电筒驱动咱还没找到,咱好笨喵呜~
目录中有两个文件对我们有用:brightness和max_brightness
max_brightness的内容是个固定值,定义了灯的最大亮度。
brightness的内容是个无符号整形数值,定义了灯的亮度,向其写入一个不大于max_brightness的合法数值,灯会亮,数越大灯越亮,写入0关闭手电筒。
什么你说怎么写?直接重定向覆盖进去就行了。

呼吸灯:

和手电筒差不多,一般在/sys/class/leds/white,当然也有彩色呼吸灯,控制文件和手电筒一样。
k40G就有/sys/class/leds/red,/sys/class/leds/blue和/sys/class/leds/green三个接口来控制背后摄像头上那个中二的很的灯带。
话说现在很少有带呼吸灯的手机了喵~

nothing phone 1的灯带:

算是个特大号呼吸灯?
它被注册到了/sys/class/leds/aw210xx_led下
_br和video_leds_effect文件是控制灯的,single_led_br控制单个区域,其他文件还没研究也没太大必要研究。
首先有个文件max_brightness显然是定义亮度的最大值。
至于
_br可以写个脚本看看到底是干嘛的:

ls /sys/class/leds/aw210xx_led/|grep -E "led_br|leds_br"|grep -v leds_breath_set|while read i
do
printf "\a\033[36mcurrent: \033[32m$i\033[0m\n"
echo 400 > /sys/class/leds/aw210xx_led/$i
sleep 3s
echo 0 > /sys/class/leds/aw210xx_led/$i
done

然后是video_leds_effect
感觉这个貌似逻辑比较简单。

#开始闪烁指示灯
echo 1 > /sys/class/leds/aw210xx_led/video_leds_effect
#关闭
echo 0 > /sys/class/leds/aw210xx_led/video_leds_effect

至于single_led_br:
写入序号+空格+亮度可以点亮单个小区域。
比如充电指示灯区域的代号为:
"16", "13", "11", "9", "12", "10", "14", "15", "8"
(文章不够私货凑)

马达:

这东西的代码就更加碎片化了。
部分设备会写入/sys/class/timed_output/vibrator/enable
部分设备会写入/sys/class/leds/vibrator/duration后写入/sys/class/leds/vibrator/activate
其中duration设置震动长度,activate激活震动。
但很多使用线性马达的设备采用的并非统一接口,而是作为input设备,设备信息在/proc/bus/input/devices中,含有haptic字样的。
不过有两个比较有意思的事:
Nothing Phone(1)使用和小米10u一样的马达驱动芯片,但咱找不到任何控制接口。
Nothing Phone(2)能找到接口在/sys/devices/platform/soc/88c000.i2c/i2c-3/3-005a/leds/aw_vibrator/ ,但除了activate文件之外的文件貌似都没作用,甚至有个文件cat后会触发短暂的长震。
Nothing Phone(2)接口文件列表:

.../files/home # cd /sys/devices/platform/soc/88c000.i2c/i2c-3/3-005a/leds/aw_vibrator/
.../leds/aw_vibrator # ls
activate       f0                 ram_f0
activate_mode  f0_save            ram_num
auto_boost     gain               ram_update
awrw           gun_type           ram_vbat_comp
brightness     haptic_audio       reg
bullet_nr      haptic_audio_time  rtp
cali           index              seq
cali_data      loop               state
cont           lra_resistance     subsystem
cont_brk_time  max_brightness     trig
cont_drv_lvl   osc_cali           trigger
cont_drv_time  osc_save           uevent
cont_wait_num  power              vbat_monitor
device         prctmode           vmax
duration       ram_cali
.../leds/aw_vibrator #

对小米10ultra马达的研究:

查看/proc/bus/input/devices:

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="aw8697_haptic"
P: Phys=
S: Sysfs=/devices/platform/soc/a8c000.i2c/i2c-2/2-005a/input/input3
U: Uniq=
H: Handlers=event3
B: PROP=0
B: EV=200001
B: FF=120070000 0

进入目录/sys/devices/platform/soc/a8c000.i2c/i2c-2/2-005a/input/input3
进入device目录

cas:/sys/devices/platform/soc/a8c000.i2c/i2c-2/2-005a/input/input3/device # ls
activate       auto_boost  cont          cont_td      driver     f0        f0_value  input           modalias  osc_cali  prctmode    ram_vbat_comp  seq        uevent        wakeup
activate_mode  bst_vol     cont_drv      cont_zc_thr  duration   f0_check  gain      loop            name      osc_save  ram         reg            subsystem  vbat_monitor
activate_test  cali        cont_num_brk  custom_wave  effect_id  f0_save   index     lra_resistance  of_node   power     ram_update  rtp            trig       vmax
cas:/sys/devices/platform/soc/a8c000.i2c/i2c-2/2-005a/input/input3/device #

activate激活,duration设置时长,activate_mode设置震动模式,有0,1,3三种,0无法设置时长

echo 1 > activate_mode &&echo 10000 > duration&&echo 1 > activate

想想都爽......想到哪去了啊喂(脸红)

标签:leds,activate,led,浅谈,sysfs,sys,android,i2c,class
From: https://www.cnblogs.com/Moe-hacker/p/18520370

相关文章

  • APP压力测试--Android sdk安装及虚拟机配置
    电脑系统:windows111、Androidsdk的下载安装( https://www.androiddevtools.cn/#google_vignette )如图:Androidsdk工具--SDKTools,选择windows对应的安装包,我下载的.zip包解压zip包(如解压到D盘),解压后目录如图2、AndroidSDKManager配置软件包双击SDKManager.exe‌......
  • 基于node.js+vue基于Android的答疑预约系统的设计与实现前(开题+程序+论文)计算机毕业设
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容选题背景关于答疑预约的研究,现有研究主要集中在传统的线下答疑预约或者基于网页端的答疑预约方式,专门针对基于Android平台的答疑预约系统的研究较少。随着移动设备的......
  • 基于node.js+vue基于Android的服装搭配APP(开题+程序+论文)计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于服装搭配的研究,现有研究主要以线下实体店搭配建议或时尚杂志推荐为主,专门针对基于Android平台开发服装搭配APP的研究较少。在国内外,虽然有一些关于......
  • Android本地广播工具类
    LocalBroadcastUtilimportandroid.content.BroadcastReceiverimportandroid.content.Contextimportandroid.content.Intentimportandroid.content.IntentFilterimportandroid.os.Bundleimportandroidx.localbroadcastmanager.content.LocalBroadcastManager/**......
  • Android APP如何获取设备网线插拔的状态
    我们的Android设备终端是支持有线接入的,现在有个需求是查询设备是否接入有线,查了下Android标准API没有找到查询有线接入与否的方法。后来与做系统的同事沟通,他告诉我可以通过cat/sys/class/net/eth0/operstate命令获取,UP表示接入,DOWN表示未接入。然后顺便扩展查询了下相关资......
  • 浅谈VCU之扭矩管理
    扭矩管理模块是VCU(VehicleControlUnit)中极为重要的一个组成部分。它处于VCU控制的核心位置,因为扭矩是车辆动力输出的关键物理量。无论是加速、减速还是保持匀速行驶,都与扭矩的合理分配和控制密切相关。在新能源汽车中,电机扭矩的控制直接影响车辆的动力性能、驾驶体验和......
  • 基于安卓Android的自来水收费系统APP(源码+文档+部署+讲解)
    !!!!!!!!!选题不知道怎么选不清楚自己适合做哪块内容都可以免费来问我会持续一直更新下去有问必答一键收藏关注不迷路源码获取:https://pan.baidu.com/s/1aRpOv3f2sdtVYOogQjb8jg?pwd=jf1d提取码:jf1d !!!!!!!!!项目介绍随着智能水务管理的发展和用户对便捷服务的需求增加,一个功能全......
  • Android添加OpenCV支持
    首先下载OpenCV的SDK推荐在官网下载。官网地址:https://opencv.org/releases/也可以在OpenCV的GitHub上现在GitHUb链接:https://github.com/opencv/opencv/releases官网下载:GitHub下载下载完成后,解压压缩包,会得到以下目录其中SDK文件夹是我们要导入的目标。在进行......
  • 【Android】屏幕超时休眠
    前言屏幕超时休眠指的是在设备一段时间没有操作后,自动关闭屏幕显示以节省电量并防止误触。当屏幕进入休眠状态时,通常会关闭屏幕背光,但设备可能仍在运行后台进程。正文Settings应用相关Settings应用的屏幕超时休眠界面相关代码定位到:packages/apps/Settings/res/xml/display_s......
  • 浅谈——深度学习和马尔可夫决策过程
            深度学习是一种机器学习方法,它通过模拟大脑的神经网络来进行数据分析和预测。它由多层“神经元”组成,每一层从数据中提取出不同的特征。多层次的结构使得深度学习模型可以捕捉到数据中的复杂关系,特别适合处理图片、语音等复杂数据。        马尔可夫......