现在的位置: 首页 > 综合 > 正文

Android HAL实现的三种方式(1) – 基于JNI的简单HAL设计

2013年08月01日 ⁄ 综合 ⁄ 共 1168字 ⁄ 字号 评论关闭

现在在Android上的HAL开发总的来说还是随意性比较大,Android也并没有规范好一个具体的框架,下面我将根据Jollen的Mokoid工程,自己做了一些改动,分别给大家介绍一下三种实现方式。

这篇先介绍最简单的一种实现方式 - Java应用程序直接调用JNI库。

由于JNI技术的存在,在Android中,java程序能够很好的调用C/C++库。我们这里设计一个简单的HAL,一共只有三层: HAL stub <-> JNI 库 <-> JAVA应用程序。

我们现看看HAL stub的代码:

  1. int led_device_close(struct hw_device_t* device) 
  2.     struct led_control_device_t* ctx = (struct led_control_device_t*)device; 
  3.     if (ctx) { 
  4.         free(ctx); 
  5.     } 
  6.     return 0; 
  7.  
  8. int led_on(struct led_control_device_t *dev, int32_t led) 
  9.     LOGI("LED Stub: set %d on.", led); 
  10.     return 0; 
  11.  
  12. int led_off(struct led_control_device_t *dev, int32_t led) 
  13.     LOGI("LED Stub: set %d off.", led); 
  14.     return 0; 
  15.  
  16. static int led_device_open(const struct hw_module_t* module, const char* name, 
  17.         struct hw_device_t** device)  
  18.     struct led_control_device_t *dev; 
  19.  
  20.     dev = (struct led_control_device_t *)malloc(sizeof(*dev)); 
  21.     memset(dev, 0, sizeof(*dev)); 
  22.  
  23.     dev->common.tag =  HARDWARE_DEVICE_TAG; 
  24.     dev->common.version = 0; 
  25.     dev->common.module = module; 
  26.     dev->common.close = led_device_close; 
  27.  
  28.     dev->set_on = led_on; 
  29.     dev->set_off = led_off; 
  30.  
  31.     *device = &dev->common; 
  32.  
  33. success: 
  34.     return 0; 

抱歉!评论已关闭.