在《老羅的Android之旅》系列開始,遇到讀取不到hello裝置內容的可以看一下這裡
阿新 • • 發佈:2019-02-18
com_android_server_HelloService.cpp
的hello_getVal()
在編譯的時候一直報錯:
error: invalid conversion from 'int*' to 'int'
在模擬器中讀取時hard/libhardware/modules/hello/hello.c
的hello_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原始碼檢視:點這裡