[T106][ZXW-22]7520V3SCV2.01.01.02P42U09_VEC_V0.8_AP_VEC origin source commit
Change-Id: Ic6e05d89ecd62fc34f82b23dcf306c93764aec4b
diff --git a/ap/app/zte_comm/zte_mmi/mmi.c b/ap/app/zte_comm/zte_mmi/mmi.c
new file mode 100755
index 0000000..0d60a75
--- /dev/null
+++ b/ap/app/zte_comm/zte_mmi/mmi.c
@@ -0,0 +1,858 @@
+/*****************************************************************************
+* °æ±¾ËùÓÐ (C)ÖÐÐËͨѶ¹É·ÝÓÐÏÞ¹«Ë¾
+* Ä£¿éÃû £ºMMI
+* ÎļþÃû £ºmmi.c
+* Îļþ±êʶ £º
+* Ïà¹ØÎļþ £º
+* ʵÏÖ¹¦ÄÜ £º
+* ×÷Õß £º
+* °æ±¾ £ºV1.0
+* Íê³ÉÈÕÆÚ £º2014-6-20
+* ÆäËü˵Ã÷ £º
+*
+******************************************************************************/
+
+/*****************************************************************************
+ Í·Îļþ
+******************************************************************************/
+#include "mmi_common.h"
+#include "mmi_lcd.h"
+
+//ÏÂÃæ¶¼ÊÇdebug¶¨Î»ÎÊÌâʱÓõ½µÄÈ«¾Ö±äÁ¿
+#define MMI_DEBUG_MAINCONTROL
+#ifdef MMI_DEBUG_MAINCONTROL
+SINT32 g_mmi_MainContrlIndex = -1;
+SINT32 g_mmi_MainContrlProcess = -1;//0, get content;1 gelceinfo; 2 show
+SINT32 g_mmi_MainContrl = -1;
+
+
+int g_debug[20] = {0};
+int g_debug_index = 0;
+#endif
+/********************************************************************************
+ È«¾Ö±äÁ¿ÒýÓÃ
+**********************************************************************************/
+extern E_zMmiShowMode g_showMode;
+
+/********************************************************************************
+ È«¾Ö±äÁ¿¶¨Òå
+**********************************************************************************/
+int g_mmi_msgQue_Id = 0;
+pthread_mutex_t g_mmi_lcdmode_mutex ;
+pthread_mutex_t g_mmi_ledmode_mutex ;
+pthread_mutex_t g_mmi_update_flag_mutex;
+pthread_mutex_t g_mmi_refresh_lcd_mutex;
+pthread_mutex_t g_mmi_poweron_mutex;
+
+sem_t g_mmi_update_sem_id;
+sem_t g_mmi_init_sem_id;
+sem_t g_mmi_traffic_warn_sem_id;
+sem_t g_mmi_poweroff_sem_id ;
+sem_t g_mmi_gui_init_sem_id;
+
+
+UINT32 g_mmi_poweroff_turnon_flag = FALSE ;
+UINT32 g_mmi_led_status_flag = 0;
+T_zMMITaskInfoItem g_zMMITaskInfoTab[MMI_TASK_MAX] = {0};
+
+UINT32 g_smstask_enable = 0;
+UINT32 g_voicetask_enable = 0;
+UINT32 g_temp_protect = 0;
+UINT32 g_discharge_protect = 0;
+UINT32 g_charge_protect = 0;
+
+UINT32 g_fast_poweron = 0;
+UINT32 g_led_standby_mode = 0;
+UINT32 g_led_sleep_mode = 0;
+UINT32 g_use_wifi_usernum = 0;
+
+UINT32 g_show_pagefirst = 0;
+UINT32 g_show_pagesecond = 0;
+UINT32 g_show_pagethird = 0;
+/*
+SINT32 g_mmi_hightempvol = 0;
+SINT32 g_mmi_superhightempvol = 0;
+SINT32 g_mmi_lowtempvol = 0;
+SINT32 g_mmi_superlowtempvol = 0;
+*/
+SINT32 g_mmi_batvoltageline[21] = {0};
+
+SINT32 g_mmi_power_mode = 0;//0:charge;1:poweron
+
+//int g_customer_type = CUSTOMER_SDK; // Õë¶Ô²»Í¬¿Í»§µÄ¶¨ÖÆÐèÇó
+extern int g_customer_type;
+
+//ÉèÖô¥·¢¸üбêÖ¾
+VOID mmi_set_update_flag(E_zMmi_Task task)
+{
+ mmi_getMutex(&g_mmi_update_flag_mutex);
+ g_zMMITaskInfoTab[task].is_update = 1;
+ mmi_putMutex(&g_mmi_update_flag_mutex);
+
+ mmi_PutSemaphore(&g_mmi_update_sem_id);
+}
+
+VOID mmi_clean_update_flag(E_zMmi_Task task)
+{
+ mmi_getMutex(&g_mmi_update_flag_mutex);
+ g_zMMITaskInfoTab[task].is_update = 0;
+ mmi_putMutex(&g_mmi_update_flag_mutex);
+}
+SINT32 mmi_get_update_flag(E_zMmi_Task task)
+{
+ SINT32 ret = 0;
+ if (task >= MMI_TASK_MAX)//cov kw 3
+ return ret;
+ mmi_getMutex(&g_mmi_update_flag_mutex);
+ ret = g_zMMITaskInfoTab[task].is_update;
+ g_zMMITaskInfoTab[task].is_update = 0;
+ mmi_putMutex(&g_mmi_update_flag_mutex);
+ return ret;
+}
+
+//ÏÔʾledµÆ
+static VOID mmi_show_led_item(T_zMMITaskInfoItem* taskInfoItem)
+{
+ if (taskInfoItem->get_taskinfo_fun == NULL || taskInfoItem->taskinfo == NULL ||
+ taskInfoItem->get_ledinfo_fun == NULL || taskInfoItem->ledinfo == NULL) {
+ //slog(MMI_PRINT,SLOG_DEBUG,"ZTE_MMI mmi_show_led parameter null!!!\n");
+ return;
+ }
+ if (taskInfoItem->get_taskinfo_fun((UINT32)taskInfoItem->taskinfo) == MMI_SUCCESS) { //e64
+ if (taskInfoItem->get_ledinfo_fun((UINT32)taskInfoItem->taskinfo, (UINT32)taskInfoItem->ledinfo) == MMI_SUCCESS) {
+ mmi_showLed((UINT32)taskInfoItem->ledinfo);
+ }
+ }
+}
+//ÏÔʾlcdµÆ
+static VOID mmi_show_lcd_item(T_zMMITaskInfoItem* taskInfoItem)
+{
+ if (taskInfoItem->get_taskinfo_fun == NULL || taskInfoItem->taskinfo == NULL ||
+ taskInfoItem->get_lcdinfo_fun == NULL) {
+ slog(MMI_PRINT, SLOG_ERR, "ZTE_MMI mmi_show_lcd parameter null!!!");
+ return;
+ }
+#ifdef MMI_DEBUG_MAINCONTROL
+ g_mmi_MainContrlProcess = 0;//0, get content;1 gelceinfo; 2 show
+#endif
+ if (taskInfoItem->get_taskinfo_fun((UINT32)taskInfoItem->taskinfo) == MMI_SUCCESS) {
+#ifdef MMI_DEBUG_MAINCONTROL
+ g_mmi_MainContrlProcess = 1;//0, get content;1 gelceinfo; 2 show
+#endif
+ if (taskInfoItem->get_lcdinfo_fun((UINT32)taskInfoItem->taskinfo) == MMI_SUCCESS) {
+#ifdef MMI_DEBUG_MAINCONTROL
+ g_mmi_MainContrlProcess = 2;//0, get content;1 gelceinfo; 2 show
+#endif
+ //mmi_showLcd(appInfoItem->lcdinfo);
+ mmi_invalidateLcd(taskInfoItem->taskinfo);
+ }
+ }
+}
+//MMIÖ÷¿Ø
+static VOID *mmi_mainControllerEntry(VOID *arg)
+{
+ UINT32 i = 0;
+ int ret = 0;
+
+#ifdef MMI_DEBUG_MAINCONTROL
+ g_mmi_MainContrl = 1;
+#endif
+
+#ifndef DISABLE_LCD
+ if (g_showMode == MMI_MODE_LCD || g_showMode == MMI_MODE_ALL) {
+ while ((ret = mmi_GetSemaphore(&g_mmi_init_sem_id, MMI_WAIT_FOREVER)) != MMI_SUCCESS) {
+ slog(MMI_PRINT, SLOG_DEBUG, "zte_mmi g_mmi_update_sem_id get failed ret = %d,errno=%d\n", ret, errno);
+ continue;
+ }
+ mmi_DeleteSemaphore(&g_mmi_init_sem_id);
+ }
+#endif
+
+ while (1) {
+ if ((ret = mmi_GetSemaphore(&g_mmi_update_sem_id, MMI_WAIT_FOREVER)) != MMI_SUCCESS) {//kw 3
+ slog(MMI_PRINT, SLOG_DEBUG, "zte_mmi mmi_mainControllerEntry failed ret = %d,errno=%d\n", ret, errno);
+ continue;
+ }
+ for (i = 0; i < sizeof(g_zMMITaskInfoTab) / sizeof(T_zMMITaskInfoItem); ++ i) { //warning539
+#ifdef MMI_DEBUG_MAINCONTROL
+ g_mmi_MainContrlIndex = i;
+#endif
+ if (mmi_get_update_flag(g_zMMITaskInfoTab[i].task) == 1) { //ÓиüÐÂ
+ if (g_showMode == MMI_MODE_LED || g_showMode == MMI_MODE_ALL) { //led
+ mmi_show_led_item(&(g_zMMITaskInfoTab[i]));
+ }
+#ifndef DISABLE_LCD
+ if (g_showMode == MMI_MODE_LCD || g_showMode == MMI_MODE_ALL) { //lcd
+ mmi_show_lcd_item(&(g_zMMITaskInfoTab[i]));
+ }
+#endif
+ }
+ }
+#ifdef MMI_DEBUG_MAINCONTROL
+ g_mmi_MainContrlIndex = -1;
+ g_mmi_MainContrlProcess = -1;//0, get content;1 gelceinfo; 2 show
+#endif
+ }
+}
+
+
+//×¢²áMMIÒµÎñÐÅÏ¢
+VOID mmi_register_taskinfo_item(T_zMMITaskInfoItem* taskInfoItem)
+{
+ if (taskInfoItem != NULL) {
+ E_zMmi_Task task = taskInfoItem->task;//ÒµÎñ
+ g_zMMITaskInfoTab[task].task = taskInfoItem->task;
+ mmi_getMutex(&g_mmi_update_flag_mutex); //cov m
+ g_zMMITaskInfoTab[task].is_update = taskInfoItem->is_update;
+ mmi_putMutex(&g_mmi_update_flag_mutex);
+ //g_zMMIFrameInfoTab[appInfoItem->flag].show_mode= appInfoItem->show_mode;
+ g_zMMITaskInfoTab[task].taskinfo = taskInfoItem->taskinfo;
+ g_zMMITaskInfoTab[task].ledinfo = taskInfoItem->ledinfo;
+ g_zMMITaskInfoTab[task].get_taskinfo_fun = taskInfoItem->get_taskinfo_fun;
+ g_zMMITaskInfoTab[task].get_ledinfo_fun = taskInfoItem->get_ledinfo_fun;
+ g_zMMITaskInfoTab[task].get_lcdinfo_fun = taskInfoItem->get_lcdinfo_fun;
+ }
+}
+
+/********************************************************************************
+ MMI LOG´æÈëÎļþ
+**********************************************************************************/
+static char * mmi_get_time(void)
+{
+ time_t timep;
+ struct tm *p;
+ static char buf[22];
+ memset(buf, 0, 22);
+ time(&timep);
+ p = (struct tm *)localtime(&timep);
+ if (NULL == p) {
+ return NULL;
+ }
+ snprintf(buf, 21, "%4d/%02d/%02d %02d:%02d:%02d ", 1900 + p->tm_year, 1 + p->tm_mon, p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec);
+ return buf;
+}
+
+void mmi_log_save(const char *fmt, ...)
+{
+ time_t timep;
+ struct tm p = {0};
+ va_list ap;
+ FILE *fp = NULL;
+ struct stat statbuff;
+
+ time(&timep);
+ localtime_r(&timep, &p);
+#if MMI_SERIAL_DEBUG
+ //printf("%4d/%02d/%02d %02d:%02d:%02d ",1900 + p.tm_year,1 + p.tm_mon,p.tm_mday,p.tm_hour,p.tm_min,p.tm_sec);
+ va_start(ap, fmt);
+ vprintf(fmt, ap);
+ va_end(ap);
+#endif
+
+#if MMI_FILE_DEBUG
+ fp = fopen(MMI_LOG_FILE_PATH, "a+");
+
+ if (fp) {
+ fprintf(fp, "%4d/%02d/%02d %02d:%02d:%02d ", 1900 + p.tm_year, 1 + p.tm_mon, p.tm_mday, p.tm_hour, p.tm_min, p.tm_sec);
+ va_start(ap, fmt);
+ vfprintf(fp, fmt, ap);
+ va_end(ap);
+ fclose(fp);
+ if (stat(MMI_LOG_FILE_PATH, &statbuff) == 0) {
+ if (statbuff.st_size >= MMI_MAX_LOG_LENGTH) {
+ remove(MMI_LOG_OLD_FILE_PATH);
+ rename(MMI_LOG_FILE_PATH, MMI_LOG_OLD_FILE_PATH);
+ }
+ }
+ }
+#endif
+}
+
+
+/**********************************************************************************
+º¯Êý×÷ÓÃ:´¦Àí·¢¸øMMI½ø³ÌµÄÏûÏ¢
+***********************************************************************************/
+//zdm ½«mmiÄܹ»´¦ÀíµÄËùÓÐÏûÏ¢¾ù½øÐд¦Àí£¬º¯ÊýÄÚ²¿Í¨¹ýnvÀ´¾ö¶¨ÊÇ·ñÕæÕý½øÐд¦Àí
+//Èç¹ûµ±Ç°»·¾³ÎÞ·¨´¦Àí¸ÃÏûÏ¢£¬Ö±½Ó·µ»Ø¼´¿É
+static int mmi_ProcMsg(MSG_BUF *pstMsg)
+{
+ int i = 0;
+ if (NULL == pstMsg) {
+ return -1;
+ }
+ //kw 3, kw bug???
+ //if ((pstMsg->usMsgCmd != MSG_CMD_MMICHECK_TIP_INFO) && (pstMsg->usMsgCmd != MSG_CMD_MMIGET_WIFI_DATA)) {
+ slog(MMI_PRINT, SLOG_DEBUG, "ZTE_MMI Mmi_ProcMsg msg:src_id = 0x%04x,lMsgType = %d,usMsgCmd = 0x%08x,usDataLen = %d,data = %s\n", pstMsg->src_id, pstMsg->lMsgType, pstMsg->usMsgCmd, pstMsg->usDataLen, pstMsg->aucDataBuf);
+ //}
+ switch (pstMsg->usMsgCmd) {
+ case MSG_CMD_CHANNEL_NETWORK_MODE:
+ zMMI_Handle_Msg_Network_Mode((VOID *)pstMsg->aucDataBuf);
+ break;
+ case MSG_CMD_MULTI_CONNECT_STATUS:
+ zMMI_Handle_Msg_MultiConnect_Status((VOID *)pstMsg->aucDataBuf, pstMsg->src_id);
+ break;
+ case MSG_CMD_CHANNEL_CONNECT_STATUS:
+ zMMI_Handle_Msg_Connect_Status((VOID *)pstMsg->aucDataBuf);
+ break;
+ case MSG_CMD_OUT_REG_GET_SIGNAL_NUM:
+ zMMI_Handle_Msg_Signal_Num((VOID *)pstMsg->aucDataBuf);
+ break;
+ case MSG_CMD_SMS_STATUS_INFO_IND:
+ zMMI_Handle_Msg_SmsBox_Sattus((VOID *)pstMsg->aucDataBuf);
+ break;
+ case MSG_CMD_VOIP_STATUS_INFO:
+ zMMI_Handle_Msg_Voip_Status((VOID *)pstMsg->aucDataBuf);
+ break; //cov m
+ case MSG_CMD_RJ11_STATUS_INFO:
+ zMMI_Handle_Msg_Rj11_Status((VOID *)pstMsg->aucDataBuf);
+ break;
+ case MSG_CMD_MODIFY_SSID_KEY:
+ zMMI_Handle_Msg_Get_SSID_Key((VOID *)pstMsg->aucDataBuf);
+ break;
+ case MSG_CMD_MMIGET_WIFI_STANUM:
+ case MSG_CMD_STA_COUNT_CHANGE:
+ zMMI_Handle_Msg_Get_Wifi_StaNum((VOID *)pstMsg->aucDataBuf);
+ break;
+ case MSG_CMD_MMISTART_BACKLIGHTOFF_TIMER:
+ zMMI_Handle_Msg_BacklightOff((VOID *)pstMsg->aucDataBuf);
+ break;
+ case MSG_CMD_RESET_NOTIFY:
+ zMMI_Handle_Msg_Factory_Reset((VOID *)pstMsg->aucDataBuf);
+ break;
+ case MSG_CMD_POWEROFF_NOTIFY:
+ zMMI_Handle_Msg_Poweroff((VOID *)pstMsg->aucDataBuf);
+ break;
+ case MSG_CMD_RESTART_NOTIFY:
+ zMMI_Handle_Msg_Restart((VOID *)pstMsg->aucDataBuf);
+ break;
+ case MSG_CMD_GET_NET_PROVIDER:
+ zMMI_Handle_Msg_Get_Provider((VOID *)pstMsg->aucDataBuf);
+ break;
+ case MSG_CMD_GET_TRAFFIC_INFO_START:
+ zMMI_Handle_Msg_Get_TafficInfo_Start((VOID *)pstMsg->aucDataBuf);
+ break;
+ case MSG_CMD_GET_TRAFFIC_INFO_END:
+ zMMI_Handle_Msg_Get_TafficInfo_End((VOID *)pstMsg->aucDataBuf);
+ break;
+ case MSG_CMD_TRAFFIC_INFO_RESET:
+ zMMI_Handle_Msg_TafficInfo_Reset((VOID *)pstMsg->aucDataBuf);
+ break;
+ case MSG_CMD_MMICHECK_TIP_INFO:
+ zMMI_Handle_Msg_Check_Tip_Info((VOID *)pstMsg->aucDataBuf);
+ break;
+ case MSG_CMD_MMISHOW_SSID_INFO:
+ zMMI_Handle_Msg_SSID_Show_Info((VOID *)pstMsg->aucDataBuf);
+ break;
+ case MSG_CMD_MMIGET_WIFI_DATA:
+ zMMI_Handle_Msg_Get_Wifi_Data((VOID *)pstMsg->aucDataBuf);
+ break;
+ case MSG_CMD_POWEROFF_RSP:
+ zMMI_Handle_Msg_Plugout((VOID *)pstMsg->aucDataBuf);
+ break;
+ case MSG_CMD_SIM_ABNORMAL_IND:
+ zMMI_Handle_Msg_Simcard_Info((VOID *)pstMsg->aucDataBuf);
+ break;
+ case MSG_CMD_SOCKET_STATE_CHANGE:
+ zMMI_Handle_Msg_Socket_Status((VOID *)pstMsg->aucDataBuf, pstMsg->src_id);
+ break;
+ case MSG_CMD_MCUSOCKET_STATE_CHANGE:
+ zMMI_Handle_Msg_MCUSocket_Status((VOID *)pstMsg->aucDataBuf);
+ break;
+#if 0
+ case MSG_CMD_AUTOTEST_KEY_REQ:
+ if (g_mmi_power_mode == 1)
+ zMMI_Handle_Msg_Atest_Key((VOID *)pstMsg->aucDataBuf);
+ else
+ zMMI_Handle_Msg_Atest_Chg((VOID *)pstMsg->aucDataBuf);
+ break;
+#endif
+ }
+ return 0;
+#if 0
+ for (i = 0; i < (SINT32)(sizeof(scmp_info) / sizeof(scmp_info[0])); i++) {
+ if (pstMsg->usMsgCmd == scmp_info[i].id) {
+ if (scmp_info[i].func_ptr != NULL) {
+ scmp_info[i].func_ptr((VOID *)pstMsg->aucDataBuf);
+ }
+ return 0;
+ }
+ }
+#endif
+
+ return 0;
+}
+
+
+static void *mmi_handleMsgEntry(void *arg)
+{
+ long MsgType = 0;
+ MSG_BUF MmiMsg;
+ prctl(PR_SET_NAME, "mmihandlemsg", 0, 0, 0);
+ while (1) {
+ memset((VOID *)(&MmiMsg), 0, sizeof(MSG_BUF));//warning516
+ if (-1 != mmi_RecvMsgFromQueue(g_mmi_msgQue_Id, &MmiMsg, MsgType)) {
+ mmi_ProcMsg(&MmiMsg);
+ }
+ }
+}
+
+/**********************************************************************************
+º¯Êý×÷ÓÃ:¿ª»úʱÆÁ»òµÆµÄ¶¯×÷
+ LCD ÏÔʾ¿ª»ú¶¯»
+ LED Á÷Á¿µÆÏÈÈ«²¿Ï¨Ãð ÆäÓàËĸöµÆÍ¬Ê±ÉÁһϠÔÙ¸ù¾Ýʵ¼Ê״̬ÁÁÆð
+***********************************************************************************/
+static VOID mmi_set_poweron_show(VOID)
+{
+ mmi_set_led_mode(MMI_POWERON_MODE);
+ mmi_set_update_flag(MMI_TASK_CTRL);//¿ª»úģʽ ÏÔʾ¿ª»ú¶¯»
+}
+
+/**********************************************************************************
+º¯Êý×÷ÓÃ:mmi ÒµÎñ×¢²á
+***********************************************************************************/
+
+//zdm ʹÓÃnv¿ØÖÆÒµÎñµÄ×¢²áºÍ³õʼ»¯£¬ÔÝʱµÄʵÏÖÊǶÔÓÚ¿ª»úÉϵçµÄÿ¸öÒµÎñ£¬¾ùÌṩһ¸önv¿ØÖÆ
+//ºóÆÚÒª¸ù¾ÝÐèÇó£¬ÌáÈ¡³ö±ØÐëʹÓõÄnv¿ØÖÆÏ¶ÔÓÚÈκÎÇé¿öÏ£¬¾ùÐèÒªµÄÒµÎñ£¬Ö±½Ó×¢²á¾Í¿ÉÒÔ
+//²»ÔÙʹÓÃnv¿ØÖÆ£¬±ÈÈçMMI_TASK_CTRL£¬°´ÕÕÀí½âÓ¦¸ÃËùÓеij¡¾°Ï¾ùÐèҪע²áºÍ³õʼ»¯
+
+
+static int mmi_task_register()
+{
+ UINT32 i = 0;
+ char *nv_task_tab[NV_CONTENT_LEN] = {0};
+
+ //zdm ÔÚ×¢²áºÍ³õʼ»¯ÒµÎñ֮ǰ£¬ÏȽ«ÒµÎñĿ¼ÖеÄÿ¸öÒµÎñÏîÖÃΪÎÞЧ
+ for (i = 0; i < sizeof(g_zMMITaskInfoTab) / sizeof(T_zMMITaskInfoItem); ++ i) {
+ g_zMMITaskInfoTab[i].task = MMI_TASK_INVALID;
+ }
+
+ //Èç¹ûÓÐÓëled/lcd¾ùÐèҪʹÓõÄÒµÎñ£¬ÔÚÕâÀïÍê³É×¢²á£¬×¢²áºÍ³õʼ»¯º¯ÊýÄÚ²¿½øÐÐÇø·ÖlcdºÍled
+
+ sc_cfg_get("mmi_task_tab", nv_task_tab, sizeof(nv_task_tab));
+
+ if (strstr(nv_task_tab, "net_task")) {
+ mmi_RegisterNetTaskInfoItem();
+ }
+
+ //Ó²¼þÏÞÖÆ£¬Á½¸öÒµÎñ¸´ÓÃͬһ¸öÓ²¼þµÆ,Òò´ËnvʹÓÃsmsºÍvoice½øÐÐÇø·Ö
+
+ if (strstr(nv_task_tab, "sms_task") && strstr(nv_task_tab, "voice_task")) {
+ assert(0);
+ }
+
+ if (strstr(nv_task_tab, "sms_task")) {
+ mmi_RegisterSmsTaskInfoItem();
+ g_smstask_enable = 1;
+ } else if (strstr(nv_task_tab, "voice_task")) {
+ mmi_RegisterVoipTaskInfoItem();
+ g_voicetask_enable = 1;
+ }
+
+ //ÊÇ·ñÓÐµç³ØÌõ¼þ¿ØÖÆ
+ if (strstr(nv_task_tab, "battery_task")) {
+ mmi_RegisterBatteryTaskInfoItem();
+
+ }
+
+ if (strstr(nv_task_tab, "ctrl_task")) {
+ mmi_RegisterCtrlTaskInfoItem();
+ }
+
+
+ if (strstr(nv_task_tab, "wifi_task")) {
+ mmi_RegisterWifiTaskInfoItem();
+ }
+
+
+ if (strstr(nv_task_tab, "traffic_task")) {
+ mmi_RegisterTrafficTaskInfoItem();
+ }
+
+ if (g_showMode == MMI_MODE_LED || g_showMode == MMI_MODE_ALL) {
+ //×¢²áÓëledÏà¹ØµÄÒµÎñ £¬ÇëÎâºìʵÏÖ
+ if (strstr(nv_task_tab, "netsignal_task")) {
+ mmi_RegisterNetSigTaskInfoItem();
+ }
+ if (strstr(nv_task_tab, "ledwps_task")) {
+ mmi_RegisterWpsTaskInfoItem();
+ }
+ if (strstr(nv_task_tab, "rj11_task")) {
+ mmi_RegisterRj11TaskInfoItem();
+ }
+ }
+
+#ifndef DISABLE_LCD
+ if (g_showMode == MMI_MODE_LCD || g_showMode == MMI_MODE_ALL) {
+ //×¢²áÓëlcdÏà¹ØµÄÒµÎñ£¬ÇëÎâºìʵÏÖ
+ if (strstr(nv_task_tab, "tip_task")) {
+ mmi_RegisterTipTaskInfoItem();
+ }
+ //Ó²¼þÓеçÁ¿¼ÆµÄÌõ¼þÏ£¬²ÅÄÜ´ò¿ª
+
+ if (strstr(nv_task_tab, "power_task")) {
+ mmi_RegisterPowerTaskInfoItem();
+ }
+ //Ö§³ÖwifiµÄÇé¿öϲÅÄÜÖ§³Ö
+ if (strstr(nv_task_tab, "ssid_task")) {
+ mmi_RegisterSSIDInfoTaskInfoItem();
+ }
+ if (strstr(nv_task_tab, "wificode_task")) {
+ mmi_RegisterWifiCodeTaskInfoItem();
+ }
+ if (strstr(nv_task_tab, "tipnetconnect_task")) {
+ mmi_RegisterTipNetConnectTaskInfoItem();
+ }
+
+ if (strstr(nv_task_tab, "tipwps_task")) {
+ mmi_RegisterTipWpsTaskInfoItem();
+ }
+ if (strstr(nv_task_tab, "tipfota_task")) {
+ mmi_RegisterTipFotaTaskInfoItem();
+
+ }
+ if (strstr(nv_task_tab, "tipwifistation_task")) {
+ mmi_RegisterTipWifiStationConnectTaskInfoItem();
+ }
+ }
+#endif
+ return 0;
+}
+
+/**********************************************************************************
+º¯Êý×÷ÓÃ:mmi ÒµÎñ³õʼ»¯
+***********************************************************************************/
+
+//¶ÔÓÚÓÐÐèÇó¿ØÖƵÄijЩҵÎñ£¬ÌáÈ¡³Énv¿ØÖÆ£¬¸ù¾ÝÐèÇó½øÐдò¿ªºÍ¹Ø±ÕÅäÖÃ
+static int mmi_task_init()
+{
+ char *nv_task_tab[NV_CONTENT_LEN] = {0};
+
+
+ //Èç¹ûÓÐÓëled/lcd¾ùÐèҪʹÓõÄÒµÎñ£¬ÔÚÕâÀïÍê³É³õʼ»¯
+
+ sc_cfg_get("mmi_task_tab", nv_task_tab, sizeof(nv_task_tab));
+
+
+ if (strstr(nv_task_tab, "net_task")) {
+ mmi_net_init();
+ }
+
+ //Ó²¼þÏÞÖÆ£¬Á½¸öÒµÎñ¸´ÓÃͬһ¸öÓ²¼þµÆ,Òò´ËnvʹÓÃsmsºÍvoice½øÐÐÇø·Ö
+ if (strstr(nv_task_tab, "sms_task")) {
+ mmi_sms_init();
+
+ } else if (strstr(nv_task_tab, "voice_task")) {
+ mmi_voip_init();
+
+ }
+
+ //ÊÇ·ñÓÐµç³ØÌõ¼þ¿ØÖÆ
+ if (strstr(nv_task_tab, "battery_task")) {
+ mmi_battery_init();
+
+ }
+
+ if (strstr(nv_task_tab, "ctrl_task")) {
+ mmi_init_idle_control();
+ }
+
+ if (strstr(nv_task_tab, "wifi_task")) {
+ mmi_wifi_init();
+ }
+
+ if (strstr(nv_task_tab, "traffic_task")) {
+ mmi_traffic_init();
+ }
+
+ if (strstr(nv_task_tab, "key_task")) {
+ mmi_keyStrokes_init();
+ }
+
+
+ //³õʼ»¯½öÓëledÏà¹ØµÄÒµÎñ £¬ÇëÎâºìʵÏÖ
+ if (g_showMode == MMI_MODE_LED || g_showMode == MMI_MODE_ALL) {
+ }
+
+#ifndef DISABLE_LCD
+ //³õʼ»¯½öÓëlcdÏà¹ØµÄÒµÎñ£¬ÇëÎâºìʵÏÖ
+ if (g_showMode == MMI_MODE_LCD || g_showMode == MMI_MODE_ALL) {
+ if (strstr(nv_task_tab, "tip_task")) {
+ mmi_init_lcd_tip();
+ }
+ }
+#endif
+ return 0;
+}
+
+/**********************************************************************************
+º¯Êý×÷ÓÃ:mmi ÏÔʾģʽ³õʼ»¯
+***********************************************************************************/
+static int mmi_showmode_init()
+{
+ slog(MMI_PRINT, SLOG_DEBUG, "ZTE_MMI mmi_showmode_init \n");
+ if (g_showMode == MMI_MODE_LED || g_showMode == MMI_MODE_ALL) {
+ mmi_initLed();
+ }
+
+#ifndef DISABLE_LCD
+ if (g_showMode == MMI_MODE_LCD || g_showMode == MMI_MODE_ALL) {
+ mmi_set_lcd_page_index(MMI_SHOW_PAGE_FIRST);
+ mmi_initLcd(FALSE);
+ }
+#endif
+ return 0;
+}
+
+/**********************************************************************************
+º¯Êý×÷ÓÃ:MMIÈë¿Úº¯Êý ´´½¨ÏûÏ¢¶ÓÁÐ ¸÷¸öµÆ³õʼ»¯ ½ÓÊÕÏûÏ¢
+***********************************************************************************/
+VOID mmi_powerOnLcdEntry()
+{
+ pthread_t mmi_handlemsg_thread;
+ //´´½¨MMIÏûÏ¢¶ÓÁÐ
+ if ((g_mmi_msgQue_Id = mmi_create_msg_queue()) == -1) {
+ slog(MMI_PRINT, SLOG_ERR, "ZTE_MMI create g_mmi_msgQue_Id failed!!!\n");
+ MMI_ASSERT(0);
+ }
+ pthread_mutex_init(&g_mmi_lcdmode_mutex, NULL);
+ pthread_mutex_init(&g_mmi_ledmode_mutex, NULL);
+ pthread_mutex_init(&g_mmi_update_flag_mutex, NULL);
+ pthread_mutex_init(&g_mmi_refresh_lcd_mutex, NULL);
+ sem_init(&g_mmi_update_sem_id, 0, 0);
+ sem_init(&g_mmi_init_sem_id, 0, 0);
+ sem_init(&g_mmi_traffic_warn_sem_id, 0, 0);
+ sem_init(&g_mmi_poweroff_sem_id, 0, 0); //ÓÃÓڹػúʱ±£Ö¤LCDÆÁ²¥Íê¹Ø»ú¶¯»ºóÃðÆ½»òLEDµÆ¶¼ÁÁÖ®ºóÔÙÃðµÆ
+
+ slog(MMI_PRINT, SLOG_DEBUG, "ZTE_MMI start set_mmi_active\n");
+ set_wake_lock(MMI_MAIN_LOCK_ID);
+
+ //´´½¨MMI ´¦ÀíÏûÏ¢Ïß³Ì
+ if (pthread_create(&mmi_handlemsg_thread, NULL, &mmi_handleMsgEntry, NULL) == -1) {
+ slog(MMI_PRINT, SLOG_ERR, "ZTE_MMI pthread_create handle msg error\n");
+ return ;
+ }
+ mmi_showmode_init();
+
+ mmi_task_register();
+ mmi_task_init();
+
+ mmi_set_poweron_show();
+ slog(MMI_PRINT, SLOG_NORMAL, "ZTE_MMI main Register finish!!\n");
+
+ //´´½¨MMIÖ÷¿ØÏß³Ì
+ mmi_mainControllerEntry(NULL);
+}
+
+/**********************************************************************************
+º¯Êý×÷ÓÃ:¹Ø»ú³äµç
+***********************************************************************************/
+VOID mmi_poweroffcharger_init()
+{
+
+ UINT32 i = 0;
+ pthread_t mmi_handlemsg_thread;
+ //´´½¨MMIÏûÏ¢¶ÓÁÐ
+ if ((g_mmi_msgQue_Id = mmi_create_msg_queue()) == -1) {
+ slog(MMI_PRINT, SLOG_ERR, "ZTE_MMI create g_mmi_msgQue_Id failed!!!\n");
+ MMI_ASSERT(0);
+ }
+
+ pthread_t mmi_offchg_mainctrl_thread;
+ pthread_mutex_init(&g_mmi_update_flag_mutex, NULL);
+ pthread_mutex_init(&g_mmi_poweron_mutex, NULL);
+ sem_init(&g_mmi_update_sem_id, 0, 0);
+ sem_init(&g_mmi_init_sem_id, 0, 0);
+
+#ifndef DISABLE_LCD
+ if (g_showMode == MMI_MODE_LCD || g_showMode == MMI_MODE_ALL) {
+ sem_init(&g_mmi_gui_init_sem_id, 0, 0);
+ }
+#endif
+
+ //´´½¨MMI ´¦ÀíÏûÏ¢Ïß³Ì
+ if (pthread_create(&mmi_handlemsg_thread, NULL, &mmi_handleMsgEntry, NULL) == -1) {
+ slog(MMI_PRINT, SLOG_ERR, "ZTE_MMI pthread_create handle msg error\n");
+ return ;
+ }
+
+ for (i = 0; i < sizeof(g_zMMITaskInfoTab) / sizeof(T_zMMITaskInfoItem); ++ i) {
+ g_zMMITaskInfoTab[i].task = MMI_TASK_INVALID;
+ }
+
+ offchg_RegisterPocTaskInfoItem();
+ if (g_showMode == MMI_MODE_LED || g_showMode == MMI_MODE_ALL) {
+ mmi_initLed();
+ }
+#ifndef DISABLE_LCD
+ if (g_showMode == MMI_MODE_LCD || g_showMode == MMI_MODE_ALL) {
+ mmi_initLcd(TRUE);
+ }
+#endif
+
+ int res = pthread_create(&mmi_offchg_mainctrl_thread, NULL, &mmi_mainControllerEntry, NULL);
+ if (res != 0) {
+ slog(MMI_PRINT, SLOG_ERR, "ZTE_MMI pthread_create main control error\n");
+ assert(0);
+ }
+}
+
+static int get_nv()
+{
+ char mmi_nv_value[NV_CONTENT_LEN] = {0};
+ SINT32 ret_fd = -1;
+ int state = 0;
+
+ //ÉèÖÃmmiÏÔʾģʽȫ¾Ö±äÁ¿
+ sc_cfg_get("mmi_showmode", mmi_nv_value, sizeof(mmi_nv_value));
+ if (0 == strcmp(mmi_nv_value, "led")) {
+ g_showMode = MMI_MODE_LED;
+ ret_fd = open(LCD_PATH, O_RDWR);
+ if (ret_fd == -1)
+ {
+ slog(MMI_PRINT, SLOG_ERR,"ZTE_MMI mmi_file_operate open file fail: %s!\n", LCD_PATH);
+ }
+ else
+ {
+ if(ioctl(ret_fd, LEADT15DS26_SET_BACKLIGHT, &state) < 0)
+ {
+ slog(MMI_PRINT, SLOG_ERR,"get_nv ioctl fail!\n");
+ }
+ }
+ } else if (0 == strcmp(mmi_nv_value, "lcd")) {
+ g_showMode = MMI_MODE_LCD;
+ } else if (0 == strcmp(mmi_nv_value, "all")) {
+ g_showMode = MMI_MODE_ALL;
+ } else {
+ assert(0);
+ }
+
+ sc_cfg_get("customer_type",mmi_nv_value,sizeof(mmi_nv_value));
+ if(0 == strcmp(mmi_nv_value, "sdk_min"))
+ {
+ g_customer_type = CUSTOMER_SDK_MIN;
+ }
+ else if(0 == strcmp(mmi_nv_value, "guodian"))
+ {
+ g_customer_type = CUSTOMER_GUODIAN;
+ }
+ else if(0 == strcmp(mmi_nv_value, "nandian"))
+ {
+ g_customer_type = CUSTOMER_NANDIAN;
+ }
+
+ sc_cfg_get("mmi_use_protect", mmi_nv_value, sizeof(mmi_nv_value));
+
+ if (strstr(mmi_nv_value, "discharge_protect")) {
+ g_discharge_protect = 1;
+ }
+
+ if (strstr(mmi_nv_value, "temp_protect")) {
+ g_temp_protect = 1;
+
+ if (strstr(mmi_nv_value, "charge_protect")) {
+ g_charge_protect = 1;
+ }
+ }
+
+ sc_cfg_get("mmi_fast_poweron", mmi_nv_value, sizeof(mmi_nv_value));
+
+ if (0 == strcmp(mmi_nv_value, "1")) {
+ g_fast_poweron = 1;
+
+ }
+
+ sc_cfg_get("mmi_led_mode", mmi_nv_value, sizeof(mmi_nv_value));
+
+ if (strstr(mmi_nv_value, "standby_mode")) {
+ g_led_standby_mode = 1;
+
+ }
+
+ if (strstr(mmi_nv_value, "sleep_mode")) {
+ g_led_sleep_mode = 1;
+ }
+
+
+ sc_cfg_get("mmi_use_wifi_usernum", mmi_nv_value, sizeof(mmi_nv_value));
+
+ if (0 == strcmp(mmi_nv_value, "1")) {
+ g_use_wifi_usernum = 1;
+ }
+
+ sc_cfg_get("mmi_show_pagetab", mmi_nv_value, sizeof(mmi_nv_value));
+
+ if (strstr(mmi_nv_value, "page1")) {
+ g_show_pagefirst = 1;
+ }
+ if (strstr(mmi_nv_value, "page2")) {
+ g_show_pagesecond = 1;
+ }
+ if (strstr(mmi_nv_value, "page3")) {
+ g_show_pagethird = 1;
+ }
+ /*
+ sc_cfg_get("mmi_temp_voltage_line", mmi_nv_value, sizeof(mmi_nv_value));
+ {
+ char *tmp = NULL;
+ char *substr = strtok_r(mmi_nv_value, "+",&tmp);
+ int temp[4] = {0};
+ int i = 0;
+ while (substr != NULL) {
+ temp[i] = atoi(substr);
+ i++;
+ substr = strtok_r(NULL, "+",&tmp);
+ }
+ g_mmi_superhightempvol = temp[0];
+ g_mmi_hightempvol = temp[1];
+ g_mmi_lowtempvol = temp[2];
+ g_mmi_superlowtempvol = temp[3];
+ }
+ */
+ sc_cfg_get("mmi_battery_voltage_line", mmi_nv_value, sizeof(mmi_nv_value));
+ {
+ char *tmp = NULL;
+ char *substr = strtok_r(mmi_nv_value, "+",&tmp);
+ int i = 0;
+ while (substr != NULL) {
+ g_mmi_batvoltageline[i] = atoi(substr);
+ slog(MMI_PRINT, SLOG_DEBUG, "g_mmi_batvoltageline[%d] = %d\n", i, g_mmi_batvoltageline[i]);
+ i++;
+ substr = strtok_r(NULL, "+",&tmp);
+ }
+ }
+ if(ret_fd >= 0)
+ close(ret_fd);
+ return 0;
+}
+
+/**********************************************************************************
+º¯Êý×÷ÓÃ:MMIÈë¿Úº¯Êý ´´½¨ÏûÏ¢¶ÓÁÐ ¸÷¸öµÆ³õʼ»¯ ½ÓÊÕÏûÏ¢
+***********************************************************************************/
+int zte_mmi_main(int argc, char * argv[])
+{
+ prctl(PR_SET_NAME, "mmi", 0, 0, 0);
+ //¸ù¾ÝNV³õʼ»¯´òÓ¡¼¶±ð£¬²¢×¢²á¶¯Ì¬µ÷Õû´òÓ¡¼¶±ðÐźÅÁ¿
+ loglevel_init();
+
+ //zdm½«nvÉèÖÃת»»³ÉÈ«¾Ö±äÁ¿½øÐй¦ÄÜ¿ØÖÆ
+ get_nv();
+ mmi_BatLedOffOpt();//¹ØbootµãµÄµÆ
+#ifdef DISABLE_LCD
+ if (g_showMode != MMI_MODE_LED) {
+ slog(MMI_PRINT, SLOG_ERR, "ZTE_MMI MIN only support LED \n");
+ return -1;
+ }
+#endif
+
+ if (argc >= 2) {
+ slog(MMI_PRINT, SLOG_DEBUG, "ZTE_MMI ###POWER OFF CHARGER START####\n");
+ g_mmi_power_mode = 0;
+ zMmi_PowerOffChargerEntry();
+ } else {
+ slog(MMI_PRINT, SLOG_DEBUG, "ZTE_MMI ######START######\n");
+ g_mmi_power_mode = 1;
+ mmi_powerOnLcdEntry();
+ }
+ return 0;
+}
+