當前位置: 首頁 社區 >緊急呼叫這點事兒 (一)

緊急呼叫這點事兒 (一)

手機通信問題集錦2021-06-14 16:41:00

前幾天和一個朋友聊到這個話題。問題就是CC信令里Emergency Setup里為什么沒有表示緊急呼叫中心的緊急號碼?


眾所周知,每個國家的緊急號碼都大相徑庭。同一個號碼可能在某國是匪警,換做其他國家就是火警。所以需要一個標識來告訴MSC/MME這通緊急呼叫需要轉給哪個緊急呼叫中心,會有如下前5種的公安緊急呼叫中心,醫療救護中心,公安消防中心,海岸救援中心,山地救護中心。

而這個標識就叫做emergency category/service category,有的協議規范里也會稱作emergency call type。通常來說,一個緊急號碼會對應一到多個emergency category,例如112在意大利既是火警也是匪警,而在瑞典則對應所有的5類緊急服務。這種對應關系(emergency number <-> emergency category)會存放在SIM/USIM卡中。如下,


摘自3GPP?TS22.101 Technical Specification Group Services and System Aspects;Service aspects;Service principles

SIM/USIM中的EFecc就扮演了這個角色,可以看到Emergency Number占據每個ECC record前三個字節,這里叫做Emergency Call Code。Emergency Category占據每個ECC record的最后一個字節。


摘自3GPP?TS31.102 Characteristics of the Universal Subscriber Identity Module (USIM) application

那這一個字節具體哪位表示Policy,哪位表示Ambulance呢?參看下面最右一位算Bit 1。舉例如果Emergency Service Category = 0x02就代表是Ambulance類型;如果Emergency Service Category = 0x03就代表是Policy and Ambulance類型。


摘自3GPP?TS24.008 Mobile radio interface Layer 3 specification;Core network protocols; Stage 3


因此在UE呼出緊急電話的Emergency Setup CC信令里不會注明具體的緊急號碼,而是注明Emergency category,如下:

上面可以看到Emergency Category為可選IE,意味著在某些場景下不會包含emergency category,那針對這種類型的緊急呼叫,MSC該如何處理呢? 即

2017 Dec 13? 18:57:13.425? [7A]? 0x713A? UMTS UE OTA? --? EMERGENCY_SETUP
Message Direction = From UE
chan_type = 0 (0x0)
prot_disc_check = 3 (0x3)
trans_id_or_skip_ind = 0 (0x0)
prot_disc = 3 (0x3) (GSM_CALL_CONTROL)
msg_type = 14 (0xe)
prot
? call_ctrl_prot
??? EMERGENCY_SETUP
????? emerg_cat_incl = 0 (0x0)



摘自3GPP?TS24.008 Mobile radio interface Layer 3 specification;Core network protocols; Stage 3

答案如上標黃和紅線所示,如果沒有Emergency Category IE或者存在此IE但是8個位全是0,MSC應該會把這通緊急電話轉到運營商定義的默認緊急中心,猜測就是人工臺來咨詢轉接到具體的緊急中心。

話說回來現在VoLTE這么發達,如果用戶是在VoLTE上撥打緊急電話,上哪里去找這個Emergency Category去呢?( 有關IMS上的緊急呼叫業務流程請參考我投稿春天工作室的《IMS中的緊急呼叫業務研究(IMS Emergency Call)》) 答案就是通過下表從Emergency Category映射出的Emergency Service URN。


摘自3GPP?TS24.229 IP multimedia call control protocol based on Session Initiation Protocol (SIP) and Session Description Protocol (SDP); Stage 3

在這里唯一需要注意的地方是,不同于GSM/UMTS的緊急號碼可以一個緊急號碼對多個Emergency Category,在VoLTE緊急電話中一個號碼只能對應有且只有一個Emergency Service URN!那么問題就來了,如果EFecc里的對應關系就是一對多,在發起VoLTE緊急呼叫時,到底映射哪個URN呢?協議里寫的很泛泛,只是說了UE需要按照上表映射任一類型即可,具體實現各家芯片廠商定奪。當然如果不存在Emergency Category,則會映射為urn:service:sos.


Q公司的實現原則就是映射最低位,即

For example, Bit 2 and Bit 3 in Emergency Category are set to “1”, then the UE only selects Bit 2, i.e., the emergency service category is “Ambulance” not "Fire Brigade",So URN should be urn:service:sos.ambulance。


根據上面的NOTE3,這種一個緊急號碼會對應多個Emergency Category的事情,還會存在由于緊急號碼來源不同導致。那緊急號碼的來源有幾處呢?答案如下SIM/USIM的EFecc,服務網絡下發和ME內部存儲。還強調了無卡情況下8個號碼000,08,110,999,118,119,112,911要存到ME中。


摘自3GPP?TS22.101 Technical Specification Group Services and System Aspects;Service aspects;Service principles


關于SIM/USIM的EFecc,上面我已經闡述了。下面就先看看服務網絡下發的d) 。實際上就是在注冊網絡后,由網絡下發的Attach Accept/TAU Accept里包含的IE --- Emergency Number List來告訴UE所在地區/國家的緊急號碼有哪些,分別對應的Emergency Category是什么。當然這個IE不是必選的,根據當地運營商策略決定。


摘自3GPP?TS24.008 Mobile radio interface Layer 3 specification;Core network protocols; Stage 3

舉例:Attach Accept下發緊急號碼911,對應Emergency Category為0x3F,Bit1 - Bit5全為1,5種類型的緊急服務。


關于ME內部存儲的緊急號碼,完全依賴于終端廠商、芯片商、平臺商的實現了。那真是八仙過海,各顯神通了,這里深度解析下Q平臺的實現策略。這期為了簡化,拋開為支持全球化緊急號碼的AP側方案qcril.db,看看BP側的存放緊急號碼的地點就有這些東東,當然并不是都會配置,依賴廠商自行定奪。

NV#67221? /nv/item_files/pbm/pbm_ecc_nums

NV#69736? /nv/item_files/pbm/pbm_hardcoded_ecc_config

NV#69737? /nv/item_files/pbm/pbm_hardcoded_ecc_list

NV#73755? /nv/item_files/pbm/pbm_nv_ecc_list_per_sub


Haykey哥這就帶大家濾清它們的關系,讓你以后不再對它們蒙圈。細心的讀者會發現這些NV/EFs文件的共性都是存放在一個叫做PBM的路徑下。PBM = Phonebook Manager的簡稱,以本碩專業都是學計算機的我看來,PBM就是Q實現的一種DBMS數據庫。傳統數據庫都是由一堆表構成,每張表里行叫做Record,列叫做Field,代表Record的每項屬性,如下:


而Q平臺的PBM數據庫則維護了 PBM_ECC, PBM_FDN, PBM_ADN等各種表格。顧名思義,PBM_ECC就是存放緊急號碼相關的地方,見上表,可以得知每個緊急電話就是一行Record,而這個緊急電話Record里主要有四列(Fields),號碼,Source(來源),Emergency Category和網絡模式。號碼顯而易見,沒什么可多解釋的。需要注意的是后三個屬性,Source(來源)表示這個號碼是從哪里獲取的,SIM/USIM中的EFecc? 由網絡下發的Attach Accept/TAU Accept里包含的IE --- Emergency Number List? 還是ME內部維護的NV or?硬編碼的?對應的枚舉值為

PBM_FIELD_NETWORK_ECC,

PBM_FIELD_SIM_ECC,

PBM_FIELD_HARDCODED_ECC,

PBM_FIELD_NV_ECC


對于NV_ECC和HARDCODED_ECC的區別,我相信如果你不去深入研究,你會不知所然的。先談HARDCODED_ECC,Hardcoded硬編碼的意思就是直接寫在代碼里,如下分為有卡hardcoded_with_uim,有卡無EFecc文件hardcoded_with_uim_but_no_ecc和無卡hardcoded_with_no_uim三種情況下的硬編碼緊急號碼數組:


以無卡情況為例,harcoded_with_no_uim里包含了911,112,000,08,110,999,118,119號碼,正好滿足了協議以下要求。

唯一一點需要注意的是所有Hardcoded的緊急號碼,Emergency Category為PBM_EMERGENCY_SERVICE_CAT_DEFAULT = 0,不存在Emergency Category IE,MSC會把對應緊急電話轉到運營商定義的默認緊急中心。?隨著時間的推移,Q公司發現這種純正的Hardcoded ECC不靈活,不能滿足各個國家,如中國近乎變態的緊急號碼需求,又引入兩個新的NVs,NV#69736和NV#69737用于取代代碼級Hardcoded ECC(勢必注意它們雖然以NV形式表示,但仍隸屬Hardcoded ECC而非NV ECC)。

NV#69736? /nv/item_files/pbm/pbm_hardcoded_ecc_config

NV#69737? /nv/item_files/pbm/pbm_hardcoded_ecc_list

NV#69736為新舊Hardcoded ECC方案開關,如果為1,采用新方案NV#69737里的hardcoded ECC;如果為0,兼容以前平臺仍使用代碼里的hardcoded ECC,即有卡hardcoded_with_uim,有卡無EFecc文件hardcoded_with_uim_but_no_ecc和無卡hardcoded_with_no_uim的硬編碼緊急號碼數組。


NV#69737里各項定義如下:

0)number_digits:digits號碼位數

1)digits:具體配置的緊急號碼
2)value:不用配置,取值為0即可

3)category_length:emergency_category的長度
4)emergency_category:緊急號碼類型,在中國配置為0,國外緊急號碼具體情況具體分析
5)emergency_mode:0:在GWTL上發起緊急呼叫;1:在1x上發起緊急呼叫;2:任何制式均可發起
6)hardcoded_type:0:無論是否插卡call type都是emergency type(Emergency Setup);1:不插卡時call type是emergency type,插卡時call type是normal call(CC Setup),例如中國緊急呼叫;2:插卡時call type是emergency type


先把結論拋出來,NV#67221? /nv/item_files/pbm/pbm_ecc_nums屬于PBM_FIELD_NV_ECCNV#73755 ? /nv/item_files/pbm/pbm_nv_ecc_list_per_sub屬于PBM_FIELD_SIM_ECC。原因就是在PBM ECC初始化時,


pbm_ecc_set_hardcoded_eccs函數讀取/nv/item_files/pbm/pbm_hardcoded_ecc_list,并且構建Category為PBM_FIELD_HARDCODED_ECC類型的record, 如下:


隨后pbm_init_ecc_nv還會讀取/nv/item_files/pbm/pbm_ecc_nums,并且構建Category為PBM_FIELD_NV_ECC類型的record


當插卡后回調pbm_card_status_cb

?case MMGSDI_CARD_INSERTED_EVT:

????????pbm_build_slot_specific_ecc_cache

讀取EFecc文件比對由pbm_nv_ecc_list_per_sub構建的pbm_slot_specific_ecc_list_ptr,如果pbm_slot_specific_ecc_list_ptr里有的而卡里沒有的緊急號碼,和卡里的緊急號碼共同構建Category為PBM_FIELD_SIM_ECC類型的record, 如下:



這樣一個相同的緊急號碼會有多處來源,可能存在于EFecc,也有可能同時放在NV#69737中,如果Emergency Category相同的話則萬事大吉,如果不同,該以誰為主呢?即規范里的這段文字描述


Q平臺的實現是以Rel11為界,?Rel11前優先級PBM_FIELD_SIM_ECC > PBM_NETWORK_SIM_ECC > PBM_FIELD_HARDCODED_ECC > PBM_FIELD_NV_ECC;Rel11后優先級PBM_FIELD_NETWORK_ECC > PBM_FIELD_SIM_ECC > PBM_FIELD_HARDCODED_ECC > PBM_FIELD_NV_ECC,如下:

間接地,其實PBM那三個存放緊急號碼的NV優先級就是 pbm_nv_ecc_list_per_sub > pbm_hardcoded_ecc_list > pbm_ecc_nums。


至此,Emergency Category在BP側的來龍去脈已經全部講解完畢,但是事情遠遠沒有結束。隨著以粗糧為代表的國內廠商集體出海,高端旗艦機型必將支持越來越多的全球頻段,以小米MIX2為代表,竟然支持43個頻段!這就意味著到哪個國家都可以毫無壓力地打電話。所以Haykey哥猜測粗糧這款MIX2的緊急號碼列表肯定不是放在BP側的,而是放在之前所說的qcril.db數據庫中,畢竟要支持全球各地區國家的緊急號碼,其量之大遠遠超過了NV的承載能力。


當緊急號碼放在了AP側,中間件QCRIL可以直接查詢出數據庫里的emergency category,并且通過QMI Voice Dial Request直接發給Modem,省去了再查詢PBM模塊Emergency Category的過程,如下日志:

0x138E QMI Link 1 RX PDU MsgType = QMI_VOICE_DIAL_CALL_MSG
call_type = EMERGENCY
emer_cat = AMBULANCE_BIT

19:34:11.687 cm.c 02964 =CM= Emerg serv categ given = 1


對應Codes:

如果緊急號碼列表沒有放到AP側,Modem內部會咨詢PBM模塊查詢之前講述的PBM_ECC表,得出對應號碼的Emergency Category,如下日志打印?

緊急號碼112對應Emergency Category為0x07(Police Bit&Ambulance Bit&Fire Brigade Bit = 1),而且通過field type可知這個112的信息來自于SIM/USIM的EFecc。

MSG 07:52:20.439 Phonebook Manager/High [?????? pbm_ecc_lib.c??? 121] Checking num as emergency. Len:0x3. Num:0x31 0x31 0x32 0xffffffff 0xffffffff pbm_3gpp_rel_ver 0x91 p_session_type 0x2???
MSG 07:52:20.439 Phonebook Manager/High [?????????? pbm_ecc.c?? 2748] Found ECC cat 0x7 with field type 0xff40(SIM_ECC ) emergency_mode 0x0 srv_status_flag 0x0???
MSG 07:52:20.439 Phonebook Manager/High [?????? pbm_ecc_lib.c??? 234] Picking GW emergency category 0x7 based on field 0xff40????



針對這種情況,112的Emergency Category為0x07,如果是Emergency over VoLTE發出,Emergency Service URN是什么呢?Q平臺映射最低位,最后在SIP Invite里就是Bit1 --?Police Bit的urn:service:sos.police,如下:

MSG 07:52:21.366 IMS/Medium [???????????? qpdpl.c? 13949] qpDplGetEmergencyContextCategory sData[7]???
MSG 07:52:21.366 IMS/High [qipcallh_emergency.c??? 230] qipcallh_process_emergency_registration_callback: Emergency sub category available = 1, Mask = 7 ? --》 Emergency Category?


MSG 07:52:21.366 IMS QIPCALL/High [? qipcallh_emergency??? 231] qipcallh_process_emergency_registration_callback: Emergency sub category urn:service:sos.police???
MSG 07:52:21.375 IMS QIPCALL/High [????????? qimfif.cpp?? 4533] qimfif_send_invite: to_hdr: urn:service:sos.police@ims.t-mobile.pl???

(本文完)


注:本人微信號ln17584301,歡迎來自各界同仁的有關任何手機Modem協議問題探討。


公眾號請掃碼:


個人微信號請掃碼:



Copyright ? 2021 All Rights Reserved 版權所有 內丘陳奕迅音樂愛好組
哪里可以看成人片