//Androidthings 传感器流程
注册 SensorManager.DynamicSensorCallback
注册驱动服务 ProximityService

ProximityService中注册 Vcnl4200SensorDriver
Vcnl4200SensorDriver注册 UserDriverManager
UserDriverManager 调用 UserSensorReading
UserSensorReading调用readLight 真正的读取设备数据
在使能函数中做设备初始化。

//命令获取到的硬件接口
adb shell pio list uart

msm8x53_som:/ # pio list
gpio GPIO_0
gpio GPIO_1
gpio GPIO_117
gpio GPIO_127
gpio GPIO_13
gpio GPIO_140
gpio GPIO_35
gpio GPIO_42
gpio GPIO_43
gpio GPIO_44
gpio GPIO_45
gpio GPIO_46
gpio GPIO_48
gpio GPIO_65
gpio GPIO_68
gpio GPIO_85
gpio GPIO_86
gpio GPIO_87
gpio GPIO_98
gpio GPIO_99
i2c I2C1
i2c I2C2
uart UART6

接口配置
./msm8x53/somconfig/hardware_capabilities.xml

//在命令行测定GPIO
msm8x53_som:/ # pio gpio GPIO_85 read
1

系统中调用的是:
/etc/somconfig/default_configuration.pb
配置了需要的接口

在/device/qcom/msm8x53/msm8x53.mk中

P I/O HAL and SOM config for 8x53

202 PRODUCT_PACKAGES +=
203 default_configuration.pb
204 peripheral_io.msm8x53
205
206 # Camera
207 include device/qcom/msm8x53/camera.mk
208
209 # Keymaster

//映射函数
./qcom/msm8x53/pio_hal/pio_hal.cpp:98: // GPIO_1019 is a special-case, virtual GPIO that reflects the state of
./qcom/msm8x53/pio_hal/pio_hal.cpp:104: callbacks->register_sysfs_hidden_gpio(“GPIO_1019”, 1019);
//注册函数RegisterPeripherals

//从底层中取到节点然后注册 这个是example,更能直观的看出接口获取
// Initialization callback from PIO to register all known I/O. Called once
// on PIO daemon startup.
static int RegisterPeripherals(const pio_module_v1_t* /module/,
const pio_registration_callbacks_t* callbacks) {
// Register all the pins first.
for (const PioPin* pin : GetPins()) {
callbacks->register_pin(pin->hal_pin());
}

// Now link functions to their sysfs paths so PIO knows where to find them.
// Sysfs paths are just made up for this example HAL.

// GPIOs: /sys/class/gpio/gpio
callbacks->register_sysfs_gpio(“GPIO_A0”, 0);
callbacks->register_sysfs_gpio(“GPIO_A1”, 1);
callbacks->register_sysfs_gpio(“GPIO_A2”, 2);
callbacks->register_sysfs_gpio(“GPIO_A3”, 3);
callbacks->register_sysfs_gpio(“GPIO_B0”, 8);
callbacks->register_sysfs_gpio(“GPIO_B1”, 9);
callbacks->register_sysfs_gpio(“GPIO_B2”, 10);
callbacks->register_sysfs_gpio(“GPIO_B3”, 11);
callbacks->register_sysfs_gpio(“GPIO_B4”, 12);
callbacks->register_sysfs_gpio(“GPIO_B5”, 13);
callbacks->register_sysfs_gpio(“GPIO_B6”, 14);
callbacks->register_sysfs_gpio(“GPIO_B7”, 15);

// I2C0: /dev/i2c-4
callbacks->register_sysfs_i2c(“I2C0”, 4);

// PWM0: /sys/class/pwm/pwmchip0/pwm0
// PWM1: /sys/class/pwm/pwmchip1/pwm2
callbacks->register_sysfs_pwm(“PWM0”, 0, 0);
callbacks->register_sysfs_pwm(“PWM1”, 1, 2);

// SPI0.0: /dev/spidev1.0
// SPI0.1: /dev/spidev1.15
// SPI0.2: /dev/spidev1.32767
pio_sysfs_spi_chip_select_t chip_selects[] = {{0, 0}, {1, 15}, {2, 32767}};
callbacks->register_sysfs_spi(
“SPI0”, 1, chip_selects, arraysize(chip_selects));

// UART0: /dev/ttyS4
callbacks->register_sysfs_uart(“UART0”, “/dev/ttyS4”);

return 0;
}

系统中跑了一个peripheralman进程
peripheralman.rc
service peripheralman /system/bin/peripheralman
class main
user root
# Some UARTs are shared with Bluetooth, so give peripheralman access to the
# bluetooth group rather than giving everyone rw access to those devices.
# See b/78327678 and b/112380556.
group system bluetooth
onrestart restart zygote

msm8x53_som:/ # ps -A |grep peripheralman
root 517 1 38500 12516 SyS_epoll_wait 0 S peripheralman

apq8053 Androidthings 底层硬件接口分析相关推荐

  1. linux底层硬件需求,Linux系统的硬件设备驱动的底层结构讲解

    什么是驱动?最通俗的解释就是"驱使硬件设备行动" 作用?设备驱动与底层硬件直接打交道,按照硬件设备的具体工作方式读写设备寄存器,完成设备的轮询.中断处理.DMA通信,进行物理内存向 ...

  2. 避免关注底层硬件,Nvidia将机器学习与GPU绑定

    Nvidia释放的一组cuDNN的库,有效的实现了其与多种深度学习框架的整合.基于cuDNN,加速了代码的运行,同时让研究员避免去关心底层硬件性能. 关键字: 编程语言语音识别Nvidia 原文链接: ...

  3. 大数据基础环境搭建的从spark到hadoop,从底层硬件到上层软件的一些必备注意事项

    一.硬件环境 硬件如何搭配,能做到比较高的性价比,不存在短板.合理的硬件搭配,对系统的稳定性也很关键. 1.CPU不是核数越高越好,性价比才是关键. 经常遇到很多的企业级客户,他们机器配置非常高,CP ...

  4. 三菱A系列老PLC的数据采集,MES系统采集,工业智能数据采集底层硬件方案

    三菱老款A系列PLC,采用的是DB25接口,该接口目前已被淘汰,目前主流采用DB9针口,进行串行数据通讯:本文介绍一种DB25针转换成以太网网口的可行方案: 通过BCNet-A以太网通讯处理器,满足日 ...

  5. IBM发明世界首个人造神经元,人工智能的底层硬件基石已完成!

    from: http://it.sohu.com/20160804/n462610626.shtml 图片来源:IBM 编者按:从AlphaGo击败李世石,宣布超级计算机攻克了围棋这一穷举法不可能征服 ...

  6. Linux内核协议栈-一个socket的调用过程,从用户态接口到底层硬件

    用户创建socket 调用内核__sock_create int __sock_create(struct net *net, int family, int type, int protocol,s ...

  7. 04【Verilog实战】SPI协议底层硬件接口设计(附源码RTL/TB)

    脚  本:makefile 工  具:vcs 和 verdi 写在前面 这个专栏的内容记录的是个人学习过程,博文中贴出来的代码是调试前的代码,方便bug重现. 调试后的程序提供下载,[下载地址] 发现 ...

  8. 三菱FX以太网采集,MES系统采集,数据采集底层硬件方案,GX Works2以太网连接FX

    简介 BCNet-FX是一款经济型的以太网通讯处理器,是为满足日益增多的工厂设备信息化需求(设备网络监控和生产管理)而设计,用于三菱FX1S/1N/2N/3S/3G/3GA/3GC/3U/3UC系列. ...

  9. 底层硬件创新夯实算力、应用创新贴近业务:英特尔至强助力下的VR医疗培训系统

    早在1935年,科幻小说家斯坦利·温鲍姆的小说<皮格马利翁的眼镜>中,就构想了一款实现虚拟现实(VR)的眼镜.近年来,除游戏.娱乐等大众熟知的应用场景外,VR逐渐涉足医疗.教育.生产制造等 ...

最新文章

  1. 配置安装光盘为yum源
  2. idea 新建的java项目没发run_IDEA 如何创建一个普通的 Java 项目,及创建 Java 文件并运行...
  3. 17.QT-事件处理分析、事件过滤器、拖放事件
  4. CentOS7加入windows 2008 AD域
  5. java foreach跳出本次循环_Java中提供三种常用的循环语句
  6. Visual.Assist.X.V10.7.1946的汉化破解补丁
  7. 信息学奥赛一本通C++语言——1119:矩阵交换行
  8. Open3d之python版本快速安装和使用
  9. html的vue项目怎么兼容ie,Vue项目兼容IE/360方法
  10. java中aop和aoc的区别_你喝到的波尔多AOC、AOP红酒是真的吗?
  11. 爬虫实战 -- QQ空间自动点赞
  12. js pug 代码_Pug模板(一)
  13. 科学家们认为 计算机不可能,健汉语语法与中国人的思维能力
  14. UED团队规范设计参考及建议
  15. DeskMini310 黑苹果(hackintosh)
  16. 泛在网作业-----码分多址通信
  17. android游戏降低画质,sky光遇画质模糊怎么办 调整游戏画质的方法
  18. 你会微信小程序自定义底部导航栏吗?
  19. J2EE struts2MVC应用在线书签1
  20. HTTP/1.1 中 If-Modified-Since 和 If-Unmodified-Since 区别简记

热门文章

  1. html小数转百分比函数,excel合格率公式 把小数点设置百分比就可以了
  2. transmac装黑苹果_用u盘安装黑苹果10.12.3
  3. 期权专题6:BSM期权定价
  4. eNodeB 伪基站辨识与优化
  5. Cocos2d-X 3.4版-扣血飘字 《赵云要格斗》
  6. python编程—猜数字小游戏
  7. 在RGUI中更新R 的版本
  8. ftp,sftp读取文件
  9. 数字藏品是什么:数藏app开发
  10. InDesign CC2018软件安装