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函数写法

计算机生成了可选文字:
字符型c类型
V
Z
J
D
下
日
C
S
void
jboolean
jlong
jdouble
jfloat
jbyte
jchar
jshort
void
boolean
long
double
float
byte
Char
short计算机生成了可选文字:
数组则以''[''开始,
卩
[F
[B
[C
[S
[D
卩
[Z
jintArray
jfloatArray
jbyteArray
jcharArray
jshortArray
厍两个字符表示
into
float[]
byte[]
char[]
short]
jdoubleArraydouble[]
jlongArraylong[]
jbooleanArrayboolean[]

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

计算机生成了可选文字:
ERROR:
ERROR:
an「Ol
a「「e.gnss@l
pa「Sean「Ol
.0::IGnss
a「a「e
hashash
.gnss@2.O:
1391f5b8fed936e291bCf2d283655e237ef7e13384f9fd84dd64C4e6ed16377
YPes•
which
not
match
hash
This
interface
has
frozen.
Do
not
change
it

 

报错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

 

新接口:

LocationManager.java --> public void setGnssHal(boolean isStop)

计算机生成了可选文字:
publicvoidsetGnssHal(booleanisStop){
try{
mService。setGnssHal{isStop),
}catch(RemoteExceptione〕国
throwe。rethrowFromSystemServer();

 

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

计算机生成了可选文字:
voidsetGnssHal(booleanisStop);l

 

LocationManagerService.java -->public void setGnssHal(boolean isStop)

GnssLocationProvider mGlobalGnssProvider;

mGlobalGnssProvider = gnssProvider;

计算机生成了可选文字:
@Override
publicvoidsetGnssHaI(boolean•isStop){
LOg.d{TAG,"LOCATIONMANAGERSERVICEINsetGnssHal"+isStop+
mGlobalGnssProvider!二null){
mGIobaIGnssProvider。setGnssProviderHaI(isStop);
}else{
Log.d(TAG,"LOCATIONMANAGERSERVICEIINsetGnssHal+isStop),
mGIobalGnssProvider=
+mGlobaIGnssProvider

 

GnssLocationProvider.java -->setGnssProviderHal(Boolean keyMeans)

private native void native_close_hal_server(boolean keyMeans);

计算机生成了可选文字:
publicvoidsetGnssProviderHaI(8001eankeyMeans){
Log.蚂TAG,"setGnssProviderHal"+keyMeans
Log.蚂TAG,"GNSSLOCATIONPROVIDEINsetGnssProviderHal
//initTbox(),
if{keyMeans==true){
nativeclosehalserver(keymeans);
//startNavigating(),
"+keyMeans
Log
else{
Log
·蚓TAG,
·蚓TAG,
到GNSSLOCATIONPROVIDEINsetGnSSProviderHaI"+keyMeans),
到GNSSLOCATIONPROVIDEOUTsetGnssProviderHal"+keyMeans);

 

com_android_server_location_GnssLocationProvider.cpp --> setHalServer(keyMeans);

计算机生成了可选文字:
"(Z)V',reinterpret_cast<void*>(
androidlocationGnssLocationProviderclosehalserver)}

 

计算机生成了可选文字:
staticvoidand「0主dlocationGnssLocationProviderclosehalserver(JNIEnv*/丘env冲/,jobject/0的*/,jbooleankeyMeans)
if(gnssHal!二nullptr){
gnssHal->setHaIServer(keyMeans,

 

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

C:\6C33E8E5\A427361A-ADC2-4472-9EA2-C3A74C44AF8F.files\image011.png

 

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

C:\6C33E8E5\A427361A-ADC2-4472-9EA2-C3A74C44AF8F.files\image012.png

 

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

计算机生成了可选文字:
if(mGnssIface
到setHaIServer(boolkeyMeans
nullptr)
ALOGE(s:Gnssinterfaceisunavailable'
mGnssIface->sethalserver(keyMeans)
returnV01d0,

 

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

C:\6C33E8E5\A427361A-ADC2-4472-9EA2-C3A74C44AF8F.files\image014.png

 

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

C:\6C33E8E5\A427361A-ADC2-4472-9EA2-C3A74C44AF8F.files\image015.png

 

 

posted @ 2023-03-13 09:54  醉爱大理  阅读(164)  评论(0)    收藏  举报