Tema: Codigo GPL
Ver Mensaje Individual
  #24  
Viejo 20/05/12, 21:35:33
Array

[xs_avatar]
jjb_wii jjb_wii no está en línea
Usuario novato en la web
 
Fecha de registro: ene 2009
Mensajes: 29
Modelo de smartphone: htc touch diamond / Htc Desire / Galaxy Note / Pascal 2

Buenas,

Estos días he estado tratando de averiguar cual es el problema de los acelerometros.

Por un lado he estado haciendo pruebas con diferentes configuraciones del acelerometro, cambiar la velocidad de muestreo... modificar la configuración de la interrupciones.... en fin dando palos de ciego por si sonaba la flauta.

Por otro lado, dado que el driver parece funcionar correctamente:
* He estado revisando los valores en los tres registros de aceleraciones (X,Y,Z) así como los eventos de aceleraciones que le llegan al sistema (en /dev/input/event1 ).

Código:
 
(ejemplo antes de conseguir la calibración buena)
 
app_82@android:/ $ export PATH=/data/local/bin:$PATH
app_82@android:/ $ dmesg
x==1034 y==-188 z==470
<4>[ 30.906123] mma7660_interrupt.
<4>[ 30.935306] mma7660_delaywork_func.
<4>[ 30.939390] 0x03 0x29 0x36
<4>[ 30.944641] Gsensor x==1081 y==-141 z==470
<4>[ 30.970008] mma7660_interrupt.
<4>[ 30.995517] mma7660_delaywork_func.
<4>[ 30.996046] 0x04 0x2c 0x36
<4>[ 30.996514] Gsensor x==940 y==-188 z==470
<4>[ 31.002104] mma7660_interrupt.
<4>[ 31.025305] mma7660_delaywork_func.
<4>[ 31.029398] 0x03 0x2c 0x36
<4>[ 31.032646] Gsensor x==940 y==-141 z==470
<4>[ 31.036873] mma7660_interrupt.
<4>[ 31.066532] mma7660_delaywork_func.
<4>[ 31.070870] 0x03 0x2b 0x35
<4>[ 31.074177] Gsensor x==987 y==-141 z==517
<4>[ 31.098428] mma7660_interrupt.
<4>[ 31.125336] mma7660_delaywork_func.
* He estado comparando los valores de mi custom kernel con el original.
* Finalmente modificando la calibración en el driver mma7660.c he conseguido que los valores (X,Y,Z) que le llegan al sistema sean exactamente los mismos que el kernel original pero la pantalla no gira.

Por otro lado para poder hacer la calibración he aprendido a montar un entorno de desarrollo que funcione para poder analizar los eventos. En principio traté de montar el entorno de Ruby (conocido como Roboto en Android). Finalmente me funcionó con el entorno de python descargado desde :

http://python-for-android.googlecode...Android_r6.apk

Por otro lado este es el script (env.sh) que he utilizado para preparar el entorno:

#> . ./env.sh

Código:
 
export EXTERNAL_STORAGE=/mnt/sdcard/com.googlecode.python3forandroid
export PY34A=/data/data/com.googlecode.python3forandroid/files/python3
export PY4A_EXTRAS=$EXTERNAL_STORAGE/extras
PYTHONPATH=$EXTERNAL_STORAGE/extras/python3
PYTHONPATH=${PYTHONPATH}:$PY34A/lib/python3.2/lib-dynload
export PYTHONPATH
export TEMP=$EXTERNAL_STORAGE/extras/python3/tmp
export HOME=/sdcard
export PYTHON_EGG_CACHE=$TEMP
export PYTHONHOME=$PY34A
export LD_LIBRARY_PATH=$PY34A/lib
PATH=$PATH:$PYTHONHOME/bin
y este el el script modificado "Acelerometro.py" con el que he analizado los eventos del sistema generados por el acelerometro:

(detalle muy importante: para poder leer los eventos del acelerometro hemos de cambiar los permisos "chmod 666 input1" y luego desde /sdcard ejecutar "python3 ./Acelerometro.py" )

Código:
 
import struct 
from math import sqrt 
x = 0 
y = 0 
z = 0 
print("empezamos:")
secondsensorfile = "/dev/input/event1" 
#int, int, short, short, int 
fmt = 'iihhi' 
#open file in binary mode 
in_file = open(secondsensorfile,"rb")
event = in_file.read(16)
while event:  
  (time1,time2, type, code, value) = struct.unpack(fmt,event)  
  time = time2 / 1000.0  
  if type == 2 or type == 3:   
    if code == 0:    
       x = value   
    if code == 1:    
        y = value   
    if code == 2:    
        z = value  
  if type == 0 and code == 0:   
       sum = int(sqrt(x*x + y*y + z*z))   
       #print(time, x, y, z, sum)  
       print(x, y, z)
  event = in_file.read(16) 
  #print(time1,time2,type,code,value)
in_file.close()
Una vez ejecutemos el script :

app_82:> python3 ./Acelerometro.py

si todo va bien empezaremos a ver las tres coordenadas (X,Y,Z):

1081 141 0
1087 100 7
.....

Imagen de los valores(eventos del sistema) que tenía del kernel original y uno de los custom kernels (todavía sin calibrar)

http://dl.dropbox.com/u/74685364/Uti...lerometros.jpg




Un Saludo.

Última edición por jjb_wii Día 21/05/12 a las 09:49:48.
Responder Con Cita