1.判斷手機中是否插入 SIM卡:
方法 1 :判斷標誌 gInsertSimAppFlag 是否為 1 ,為 1 時,有 SIM 卡,為 0 時,無 SIM 卡
方法 2 : if(g_pwr_context.PowerOnSIMStatus & MMI_SIM_STATUS_NOT_INSERT) return FALSE;
else return TRUE;
方法 3 : IsSATPresent ();為 0 時無 SIM 卡,為 1 時有 SIM 卡
方法 4 :判斷 DRV_Reg(SIM_CTRL) 的值,為 1 時有 SIM 卡,為 0 時,無 SIM 卡。
方法 5 : MTPNP_BOOL MTPNP_PFAL_Is_Card1Absent(void);
MTPNP_BOOL MTPNP_PFAL_Is_Card2Absent(void)
2011年1月3日 星期一
2010年12月29日 星期三
MTK TASK 筆記
1.開機後要跑幾個task:Syscomp_config.c (MCU\config\src)
sys_comp_config_tbl是一個task的initial table,裡面define了許多task的XXXX_create function名稱,例如nvram_create、mmi_create、l4_create。
透過載入這個table,執行各個task的「建立」(應該是有生出task的意思存在),接著各個task再有自己的main,再去做其初始化的動作、handler這一類的。
2.以l4_create function為例,function內容如下:(MCU\ps\l4\src\L4_create.c)
kal_bool l4_create(comptask_handler_struct **handle) { static const comptask_handler_struct l4_handler_info = { layer4_task_main, /* task entry function */ layer4_init, /* task initialization function */ NULL, /* task configuration function */ l4_reset, /* task reset handler */ NULL, /* task termination handler */ }; *handle = (comptask_handler_struct *)&l4_handler_info; return KAL_TRUE; }
在l4_create()裡面,建立了一個資料型態為comptask_handler_struct的變數l4_handler_info,
裡面指定了一個task的對應行為function。
layer4_task_main()是layer 4的main function,裡面跑著一個while (1)的 infinite loop,來處理各種的message,透過process_ilm(),再去執行對應message 的main。
sys_comp_config_tbl是一個task的initial table,裡面define了許多task的XXXX_create function名稱,例如nvram_create、mmi_create、l4_create。
透過載入這個table,執行各個task的「建立」(應該是有生出task的意思存在),接著各個task再有自己的main,再去做其初始化的動作、handler這一類的。
2.以l4_create function為例,function內容如下:(MCU\ps\l4\src\L4_create.c)
kal_bool l4_create(comptask_handler_struct **handle) { static const comptask_handler_struct l4_handler_info = { layer4_task_main, /* task entry function */ layer4_init, /* task initialization function */ NULL, /* task configuration function */ l4_reset, /* task reset handler */ NULL, /* task termination handler */ }; *handle = (comptask_handler_struct *)&l4_handler_info; return KAL_TRUE; }
在l4_create()裡面,建立了一個資料型態為comptask_handler_struct的變數l4_handler_info,
裡面指定了一個task的對應行為function。
layer4_task_main()是layer 4的main function,裡面跑著一個while (1)的 infinite loop,來處理各種的message,透過process_ilm(),再去執行對應message 的main。
2010年12月22日 星期三
MTK UART筆記
1. 跟PC tool溝通是透過UART下command,格式跟AT command一樣,解析輸入的command type,再執行對應的handler。
dt_create()->dt_task_main()->dt_process_one_cmd ()->dt_cmd_processor ()->
檔案:
Dt_create.c (MCU\ps\dt\src)
Dt_analyzer.c (MCU\ps\dt\src)
dt_create()->dt_task_main()->dt_process_one_cmd ()->dt_cmd_processor ()->
檔案:
Dt_create.c (MCU\ps\dt\src)
Dt_analyzer.c (MCU\ps\dt\src)
2010年11月29日 星期一
switch case and watchdog
1.如果在switch case中,需等候I/O腳位變化,而決定是否往下執行,
可以把while(status)改寫成if (! status) then step++,避免程式卡在while loop,浪費時間,step中的watchdog也可以不需要去控制。
2.避免有以下寫法:
switch (step)
{
case 0:
WDT_stop();
.......
step++;
break;
case 1:
.......
step++;
break;
case 2:
......
WDT_restart();
break;
}
在step0到1的過程當中,WDT已經在main()又被開啟了,因此程式容易有不可預期的情形產生。
可以把while(status)改寫成if (! status) then step++,避免程式卡在while loop,浪費時間,step中的watchdog也可以不需要去控制。
2.避免有以下寫法:
switch (step)
{
case 0:
WDT_stop();
.......
step++;
break;
case 1:
.......
step++;
break;
case 2:
......
WDT_restart();
break;
}
在step0到1的過程當中,WDT已經在main()又被開啟了,因此程式容易有不可預期的情形產生。
2010年11月17日 星期三
2010年11月7日 星期日
掃塵除垢
今天宅在家中沒出門,下午花了一些時間整理房間,雖然常常都會做整理,但是每次整理時,還是會掃出一些灰塵來,隨著打掃的時間愈久,灰塵就愈多。
不過大部分的物品並不會常常移動,但是還是會染上塵垢,因此一段時間就要打掃一下,維持房間清潔,住起來才會舒適、衛生。同理,我們接觸這花花世界,形形色色的人、事、物,那我們的心一定更容易沾染到不乾淨、不好的東西。
因此更常常需要掃塵除垢、調整自己的念頭、想法、迴光返照,讓自己清靜靈明的本心作用,才能時時保持快樂!
不過大部分的物品並不會常常移動,但是還是會染上塵垢,因此一段時間就要打掃一下,維持房間清潔,住起來才會舒適、衛生。同理,我們接觸這花花世界,形形色色的人、事、物,那我們的心一定更容易沾染到不乾淨、不好的東西。
因此更常常需要掃塵除垢、調整自己的念頭、想法、迴光返照,讓自己清靜靈明的本心作用,才能時時保持快樂!
2010年11月6日 星期六
訂閱:
文章 (Atom)