⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bsn_watchdog.c

📁 用于MTK平台中的如何进行后台短信发信
💻 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 + -