www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(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)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢抑制與過流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉