AliOS-Things--linkkitapp (5)看原始碼筆記
阿新 • • 發佈:2018-10-31
一、主函式解析
1、工程入口函式:application_start()
int application_start(int argc, char **argv)
{
#ifdef CONFIG_PRINT_HEAP
print_heap();
aos_post_delayed_action(5000, duration_work, NULL);
#endif
#ifdef CSP_LINUXHOST
signal(SIGPIPE, SIG_IGN);
#endif
#if AOS_ATCMD
at.set_mode(ASYN);
at. init(AT_RECV_PREFIX, AT_RECV_SUCCESS_POSTFIX, AT_RECV_FAIL_POSTFIX,
AT_SEND_DELIMITER, 1000);
#endif
#ifdef WITH_SAL
sal_init();
#endif
aos_set_log_level(AOS_LL_NONE);
netmgr_init();
aos_register_event_filter(EV_KEY, linkkit_key_process, NULL);
aos_register_event_filter (EV_WIFI, wifi_service_event, NULL);
aos_register_event_filter(EV_YUNIO, cloud_service_event, NULL);
#ifdef CONFIG_AOS_CLI
aos_cli_register_command(&resetcmd);
aos_cli_register_command(&ncmd);
#endif
set_iotx_info();
aos_task_new("netmgr", start_netmgr, NULL, 4096);
aos_loop_run ();
return 0;
}
2、條件編譯是個啥?
在入口函式中一共有5個條件編譯
- CONFIG_PRINT_HEAP:列印堆資訊
- CSP_LINUXHOST:
- AOS_ATCMD:AT指令功能
- WITH_SAL:AliOS Things網路適配框架 - SAL
- CONFIG_AOS_CLI:CLI除錯功能
3、純粹的程式碼
int application_start(int argc, char **argv)
{
aos_set_log_level(AOS_LL_NONE);
netmgr_init();
aos_register_event_filter(EV_KEY, linkkit_key_process, NULL);
aos_register_event_filter(EV_WIFI, wifi_service_event, NULL);
aos_register_event_filter(EV_YUNIO, cloud_service_event, NULL);
set_iotx_info();
aos_task_new("netmgr", start_netmgr, NULL, 4096);
aos_loop_run();
return 0;
}
aos_set_log_level(AOS_LL_NONE)
:設定AOS的日誌列印水平AOS_LL_NONE
:關閉日誌AOS_LL_FATAL
:輸出致命日誌AOS_LL_ERROR
:輸出致命日誌加錯誤日誌AOS_LL_WARN
:輸出致命日誌、錯誤和警告的日誌 (預設日誌水平)AOS_LL_INFO
:輸出資訊、警告和錯誤日誌AOS_LL_DEBUG
:輸出除錯、資訊、警告、錯誤、致命日誌
netmgr_init()
:這裡其實也是個條件編譯,編譯條件是:NET_WITH_WIFI
aos_register_event_filter(EV_KEY, linkkit_key_process, NULL)
:按鍵點選事件,處理程序,事件過濾器aos_register_event_filter(EV_WIFI, wifi_service_event, NULL)
:WiFi連線事件,處理程序,事件過濾aos_register_event_filter(EV_YUNIO, cloud_service_event, NULL)
:雲平臺連線事件,處理程序,事件過濾set_iotx_info()
:設定產品的四元組:PK、PS、DN、DSaos_task_new("netmgr", start_netmgr, NULL, 4096)
:建立一個任務“netmgr”aos_loop_run()
:進入loop迴圈
二、函式解析
1、aos_register_event_filter
宣告:
/**
* Register system event filter callback.
*
* @param[in] type event type interested.
* @param[in] cb system event callback.
* @param[in] priv private data past to cb.
*
* @return the operation status, 0 is OK, others is error.
*/
int aos_register_event_filter(uint16_t type, aos_event_cb cb, void *priv);
定義:
int aos_register_event_filter(uint16_t type, aos_event_cb cb, void *priv)
{
return SYS_CALL3(SYS_REGISTER_EVENT_FILTER, int, uint16_t, type,
aos_event_cb, cb, void *, priv);
}