无网不进  
软硬件开发

Android Frameworks层提供了硬件服务,Android系统APP可以调用这些硬件服务,进而完成硬件的控制,实现应有的功能。接着上一篇,这一篇要在frameworks层为应用提供java接口的硬件服务。cd到frameworks/base/core/java/android/os目录,添加 IGpioService.aidl:

 

[javascript] view plain copy
 
  1. package android.os;    
  2.   
  3. interface IGpioService {    
  4. void setVal(int val);    
  5. int getVal();    
  6. }    

我们通过setVal去设置LED的亮灭,getVal一直是省略的

 

打开frameworks/base下的Android.mk,修改LOCAL_SRC_FILES,增加:

 

[javascript] view plain copy
 
  1. core/java/android/os/IGpioService.aidl \  

编译IGpioService.aidl接口:

 

 

[javascript] view plain copy
 
  1. make TARGET_PRODUCT=am335xevm_sk -j8 OMAPES=4.x  

 

生成:

Install: out/target/product/am335xevm_sk/system/framework/framework.jar

成功后cd到frameworks/base/services/java/com/android/server目录,添加GpioService.java文件:

 

 

[javascript] view plain copy
 
  1. package com.android.server;    
  2. import android.content.Context;    
  3. import android.os.IGpioService;    
  4. import android.util.Slog;    
  5.   
  6. public class GpioService extends IGpioService.Stub {    
  7.     private static final String TAG = "GpioService";    
  8.     GpioService() {    
  9.         init_native();    
  10.     }    
  11.     public void setVal(int val) {    
  12.         setVal_native(val);    
  13.     }       
  14.     public int getVal() {    
  15.         return getVal_native();    
  16.     }    
  17.         
  18.     private static native boolean init_native();    
  19.     private static native void setVal_native(int val);    
  20.     private static native int getVal_native();    
  21. };    

修改当前目录下的SystemServer.java文件,在ServerThread::run中增加GpioService:

 

 

[javascript] view plain copy
 
  1. try {  
  2.     Slog.i(TAG, "Recognition Service");  
  3.     recognition = new RecognitionManagerService(context);  
  4. catch (Throwable e) {  
  5.     reportWtf("starting Recognition Service", e);  
  6. }  
  7.   
  8. try {  
  9.     Slog.i(TAG, "DiskStats Service");  
  10.     ServiceManager.addService("diskstats", new DiskStatsService(context));  
  11. catch (Throwable e) {  
  12.     reportWtf("starting DiskStats Service", e);  
  13. }  
  14.   
  15. try {  
  16.     Slog.i(TAG, "Gpio Service");  
  17.     ServiceManager.addService("gpio", new GpioService());  
  18. catch (Throwable e) {  
  19.     Slog.e(TAG, "Failure starting Gpio Service", e);  
  20. }  

编译GpioService:

 

[javascript] view plain copy
 
  1. make TARGET_PRODUCT=am335xevm_sk -j8 OMAPES=4.x  

 

生成:

[javascript] view plain copy
 
  1. Install: out/target/product/am335xevm_sk/system/framework/services.jar  

Frameworks层已经包含了我们编写的硬件服务,应用程序可以通过这些java接口访问硬件服务。

posted on 2018-01-10 13:45  无网不进  阅读(562)  评论(0)    收藏  举报