1. 程式人生 > >在《老羅的Android之旅》系列開始,遇到讀取不到hello裝置內容的可以看一下這裡

在《老羅的Android之旅》系列開始,遇到讀取不到hello裝置內容的可以看一下這裡

com_android_server_HelloService.cpphello_getVal()在編譯的時候一直報錯:

 error: invalid conversion from 'int*' to 'int'

在模擬器中讀取時hard/libhardware/modules/hello/hello.chello_get_val會提示引數val不是指標。從而無法讀取hello的值。

對C語言瞭解不多,但個人感覺這裡不需要指標也可以。故而將上述兩個方法更改如下,順利讀取hello的值。

static int hello_get_val(struct hello_device_t* dev, int
val) { //if(!val) { // LOGE("Hello Stub: error val pointer"); // return -EFAULT; //} int result = 0; int size = read(dev->fd, &result, sizeof(val)); LOGI("Hello Stub: get value %d from device size is %d", result,size); return result; } /*通過硬體抽象層定義的硬體訪問介面讀取硬體暫存器val的值*/
static jint hello_getVal(JNIEnv* env, jobject clazz) { int val = 0; if(!hello_device) { LOGI("Hello JNI: device is not open."); return val; } int result = hello_device->get_val(hello_device,val); LOGI("Hello JNI: get value %d from device."
, result); return result; }

我的環境:ubuntu 14.04.1 ,Android 4.0.1,kernel 2.6.29,供參考。

github原始碼檢視:點這裡