627 lines
21 KiB
C
Raw Normal View History

2025-04-10 17:31:33 +08:00
#include <string.h>
#include "FreeRTOS.h"
#include "ostask.h"
#include "cmsis_os2.h"
#include "charge.h"
#include "ps_sms_if.h"
#ifdef FEATURE_DRIVER_KEYPAD_ENABLE
#include "keypad.h"
#include "kpc.h"
#endif
#ifdef FEATURE_SUBSYS_STATUS_ENABLE
#include "status.h"
#endif
#ifdef FEATURE_SUBSYS_MODE_ENABLE
#include "mode.h"
#endif
#include "bsp_custom.h"
#include DEBUG_LOG_HEADER_FILE
#include "plat_config.h"
#ifdef FEATURE_SUBSYS_APPHUB_ENABLE
#include "app.h"
#include "apphub.h"
#endif
#ifdef FEATURE_SUBSYS_SYSLOG_ENABLE
#include "syslog.h"
#endif
#ifdef FEATURE_SUBSYS_GUI_FPUI_ENABLE
#include "fpui.h"
#include "ui.h"
#include "merged.h"
#endif
#include "featureSms.h"
extern int cur_menu_func_id;
extern sub_func sub_func_table[];
int32_t submenu_Proc(AppInfoT *appInfo,AppMsgT *msg, uint32_t reserved2, uint32_t syscallTable);
extern AppT mainApp;
extern lv_obj_t *ui_app_sms_show(fpui_smshow_t *data);
#if (defined(PSRAM_FEATURE_ENABLE) && (PSRAM_EXIST == 1) && (!(defined(TYPE_EC718M))))
static PLAT_FPSRAM_ZI_CUST char gSmsText[40 + 40 + PSIL_SMS_MAX_TXT_SIZE + 1 + 8] = {0};
#else
static char gSmsText[40 + 40 + PSIL_SMS_MAX_TXT_SIZE + 1 + 8] = {0};
#endif
static const char gSmsDetailbtn[3][8] = {"", "", "返回"};
static const fpui_smshow_t gSmsData = {.title = "信息详情", .message = gSmsText, .bottomBtn = gSmsDetailbtn};
static bool gSmsInDetail = false;
fpui_sms_t presetSms_data = {0};
int presetSms_total_num = 0;
int presetSms_cur_item = 0;
char list_presetSms[6][40] = {0};
static char list_presetSmsbtn[3][8] = {
"发送",
"",
"返回",
};
fpui_sms_t smsInbox_data = {0};
int smsInbox_total_num = 0;
int smsInbox_cur_item = 0;
char list_smsInbox[2][3][40] = {0};
static char list_smsInboxbtn[3][8] = {
"查看",
"",
"返回",
};
fpui_sms_t smsOutbox_data = {0};
int smsOutbox_total_num = 0;
int smsOutbox_cur_item = 0;
char list_smsOutbox[2][3][40] = {0};
static char list_smsOutboxbtn[3][8] = {
"",
"",
"返回",
};
extern char cur_menu_name[];
static void showPresetSms(void)
{
presetSms_db *presetSmsDb = NULL;
uint32_t indexBegin = 0;
uint32_t indexEnd = 0;
uint32_t total = 6;
SYSLOG_DEBUG("cur_menu_func_id:%d\r\n",sub_func_table[cur_menu_func_id].index);
SYSLOG_DEBUG("presetSms_cur_item:%d\r\n",presetSms_cur_item);
presetSms_total_num = get_db_item_length(sub_func_table[cur_menu_func_id].index);
memset(&presetSms_data, 0, sizeof(presetSms_data));
memset(list_presetSms, 0, sizeof(list_presetSms));
if (presetSms_total_num > 0)
{
if ((presetSms_total_num > total) && (presetSms_cur_item > total - 1))
{
presetSms_data.total = total;
presetSms_data.select = presetSms_data.total - 1;
indexBegin = presetSms_cur_item - (presetSms_data.total - 1);
indexEnd = presetSms_cur_item;
}
else
{
presetSms_data.total = (presetSms_total_num > total) ? total : presetSms_total_num;
presetSms_data.select = presetSms_cur_item;
indexBegin = 0;
indexEnd = presetSms_data.total - 1;
}
for (uint32_t i=indexBegin; i<=indexEnd; i++)
{
get_db_item(sub_func_table[cur_menu_func_id].index, i, &presetSmsDb);
if (presetSmsDb != NULL)
{
memcpy(list_presetSms[i - indexBegin], presetSmsDb, strlen(presetSmsDb));
SYSLOG_DEBUG("presetSms_db[%d]: %s\r\n", i, presetSmsDb->data);
#if (defined(PSRAM_FEATURE_ENABLE) && (PSRAM_EXIST == 1) && (!(defined(TYPE_EC718M))))
vPortFree_Psram(presetSmsDb);
#else
free(presetSmsDb);
#endif
presetSmsDb = NULL;
}
}
}
presetSms_data.title = "常用短信";
presetSms_data.lines = 1;
presetSms_data.context = list_presetSms;
presetSms_data.bottomBtn = list_presetSmsbtn;
SYSLOG_DEBUG("presetSms_data: title=%s, total=%d, select=%d, lines=%d\r\n", presetSms_data.title, presetSms_data.total, presetSms_data.select, presetSms_data.lines);
ui_sms_set(&presetSms_data);
}
static void showSmsInbox(void)
{
smsInbox_db *smsInboxDb = NULL;
SYSLOG_DEBUG("cur_menu_func_id:%d\r\n",sub_func_table[cur_menu_func_id].index);
SYSLOG_DEBUG("smsInbox_cur_item:%d\r\n",smsInbox_cur_item);
smsInbox_total_num = get_db_item_length(sub_func_table[cur_menu_func_id].index);
memset(gSmsText, 0, sizeof(gSmsText));
memset(&smsInbox_data, 0, sizeof(smsInbox_data));
memset(list_smsInbox, 0, sizeof(list_smsInbox));
if(smsInbox_total_num >= 2)
{
smsInbox_data.total = 2;
smsInbox_data.select = (smsInbox_cur_item >= 1) ? 1 : 0;
int index0 = smsInbox_cur_item;
int index1 = smsInbox_cur_item+1;
if(index1 >= smsInbox_total_num || smsInbox_data.select == 1)
{
index0 = smsInbox_cur_item - 1;
index1 = smsInbox_cur_item;
}
get_db_item(sub_func_table[cur_menu_func_id].index, index0, &smsInboxDb);
if (smsInboxDb != NULL)
{
memcpy(list_smsInbox[0], smsInboxDb, sizeof(list_smsInbox[0]) - 1);
SYSLOG_DEBUG("list_smsInbox[0][0]: %s\r\n", list_smsInbox[0][0]);
SYSLOG_DEBUG("list_smsInbox[0][1]: %s\r\n", list_smsInbox[0][1]);
SYSLOG_DEBUG("list_smsInbox[0][2]: %s\r\n", list_smsInbox[0][2]);
if (smsInbox_data.select == 0)
{
memcpy(gSmsText, smsInboxDb->number, strlen(smsInboxDb->number));
memcpy(&gSmsText[strlen(gSmsText)], "\r\n", strlen("\r\n"));
memcpy(&gSmsText[strlen(gSmsText)], smsInboxDb->time, strlen(smsInboxDb->time));
memcpy(&gSmsText[strlen(gSmsText)], "\r\n", strlen("\r\n"));
memcpy(&gSmsText[strlen(gSmsText)], smsInboxDb->data, strlen(smsInboxDb->data));
}
#if (defined(PSRAM_FEATURE_ENABLE) && (PSRAM_EXIST == 1) && (!(defined(TYPE_EC718M))))
vPortFree_Psram(smsInboxDb);
#else
free(smsInboxDb);
#endif
smsInboxDb = NULL;
}
get_db_item(sub_func_table[cur_menu_func_id].index, index1, &smsInboxDb);
if (smsInboxDb != NULL)
{
memcpy(list_smsInbox[1], smsInboxDb, sizeof(list_smsInbox[1]) - 1);
SYSLOG_DEBUG("list_smsInbox[1][0]: %s\r\n", list_smsInbox[1][0]);
SYSLOG_DEBUG("list_smsInbox[1][1]: %s\r\n", list_smsInbox[1][1]);
SYSLOG_DEBUG("list_smsInbox[1][2]: %s\r\n", list_smsInbox[1][2]);
if (smsInbox_data.select == 1)
{
memcpy(gSmsText, list_smsInbox[1][0], strlen(list_smsInbox[1][0]));
memcpy(&gSmsText[strlen(gSmsText)], "\r\n", strlen("\r\n"));
memcpy(&gSmsText[strlen(gSmsText)], list_smsInbox[1][1], strlen(list_smsInbox[1][1]));
memcpy(&gSmsText[strlen(gSmsText)], "\r\n", strlen("\r\n"));
memcpy(&gSmsText[strlen(gSmsText)], list_smsInbox[1][2], strlen(list_smsInbox[1][2]));
}
#if (defined(PSRAM_FEATURE_ENABLE) && (PSRAM_EXIST == 1) && (!(defined(TYPE_EC718M))))
vPortFree_Psram(smsInboxDb);
#else
free(smsInboxDb);
#endif
smsInboxDb = NULL;
}
}
else
{
smsInbox_data.total = smsInbox_total_num;
if(smsInbox_total_num > 0)
{
get_db_item(sub_func_table[cur_menu_func_id].index, smsInbox_cur_item, &smsInboxDb);
if (smsInboxDb != NULL)
{
memcpy(list_smsInbox[0], smsInboxDb, sizeof(list_smsInbox[0]) - 1);
SYSLOG_DEBUG("list_smsInbox[0][0]: %s\r\n", list_smsInbox[0][0]);
SYSLOG_DEBUG("list_smsInbox[0][1]: %s\r\n", list_smsInbox[0][1]);
SYSLOG_DEBUG("list_smsInbox[0][2]: %s\r\n", list_smsInbox[0][2]);
memcpy(gSmsText, list_smsInbox[0][0], strlen(list_smsInbox[0][0]));
memcpy(&gSmsText[strlen(gSmsText)], "\r\n", strlen("\r\n"));
memcpy(&gSmsText[strlen(gSmsText)], list_smsInbox[0][1], strlen(list_smsInbox[0][1]));
memcpy(&gSmsText[strlen(gSmsText)], "\r\n", strlen("\r\n"));
memcpy(&gSmsText[strlen(gSmsText)], list_smsInbox[0][2], strlen(list_smsInbox[0][2]));
#if (defined(PSRAM_FEATURE_ENABLE) && (PSRAM_EXIST == 1) && (!(defined(TYPE_EC718M))))
vPortFree_Psram(smsInboxDb);
#else
free(smsInboxDb);
#endif
smsInboxDb = NULL;
}
}
}
smsInbox_data.title = "收件箱";
smsInbox_data.lines = 3;
smsInbox_data.context = list_smsInbox;
smsInbox_data.bottomBtn = list_smsInboxbtn;
SYSLOG_DEBUG("smsInbox_data: title=%s, total=%d, select=%d, lines=%d\r\n", smsInbox_data.title, smsInbox_data.total, smsInbox_data.select, smsInbox_data.lines);
ui_sms_set(&smsInbox_data);
}
static void showSmsOutbox(void)
{
smsOutbox_db *smsOutboxDb = NULL;
SYSLOG_DEBUG("cur_menu_func_id:%d\r\n",sub_func_table[cur_menu_func_id].index);
SYSLOG_DEBUG("smsOutbox_cur_item:%d\r\n",smsOutbox_cur_item);
smsOutbox_total_num = get_db_item_length(sub_func_table[cur_menu_func_id].index);
memset(&smsOutbox_data, 0, sizeof(smsOutbox_data));
memset(list_smsOutbox, 0, sizeof(list_smsOutbox));
if(smsOutbox_total_num >= 2)
{
smsOutbox_data.total = 2;
smsOutbox_data.select = (smsOutbox_cur_item >= 1) ? 1 : 0;
int index0 = smsOutbox_cur_item;
int index1 = smsOutbox_cur_item+1;
if(index1 >= smsOutbox_total_num || smsOutbox_data.select == 1)
{
index0 = smsOutbox_cur_item - 1;
index1 = smsOutbox_cur_item;
}
get_db_item(sub_func_table[cur_menu_func_id].index, index0, &smsOutboxDb);
if (smsOutboxDb != NULL)
{
memcpy(list_smsOutbox[0], smsOutboxDb, sizeof(smsOutbox_db));
SYSLOG_DEBUG("list_smsOutbox[0][0]: %s\r\n", list_smsOutbox[0][0]);
SYSLOG_DEBUG("list_smsOutbox[0][1]: %s\r\n", list_smsOutbox[0][1]);
SYSLOG_DEBUG("list_smsOutbox[0][2]: %s\r\n", list_smsOutbox[0][2]);
#if (defined(PSRAM_FEATURE_ENABLE) && (PSRAM_EXIST == 1) && (!(defined(TYPE_EC718M))))
vPortFree_Psram(smsOutboxDb);
#else
free(smsOutboxDb);
#endif
smsOutboxDb = NULL;
}
get_db_item(sub_func_table[cur_menu_func_id].index, index1, &smsOutboxDb);
if (smsOutboxDb != NULL)
{
memcpy(list_smsOutbox[1], smsOutboxDb, sizeof(smsOutbox_db));
SYSLOG_DEBUG("list_smsOutbox[1][0]: %s\r\n", list_smsOutbox[1][0]);
SYSLOG_DEBUG("list_smsOutbox[1][1]: %s\r\n", list_smsOutbox[1][1]);
SYSLOG_DEBUG("list_smsOutbox[1][2]: %s\r\n", list_smsOutbox[1][2]);
#if (defined(PSRAM_FEATURE_ENABLE) && (PSRAM_EXIST == 1) && (!(defined(TYPE_EC718M))))
vPortFree_Psram(smsOutboxDb);
#else
free(smsOutboxDb);
#endif
smsOutboxDb = NULL;
}
}
else
{
smsOutbox_data.total = smsOutbox_total_num;
if(smsOutbox_total_num > 0)
{
get_db_item(sub_func_table[cur_menu_func_id].index, smsOutbox_cur_item, &smsOutboxDb);
if (smsOutboxDb != NULL)
{
memcpy(list_smsOutbox[0], smsOutboxDb, sizeof(smsOutbox_db));
SYSLOG_DEBUG("list_smsOutbox[0][0]: %s\r\n", list_smsOutbox[0][0]);
SYSLOG_DEBUG("list_smsOutbox[0][1]: %s\r\n", list_smsOutbox[0][1]);
SYSLOG_DEBUG("list_smsOutbox[0][2]: %s\r\n", list_smsOutbox[0][2]);
#if (defined(PSRAM_FEATURE_ENABLE) && (PSRAM_EXIST == 1) && (!(defined(TYPE_EC718M))))
vPortFree_Psram(smsOutboxDb);
#else
free(smsOutboxDb);
#endif
smsOutboxDb = NULL;
}
}
}
smsOutbox_data.title = "发件箱";
smsOutbox_data.lines = 3;
smsOutbox_data.context = list_smsOutbox;
smsOutbox_data.bottomBtn = list_smsOutboxbtn;
SYSLOG_DEBUG("smsInbox_data: title=%s, total=%d, select=%d, lines=%d\r\n", smsOutbox_data.title, smsOutbox_data.total, smsOutbox_data.select, smsOutbox_data.lines);
ui_sms_set(&smsOutbox_data);
}
int32_t newSms_init(AppInfoT *appInfo,AppMsgT *msg, uint32_t reserved2, uint32_t syscallTable)
{
SYSLOG_DEBUG("newSms_init\r\n");
return 0;
}
int32_t newSms_proc(AppInfoT *appInfo,AppMsgT *msg, uint32_t reserved2, uint32_t syscallTable)
{
SYSLOG_DEBUG("newSms_proc\r\n");
switch(msg->msgType)
{
case APP_KEY_MSG:
SYSLOG_DEBUG("menu_Proc msgType:%d,key:0x%x\r\n",msg->msgType,msg->param1);
switch(msg->param1)
{
case FUNC_CODE_MENU:
break;
default:
break;
}
break;
default:
break;
}
return 0;
}
int32_t presetSms_init(AppInfoT *appInfo,AppMsgT *msg, uint32_t reserved2, uint32_t syscallTable)
{
SYSLOG_DEBUG("presetSms_init\r\n");
presetSms_cur_item = 0;
showPresetSms();
return 0;
}
static void saveSmsIntoOutbox(char *number, char *text)
{
if ((number != NULL) && (text != NULL))
{
char outbox[3][40] = {0};
memset(outbox, 0, sizeof(outbox));
memcpy(outbox[0], number, strlen(number));
time_t time1 = time_time(NULL);
struct tm *tmTime = time_gmtime(&time1);
snprintf(outbox[1], sizeof(outbox[1]), "%d-%d-%d %d:%d:%d", 1900 + tmTime->tm_year, tmTime->tm_mon + 1, tmTime->tm_mday, tmTime->tm_hour, tmTime->tm_min, tmTime->tm_sec);
memcpy(outbox[2], text, strlen(text));
#ifdef FEATURE_SUBSYS_JSONDB_ENABLE
jsonDbAddItem("D:/smsOutboxDb.json", "D:/smsOutboxDb.type", outbox);
#endif
}
}
int32_t presetSms_proc(AppInfoT *appInfo,AppMsgT *msg, uint32_t reserved2, uint32_t syscallTable)
{
char *number = "123";
char *text = list_presetSms[presetSms_data.select];
SYSLOG_DEBUG("presetSms_proc\r\n");
switch(msg->msgType)
{
case APP_KEY_MSG:
SYSLOG_DEBUG("menu_Proc msgType:%d,key:0x%x\r\n",msg->msgType,msg->param1);
switch(msg->param1)
{
case FUNC_CODE_MENU:
SYSLOG_DEBUG("Send SMS: number=%s, text=%s\r\n", number, text);
smsSendText(number, text);
saveSmsIntoOutbox(number, text);
break;
case FUNC_CODE_DIR_U:
if (--presetSms_cur_item < 0)
{
presetSms_cur_item = presetSms_total_num - 1;
}
showPresetSms();
SYSLOG_DEBUG("presetSms_total_num:%d\r\n",presetSms_total_num);
SYSLOG_DEBUG("presetSms_cur_item %d\r\n",presetSms_cur_item);
break;
case FUNC_CODE_DIR_D:
if (++presetSms_cur_item >= presetSms_total_num)
{
presetSms_cur_item = 0;
}
showPresetSms();
SYSLOG_DEBUG("presetSms_total_num:%d\r\n",presetSms_total_num);
SYSLOG_DEBUG("presetSms_cur_item %d\r\n",presetSms_cur_item);
break;
case FUNC_CODE_BACK:
mainApp.msgProc = submenu_Proc;
show_list();
break;
default:
break;
}
break;
default:
break;
}
return 0;
}
int32_t deleteSms_proc(AppInfoT *appInfo,AppMsgT *msg, uint32_t reserved2, uint32_t syscallTable)
{
SYSLOG_DEBUG("deleteSms_proc\r\n");
switch(msg->msgType)
{
case APP_KEY_MSG:
SYSLOG_DEBUG("menu_Proc msgType:%d,key:0x%x\r\n",msg->msgType,msg->param1);
switch(msg->param1)
{
case FUNC_CODE_MENU:
break;
default:
break;
}
break;
default:
break;
}
return 0;
}
int32_t editSms_proc(AppInfoT *appInfo,AppMsgT *msg, uint32_t reserved2, uint32_t syscallTable)
{
SYSLOG_DEBUG("editSms_proc\r\n");
switch(msg->msgType)
{
case APP_KEY_MSG:
SYSLOG_DEBUG("menu_Proc msgType:%d,key:0x%x\r\n",msg->msgType,msg->param1);
switch(msg->param1)
{
case FUNC_CODE_MENU:
break;
default:
break;
}
break;
default:
break;
}
return 0;
}
int32_t smsOutboxList_init(AppInfoT *appInfo,AppMsgT *msg, uint32_t reserved2, uint32_t syscallTable)
{
SYSLOG_DEBUG("smsOutboxList_init\r\n");
smsOutbox_cur_item = 0;
showSmsOutbox();
return 0;
}
int32_t smsOutboxList_proc(AppInfoT *appInfo,AppMsgT *msg, uint32_t reserved2, uint32_t syscallTable)
{
SYSLOG_DEBUG("smsOutboxList_proc\r\n");
switch(msg->msgType)
{
case APP_KEY_MSG:
SYSLOG_DEBUG("menu_Proc msgType:%d,key:0x%x\r\n",msg->msgType,msg->param1);
switch(msg->param1)
{
case FUNC_CODE_MENU:
break;
case FUNC_CODE_DIR_U:
if (--smsOutbox_cur_item < 0)
{
smsOutbox_cur_item = smsOutbox_total_num - 1;
}
showSmsOutbox();
SYSLOG_DEBUG("smsOutbox_total_num:%d\r\n",smsOutbox_total_num);
SYSLOG_DEBUG("smsOutbox_cur_item %d\r\n",smsOutbox_cur_item);
break;
case FUNC_CODE_DIR_D:
if (++smsOutbox_cur_item >= smsOutbox_total_num)
{
smsOutbox_cur_item = 0;
}
showSmsOutbox();
SYSLOG_DEBUG("smsOutbox_total_num:%d\r\n",smsOutbox_total_num);
SYSLOG_DEBUG("smsOutbox_cur_item %d\r\n",smsOutbox_cur_item);
break;
case FUNC_CODE_BACK:
mainApp.msgProc = submenu_Proc;
show_list();
break;
default:
break;
}
break;
default:
break;
}
return 0;
}
int32_t smsInboxList_init(AppInfoT *appInfo,AppMsgT *msg, uint32_t reserved2, uint32_t syscallTable)
{
SYSLOG_DEBUG("smsInboxList_init\r\n");
smsInbox_cur_item = 0;
showSmsInbox();
return 0;
}
int32_t smsInboxList_proc(AppInfoT *appInfo,AppMsgT *msg, uint32_t reserved2, uint32_t syscallTable)
{
SYSLOG_DEBUG("smsInboxList_proc\r\n");
switch(msg->msgType)
{
case APP_KEY_MSG:
SYSLOG_DEBUG("menu_Proc msgType:%d,key:0x%x\r\n",msg->msgType,msg->param1);
switch(msg->param1)
{
case FUNC_CODE_MENU:
if ((smsInbox_total_num != 0) && (gSmsInDetail != true))
{
SYSLOG_DEBUG("gSmsText=%s\r\n", gSmsText);
gSmsInDetail = true;
ui_app_sms_show(&gSmsData);
}
break;
case FUNC_CODE_DIR_U:
if (gSmsInDetail != true)
{
if (--smsInbox_cur_item < 0)
{
smsInbox_cur_item = smsInbox_total_num - 1;
}
showSmsInbox();
SYSLOG_DEBUG("smsInbox_total_num:%d\r\n",smsInbox_total_num);
SYSLOG_DEBUG("smsInbox_cur_item %d\r\n",smsInbox_cur_item);
}
break;
case FUNC_CODE_DIR_D:
if (gSmsInDetail != true)
{
if (++smsInbox_cur_item >= smsInbox_total_num)
{
smsInbox_cur_item = 0;
}
showSmsInbox();
SYSLOG_DEBUG("smsInbox_total_num:%d\r\n",smsInbox_total_num);
SYSLOG_DEBUG("smsInbox_cur_item %d\r\n",smsInbox_cur_item);
}
break;
case FUNC_CODE_BACK:
if (gSmsInDetail == true)
{
gSmsInDetail = false;
showSmsInbox();
}
else
{
mainApp.msgProc = submenu_Proc;
show_list();
}
break;
default:
break;
}
break;
default:
break;
}
return 0;
}