Android 9 GPS JNI 到HAL 層分析

  • JNI層調(diào)用在 frameworks\base\services\core\jni\com_android_server_location_GnssLocationProvider.cpp

  • 我們跟著 class_init_native 方法看初始化

#目錄位置 frameworks\base\services\core\jni\com_android_server_location_GnssLocationProvider.cpp
static void android_location_GnssLocationProvider_class_init_native(JNIEnv* env, jclass clazz) {
    gnssHal_V1_1 = IGnss_V1_1::getService();
    if (gnssHal_V1_1 == nullptr) {
        ALOGD("gnssHal 1.1 was null, trying 1.0");
        gnssHal = IGnss_V1_0::getService();
    } else {
        gnssHal = gnssHal_V1_1;
    }
}

在初始化中我們看到這里進(jìn)行了GPS 的HADL層的初始化阵赠,使用的GNSS版本是 android/hardware/gnss/1.0/IGnss.h 1.0版本乖篷,接下來(lái)看 native_start 開(kāi)始定位的方法

static jboolean android_location_GnssLocationProvider_start(JNIEnv* /* env */, jobject /* obj */) {
    if (gnssHal != nullptr) {
       #這里調(diào)用了HADL層的start開(kāi)始定位方法
        auto result = gnssHal->start();
        if (!result.isOk()) {
            return JNI_FALSE;
        } else {
            return result;
        }
    } else {
        return JNI_FALSE;
    }
}

接下來(lái),我們進(jìn)入到GNSS的HADL層代碼位置在 hardware\interfaces\gnss\1.0险胰,這里的 IGnss.hal是定義HIDL服務(wù)的方法名字志衣,具體的實(shí)現(xiàn)是在default目錄下 Gnss.cpp 文件屯援,我們看這里的start方法做了什么

IGnss* HIDL_FETCH_IGnss(const char* /* hal */) {
    hw_module_t* module;
    IGnss* iface = nullptr;
    #調(diào)用了HAL層獲取廠商的so操作拿到操作GPS的對(duì)象
    int err = hw_get_module(GPS_HARDWARE_MODULE_ID, (hw_module_t const**)&module);

    if (err == 0) {
        hw_device_t* device;
        err = module->methods->open(module, GPS_HARDWARE_MODULE_ID, &device);
        if (err == 0) {
          #得到GPS對(duì)象進(jìn)行操作
            iface = new Gnss(reinterpret_cast<gps_device_t*>(device));
        } else {
            ALOGE("gnssDevice open %s failed: %d", GPS_HARDWARE_MODULE_ID, err);
        }
    } else {
      ALOGE("gnss hw_get_module %s failed: %d", GPS_HARDWARE_MODULE_ID, err);
    }
    return iface;
}

調(diào)用了 mGnssIface的start方法就是 gps_device_t 定位開(kāi)始的方法

Return<bool> Gnss::start()  {
    if (mGnssIface == nullptr) {
        ALOGE("%s: Gnss interface is unavailable", __func__);
        return false;
    }

    return (mGnssIface->start() == 0);
}

GnnssHal層回調(diào)設(shè)置在JNI層中
https://cs.android.com/android/platform/superproject/+/master:frameworks/base/services/core/jni/com_android_server_location_GnssLocationProvider.cpp;l=1968?q=com_android_server_location_GnssLocationProvider&ss=android%2Fplatform%2Fsuperproject

這里調(diào)用了Gnns Hal 層的 setCallback(const sp<IGnssCallback>& callback) 回調(diào),來(lái)接受驅(qū)動(dòng)的回調(diào)

image.png

到此全部從應(yīng)用層到底層全部走通

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末念脯,一起剝皮案震驚了整個(gè)濱河市狞洋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绿店,老刑警劉巖吉懊,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異假勿,居然都是意外死亡借嗽,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)转培,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)淹魄,“玉大人,你說(shuō)我怎么就攤上這事堡距〖孜” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵羽戒,是天一觀的道長(zhǎng)缤沦。 經(jīng)常有香客問(wèn)我,道長(zhǎng)易稠,這世上最難降的妖魔是什么缸废? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上企量,老公的妹妹穿的比我還像新娘测萎。我一直安慰自己,他們只是感情好届巩,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布硅瞧。 她就那樣靜靜地躺著,像睡著了一般恕汇。 火紅的嫁衣襯著肌膚如雪腕唧。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 50,096評(píng)論 1 291
  • 那天瘾英,我揣著相機(jī)與錄音枣接,去河邊找鬼。 笑死缺谴,一個(gè)胖子當(dāng)著我的面吹牛但惶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播湿蛔,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼膀曾,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了煌集?” 一聲冷哼從身側(cè)響起妓肢,我...
    開(kāi)封第一講書(shū)人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤捌省,失蹤者是張志新(化名)和其女友劉穎苫纤,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體纲缓,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡卷拘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了祝高。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片栗弟。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖工闺,靈堂內(nèi)的尸體忽然破棺而出乍赫,到底是詐尸還是另有隱情,我是刑警寧澤陆蟆,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布雷厂,位于F島的核電站,受9級(jí)特大地震影響叠殷,放射性物質(zhì)發(fā)生泄漏改鲫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望像棘。 院中可真熱鬧稽亏,春花似錦、人聲如沸缕题。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)避除。三九已至怎披,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瓶摆,已是汗流浹背凉逛。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留群井,地道東北人状飞。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像书斜,于是被迫代替她去往敵國(guó)和親诬辈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容