成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android振動器(Vibrator)系統詳解

移動開發 Android
Android振動器系統是Android其他系統中相對簡單的系統。 振動器系統用來啟動電話的震動功能。比如鬧鐘、振動模式都需要用到振動器系統。

平臺 MTK6573

Android 振動器系統架構

  1. 驅動層
  2. 硬件抽象層
  3. JNI框架層
  4. Java應用層

一、驅動層

Android修改、新增Linux內核文件

/kernel/drivers/staging/android/timed_output.h
/kernel/drivers/staging/android/timed_output.c

timed_output.h 定義了timed_output_dev 結構體

  1. struct timed_output_dev { 
  2.     const char  *name; 
  3.  
  4.     /* enable the output and set the timer */ 
  5.     void    (*enable)(struct timed_output_dev *sdev, int timeout); 
  6.  
  7.     /* returns the current number of milliseconds remaining on the timer */ 
  8.     int     (*get_time)(struct timed_output_dev *sdev); 
  9.  
  10.     /* private data */ 
  11.     struct device   *dev; 
  12.     int     index; 
  13.     int     state; 
  14. }; 

timed_output.c 實現了該結構體,使用函數timed_output_dev_register實現注冊,使用timed_output_dev_unregister實現注銷。

  1. int timed_output_dev_register(struct timed_output_dev *tdev) 
  2.     int ret; 
  3.  
  4.     if (!tdev || !tdev->name || !tdev->enable || !tdev->get_time) 
  5.         return -EINVAL; 
  6.  
  7.     ret = create_timed_output_class(); 
  8.     if (ret < 0
  9.         return ret; 
  10.  
  11.     tdev->index = atomic_inc_return(&device_count); 
  12.     tdev->dev = device_create(timed_output_class, NULL, 
  13.         MKDEV(0, tdev->index), NULL, tdev->name); 
  14.     if (IS_ERR(tdev->dev)) 
  15.         return PTR_ERR(tdev->dev); 
  16.  
  17.     ret = device_create_file(tdev->dev, &dev_attr_enable); 
  18.     if (ret < 0
  19.         goto err_create_file; 
  20.  
  21.     dev_set_drvdata(tdev->dev, tdev); 
  22.     tdev->state = 0
  23.     return 0
  24.  
  25. err_create_file: 
  26.     device_destroy(timed_output_class, MKDEV(0, tdev->index)); 
  27.     printk(KERN_ERR "timed_output: Failed to register driver %s\n"
  28.             tdev->name); 
  29.  
  30.     return ret; 
  31. EXPORT_SYMBOL_GPL(timed_output_dev_register); 
  32.  
  33. void timed_output_dev_unregister(struct timed_output_dev *tdev) 
  34.     device_remove_file(tdev->dev, &dev_attr_enable); 
  35.     device_destroy(timed_output_class, MKDEV(0, tdev->index)); 
  36.     dev_set_drvdata(tdev->dev, NULL); 
  37. EXPORT_SYMBOL_GPL(timed_output_dev_unregister); 

驅動實現移植

以MTK 6573平臺為例 

./mediatek/platform/mt6573/kernel/drivers/vibrator/vibrator.c

操作設備

首先打開手機調試,連接USB,執行adb shell,進入/sys/devices/timed_output/vibrator/

執行 echo "10000" enable 發現手機在震動

  1. # echo "10000" enable 
  2. echo "10000" enable 
  3. 10000 enable 

執行 cat enable 可以查看當前震動時間剩余數:

  1. # cat enable 
  2. cat enable 
  3. 0 

二、硬件抽象層

Android 封裝了對底層驅動的調用,成為硬件抽象層。

/hardware/libhardware_legacy/vibrator/vibrator.c

  1. int vibrator_on(int timeout_ms) 
  2.     /* constant on, up to maximum allowed time */ 
  3.     return sendit(timeout_ms); 
  4.  
  5. int vibrator_off() 
  6.     return sendit(0); 

三、 JNI框架層

Android JNI框架層是方便Java調用C/C++方法。

./frameworks/base/services/jni/com_android_server_VibratorService.cpp

  1. namespace android 
  2.  { 
  3.   
  4.  static void vibratorOn(JNIEnv *env, jobject clazz, jlong timeout_ms) 
  5.  { 
  6.      // LOGI("vibratorOn\n"); 
  7.      vibrator_on(timeout_ms); 
  8.  } 
  9.  static void vibratorOff(JNIEnv *env, jobject clazz) 
  10.  { 
  11.      // LOGI("vibratorOff\n"); 
  12.      vibrator_off(); 
  13.  } 
  14.  static JNINativeMethod method_table[] = { 
  15.      { "vibratorOn""(J)V", (void*)vibratorOn }, 
  16.      { "vibratorOff""()V", (void*)vibratorOff } 
  17.  }; 
  18.  int register_android_server_VibratorService(JNIEnv *env) 
  19.  { 
  20.      return jniRegisterNativeMethods(env, "com/android/server/VibratorService"
  21.              method_table, NELEM(method_table)); 
  22.  } 
  23. }; 

四、Java應用層

這層包括Java 應用的調用,Android系統服務Java層

./frameworks/base/services/java/com/android/server/VibratorService.java

責任編輯:徐川 來源: OSChina
相關推薦

2021-09-07 08:49:35

Android

2013-01-06 13:06:02

2010-01-28 14:35:21

Android系統信息

2010-03-31 14:57:23

CentOS系統

2010-01-28 17:18:08

Android模擬器s

2011-06-01 10:48:28

Android系統

2010-01-25 14:13:36

Android菜單系統

2011-05-04 09:48:14

2011-05-05 14:44:43

SurfaceFlinSurfaceActivity

2023-03-23 09:33:22

Android移動開發

2009-12-23 10:27:22

vi編輯器

2011-05-16 09:27:14

Android 3.1谷歌

2013-11-05 11:25:21

Android 4.4系統詳解

2009-12-16 16:17:17

服務器遠程監控系統

2012-11-28 10:46:26

2014-07-24 09:11:34

2017-01-11 19:05:45

AndroidAndroid Loa詳解

2013-11-14 16:50:08

2014-07-28 10:09:30

Android

2011-05-27 15:02:15

Android ListView
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产免费xxx | 羞羞免费网站 | 黄色免费观看网站 | 国产一区二区三区四区 | 久久久久亚洲精品 | 欧美一级电影免费 | а√中文在线8 | 亚洲一区二区三区乱码aⅴ 四虎在线视频 | 欧美亚洲一级 | 亚洲成av人影片在线观看 | 亚洲 中文 欧美 日韩 在线观看 | 国产亚洲久 | 韩国av电影网 | 久久夜色精品国产 | 亚洲电影专区 | 玖玖综合网 | 国产免费一区二区三区免费视频 | 久操国产 | 毛片网在线观看 | 国产精品美女久久久久久免费 | 国产黄色大片 | 成人av一区二区亚洲精 | 羞羞色影院 | 免费午夜电影 | 日本三级日产三级国产三级 | 亚洲欧美日韩在线 | 欧美精品在线一区 | 天堂中文av| 国产视频久久久 | 久草网站 | 成人免费观看男女羞羞视频 | 日韩小视频在线 | 中文字幕日韩在线观看 | 精品视频在线观看 | 国产亚韩 | 日本中文在线视频 | 日韩久久久久 | www.国产精| 亚洲成人午夜电影 | 精品免费国产视频 | 国产精品美女久久久久久久网站 |