Hello

I have made the following minimal code to read Android sensors
it  looks to work even if sensor data are sometime wrong  and
ALooper_pollAll  seems to go in timeout

I have a problem with the sensor  time
in android sensor.h it is defined as a 64bit, Nanoseconds from a ("date")
I read this value with J as two 32bit integers
  eTimeN  =: memr event,16,1,4
  eTimeS  =: memr event,20,1,4

is it possible to read it as a 64bit ? or can I cast the two 32Bit into a
64 bit J value ?

Thanks in advance
Paolo

Code:

require 'dll'

smgr   =: 'libandroid.so ASensorManager_getInstance > x ' cd ''
looper =: 'libandroid.so ALooper_forThread > x i' cd  < 0
Ident =: 3

ASENSOR_TYPE_ACCELEROMETER  =: 1
ASENSOR_TYPE_MAGNETIC_FIELD =: 2
ASENSOR_TYPE_GYROSCOPE      =: 4
ASENSOR_TYPE_LIGHT          =: 5
ASENSOR_TYPE_PROXIMITY      =: 8

sensorId =: 4


queue =: 'libandroid.so ASensorManager_createEventQueue > x x x i x x ' cd
smgr; looper ; Ident;(0);(0)
sensor=: 'libandroid.so ASensorManager_getDefaultSensor > x x i' cd smgr;
sensorId

eventRate =: 'libandroid.so ASensor_getMinDelay > i x ' cd < sensor
er1 =: 'libandroid.so ASensorEventQueue_registerSensor > i x x i i ' cd
queue ; sensor;eventRate;eventRate
er3 =: 'libandroid.so ASensorEventQueue_enableSensor > i x x ' cd queue ;
sensor
er2 =: 'libandroid.so ASensorEventQueue_setEventRate > i x x i ' cd queue ;
sensor; eventRate

event    =: mema 104 + 152
numEvent =: 1
data3ax =: _1
getsnsr =: verb define
 for. i. 30  do.
  idntLoop =: 'libandroid.so ALooper_pollAll > i i x x x ' cd 1000;0;0;0
  evtRead  =: 'libandroid.so ASensorEventQueue_getEvents > i x x i ' cd
queue;event; numEvent
  if. evtRead > 0 do.
    evtVers  =: memr event, 0,1,4
    evtSens  =: memr event, 4,1,4
    evtType  =: memr event, 8,1,4
    eTimeN  =: memr event,16,1,4
    eTimeS  =: memr event,20,1,4
    data3raw =: memr event,24,3,4  NB. sensor values
    data3bin =: 2 ic data3raw
    data3ax  =: _1 fc data3bin         NB. J floating point
    break.
  end.
 end.
)

getsnsr 0

memf event
'libandroid.so ASensorEventQueue_disableSensor > n x x ' cd queue ; senor
'libandroid.so ASensorManager_destroyEventQueue > n x x ' cd smgr ; queue
'libandroid.so ALooper_release > n x ' cd < looper
cdf ''


-- 
We are made of star dust
(Carl Sagan)
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to