java调用hal结构体_Android的JNI实现对HAL层调用

  • Post author:
  • Post category:java


1. namespace android

2. {

3. /*在硬件抽象层中定义的硬件访问结构体,参考*/

4. struct hello_device_t* hello_device = NULL;

5. /*通过硬件抽象层定义的硬件访问接口设置硬件寄存器val的值*/

6. static void hello_setVal(JNIEnv* env, jobject clazz, jint value) {

7. int val = value;

8. LOGI(“Hello JNI: set value %d to device.”, val);

9. if(!hello_device) {

10. LOGI(“Hello JNI: device is not open.”);

11. return;

12. }

13.

14. hello_device->set_val(hello_device, val);

15. }

16. /*通过硬件抽象层定义的硬件访问接口读取硬件寄存器val的值*/

17. static jint hello_getVal(JNIEnv* env, jobject clazz) {

18. int val = 0;

19. if(!hello_device) {

20. LOGI(“Hello JNI: device is not open.”);

21. return val;

22. }

23. hello_device->get_val(hello_device, &val);

24.

25. LOGI(“Hello JNI: get value %d from device.”, val);

26.

27. return val;

28. }

29. /*通过硬件抽象层定义的硬件模块打开接口打开硬件设备*/

30. static inline int hello_device_open(const hw_module_t* module, struct hello_device_t** device) {

31. return module->methods->open(module, HELLO_HARDWARE_MODULE_ID, (struct hw_device_t**)device);

32. }

33. /*通过硬件模块ID来加载指定的硬件抽象层模块并打开硬件*/

34. static jboolean hello_init(JNIEnv* env, jclass clazz) {

35. hello_module_t* module;

36.

37. LOGI(“Hello JNI: initializing……”);

38. if(hw_get_module(HELLO_HARDWARE_MODULE_ID, (const struct hw_module_t**)&module) == 0) {

39. LOGI(“Hello JNI: hello Stub found.”);

40. if(hello_device_open(&(module->common), &hello_device) == 0) {

41. LOGI(“Hello JNI: hello device is open.”);

42. return 0;

43. }

44. LOGE(“Hello JNI: failed to open hello device.”);

45. return -1;

46. }

47. LOGE(“Hello JNI: failed to get hello stub module.”);

48. return -1;

49. }

50. /*JNI方法表*/

51. static const JNINativeMethod method_table[] = {

52. {“init_native”, “()Z”, (void*)hello_init},

53. {“setVal_native”, “(I)V”, (void*)hello_setVal},

54. {“getVal_native”, “()I”, (void*)hello_getVal},

55. };

56. /*注册JNI方法*/

57. int register_android_server_HelloService(JNIEnv *env) {

58. return jniRegisterNativeMethods(env, “com/android/server/HelloService”, method_table, NELEM(method_table));

59. }

60. }



版权声明:本文为weixin_39984403原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。