设为首页 加入收藏

TOP

JNI对HAL的封装(四)
2013-04-24 12:13:39 来源: 作者: 【 】 浏览:1161
Tags:JNI HAL 封装

 

  struct Devices {

  light_device_t* lights[LIGHT_COUNT];

  };

  static light_device_t* get_device(hw_module_t* module, char const* name)

  {

  int err;

  hw_device_t* device;

  err = module->methods->open(module, name, &device);

  if (err == 0) {

  return (light_device_t*)device;

  } else {

  return NULL;

  }

  }

  static jint init_native(JNIEnv *env, jobject clazz)

  {

  int err;

  hw_module_t* module;

  Devices* devices;

  devices = (Devices*)malloc(sizeof(Devices));

  err = hw_get_module(LIGHTS_HARDWARE_MODULE_ID, (hw_module_t const**)&module);

  if (err == 0) {

  devices->lights[LIGHT_INDEX_BACKLIGHT]

  = get_device(module, LIGHT_ID_BACKLIGHT);

  devices->lights[LIGHT_INDEX_KEYBOARD]

  = get_device(module, LIGHT_ID_KEYBOARD);

  devices->lights[LIGHT_INDEX_BUTTONS]

  = get_device(module, LIGHT_ID_BUTTONS);

  devices->lights[LIGHT_INDEX_BATTERY]

  = get_device(module, LIGHT_ID_BATTERY);

  devices->lights[LIGHT_INDEX_NOTIFICATIONS]

  = get_device(module, LIGHT_ID_NOTIFICATIONS);

  devices->lights[LIGHT_INDEX_ATTENTION]

  = get_device(module, LIGHT_ID_ATTENTION);

  devices->lights[LIGHT_INDEX_BLUETOOTH]

  = get_device(module, LIGHT_ID_BLUETOOTH);

  devices->lights[LIGHT_INDEX_WIFI]

  = get_device(module, LIGHT_ID_WIFI);

  } else {

  memset(devices, 0, sizeof(Devices));

  }

  return (jint)devices;

  }

  static void finalize_native(JNIEnv *env, jobject clazz, int ptr)

  {

  Devices* devices = (Devices*)ptr;

  if (devices == NULL) {

  return;

  }

  free(devices);

  }

  static void setLight_native(JNIEnv *env, jobject clazz, int ptr,

  int light, int colorARGB, int flashMode, int onMS, int offMS, int brightnessMode)

  {

  Devices* devices = (Devices*)ptr;

  light_state_t state;

  if (light < 0 || light >= LIGHT_COUNT || devices->lights[light] == NULL) {

  return ;

  }

  memset(&state, 0, sizeof(light_state_t));

  state.color = colorARGB;

  state.flashMode = flashMode;

  state.flashOnMS = onMS;

  state.flashOffMS = offMS;

  state.brightnessMode = brightnessMode;

  devices->lights[light]->set_light(devices->lights[light], &state);

  }

  static JNINativeMethod method_table[] = {

  { "init_native", "()I", (void*)init_native },//int init_native()

  { "finalize_native", "(I)V", (void*)finalize_native },//void finalize_native(int)

  { "setLight_native", "(IIIIIII)V", (void*)setLight_native },//void setLight_native(int,int,int,int,int,int,int)

  };

  int register_android_server_LightsService(JNIEnv *env)

  {

  return jniRegisterNativeMethods(env, "com/android/server/LightsService",

  method_table, NELEM(method_table));

  }

  };

        

首页 上一页 1 2 3 4 5 下一页 尾页 4/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++ 验证微软数字签名 下一篇C++检查内存泄露

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: