其中的 processCommandBuffer( )
Command 的內容格式 (protocol) 好像是 Parcel 這個 structure。
分為 request, token。
request 就是 command 的 id。
然後簡單由查表找出 request command id 對應的 function 是 ?
然後去執行他。
這個 table 就是
static CommandInfo s_commands[] = {
#include "ril_commands.h"
};
trace 一下,以 QUERY_AVAILABLE_NETWORKS.
在 ril_commands.h 裡,有
{RIL_REQUEST_QUERY_AVAILABLE_NETWORKS , dispatchVoid, responseStrings},T
所以,是 call dispatchVoid(),然後 response 送到 reponseStrings( )。dispatchVoid( ) 實際 call s_callbacks.onRequest( )。
s_callbacks 是:
static const RIL_RadioFunctions s_callbacks = {
RIL_VERSION,
onRequest,
currentState,
onSupports,
onCancel,
getVersion
};
所以 call 的是 onRequest (reference-ril.c)rild support 的 command 就寫在 onRequest。
.. 裡面沒有 implement AVAILABLE_NETWORK..
... 難怪每一家 modem vendor 都不願意給 source,都給so.
AVAILABLE_NETWORK 的 AT COMMAND 是
at+cops=?
response 是 一行:ref: http://r40eubuntu.blogspot.com/2012/01/modem-at-command-cops-operator.html
所以送的 at_command 應該用 SINGLELINE。
at_send_command_singleline
reponse 也是以 COPS: 開始,所以送command 應該是:
err = at_send_command_singleline("AT+COPS=?","+COPS:",&p_response);
response 的部份可以參考 CM 的 android_hardware_ril 為了 htc 的 reference-ril.so 的修改: https://github.com/CyanogenMod/android_hardware_ril/commit/90102813ee766b658c9d11f47bfffa785a98b6cd
沒有留言:
張貼留言