Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Introduction to Android G-sensor

26,320 views

Published on

Published in: Technology, Education
  • Be the first to comment

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

×