|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
G-sensor 驱动实验教程
7 Q6 G$ _( @/ C+ W+ p+ |$ S% q) o! @
* P9 h4 g" J3 z' a* ^8 ?5 G2 d6 s0 U' A: R
第一节 引言 --- G-sensor 电路原理图详解$ L4 C8 g Q; N/ _5 U" O, M G; d
! z. p: [& ~0 Q" _" K" L& S% c 下图来源于文档 3128_sdk_a02_20170325.pdf 中第 2 页和第 12 页。
5 t; N2 v' d( _. y% q! V' X 如下两张图可以确定 G-sensor 是通过 I2c 与 cpu 相互通信的,cpu 作为主设备,G-sensor 作为从设备。因为 cpu 的 I2c 不仅仅与 G-sensor 相连,它连接了多个 I2c 从设备,并且通过从设备地址来确定当前和哪个从设备通信。
( K! A0 W. a6 C! o) A$ K6 t
* C/ j% c0 G# ?. \4 E6 `
6 N" a8 @$ m1 D+ Y' ]
图1
* ?1 Y: i! V1 T' @8 |
4 R* h3 T* k* D1 a- i
6 K! s7 A! H/ S6 d图2
0 T) j0 ~4 M( v0 Z$ H, l+ e
, g; `9 o, k( {5 N- S第二节 G-sensor 驱动代码结构
+ V# J1 \8 ?1 [, x9 L7 s1 N
0 c$ E+ k+ Y4 z9 l5 ? $(dir)\rk3128-source\kernel\drivers\input\sensors\accel\mma8452.c& s8 e) J6 I( ^( G
从代码路径可以看出 G-sensor 驱动和 input,sensor 设备有莫大的关系。
. H' [7 g# B4 F: W% K5 }% d: N; D7 S3 q+ n$ j: D6 h
/ Q/ X" N3 h+ B" ^" r t% R图3
! d/ t2 J& {+ S: B3 V7 J+ h $(dir)\rk3128-source\kernel\drivers\input\sensors\sensor-dev.c
- t' @; z, T- O: f --- sensor 设备注册,主要是注册 sensor,input 设备,解析 dts 配置文件( T& g1 D( R% `+ y, \
$(dir)\rk3128-source\kernel\drivers\input\sensors\sensor-i2c.c7 p( f: Z* ?0 N# O i2 V& ~
---sensor 的 I2c 相关处理" {- J* S! h3 D3 w5 U @" w- k
x& I0 h+ Y+ K8 \
第三节 实验代码
, q+ |2 g8 t- a' I4 I, ^# g$ u) L) O% C! c6 n. V
1.dts 修改:
( z, e, d, L6 b( F
( W8 L2 \! X- d: X5 J9 r, \
" C- E: K7 f% D5 w
代码1
4 U( }" G! o# I- u) t2.增加一个可以动态调节方向的测试函数如下(在 sensor-dev.c 中),用户可以通过adb shell 或者串口去输入数据完成屏幕方向调节的功能。
3 \- i) L; P5 [- w: C
: Y$ }% Z2 y& w
6 ]" E2 O- _5 E) p) m1 k; p( D0 E. j
% ?, E4 `+ ~3 h# H& V' `代码2
8 E$ K3 m5 S8 e3.输入命令格式
; o. ?% u8 G3 c1 s" [$ W7 W1 y5 ea.系统缺省的方向配置如下4 T. W1 l0 G& E+ ?; L$ J; C# B
echo gsensor_class={1, 0, 0, 0, 1, 0, 0, 0, 1} > /sys/class/gsensor_class/orientation b.测试命令如下
) ]) S( D( m5 R( d! Y& _2 F; techo gsensor_class={1, 0, 0, 0, 0, 1, 0, 1, 0} > /sys/class/gsensor_class/orientation
, @. U, C: V; S( }% \) h6 J w2 \9 E0 K" D V# P* ~6 W& h- }5 s
echo gsensor_class={0, 1, 0, 1, 0, 0, 0, 0, 1} > /sys/class/gsensor_class/orientation
% D! G& s! [( I" E7 J: S% d l' Z' u) I0 Q' l
echo gsensor_class={0, 1, 0, 0, 0, 1, 1, 0, 0} > /sys/class/gsensor_class/orientation; C W* M8 \. f3 b a
( U3 V: \1 O; s* }7 ^echo gsensor_class={0, 0, 1, 1, 0, 0, 0, 1, 0} > /sys/class/gsensor_class/orientation7 V3 N' r: p6 P% k) z
echo gsensor_class={0, 0, 1, 0, 1, 0, 1, 0, 0} > /sys/class/gsensor_class/orientation
& f0 O( t' x+ u4 m, Y( X4 P3 Y* n8 l( W/ {+ ?* ]: |, _% i3 Q
4.代码调试中遇到问题- T% }, K; [9 S( y E
如果 gsensor_set_orientation_online()直接返回 0 或 1 而不是 count,会出现什么情况?为什么? 5 a% A0 S3 M' t0 I; a7 x
如果 echo gsensor_class={1, 0, 0, 0, 1, 0, 0, 0, 1} > /sys/class/gsensor_class/orientation 命令提示输入不生效,可以尝试输入 su 命令提高一下权限。在我们开发板上面, adb 默认是 root 的,所以 adb shell 之后,直接是 root 用户。可以用 su 切换,也可以不用切换。
9 z* @& k/ F0 i: e
* h/ q, i# ~6 l2 X: ^第四节 实验步骤 --- GSENSOR 怎么调节方向 x7 v( \. D6 W8 `( p% {* x/ |
# `& |, R. G. `/ i5 Q
一般 GSENSOR 芯片贴片的位置变了,变换坐标就要跟着调整。
9 c5 @6 a1 W# S' d1 F. o' M 我们 Gsensor 是贴片好了的,这个用户无法更改,但是用户可以模拟一下如果板子不平放而是竖着放,屏幕平放的情况看优酷,如果保证屏幕的正常显示。
@* y8 a" F0 a( j
0 d1 N1 c* F7 X& _. h" F9 m9 l& m3 M第五节 实验现象
( }! ?0 u, d I! b8 e' F5 `: F% i" Q6 B1 d+ ]7 Y o2 [
开发板放置成如下图一方向,什么命令可以让屏幕横着播放视频?
* b+ |& L& R0 L. b* A9 N" i echo gsensor_class={-1, 0, 0, 0, -1, 0, 0, 0, -1} > /sys/class/gsensor_class/orientation
) |. d$ d8 A5 F 输入如上命令后,屏幕变了,如图二。- Z6 F! |" P( j5 i: E8 F- {* n
% \6 J c/ `1 P' _$ q
# S+ A/ ]; ]( T
图44 f5 R" F" F7 {1 A3 B: F: w0 p6 \
" i( C# \4 B, T8 I1 V
* A4 X! B2 U" b8 t, D
图51 j8 t$ f) s9 V% A* x7 T
9 V( `3 B3 S0 @" f! h
7 B, F, V; b2 e/ w4 y4 `
; ?6 E* @# H* d& P- j8 |" _: K4 A1 u, T7 _6 g$ k
文件下载请点击:
9、G-sensor驱动实验教程.pdf
(631.95 KB, 下载次数: 0)
- H9 i6 x1 \) I$ ]* B
. P! U# v, b+ ? |
|