|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
G-sensor 驱动实验教程
9 Z0 c2 K {2 W5 ~9 m' k- t& L( B7 a+ h) J& a
- O8 K% I! D# d( a5 ~
& I6 I) ~! u4 z# a1 z3 @ F% I& h
第一节 引言 --- G-sensor 电路原理图详解
- a+ G& I# x" J b# _9 I
3 O" h) o4 \4 `6 x5 z+ S+ I 下图来源于文档 3128_sdk_a02_20170325.pdf 中第 2 页和第 12 页。
; r0 U! ]( F' |2 Y0 ?" Z! [ 如下两张图可以确定 G-sensor 是通过 I2c 与 cpu 相互通信的,cpu 作为主设备,G-sensor 作为从设备。因为 cpu 的 I2c 不仅仅与 G-sensor 相连,它连接了多个 I2c 从设备,并且通过从设备地址来确定当前和哪个从设备通信。( e ?+ |$ q8 S( l
, ?9 _8 c$ P3 \6 ~1 d" R
3 f# z: C& E8 j8 k图1* o, v' k2 V" [: s1 X: x3 P; H, T
" g) i( Q) i8 M/ m
5 T1 k( Z. O' _7 R' r
图27 D3 Z& Y7 N, `( ~; G! O
$ w% x4 F: h6 d& @6 M0 O, G8 K第二节 G-sensor 驱动代码结构) b" Q! j- U/ l, s# U ]
. b, X4 ]3 j; t7 j5 A) t $(dir)\rk3128-source\kernel\drivers\input\sensors\accel\mma8452.c& w. R% b- x+ X5 C. x* H
从代码路径可以看出 G-sensor 驱动和 input,sensor 设备有莫大的关系。
5 G# `/ M" U" K+ B7 A: }: b& U
5 k! d6 t k5 \
9 z8 M0 B k" N( i
图3% c2 t6 x( \9 ]4 \8 k0 m
$(dir)\rk3128-source\kernel\drivers\input\sensors\sensor-dev.c
* n* o+ C) P9 S8 f" A --- sensor 设备注册,主要是注册 sensor,input 设备,解析 dts 配置文件! T# W3 I& j' {% T) n% r% G
$(dir)\rk3128-source\kernel\drivers\input\sensors\sensor-i2c.c8 h2 V z& l( A
---sensor 的 I2c 相关处理2 ^; P2 {2 y( g# `( q
; B; ~$ W f- p$ v
第三节 实验代码, {; ^- p" A4 `1 u0 B$ W
, p& l; w, L2 m$ N' n& l4 P8 l1.dts 修改:
# S+ O6 p( O" X" R+ \4 T) p6 Z4 b7 X9 w! l7 e
+ m% E( d; ?0 E! K" j
代码1( I, {0 f+ O2 E0 r* g/ s \! I
2.增加一个可以动态调节方向的测试函数如下(在 sensor-dev.c 中),用户可以通过adb shell 或者串口去输入数据完成屏幕方向调节的功能。0 r) B( W$ B* O. X$ t( H3 [
7 U* H" ^, w' l7 ] Q8 o3 z9 Q
2 [, s, Z @, B2 ^$ f, l
9 Q! `, b7 [) x* O% p2 z代码25 \, I6 g- C) q* `5 {
3.输入命令格式
0 w4 ]8 Y; C" aa.系统缺省的方向配置如下
/ @3 F# e5 K" Q2 Vecho gsensor_class={1, 0, 0, 0, 1, 0, 0, 0, 1} > /sys/class/gsensor_class/orientation b.测试命令如下
, i5 b" `+ c4 F' ^( o% L+ Becho gsensor_class={1, 0, 0, 0, 0, 1, 0, 1, 0} > /sys/class/gsensor_class/orientation. T; v- k3 G7 [( ]; u
) h/ ~& J4 `: Y. b" V# fecho gsensor_class={0, 1, 0, 1, 0, 0, 0, 0, 1} > /sys/class/gsensor_class/orientation
5 A) e8 ]* b6 i( b P
- y) c" P; e, Y1 T1 r! @9 i7 eecho gsensor_class={0, 1, 0, 0, 0, 1, 1, 0, 0} > /sys/class/gsensor_class/orientation f: z) D7 D: ?$ C/ d- {+ X
) E3 n; L6 D) D6 P( m8 [( q* c, V' C
echo gsensor_class={0, 0, 1, 1, 0, 0, 0, 1, 0} > /sys/class/gsensor_class/orientation
, h) c7 e3 J# ^( _9 z2 q& Z3 R) r$ Mecho gsensor_class={0, 0, 1, 0, 1, 0, 1, 0, 0} > /sys/class/gsensor_class/orientation
5 y' X% H6 [, h. Z
% Y: I4 _ R) `, j4.代码调试中遇到问题8 e( z. `/ G0 j- V0 y6 K# d
如果 gsensor_set_orientation_online()直接返回 0 或 1 而不是 count,会出现什么情况?为什么?
! [/ W) l+ c9 u1 ] 如果 echo gsensor_class={1, 0, 0, 0, 1, 0, 0, 0, 1} > /sys/class/gsensor_class/orientation 命令提示输入不生效,可以尝试输入 su 命令提高一下权限。在我们开发板上面, adb 默认是 root 的,所以 adb shell 之后,直接是 root 用户。可以用 su 切换,也可以不用切换。
2 @# X- C }5 M. H9 }, H4 E( S2 r
/ d9 t q4 H" t- m. H4 w% M. |第四节 实验步骤 --- GSENSOR 怎么调节方向
% J6 D' R( G) i# z6 [. k9 k6 y) H4 H4 C! [" X# c3 S
一般 GSENSOR 芯片贴片的位置变了,变换坐标就要跟着调整。
7 Y& b: X/ G1 q 我们 Gsensor 是贴片好了的,这个用户无法更改,但是用户可以模拟一下如果板子不平放而是竖着放,屏幕平放的情况看优酷,如果保证屏幕的正常显示。8 d6 V' b) k9 F' o: g7 [7 r i; D* B/ V
* R6 V, \* i( Z8 h. s
第五节 实验现象8 q0 H2 [) f M
7 T w+ ~6 A! c, F) e; |8 s1 p
开发板放置成如下图一方向,什么命令可以让屏幕横着播放视频?
" {3 _. `8 g0 m9 X echo gsensor_class={-1, 0, 0, 0, -1, 0, 0, 0, -1} > /sys/class/gsensor_class/orientation
: r( e% I2 h. d C N' V7 i) n+ L6 X 输入如上命令后,屏幕变了,如图二。 G: \) q" I9 @6 g! R
! S* v0 z; S* U" q
- I6 K" V u; z5 |; z4 W; }7 ]图4
% u! @! \) G* ]0 Y+ r/ F- H% \, O0 h9 D. b5 K; _1 h: e( Q
: F9 Q [( r* B# r7 L$ _图5
3 U F6 F& r3 F5 n5 v" a3 Z, _& T' c9 b. P& {
! F9 o5 s+ U* f' L0 Q: `4 b, ]3 ~" o, R7 x' a
; S9 [/ P+ c1 n+ M9 h) a$ ?文件下载请点击:
9、G-sensor驱动实验教程.pdf
(631.95 KB, 下载次数: 0)
; E# \ B7 p; ^# j0 O# Q9 A
2 z7 D1 D& }' Y I/ l& ~1 D: d! C |
|