T19C_location_Hal新加接口
T19C_location_Hal新加接口
2023年3月8日
15:58
涉及的文件:
/android/frameworks/base/location/java/android/location/LocationManager.java
/android/frameworks/base/location/java/android/location/ILocationManager.aidl
/android/frameworks/base/services/core/java/com/android/server/LocationManagerService.java
/android/frameworks/base/services/core/java/com/android/server/location/GnssLocationProvider.java
/android/frameworks/base/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
/android/hardware/interfaces/gnss/1.0/IGnss.hal
/android/hardware/libhardware/include/hardware/gps.h
/android/vendor/semidrive/modules/gps/hal/hidl/Gnss.h
/android/vendor/semidrive/modules/gps/hal/hidl/Gnss.cpp
/android/vendor/semidrive/modules/gps/hal/ubx_moduleIf.h
/android/vendor/semidrive/modules/gps/hal/ubx_moduleIf.cpp
/android/vendor/semidrive/modules/gps/hal/gps_thread.h
/android/vendor/semidrive/modules/gps/hal/gps_thread.cpp
新接口:
LocationManager.java --> public void setGnssHal(boolean isStop)
ILocationManager.aidl --> void setGnssHal(boolean isStop);
LocationManagerService.java -->public void setGnssHal(boolean isStop)
GnssLocationProvider.java -->setGnssProviderHal(Boolean keyMeans)
GnssLocationProvider.java -->private native void native_close_hal_server(boolean keyMeans);
com_android_server_location_GnssLocationProvider.cpp --> setHalServer(keyMeans);
Ignss.hal --> setHalServer(bool keyMeans);
Gnss.h --> Return<void> setHalServer(bool keyMeans) override;
Gnss.cpp -->Return<void> Gnss::setHalServer(bool keyMeans)
ubx_moduleIf.h --> static void setHalServer(bool keyMeans);
gps.h --> void (*set_hal_server)(bool keyMeans);
ubx_moduleIf.cpp --> const void *CGpsIf::setHalServer(bool keyMeans)
ubx_moduleIf.cpp --> CGpsIf::s_interface.set_hal_server= CGpsIf::setHalServer
JNI函数写法

![计算机生成了可选文字:
数组则以''[''开始,
卩
[F
[B
[C
[S
[D
卩
[Z
jintArray
jfloatArray
jbyteArray
jcharArray
jshortArray
厍两个字符表示
into
float[]
byte[]
char[]
short]
jdoubleArraydouble[]
jlongArraylong[]
jbooleanArrayboolean[]](https://img2023.cnblogs.com/blog/2502019/202303/2502019-20230313095513530-707889059.png)
JNI语法:
typedef struct {
const char* name;
const char* signature;
void* fnPtr;
} JNINativeMethod;
{"native_stop", "()Z", reinterpret_cast<void *>(
android_location_GnssLocationProvider_stop)},
"()" 中的字符表示参数,后面的则代表返回值。例如"()V" 就表示void Func();
"(II)V" 表示 void Func(int, int);如果Java函数的参数是class,则以"L"开头,以";"结尾中间是用"/" 隔开的包及类名。而其对应的C函数名的参数则为jobject. 一个例外是String类,其对应的类为jstring
报错1:IGNSS中未配置hash值
解决:在android/hardware/interfaces/current中添加 1391f5b8fea936e291bcf2a2836550237ef7e13384f9fd84dd64c4060d163779 android.hardware.gnss@1.0::IGnss

报错2:api无法编译(先加载根目录下环境再切换到android目录下更新会失败,需要在android目录下单独lunch,另起窗口)
解决:android/framework/api/current文件中的framework接口需要更新
先进入android目录下,加载编译环境
source build/envsetup.sh
Lunch
chery_t19c-userdebug
运行 make update-api
报错3:vndk无法编译(先加载根目录下环境再切换到android目录下更新会失败,需要在android目录下单独lunch,另起窗口)
解决:vndk接口需要更新
先进入android目录下,加载编译环境
source build/envsetup.sh
Lunch
chery_t19c-userdebug
development/vndk/tools/header-checker/utils/create_reference_dumps.py -l android.hardware.gnss@1.0 -product chery_t19c
development/vndk/tools/header-checker/utils/create_reference_dumps.py -l android.hardware.gnss@1.1 -product chery_t19c
development/vndk/tools/header-checker/utils/create_reference_dumps.py -l android.hardware.gnss@2.0 -product chery_t19c
![计算机生成了可选文字:
[10047/47]//hardware/tnterfaces/gnss/l.o:androtd.hardware.gnss@l.oheader-abt-ltnkerandroid.hardware.gnss@l.o.so.lsdump[a「伊]
二「eatingdumpsfo「ta「geta「ch:a「伊andva「tanta「mv7-a-neon
二「eatedabidumpat/home/YFCO/uyans300/wo「kspace/s「C/Che「yT19C/and「Otd/p「ebutIts/abt-dumps/vndk/29/64/a「伊armv7-a-neon/source-based/androtd.hardware.gnss@1.O.so.Isdump
二「eatingdumpsfo「ta「geta「ch:a「伊64andva「tanta「mv8-a
二「eatedabidumpat/home/YFCO/uyans300/workspace/src/CheryT19C/and「Otd/p「ebutIts/abt-dumps/vndk/29/64/a「伊64armv8-a/source-based/androtd.hardware.gnss@1.O.so.Isdump](https://img2023.cnblogs.com/blog/2502019/202303/2502019-20230313095513955-1408724120.png)
新接口:
LocationManager.java --> public void setGnssHal(boolean isStop)

ILocationManager.aidl --> void setGnssHal(boolean isStop);

LocationManagerService.java -->public void setGnssHal(boolean isStop)
GnssLocationProvider mGlobalGnssProvider;
mGlobalGnssProvider = gnssProvider;

GnssLocationProvider.java -->setGnssProviderHal(Boolean keyMeans)
private native void native_close_hal_server(boolean keyMeans);

com_android_server_location_GnssLocationProvider.cpp --> setHalServer(keyMeans);


Ignss.hal --> setHalServer(bool keyMeans);

Gnss.h --> Return<void> setHalServer(bool keyMeans) override;

Gnss.cpp -->Return<void> Gnss::setHalServer(bool keyMeans)

gps.h --> void (*set_hal_server)(bool keyMeans);

ubx_moduleIf.h --> static void setHalServer(bool keyMeans);



浙公网安备 33010602011771号