Introduction to Android G-sensor

  • 20,947 views
Uploaded on

 

More in: Technology , Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
20,947
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
117
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Introduction toG-Sesnsor and E-Compass Jiahe Jou 2, Dec., 2011
  • 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. Introduction Sensor System
  • 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. Sensor System● General architecture of sensor system
  • 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. Sensor System● In more detail
  • 8. G-SensorSystem Java Application Layer Java Framework Layer JNI HAL Linux Kernel Setup the G-Sensor driver
  • 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. 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. G-SensorSystem Java Application Layer Java Framework Layer JNI HAL Linux Kernel Setup the G-Sensor driver
  • 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. 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. G-SensorSystem Java Application Layer Java Framework Layer JNI HAL Linux Kernel Setup the G-Sensor driver
  • 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. G-SensorSystem Java Application Layer Java Framework Layer JNI HAL Linux Kernel Setup the G-Sensor driver
  • 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. 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. G-SensorSystem Java Application Layer Java Framework Layer JNI HAL Linux Kernel Setup the G-Sensor driver
  • 20. Linux Kernel● User space communicate with kernel space by system call● Hardware drivers● i2c protocol used
  • 21. Linux Kernel● General architecture from user space to hardware
  • 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. 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. G-SensorSystem Java Application Layer Java Framework Layer JNI HAL Linux Kernel Setup the G-Sensor driver
  • 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. Conclusion Conclusion
  • 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