Introduction to Android G-sensor

25,482 views
25,092 views

Published on

Published in: Technology, Education
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
25,482
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
178
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Introduction to Android G-sensor

  1. 1. Introduction toG-Sesnsor and E-Compass Jiahe Jou 2, Dec., 2011
  2. 2. Outlines● Introduction ○ Sensor System● G-Sensor System ○ Java Application Layer ○ Java Framework Layer ○ JNI ○ Hardware Abstraction Layer ○ Linux Kernel ○ Setup G-Sensor Driver● Conclusion
  3. 3. Introduction Sensor System
  4. 4. Sensor System● Detect the environment to provide better user experience ○ Accelerometer ○ Magnetometer ○ Light Sensor ○ Temperature Meter● Application ○ Game feature ○ Rotate screen ○ E-compass
  5. 5. Sensor System● General architecture of sensor system
  6. 6. 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
  7. 7. Sensor System● In more detail
  8. 8. G-SensorSystem Java Application Layer Java Framework Layer JNI HAL Linux Kernel Setup the G-Sensor driver
  9. 9. 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); ...
  10. 10. 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]); … } ...
  11. 11. G-SensorSystem Java Application Layer Java Framework Layer JNI HAL Linux Kernel Setup the G-Sensor driver
  12. 12. 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); } …
  13. 13. 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
  14. 14. G-SensorSystem Java Application Layer Java Framework Layer JNI HAL Linux Kernel Setup the G-Sensor driver
  15. 15. 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
  16. 16. G-SensorSystem Java Application Layer Java Framework Layer JNI HAL Linux Kernel Setup the G-Sensor driver
  17. 17. 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
  18. 18. 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
  19. 19. G-SensorSystem Java Application Layer Java Framework Layer JNI HAL Linux Kernel Setup the G-Sensor driver
  20. 20. Linux Kernel● User space communicate with kernel space by system call● Hardware drivers● i2c protocol used
  21. 21. Linux Kernel● General architecture from user space to hardware
  22. 22. 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
  23. 23. 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
  24. 24. G-SensorSystem Java Application Layer Java Framework Layer JNI HAL Linux Kernel Setup the G-Sensor driver
  25. 25. 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
  26. 26. Conclusion Conclusion
  27. 27. 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

×