1、hardware\ril\reference-ril\Reference-ril.c 中 onRequest() 處理RIL_REQUEST_DIAL 時(shí)會(huì) 調(diào)用requestDial();
創(chuàng)新互聯(lián)建站是網(wǎng)站建設(shè)技術(shù)企業(yè),為成都企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì),網(wǎng)站設(shè)計(jì),網(wǎng)站制作,網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制適合企業(yè)的網(wǎng)站。十多年品質(zhì),值得信賴!
2、requestDial()中轉(zhuǎn)換RIL_REQUEST_DIAL 請求為AT指令;
3、通過at_send_command()下發(fā);
4、經(jīng)過at_send_command_full,at_send_command_full_nolock ,writeline()寫到設(shè)備中。
AT指令集是從終端設(shè)備(Terminal Equipment,TE)或數(shù)據(jù)終端設(shè)備(Data Terminal Equipment,DTE)向終端適配器(Terminal Adapter,TA)或數(shù)據(jù)電路終端設(shè)備(Data Circuit Terminal Equipment,DCE)發(fā)送的。
其對所傳輸?shù)臄?shù)據(jù)包大小有定義:即對于AT指令的發(fā)送,除AT兩個(gè)字符外,最多可以接收1056個(gè)字符的長度(包括最后的空字符)。
每個(gè)AT命令行中只能包含一條AT指令;對于由終端設(shè)備主動(dòng)向PC端報(bào)告的URC指示或者response響應(yīng),也要求一行最多有一個(gè),不允許上報(bào)的一行中有多條指示或者響應(yīng)。AT指令以回車作為結(jié)尾,響應(yīng)或上報(bào)以回車換行為結(jié)尾。
AT命令(Attention)在手機(jī)中,用于對modem(也就是移動(dòng)模塊)通過串口命令進(jìn)行操作,處理與語音電話、短信和數(shù)據(jù)。
關(guān)于AT命令:
Android系統(tǒng)與AT命令
對于智能手機(jī),AP和BP分離的情況,在AP上的系統(tǒng)通過串口和BP通信是個(gè)不錯(cuò)方式。在Android的源碼中有一個(gè)內(nèi)部包c(diǎn)om.android.internal.telephony中有對AT命令的封裝和解析,但這種internal的包開發(fā)者不能調(diào)用的SDK部分,可以用來封裝ROM。這說明Android對AT command的方式是支持的。
對于Android如何調(diào)用AT command
用root登錄命令行,直接對串口進(jìn)行操作,如echo -e "AT\r" /dev/smd0
具體的串口,不同設(shè)備會(huì)有不同,甚至不一定會(huì)提供。這種方式,開發(fā)者是可以調(diào)用的,通過Runtime.exec直接執(zhí)行命令行命令,但要求是root,例如echo -e "ATD123456789;\r" /dev/smd0,撥打123456789的號碼。
目前最新的AT命令標(biāo)準(zhǔn)發(fā)布與2014.6.27,似乎還活得挺滋潤的。但是給出的keywords是UMTS, GSM, command, terminal, LTE這說明CDMA確實(shí)很可能不是采用AT命令的方式。
將16進(jìn)制的字符串轉(zhuǎn)換成bytes,通過hexstring2bytes轉(zhuǎn)換,從而發(fā)送指令。
一、需要發(fā)送64個(gè)字節(jié)的數(shù)組,如果一次性發(fā)送過去,單片機(jī)那里可能無法及時(shí)處理以致沒有任何回應(yīng),因?yàn)閱纹瑱C(jī)那里是設(shè)置了數(shù)據(jù)接收的延時(shí)時(shí)間。要想暢通的與藍(lán)牙模塊通信,考慮這個(gè)時(shí)間差非常重要。調(diào)整字節(jié)的發(fā)送速率,就成為非常關(guān)鍵的一步。
二、值得注意的是,數(shù)據(jù)的發(fā)送是非??斓模褪且?yàn)檫@樣才會(huì)導(dǎo)致單片機(jī)那里無法及時(shí)處理,所以,每次發(fā)送后的延時(shí)是非常重要的。我們單片機(jī)那里的延時(shí)是10毫秒,所以我們選擇發(fā)送完每個(gè)字節(jié)后就延時(shí)10毫秒再發(fā)下個(gè)字節(jié)。
三、在使用InputStream的時(shí)候,必須注意,InputStream的讀取是阻塞的。這點(diǎn)在一般的情況下是不會(huì)影響到我們的程序,但是記住這個(gè)情況對于代碼的設(shè)計(jì)是非常重要的。
四、無參數(shù)的read()是每次只從流中讀取一個(gè)字節(jié),這種做法效率非常低,但是簡單,像是讀取整數(shù)值這種情況,使用read()就非常好,但如果是16進(jìn)制字符串,使用InputStream.read(byte[]
b)或者InputStream.read(byte[] b,int off,int len)方法,這樣一次就能讀取多個(gè)字節(jié)。
一、準(zhǔn)備測試環(huán)境及測試文件
1、安裝Java JDk,設(shè)置好環(huán)境變量
2、安裝Android SDK,設(shè)置好環(huán)境變量(詳細(xì)步驟略)
3、準(zhǔn)備被測apk及測試所需的一些工具
二、啟動(dòng)模擬器,并解鎖
批處理腳本:
emulator -avd Galaxy4.2 ::啟動(dòng)模擬器
ping -n 90 127.0.0.1nul ::等待模擬器啟動(dòng)成功,-n 90 為等待時(shí)間,建議設(shè)置大一點(diǎn)
adb shell input keyevent 82 ::模擬器打開后都會(huì)鎖屏,adb模擬鍵盤輸入,解鎖
ping -n 2 127.0.0.1nul
三、腳本參數(shù)初始化
代碼如下:
set appName=TestAndroid.apk ::被測程序名稱
set pkgName=com.example.testandroid ::被測程序包名
set openName=com.example.testandroid.MainActivity ::被測試程序主activity
set "times=%1" ::測試次數(shù),腳本傳入?yún)?shù)
xcopy blat.exe C:\Windows\System32\ /Y ::將郵件工具復(fù)制到系統(tǒng)文件夾下,需關(guān)閉360衛(wèi)士
四、循環(huán)執(zhí)行安裝打開關(guān)閉卸載
echo 測試開始source.txt ::創(chuàng)建一個(gè)source文件記錄日志
for /l %%a in (1,1,%times%) do (
adb install TestAndroid.apk ::安裝apk
adb shell am start -W -n %pkgName%/%openName% ::打開apk
call cmd /c close.bat %pkgName% ::關(guān)閉apk
adb uninstall %pkgName% ::卸載apk
adb logcat -d |findstr "^D/k.*}\" ::過濾logcat,獲取需要的內(nèi)容
adb logcat -c ::清除logcat日志
taskkill /f /im adb.exe)source.txt ::結(jié)束adb進(jìn)程,防止占用source文件
::每次操作日志都記錄在source中
五、處理source.txt提取關(guān)鍵信息,并發(fā)送郵件
六、設(shè)置windows定時(shí)任務(wù),參數(shù)填寫為測試次數(shù),完成。