注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
daisukeyu的个人空间 https://home.eeworld.com.cn/space-uid-410345.html [收藏] [复制] [分享] [RSS]
日志

Android HAL 开发 (5)

热度 1已有 668 次阅读2012-9-17 11:36 |个人分类:ARM11|

上一章介绍了直接调用Service来操作硬件的方法,如果我们再优化一下结构,通过一个Manager来调
用这个Service的方法,可能会更好。这样Service就可以跑在后台,由于这时候service和manager是
两个进程,所以只能通过IPC来进行通信。我们在上一篇看到
public final class LedService extends ILedService.Stub { }, ILedService.Stub就是
ILedService.aidl由aidl工具自动生成的类。
我们现在看看manager是如何实现的:
frameworks/base/core/java/mokoid/hardware/ILedService.aidl
package mokoid.hardware;
  interface ILedService {
     boolean setOn(int led);
     boolean setOff(int led);
 }
 该aidl文件最后能被aidl工具自动生成ILedService.java文件,提供了remotable的LedService可用
的接口setOn和setOff.
frameworks/base/core/java/mokoid/hardware/LedManager.java
public class LedManager {
     private static final String TAG = "LedManager";
     private ILedService mLedService;
      public LedManager() {
              mLedService = ILedService.Stub.asInterface(
                             ServiceManager.getService("led"));
      if (mLedService != null) {
             Log.i(TAG, "The LedManager object is ready.");
     }
     }
      public boolean LedOn(int n) {
         boolean result = false;
          try {
             result = mLedService.setOn(n);
         } catch (RemoteException e) {
             Log.e(TAG, "RemoteException in LedManager.LedOn:", e);
         }
         return result;
     }
      public boolean LedOff(int n) {
         boolean result = false;
          try {
            result = mLedService.setOff(n);
         } catch (RemoteException e) {
             Log.e(TAG, "RemoteException in LedManager.LedOff:", e);
         }
         return result;
     }
 }
发表评论 评论 (2 个评论)
回复 sinpo1984 2012-12-6 13:55
支持,值得学习一下!
回复 轻轻 2014-6-4 13:59
好文,分享了,支持一下

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章