Introduction to Android G-sensor
Upcoming SlideShare
Loading in...5
×
 

Introduction to Android G-sensor

on

  • 21,200 views

 

Statistics

Views

Total Views
21,200
Views on SlideShare
21,199
Embed Views
1

Actions

Likes
1
Downloads
112
Comments
0

1 Embed 1

http://www.verious.com 1

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Introduction to Android G-sensor Introduction to Android G-sensor Presentation Transcript

  • Introduction toG-Sesnsor and E-Compass Jiahe Jou 2, Dec., 2011
  • Outlines● Introduction ○ Sensor System● G-Sensor System ○ Java Application Layer ○ Java Framework Layer ○ JNI ○ Hardware Abstraction Layer ○ Linux Kernel ○ Setup G-Sensor Driver● Conclusion
  • Introduction Sensor System
  • Sensor System● Detect the environment to provide better user experience ○ Accelerometer ○ Magnetometer ○ Light Sensor ○ Temperature Meter● Application ○ Game feature ○ Rotate screen ○ E-compass
  • Sensor System● General architecture of sensor system
  • Sensor System● API ○ Provide a interface to get system sensor manager● Framework ○ Sensor manager service ○ Definitions of sensor, sensor event, event listener● JNI ○ Link the framework layer and HAL● HAL ○ The hardware foundation of Android
  • Sensor System● In more detail
  • G-SensorSystem Java Application Layer Java Framework Layer JNI HAL Linux Kernel Setup the G-Sensor driver
  • Java Application Layer● Implement a sensor application ○ Get sensor manager ○ Get a specific sensor ○ Register sensor event listener ... mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); mAccerlerometer = mSensorManager.getDefautSensor( Sensor.TYPE_ACCELEROMETER); mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_GAME); ...
  • Java Application Layer● Implement event listener ... // Called when the sensor accuracy changed public void onAccuracyChanged(int sensor, int accuracy){ // You can leave this function empty } ... // Called when the sensor value changed public void onSensorChanged(SensorEvent event{ ... Log.d(TAG, "onSensorChanged==> sensor: " + sensor + ", x: " + event.values[0] + ", y: " + event.values[1] + ", z: " + event.values[2]); … } ...
  • G-SensorSystem Java Application Layer Java Framework Layer JNI HAL Linux Kernel Setup the G-Sensor driver
  • Java Framework Layer● Sensor Manager ○ getDefautSensor(int type) ... public Sensor getDefaultSensor( int type){ // just return the 1st sensor List<Sensor> l = getSensorList(type); return l.isEmpty() ? null : l.get(0); } … ○ registerListener(SensorEventListener listener, Sensor sensor, int rate) ... public boolean registerListener( (SensorEventListener listener, Sensor sensor, int rate){ // Another function was return return registerListener(listener, sensor, rate, null); } …
  • Java Framework Layer ○ registerListener( (SensorEventListener listener, Sensor sensor, int rate, Handler handler) ■ Delegate a listener on a sensor ■ Lock the listening thread before sensor enabled ■ Enable the sensor ■ Unlock the listening thread ■ Start polling PS. Please refer to the Figure 7 in document
  • G-SensorSystem Java Application Layer Java Framework Layer JNI HAL Linux Kernel Setup the G-Sensor driver
  • JNI● Sensor Manager ○ Mapped to the sensor manager in framework layer ■ nativeClassInit() ○ Provide the native function interface, e.g.: ■ sensors_enable_sensor() ■ sensors_data_poll() PS. Please refer to the Figure 8 and Figure 9 in document
  • G-SensorSystem Java Application Layer Java Framework Layer JNI HAL Linux Kernel Setup the G-Sensor driver
  • Hardware Abstraction Layer● Located in /hardware/STSensors/*● Built on SensorBase.cpp ○ openInput(const char* inpuName) ○ Open input device for a given name when construction P.S. Please refer to the Figure 10 in document
  • Hardware Abstraction Layer● AccSensor ○ #define INPUT_SYSFS_PATH_ACC "/sys/class/i2c- adapter/i2c-4/4-0019/" ○ readEvents() ■ Get data from sensor event ■ Calibrate for real world P.S. Please refer to the Figure 12 in document
  • G-SensorSystem Java Application Layer Java Framework Layer JNI HAL Linux Kernel Setup the G-Sensor driver
  • Linux Kernel● User space communicate with kernel space by system call● Hardware drivers● i2c protocol used
  • Linux Kernel● General architecture from user space to hardware
  • Linux Kernel● i2c driver need implement four methods: ○ probe ■ Check the i2c functionality ■ Initialize the input status ■ Register the poll function ■ Create the sysfs interface ○ remove ■ Unregister the poll device ■ Shutdown the power ■ Remove sysfs interface ■ Free the memory ○ resume ○ suspend P.S. Please refer the Figure 16 and Figure 17 in document
  • Linux Kernel● lsm303dlh_acc_report_values() static void lsm303dlh_acc_report_values(struct lsm303dlh_acc_data *acc, int *xyz) { struct input_dev *input = acc->input_poll_dev->input; input_report_abs(input, ABS_X, xyz[0]); input_report_abs(input, ABS_Y, xyz[1]); input_report_abs(input, ABS_Z, xyz[2]); input_sync(input); } P.S. Please refer to the Figure 18 and Figure 19 in document
  • G-SensorSystem Java Application Layer Java Framework Layer JNI HAL Linux Kernel Setup the G-Sensor driver
  • Setup G-Sensor Driver● Let Linux kernel load the driver ○ innocomm_oracle_deconfig ○ KConfig ○ Makefile P.S. Please refer to Figure 21 in document● Setup regulator comsumer ○ board-oracle.c P.S. Please refer to Figure 22 in document● Setup the i2c between oracle board and chip ○ board-oracle-i2c.c P.S. Please refer to Figure 23 in document
  • Conclusion Conclusion
  • Conclusion● A top-down view: ○ Java application layer ○ Java framework layer ○ HAL ○ Linux kernel● E-Compass system is as same as the G- Sensor system