當(dāng)前位置:首頁 > 芯聞號 > 充電吧
[導(dǎo)讀]研究了一個(gè)月,終于把 android 2.3 GPS 驅(qū)動(dòng)個(gè)弄出來了。由于開發(fā)板提供的 GPS HAL 代碼為 SO 文件,項(xiàng)目把 GPS 模塊給換了一個(gè) UART 口,導(dǎo)致 HAL 層代碼需要重新寫

研究了一個(gè)月,終于把 android 2.3 GPS 驅(qū)動(dòng)個(gè)弄出來了。由于開發(fā)板提供的 GPS HAL 代碼為 SO 文件,

項(xiàng)目把 GPS 模塊給換了一個(gè) UART 口,導(dǎo)致 HAL 層代碼需要重新寫。

剛剛開始接觸 ANDROID GPS 的時(shí)候一頭霧水,只好在網(wǎng)上找了很多關(guān)于GPS流程的說明。大致了解了GPS于哪幾個(gè)文件有關(guān)

/framework/base/services/jni/com_android_server_location_GpsLocationProvider.cpp

hardware/libhardware_legacy/gps
hardware/libhardware_legacy/include/hardware_legacy/gps.h

通過查看文件,發(fā)現(xiàn)我的源碼包里面?hardware/libhardware_legacy 目錄里面沒 GPS 文件夾。

咋整呢?

沒辦法,自己創(chuàng)建一個(gè)?

hardware/libhardware/modules/ ?下創(chuàng)建一個(gè) GPS 文件夾, 在?hardware/libhardware_legacy/ 這下面也一樣的,

記得修改 Android.mk 就可以了。

修改?hardware/libhardware/ 下的 ?Android.mk 文件

include $(addsuffix /Android.mk, $(addprefix $(LOCAL_PATH)/,
modules/gralloc
modules/gps
tests
))

把GPS文件夾包含的編譯文件里面。

由于 android 模擬器有模擬 GPS 的源碼,依葫蘆畫瓢唄。

把?gps_qemu.c?文件 COPY 到 剛剛創(chuàng)建的 GPS 文件夾內(nèi)。

這樣文件有了,就差一個(gè) Android.mk 文件了。?

本人對這個(gè)文件并不熟悉,沒辦法,還是 COPY 把,把類似的 文件夾里面的 Android.mk 文件 COPY 過來做一些修改。

修改里面包含的文件啊,路徑之類的。

我的 Android.mk 文件如下:

LOCAL_PATH := $(call my-dir)
# HAL module implemenation, not prelinked and stored in
# hw/

下一步就是?gps_qemu.c 的修改了

首先是?gps_state_init 打開串口設(shè)備

state->fd = open(GPS_Serial_Name, O_RDONLY );

這里打開串口,GPS_Serial_Name?這根據(jù)自己的設(shè)備查找對應(yīng)串口的設(shè)備節(jié)點(diǎn)。

設(shè)置串口事件

// disable echo on serial lines
? ? if ( isatty( state->fd ) ) {
? ? ? ? struct termios ?ios;
? ? ? ? tcgetattr( state->fd, &ios );
? ? ? ? ios.c_lflag = 0; ?/* disable ECHO, ICANON, etc... */
? ? ? ? ios.c_oflag &= (~ONLCR); /* Stop n -> rn translation on output */
? ? ? ? ios.c_iflag &= (~(ICRNL | INLCR)); /* Stop r -> n & n -> r translation on input */
? ? ? ? ios.c_iflag |= (IGNCR | IXOFF); ?/* Ignore r & XON/XOFF on input */
cfsetispeed(&ios, B38400);
? ? cfsetospeed(&ios, B38400);
? ? ? ? tcsetattr( state->fd, TCSANOW, &ios );
? ? }

這一步非常重要,如果沒有這一步,那么在 GPS HAL 線程里面不會(huì)接收串口數(shù)據(jù)。

這樣 Android 的 HAL 層于串口就接通了。

接下來就是解析串口數(shù)據(jù),由于模擬器里面已經(jīng)有解析 RMC 的GPS結(jié)構(gòu)。

所以直接測試就可以了。

直接測試后發(fā)現(xiàn)當(dāng)有 GPS 數(shù)據(jù)調(diào)用 CALLBACK 函數(shù)

?if (r->callback)?
{
? ? ? ? ? ? r->callback( &r->fix );
? ? ? ? ? ? r->fix.flags = 0;

}

后 ANDROID 重啟了,查詢網(wǎng)上資料,發(fā)現(xiàn)很多同志在 2.3 也碰到這問題,主要是創(chuàng)建線程的問題。

把創(chuàng)建線程的函數(shù)換一下就好了。

/*
? ? if ( pthread_create( &state->thread, NULL, gps_state_thread, state ) != 0 ) {
? ? ? ? LOGE("could not create gps thread: %s", strerror(errno));
? ? ? ? goto Fail;
? ? }
*/
? ? state->thread = state->callbacks.create_thread_cb("qemu_gps", ?gps_state_thread, state);

這樣系統(tǒng)就能正常啟動(dòng)并接收經(jīng)緯度了。

接收經(jīng)緯度后 關(guān)閉 GPS 再打開,發(fā)現(xiàn) GPS 沒有經(jīng)緯度了,奇怪

通過跟蹤,發(fā)現(xiàn)在 GPS 關(guān)閉后會(huì)調(diào)用 HAL 層 ?qemu_gps_cleanup?把串口關(guān)閉,

當(dāng)重新開啟的時(shí)候 調(diào)用 JNI?

/framework/base/services/jni/com_android_server_location_GpsLocationProvider.cpp

里面的?android_location_GpsLocationProvider_init,發(fā)現(xiàn)里面的?sGpsInterface 指針已經(jīng)存在,

就不會(huì)調(diào)用?sGpsInterface->init 函數(shù)。

所以在 JNI 層的 cleanup 函數(shù)里面把這個(gè)指針清除。

static void android_location_GpsLocationProvider_cleanup(JNIEnv* env, jobject obj)
{
? ? const GpsInterface* interface = GetGpsInterface(env, obj);
? ? LOGE("%s n", __FUNCTION__);
? ? if (interface)
? ? ? ? interface->cleanup();
? ??sGpsInterface = NULL ;
}

這樣就可以啦, GPS 移植已經(jīng) OK 現(xiàn)在還有一個(gè) BUG 就是狀態(tài)欄那個(gè) GPS 圖標(biāo),

關(guān)閉 GPS 后不知道為什么不會(huì)消失,還需要進(jìn)一步研究。

下面是我的?gps_qemu.c 文件。

/*
?* Copyright (C) 2010 The Android Open Source Project
?*
?* Licensed under the Apache License, Version 2.0 (the "License");
?* you may not use this file except in compliance with the License.
?* You may obtain a copy of the License at
?*
?* ? ? ?http://www.apache.org/licenses/LICENSE-2.0
?*
?* Unless required by applicable law or agreed to in writing, software
?* distributed under the License is distributed on an "AS IS" BASIS,
?* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
?* See the License for the specific language governing permissions and
?* limitations under the License.
?*/


/* this implements a GPS hardware library for the Android emulator.
?* the following code should be built as a shared library that will be
?* placed into /system/lib/hw/gps.goldfish.so
?*
?* it will be loaded by the code in hardware/libhardware/hardware.c
?* which is itself called from android_location_GpsLocationProvider.cpp
?*/


#include

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉