google-code-export / omnia2droid

Automatically exported from code.google.com/p/omnia2droid
1 stars 0 forks source link

b7610: some sensors need calibration before use #29

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
What steps will reproduce the problem?
1. Open one game that use accelerometer
2. Try to game and see it.
Example: Papi Jump, Extreme Droid Jump

What version of the product are you using? On what operating system?
beta1 1.18 12:35 512version
Android beta1

Original issue reported on code.google.com by nencio...@alice.it on 20 Jan 2011 at 8:05

GoogleCodeExporter commented 9 years ago
accelerometer is not supported (yet) so - of course - those games don´t work 
yet :)

Original comment by aleo...@gmail.com on 20 Jan 2011 at 8:10

GoogleCodeExporter commented 9 years ago

Original comment by elbee1...@gmail.com on 20 Jan 2011 at 9:20

GoogleCodeExporter commented 9 years ago
Accelerometer chip is one of these 
http://www.kionix.com/accelerometers/accelerometer-KXSD9.html

Original comment by vabb...@gmail.com on 7 Feb 2011 at 4:39

GoogleCodeExporter commented 9 years ago
supported on kernel level: 
http://o2droid.phj.hu/trac/browser/kern_oII/drivers/sensor/accel

but not yet on Android level ...

Original comment by elbee1...@gmail.com on 7 Feb 2011 at 8:24

GoogleCodeExporter commented 9 years ago
vabb.. you have info about what chips are in our phones, i would like to invite 
you to  write or help writing a wiki article containing the chipnames with 
function and links. This would be a nice base for documenting the differences 
between I8000 B7610 I920 and other omnia like phones. Those differences are 
important to know to include (extra) support for these phones. You can contact 
me at my "nickname"@gmail.com.

Original comment by elbee1...@gmail.com on 8 Feb 2011 at 10:08

GoogleCodeExporter commented 9 years ago
Elbee... I better specialise in hardware than software. I have a professional 
camera with macro lens and flash which helped me take the photographs in the 
B7610 Teardown thread. 
http://www.modaco.com/content/b7610-omnia-pro-b7610-modaco-com/331038/b7610-hard
ware-teardown/  I will update this and the links to datasheets there in as I 
find them. Some are hard to identify as markings are poor. I probably need to 
take more photos. Happy to help with the Wiki. 

Original comment by vabb...@gmail.com on 8 Feb 2011 at 10:17

GoogleCodeExporter commented 9 years ago
so with rev94 the orientation seems to work .... mostly .-)
at least on the b7610 it works excactly against excpetect:

turn the phone clockwise 90° will switch to orientation landscape
but than it is 'upside down'

turn again 90° (so phone is upside down) turns back to portrait.

how can i fix that?

Original comment by mosclamer on 3 Mar 2011 at 5:17

GoogleCodeExporter commented 9 years ago
should be -90° (270°) landscape
and than 0° (started at -90°) potrait

Original comment by mosclamer on 3 Mar 2011 at 5:40

GoogleCodeExporter commented 9 years ago
"should be -90° (270°) landscape
and than 0° (started at -90°) potrait"
how to change config?

Original comment by htdu...@gmail.com on 4 Mar 2011 at 8:30

GoogleCodeExporter commented 9 years ago
installed latest (20110303) update from site (rev93) on my i8000 and when 
device turned -90 screen turns ok, when device turned back to 0 screen turns ok 
(after a while). 90 and 180 device turn doesnt do anything. All this in home 
screen.

rev94 not tried yet ... (played abduction, nice but only sound effects, no 
sound track)  

Original comment by elbee1...@gmail.com on 4 Mar 2011 at 10:07

GoogleCodeExporter commented 9 years ago
Cant find an i8000 tear-down as good as my B7610 one to compare, but it is most 
likely that Printed Circuit Board design between the two phones has meant that 
the accelerometer is mounted 180 degrees differently.

Strange that the Compass isn't working as it is the same sensor that has the 
same I2C addressing.

Original comment by vabb...@gmail.com on 4 Mar 2011 at 3:52

GoogleCodeExporter commented 9 years ago
UPDATE. Compass IS working (B7610)! ..but it's 90 degrees out. Used Compass 
App. Remember to calibrate your device. 
http://www.s3sensor.com/en/s3/calibration/recalibrate/index.html

Original comment by vabb...@gmail.com on 4 Mar 2011 at 4:28

GoogleCodeExporter commented 9 years ago
strange - i have tried 4 different comapss apps and some sensor-tools (super 
compass,smart compass,compass & level,(catch.com) compass and sensotest & plot, 
Z-Device test, SensorInfo and many calibrations ... no reaction.
what kernel do you use? the one for I8000?

Original comment by mosclamer on 4 Mar 2011 at 5:15

GoogleCodeExporter commented 9 years ago
Mosci, Iupdated with your latest kernel from the7610 keymapping issue. Compass 
is catch v2.0 first I tried. On correct calibration, phone vibrated and compass 
worked.

Original comment by vabb...@gmail.com on 4 Mar 2011 at 5:34

GoogleCodeExporter commented 9 years ago
still strange ... but i'm happy for you :-)
it vibrates every time if i doing calibration - but still don't work.
heres my logcat during calibration ... looks good in the end ...
but again ... compass is not moving

I/Compass ( 2869): Registering Sensor Event Listener for ShakeSensor
E/SensorManager( 2869): registerListener 1:BMA150 delay:120
D/Sensors ( 1930): sensors_control_activate active=00000009 sensor=00000002 
new_sensors=b changed=2
W/Sensors ( 1930): Accelerometer opend
I/Sensors ( 1930): set AK daemon delay=60 fd=125
E/SensorManager( 2869): registerListener: 
com.apksoftware.compass.ShakeSensor@43fc4050
I/Sensors ( 2869): sensors_data_delay handle=1 delay=120 mMinDelay=60
I/Compass ( 2869): Shake 1/4 detected.
I/Compass ( 2869): Shake 2/4 detected.
I/Compass ( 2869): Shake 3/4 detected.
I/Compass ( 2869): Shake 4/4 detected.
I/Compass ( 2869): Unregistering Sensor Event Listener for ShakeSensor
E/SensorManager( 2869): unregisterListener: 
com.apksoftware.compass.ShakeSensor@43fc4050
I/Sensors ( 2869): sensors_data_delay handle=1 delay=2147483647 mMinDelay=60
D/Sensors ( 1930): sensors_control_activate active=0000000b sensor=00000002 
new_sensors=9 changed=2
W/Sensors ( 1930): Accelerometer closed
I/Sensors ( 1930): set AK daemon delay=60 fd=77
I/Compass ( 2869): Calibration is complete.

Original comment by mosclamer on 4 Mar 2011 at 5:47

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
Mosci, using your update, I calibrated compass via GPS Status app. After GPS 
fix, my heading according to compass, equals heading via GPS. So it is working.

Update: Heading means.. 90 degrees mismatch indeed. Was to quick with my 
conclusion

Original comment by erikcas1972@gmail.com on 4 Mar 2011 at 7:37

GoogleCodeExporter commented 9 years ago
Where are the alignment constants stored in Linux? There must be a way of 
telling the system which way the chip is aligned in the phone so that it works 
correctly. 

I am thinking that with the B7610 the Accelerometer is aligned 180 degrees 
different to i8000 and the compass is +90 degrees different.

Original comment by vabb...@gmail.com on 7 Mar 2011 at 8:53

GoogleCodeExporter commented 9 years ago
maybe stored on filesystem, but maybe in compiled java, we dont have source for 
that?

maybe patching the source is easier, but you have to understand the chip.

maybe debug kernel with uncommented gprintk function in 
http://o2droid.phj.hu/trac/browser/kern_oII/drivers/sensor/accel/kxsd9_2042.h 
can give some more info in dmesg what acc values need to be corrected. After 
this, patch is walk in the park?

Original comment by elbee1...@gmail.com on 7 Mar 2011 at 10:55

GoogleCodeExporter commented 9 years ago
for updating the compatibility section on 
http://code.google.com/p/omnia2droid/wiki/Features
(working sensors on i8000: orientation/accelometer, magnetic/compass, light, 
temperature)

- what sensors work (out off the box) for B7610?
- what sensors have what kind of "bug" (eg screen upside down after -90 turn)?
- what sensors work after calibration, and how to do this calibration?

Original comment by elbee1...@gmail.com on 9 Mar 2011 at 11:53

GoogleCodeExporter commented 9 years ago

Original comment by elbee1...@gmail.com on 9 Mar 2011 at 11:56

GoogleCodeExporter commented 9 years ago
@vabbot: how alignment constants are stored in Android can maybe be found by 
making a filesystem copy of android before and after calibration.  

@mosclaimer: is there an easy way to compare two filesets with 
directories/files on unix? maybe a script which makes a hash (md5 or sha) of 
all files and compare those outputs? maybe it can be done on live android/linux 
with adb shell (saves coping, but maybe hash program has to be compiled for 
s3c6410 first)?

Original comment by elbee1...@gmail.com on 9 Mar 2011 at 12:12

GoogleCodeExporter commented 9 years ago
Elbee

B7610
Light sensor works out of the box. Accelerometer chip is aligned 180deg 
different in the phone, so on 'GPS status' APP, tipping phone UP shows as DOWN 
and LEFT shows as RIGHT etc.

Compass Chip appears to be aligned -90deg different. After calibration, 
pointing the phone SOUTH, EAST is reported.

Original comment by vabb...@gmail.com on 9 Mar 2011 at 12:14

GoogleCodeExporter commented 9 years ago
@vic: thx, what about 3rd question, can the two problems be fixed by 
calibrating apps, how to do this, and is calibration reboot persistent?

and even if we find where/how calibration info is stored, is it usefull to use 
this as alternative for using calibration app once (people have diff 
locations/magnetic readings)? 

Original comment by elbee1...@gmail.com on 9 Mar 2011 at 12:41

GoogleCodeExporter commented 9 years ago
Elbee I don't know for linux but in windhoze winmerge can be used for 
comparison. Will compare two given filesystems tonight when I'm home. If 
somebody not already did in the meantime. 

Original comment by erikcas1972@gmail.com on 9 Mar 2011 at 4:54

GoogleCodeExporter commented 9 years ago
I dont think calibration can make this sort of correction. This is something 
that is set at design build of a piece of hardware. A Chip on a circuit board 
can usually be aligned in one of four ways, plus upside down. this is usually 
set by the CAD software which sets the optimum layout for ease of manufacture.

The Accelerometer does not appear to need calibrating as its stable,dependent 
only on gravity.

I think this has something to do with the sensors 'absolute parameters' This 
Article https://github.com/alankila/Junk/tree/master/akmd/ implies that 
'libsensors' has a lot to do with it.

Original comment by vabb...@gmail.com on 9 Mar 2011 at 4:57

Attachments:

GoogleCodeExporter commented 9 years ago
you could be right :) so you think it will not worth spending energy ?

Original comment by erikcas1972@gmail.com on 9 Mar 2011 at 5:14

GoogleCodeExporter commented 9 years ago
No far from it ;) there must be parameters somewhere which will adjust the 
sensors to fit!  but where ??  Linux kernel or Android system?

Original comment by vabb...@gmail.com on 9 Mar 2011 at 5:23

GoogleCodeExporter commented 9 years ago
made a i8000 kernel (+mods) with some extra sensor kernelmessages for 
debugging. Who would like to test it on a B7610 and give back some readings?

Attached a zImage and an o2db2update.tgz file with modules. Dont know if the 
modules are needed to escape magic errors, but i used them. This image/module 
set does not have the mosci patches, so you may want to use his latest update 
to recover.

The extra kernel messages form the accelrometer and compas can be read with 
"adb shell dmesg" or "adb shell dmesg -c" last one clears buffer after 
printing, so you can see the delta.

I did these tests with accelerometer (tilted in home screen)
  Normal (cube under and front)
  [  727.034961] kxsd9_workqueue_func(269): Read value [x=2047, y=2847, z=1984]
  [  727.035003] kxsd9_workqueue_func(270): Read value [ax=11, ay=-255, az=32]

  -90 deg (cube right and front)
  [  730.036061] kxsd9_workqueue_func(269): Read value [x=1223, y=2040, z=2063]
  [  730.036219] kxsd9_workqueue_func(270): Read value [ax=285, ay=13, az=5]

I am interested in the B7610 values so i can patch/test it.

Compass logging should be on too, but not tested it myself, just use a compass 
app and note the values for North/South/East/West.

Original comment by elbee1...@gmail.com on 10 Mar 2011 at 8:12

Attachments:

GoogleCodeExporter commented 9 years ago
PS: you can use OSMonitor from Android market if you dont like working with 
adb,use dmesg as logtype in OSMonitor Option screen. 

Original comment by elbee1...@gmail.com on 10 Mar 2011 at 8:16

GoogleCodeExporter commented 9 years ago
Will be home in an hour,will test and post results

Original comment by erikcas1972@gmail.com on 10 Mar 2011 at 3:32

GoogleCodeExporter commented 9 years ago
Output dmesg:
Phone right up in front of mee, facing screen (menu and power under)

[  278.896140] kxsd9_workqueue_func(269): Read value [x=2083, y=1200, z=1953]
[  278.896303] kxsd9_workqueue_func(270): Read value [ax=-1, ay=293, az=42]

+ ~90 (landscape, clockwise) (menu and power button left)

[  349.411131] kxsd9_workqueue_func(269): Read value [x=1311, y=2012, z=1760]
[  349.411295] kxsd9_workqueue_func(270): Read value [ax=256, ay=22, az=106]

+ ~180(phone upside down) (menu and power button up)

[  385.916176] kxsd9_workqueue_func(269): Read value [x=2111, y=2814, z=1888]
[  385.916340] kxsd9_workqueue_func(270): Read value [ax=-10, ay=-244, az=64]

+ ~270 (landscape upside down, clockwise) (menu and power button right)

[  416.421186] kxsd9_workqueue_func(269): Read value [x=2895, y=1959, z=1927]
[  416.421348] kxsd9_workqueue_func(270): Read value [ax=-271, ay=40, az=51]

  ~360/0 (clockwise, to right up again)

[  450.431151] kxsd9_workqueue_func(269): Read value [x=2048, y=1200, z=1891]
[  450.431314] kxsd9_workqueue_func(270): Read value [ax=10, ay=293, az=63]

Please note, as described is how I hold phone, not what I'm seeing on screen. 
Behaviour of screen is (offcourse) how we see it all on B7610.

degrees are not exact, I'm holding the phone near the degrees I put here.

Not able to calibrate a compass, my b7610 is freezing when I use buttons / keys.
I think I need patchfiles for that (if they work for 7610 together with mosci's 
patchfiles) so I can compile zImage and module-update, then maybe device won't 
freeze when touching buttons / keys

grtz Erik

Original comment by erikcas1972@gmail.com on 10 Mar 2011 at 6:36

GoogleCodeExporter commented 9 years ago
thx, looks promissing ... i think i can patch it ...

i'll make a compass diff so you or mosci can make a b7610 patched version to 
test the compas. i can make a patched version also, but takes some more time.

maybe i make a version with some wifi logging too (dont get your hopes up ... 
long way to go ...)

you rotated the phone in one plain only, can you collect some logging of 
"rolling" the phone in landscape and portrait?

Original comment by elbee1...@gmail.com on 10 Mar 2011 at 7:10

GoogleCodeExporter commented 9 years ago
testing compass now.. dont have to calibrate. but there is some more dmesg 
output, and I'm not sure if it is correct. I suspect some interfence of my 
laptops magnetic field.

and I have to test one by one because of freezing.

for accelerometer, I will also test with surface horizontal, screen up and down 
:)

grtz Erik

Original comment by erikcas1972@gmail.com on 10 Mar 2011 at 7:17

GoogleCodeExporter commented 9 years ago
Compass --> 4 directions, complete adb shell -c dmesg ouput

much output :)

see file attached.

Now watch some Ajax, during break of game I will collect and post accelero, 
with phone lying on table

Original comment by erikcas1972@gmail.com on 10 Mar 2011 at 7:51

Attachments:

GoogleCodeExporter commented 9 years ago
Elbee, here some more outputs in attached file, if you need more, or you don't 
understand the  device positions which I'm describing, please let me know (for 
positions maybe mail me @ cas at cas - online, so I can describe in dutch)

grtz Erik

Original comment by erikcas1972@gmail.com on 10 Mar 2011 at 8:39

Attachments:

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
accelerometer seems to be inverted for x and y values (not z values).

possible fix for b7610 flip while landscape: remove "-" sign at lines 258 and 
259 in 
http://o2droid.phj.hu/trac/browser/kern_oII/drivers/sensor/accel/kxsd9_2042.c 
(not tested yet)

Original comment by elbee1...@gmail.com on 10 Mar 2011 at 10:35

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
Elbee, lets give it a shot. Back to ubuntu, b)ack here in some minutes :

Original comment by erikcas1972@gmail.com on 10 Mar 2011 at 10:49

GoogleCodeExporter commented 9 years ago
Briljant Elbee!! It is working!! The screen is rotating right now. I will PM 
the file to Mosci @ his Modaco account, so he can, as project member, check and 
provide update!

Thanx!

Original comment by erikcas1972@gmail.com on 10 Mar 2011 at 11:06

GoogleCodeExporter commented 9 years ago
compass kernel log messages comparisson is not so clear :-(

but from code solution could be found in lines 622 to 627 of 
http://o2droid.phj.hu/trac/browser/kern_oII/drivers/sensor/compass/ak8973b.c

fastest way is some trail-and-error.

* switch the signs at lines 625 and 626 (3 combinations)
* don't switch x and y and switch the signs (4 combinations)

so get compiling ;-)

Original comment by elbee1...@gmail.com on 10 Mar 2011 at 11:23

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
And why not post corrected kxsd9_2042.c file here :)

pff was planning to go to sleep. oke here I go again :)

Original comment by erikcas1972@gmail.com on 10 Mar 2011 at 11:27

Attachments:

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
will look into this again tomorrow moring. I can't detect any changes whatever 
I do

Original comment by erikcas1972@gmail.com on 11 Mar 2011 at 1:55

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
send a mail with some examples

Original comment by elbee1...@gmail.com on 11 Mar 2011 at 7:35

GoogleCodeExporter commented 9 years ago
I've compiled kernel with attached file. Mosci's update is also applied to this 
file.
Should be placed in kern_oII/drivers/sensor/compass/
Compass is working right when holding vertical on my phone. 

Elbee, can it be tested?

Original comment by erikcas1972@gmail.com on 11 Mar 2011 at 2:42

Attachments:

GoogleCodeExporter commented 9 years ago
Vic reported the compass has a problem. East and West are ok but South and 
North are transposed. i.e the compass needle rotates in the wrong direction 
when the phone is turned.

so maybe only negating x and y values and leaving the x=y switch like i8000 in 
compass source?

Original comment by elbee1...@gmail.com on 12 Mar 2011 at 6:49