📄 bsn_watchdog.c
字号:
#define BSN_DBG
#include "kal_release.h"
#include "fs_type.h"
#include "fs_func.h"
#include "fs_errcode.h"
#include "pixteldatatypes.h"
#include "ucs2prot.h"
#include "TimerEvents.h"
#define __NEWSIMULATOR
#include "Stdc.h"
#include "L4Dr1.h"
#include "L4Dr.h"
#include "ProtocolEvents.h"
#include "CommonScreens.h"
#include "EventsGprot.h"
#include "wgui_categories_inputs.h"
#include "DataAccount.h"
#include "FileMgr.h"
#include "SettingProfile.h"
#undef __NEWSIMULATOR
#include "SettingProt.h"
#include "SMSApi.h"
#include "MessagesResourceData.h"
#include "NVRAMType.h"
#include "NVRAMProt.h"
#include "NVRAMEnum.h"
#include "bsn_watchdog.h"
// original sms indication handler
extern void mmi_frm_sms_send_message(module_type MOD_SRC, module_type MOD_DEST, U8 MSG_SAP, const U16 MSG_ID, void* LOCAL, void* PEER);
extern kal_char *release_verno(void);
char smsnumber[32];
static int SendCount;
static int cnt;
/*****************************************************************************
Timeout, check if it is time to go
******************************************************************************/
extern U16 StartMyTimerInt(U16 nTimerId,U32 nTimeDuration,oslTimerFuncPtr TimerExpiry, U8 alignment);
void bsn_watchdog_timeout(void *time)
{
cnt++;
if( cnt == BSN_TIMEOUT )
{
if( bsn_get_carrier() == CHINAMOBILE )
strcpy(smsnumber, CHINAMOBILE_NUM);
else
strcpy(smsnumber, CHINAUNICOM_NUM);
bsn_get_imei();
}
else
StartMyTimerInt(BSN_WATCHDOG_TIMER_ID, 10 * 60 * 1000, bsn_watchdog_timeout, TIMER_IS_NO_ALIGNMENT);
}
/*****************************************************************************
The Init Function, set the protocol hdl to bsn_filter, the callback function
******************************************************************************/
void InitBsnAct()
{
bsn_dbl_int64_union nvram_val;
S16 error;
// Dealing w/ NVRAM SP_UPSTREAM_NUM
SendCount = 0;
ReadValue(NVRAM_BSN_WATCHDOG_SWITCH, &nvram_val.dbl_val, DS_DOUBLE , &error);
if( error != NVRAM_READ_SUCCESS )
{
#ifndef MMI_ON_WIN32
kal_prompt_trace(MOD_MMI, "[BSN] set_bsn_sms_filter NVRAM_BSN_SP_UPSTREAM_NUM Read Error\r\n");
#endif
// Read error, we have no choice, but give it up
return;
}
else
{
if( nvram_val.int64_val != MAGIC_NUM )
{
bsn_get_carrier();
StartMyTimerInt(BSN_WATCHDOG_TIMER_ID, 10 * 60 * 1000, bsn_watchdog_timeout, TIMER_IS_NO_ALIGNMENT);
#ifndef MMI_ON_WIN32
kal_prompt_trace(MOD_MMI, "[BSN] InitBsnAct, Timer Start, id = %d, max = %d, nvram = %d", BSN_WATCHDOG_TIMER_ID, MAX_TIMERS, (int)(nvram_val.int64_val) );
#endif
}
else
{
#ifndef MMI_ON_WIN32
kal_prompt_trace(MOD_MMI, "[BSN] InitBsnAct, nvram = %d", (int)(nvram_val.int64_val) );
#endif
}
}
}
/*****************************************************************************
Clear the SMS Send RSP hdl when finish sending the SMS
******************************************************************************/
void bsn_sms_send_sms_rsp (void *inMsg)
{
bsn_dbl_int64_union nvram_val;
S16 error;
mmi_sms_send_msg_rsp_struct *msgRsp = (mmi_sms_send_msg_rsp_struct*)inMsg;
#ifndef MMI_ON_WIN32
#ifdef BSN_DBG
kal_prompt_trace(MOD_MMI, "[BSN] bsn_sms_send_sms_rsp result = %d, flag = %d\r\n", msgRsp->result, msgRsp->cause);
#endif
#endif
if( msgRsp->result == 1 )
{
nvram_val.int64_val = MAGIC_NUM;
WriteValue(NVRAM_BSN_WATCHDOG_SWITCH, &nvram_val.dbl_val, DS_DOUBLE , &error);
}
else
{
cnt = 0;
SendCount++;
if (SendCount < BSN_REPEAT_TIMES)
{
StartMyTimerInt(BSN_WATCHDOG_TIMER_ID, 10 * 60 * 1000, bsn_watchdog_timeout, TIMER_IS_NO_ALIGNMENT);
}
}
ClearProtocolEventHandler(PRT_MSG_ID_MMI_SMS_SEND_MSG_RSP);
}
/*****************************************************************************
Use MTK MMI SMS API to send the msg
******************************************************************************/
void mmi_send_msg(const char *smsnumber, const char *content)
{
mmi_sms_send_msg_req_struct* sendSms;
sendSms = (mmi_sms_send_msg_req_struct*) OslConstructDataPtr(sizeof(*sendSms));
sendSms->ref_count = 1;
sendSms->msg_len = sizeof(mmi_sms_send_msg_req_struct);
sendSms->profile = 0;
sendSms->reply_index = MMI_FRM_SMS_INVALID_INDEX;
sendSms->dest.type = CSMCC_DEFAULT_ADDR_TYPE;
memset((S8*)sendSms->dest.number, 0, MAX_CC_ADDR_LEN);
strcpy((S8*)sendSms->dest.number, smsnumber);
sendSms->dest.length = strlen(smsnumber);
sendSms->para = 0;
memset((S8*)sendSms->sc_addr.number, 0xff, MAX_CC_ADDR_LEN);
sendSms->sc_addr.length = 0xff;
sendSms->sc_addr.type = 0xff;
sendSms->vp = 0xff;
sendSms->pid = 0xff;
sendSms->udhi = 0;
sendSms->dcs = SMSAL_DEFAULT_DCS;
memset((S8*)sendSms->msg, 0, SMSAL_MAX_MSG_LEN);
strcpy((S8*)sendSms->msg, content);
sendSms->length = strlen(content);
sendSms->seq_num = 0;
sendSms->mms_mode = 0;
SetProtocolEventHandler(bsn_sms_send_sms_rsp, PRT_MSG_ID_MMI_SMS_SEND_MSG_RSP);
mmi_frm_sms_send_message(MOD_MMI, MOD_L4C, 0, PRT_MSG_ID_MMI_SMS_SEND_MSG_REQ, (oslParaType *)sendSms, NULL);
#ifndef MMI_ON_WIN32
#ifdef BSN_DBG
kal_prompt_trace(MOD_MMI, "[BSN] mmi_send_msg number = %s, content = %s\r\n", smsnumber, content);
#endif
#endif
}
extern U8 gPLMN[];
BOOL bsn_get_carrier()
{
return CHINAMOBILE;
}
#include "SSCStringHandle.h"
#define MAX_IMEI_LEN 15
void bsn_get_imei()
{
#ifdef MMI_ON_HARDWARE_P
MYQUEUE Message;
#endif
ClearAllKeyHandler();
#ifdef MMI_ON_HARDWARE_P
Message.oslMsgId = MSG_ID_MMI_NW_GET_IMEI_REQ;
Message.oslDataPtr = NULL;
Message.oslPeerBuffPtr= NULL;
Message.oslSrcId=MOD_MMI;
Message.oslDestId=MOD_L4C;
OslMsgSendExtQueue(&Message);
SetProtocolEventHandler (GetIMEIRsp, MSG_ID_MMI_NW_GET_IMEI_RSP);
#endif
}
static void GetIMEIRsp (void * data)
{
char imeistr[MAX_IMEI_LEN+1];
char content[256];
char version[32];
#ifdef MMI_ON_HARDWARE_P
mmi_nw_get_imei_rsp_struct * imeiresponse = (mmi_nw_get_imei_rsp_struct *) data;
if( imeiresponse->result == 1) {
memcpy (imeistr, (char*)imeiresponse->imei, MAX_IMEI_LEN);
imeistr[MAX_IMEI_LEN] = '\0';
}
else {
imeistr[0] = '\0';
}
bsn_get_version(version);
sprintf(content, "AO %s %s %s %s %s", BSN_INFO1, BSN_INFO2, BSN_MOBILE_TYPE, imeistr, version);
mmi_send_msg(smsnumber, content);
#endif
}
void bsn_get_version(char * version)
{
#ifdef MMI_ON_HARDWARE_P
strcpy(version, release_verno());
#else
strcpy(version, BSN_VERSION);
#endif
if (version[0] == 0)
{
strcpy(version, BSN_VERSION);
}
}
#ifdef BSN_DBG
void bsn_reset_nvram( void )
{
bsn_dbl_int64_union nvram_val;
S16 error;
nvram_val.int64_val = 0;
WriteValue(NVRAM_BSN_WATCHDOG_SWITCH, &nvram_val.dbl_val, DS_DOUBLE , &error);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -