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

📄 asixmail.c

📁 基于东南大学开发的SEP3203的ARM7中的所有驱动
💻 C
📖 第 1 页 / 共 2 页
字号:


/********************************************************************

The main entry of asixmail system shell.

We can use this mailbox system  dial line system and GSM SMS system 



we defined the macros in asixmail.h 

if we use dial line then we define DIALLINE

if we use GSM SMS then we define GSMSMS



********************************************************************/

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

//#include <mem.h>



#include <asixwin.h>

#include <asixapp.h>

#include <ppsm.h>



#include <asixwin\asix_mn.h>

#include <asixwin\select.h>

#include <asixwin\asix_sb.h>

#include <asixwin\asix_lb.h>

#include <asixwin\disp.h>

#include <sys\flash.h>

//#include <simdrv\include\flash.h>

//#include <Const.h>



//#include <net\asixmail.h>

#include "asixmail.h"

//#include "Const.h"

#include "netcfg.h"







 char		*OutSideMail1[MAXBOXITEM];// the outside mail buffer pointer

 U8		Mailed;

 // const char	ASIX_version[];

char 		send_mark[MAXBOXITEM];

U16			Datagroup[0x8000];

U8    *Datatemp;

//U8 *Datatemp;

 

 U8             Dataspace[40000];

  

  struct asix_state ASIX_Stat;

extern struct zhangcfg *Cfg;

struct inbox_index	*InboxIndex;

struct outbox_index	*OutboxIndex;

//U8			MailChanged;

#define FirstMailMemory 0x900000

//#define FirstMailMemory 0x800000+0xd0000;



const char format_ok[]="ASIXMAIL";



#ifdef GSM_LINE

const char ASIX_version[]="版本:0.99.1012_GSM";

#endif

#ifdef DIAL_LINE

const char ASIX_version[]="版本:0.99.1012";

#endif

//struct asix_state 	ASIX_Stat;

struct asix_addr	AsixAddr[ASIX_ADDR_NUM];



#define FCHECK_OK	0x5a

#define FCHECK_FAIL	0x0



struct flash_checkpoint {

	U8	formated;

	U8	netcfg;

	U8	inboxindex;

	U8	outboxindex;

	U8	inbox;

	U8	outbox;

	U8	mailend;

};

static struct flash_checkpoint FlashCheck;



void mailmain(void)

{

	

	static	    MSG	   Msg;

	U32         gc;

	U32         mainwin,bt_receive,bt_send,bt_sent,bt_cfg,bt_newmail,bt_receivesend,bt_exit;

	U8          quit=0;

	U16         delay,i;

    char        formatedornot[9]; 

    U32         cur;

        

	gc=GetGC();

	ClearScreen(gc,GPC_WHITE);



	mainwin=CreateWindow(WNDCLASS_WIN,"asix 邮件",WS_OVERLAPPEDWINDOW,0,0,159,239,0,0,NULL);

	

        

        //strncpy( (char *)formatedornot,(char *)Datatemp,9);

        //if(strcmp(formatedornot,format_ok) != 0)

	

	//MFlashWrite((char *)FirstMailMemory,MAILFORMAT);

	memset((char *)&Cfg,0x0,sizeof(struct zhangcfg));

	Mailed=FALSE;

	

	Datatemp = (U8 *)Datagroup;

	



  

	

    FlashReadBlock( (U32)Datatemp,(U32 )FirstMailMemory,0x10000);

    strncpy( (char *)formatedornot,(char *)Datatemp,9);

    if(strcmp(formatedornot,format_ok) != 0)

	MFlashWrite((char *)FirstMailMemory,MAILFORMAT);

	

	/*getcfg(Datatemp+NETCFG_HEAD);

      

 	for (i=0;i<100;i++) 

		for (delay=0;delay<6000;delay++);

        cur = GetCurWindow(  );

	RepaintWindow(cur, 0);

	Disp16String("正在检查存储器",10,125);

	if (MCheckFlash(Datatemp)) {

	for (i=0;i<100;i++) 

		for (delay=0;delay<60;delay++);

        cur = GetCurWindow(  );

	RepaintWindow(cur, 0);

		Disp16String("存储器错误!   ",10,125);

	for (i=0;i<100;i++) 

		for (delay=0;delay<60;delay++);

		cur = GetCurWindow(  );

	      RepaintWindow(cur, 0);

		Disp16String("尝试恢复...   ",10,125);

		for (i=0;i<100;i++) 

		for (delay=0;delay<60;delay++);

		//MFlashFix();		

    MFlashWrite((char *)FirstMailMemory,MAILFORMAT);

	}*/



	Disp16String("资料载入中...   ",30,60);

	for (i=0;i<100;i++) 

		for (delay=0;delay<600;delay++);

	cur = GetCurWindow(  );

	SysClearRec( gc, GPC_LIGHTGREY, 0, 20, 140, 200 , GPC_AND_STYLE);

					

  

	//FlashReadBlock( (U32)Datatemp,(U32 )FirstMailMemory,0x10000);



	Disp16String("导入新邮件...  ",30,60);	

       getcfg(Datatemp+NETCFG_HEAD);

	for (i=0;i<100;i++) 

		for (delay=0;delay<600;delay++);

	SysClearRec( gc, GPC_LIGHTGREY, 0, 20, 140, 200 , GPC_AND_STYLE);

      

	bt_receive = CreateWindow(WNDCLASS_BUTTON, "  收件箱", WS_CHILD|BS_TOOLBAR, 45,60,70,18,mainwin,0,NULL);

	bt_send = CreateWindow(WNDCLASS_BUTTON, "  发件箱", WS_CHILD|BS_TOOLBAR, 45,90,70,18,mainwin,0,NULL);

	bt_sent = CreateWindow(WNDCLASS_BUTTON, "已发送邮件", WS_CHILD|BS_TOOLBAR, 45,120,70,18,mainwin,0,NULL);

	bt_cfg = CreateWindow(WNDCLASS_BUTTON, " 系统配置", WS_CHILD|BS_TOOLBAR, 45,150,70,18,mainwin,0,NULL);

	bt_newmail = CreateWindow(WNDCLASS_BUTTON, "新信", WS_CHILD|BS_TOOLBAR, 0,223,53,16,mainwin,0,NULL);

	bt_receivesend = CreateWindow(WNDCLASS_BUTTON, "收发", WS_CHILD|BS_TOOLBAR, 53,223,53,16,mainwin,0,NULL);

	bt_exit = CreateWindow(WNDCLASS_BUTTON, "退出", WS_CHILD|BS_TOOLBAR, 106,223,53,16,mainwin,0,NULL);

	

        while(!quit) {

        	

        	     ASIXGetMessage(&Msg, NULL, 0, 0);

		

		                  switch ( Msg.message )

		                  {

			              case	ASIX_RTC:

				                break;



			              case	WM_COMMAND:               

				                 

				                if(Msg.lparam == bt_receive){

				                MailBox(INBOXLIST);

				                }

        	                                if(Msg.lparam == bt_send){

        	                    	        MailBox(OUTBOXLIST);

        	                    	        }

                                                if(Msg.lparam == bt_sent){

                                	        MailBox(SENTBOXLIST);

                                	        }

 			     	                if(Msg.lparam == bt_cfg){

 			     	             	netcfg();

									}

 			     	                if(Msg.lparam == bt_newmail){

 			     	             	NewMail(NULL,NEW_MAIL);

 			     	             	}

 			     	                if(Msg.lparam == bt_receivesend){

 			     	                dial();

 			     	                //mailsend_smtp();

 			     	             	  SendMail();

 			     	             	}

 			     	      	        if(Msg.lparam == bt_exit){

 			     	      	     	quit=1;

					        	

 			     	      		break;

 			     	      	     	}

                                                break;	 

                                     case	WM_QUIT:

				                quit = 1;

				                break;	

 			     	     default:

 			     	      		break;	

 			     	      	

 			     	 }

 			     DefWindowProc(Msg.message, Msg.lparam, Msg.data, Msg.wparam); 	

 			     }



		if (Mailed)

 	    MFlashWrite((char *)FirstMailMemory,MAILSAVE);

 	    /*flush all the asix data and return them clean to the sys*/

 	    memset(Datatemp,0x0,0x10000);

 	    memset(Dataspace,0x0,40000);

			    //ClearRec(gc,0,18,102,124,GPC_WHITE,GPC_REPLACE_STYLE);

	                   // temp_st = CreateWindow(WNDCLASS_STATIC, "正在保存中,请等待...", WS_CHILD|SS_TEXT, 30,30,50,80,mainwin,0,NULL);		

	                   // if(MailWriteToFlash( )!=ASIX_OK)

		           

		            //msgbox = MessageBox( mainwin, "邮件写入失败,请重试!", "友情提醒", MB_OK|MB_DEFBUTTON1|MB_ICONERROR);

	            DestroyWindow(mainwin);

	            EndofTask();

   }	





U8 MCheckFlash(char *fhead)

{

	struct netcfg *test;

	U8 check_result=0;

	char formated_mark[10];

	

	memcpy(formated_mark,fhead,10);

	formated_mark[9]='\0';

	

	if(strcmp(formated_mark,format_ok)!=0) {

		FlashCheck.formated=FCHECK_FAIL;

		check_result=1;

	} else {

		FlashCheck.formated=FCHECK_OK;

	}

	

	

	test=(struct netcfg *)(fhead+NETCFG_HEAD);

	if ( *(unsigned int*)(test->Valid)!=CFGVALID ) {

		FlashCheck.netcfg=FCHECK_FAIL;

		check_result=1;

	}else {

		 FlashCheck.netcfg=FCHECK_OK;

	}

	

	if ( *(fhead+INBOX_INDEX_HEAD-1)!=CHECK_CHAR ) {

		FlashCheck.inboxindex=FCHECK_FAIL;

		check_result=1;

	}else {

		 FlashCheck.inboxindex=FCHECK_OK;

	}

	

		

	if ( *(fhead+OUTBOX_INDEX_HEAD-1)!=CHECK_CHAR ) {

		FlashCheck.outboxindex=FCHECK_FAIL;

		check_result=1;

	}else {

		 FlashCheck.outboxindex=FCHECK_OK;

	}

	

	if ( *(fhead+INBOX_HEAD-1)!=CHECK_CHAR ) {

		FlashCheck.inbox=FCHECK_FAIL;

		check_result=1;

	}else {

		 FlashCheck.inbox=FCHECK_OK;

	}

	

	if ( *(fhead+OUTBOX_HEAD-1)!=CHECK_CHAR ) {

		FlashCheck.outbox=FCHECK_FAIL;

		check_result=1;

	}else {

		 FlashCheck.outbox=FCHECK_OK;

	}

	

	if ( *(fhead+0x10000-1)!=CHECK_CHAR ) {

		FlashCheck.mailend=FCHECK_FAIL;

		check_result=1;

	}else {

		 FlashCheck.mailend=FCHECK_OK;

	}

	

	return check_result;

	

}





U8 MFlashFix(void)

{

	U32 msgbox;

	U32 cur;

	

    cur = GetCurWindow(  );

	if (FlashCheck.formated==FCHECK_FAIL) return (MFlashWrite((char *)FirstMailMemory,MAILFORMAT));

	if (FlashCheck.netcfg==FCHECK_FAIL) {

		//AdvHintWin("配置信息错!","请重新配置.",60,0);

		msgbox = MessageBox( cur, "配置信息错!请重新配置.", "友情提醒", MB_OK|MB_DEFBUTTON1|MB_ICONERROR);

		netcfg();

	}

	if (FlashCheck.inboxindex==FCHECK_FAIL) {

		Datatemp[INBOX_INDEX_HEAD-1]=CHECK_CHAR;

		DelMail(0,DELINBOX,0);

		msgbox = MessageBox( cur, "配置信息错!请重新配置.", "友情提醒", MB_OK|MB_DEFBUTTON1|MB_ICONERROR);

		netcfg();

	}

	if (FlashCheck.outboxindex==FCHECK_FAIL) {

		Datatemp[OUTBOX_INDEX_HEAD-1]=CHECK_CHAR;

		InboxIndex=Datatemp+INBOX_INDEX_HEAD;

		InboxIndex[MAXBOXITEM-1].flag=EMPTYINDEX;

		DelMail(0,DELOUTBOX,0);

				

	}

	if (FlashCheck.inbox==FCHECK_FAIL) {

		Datatemp[INBOX_HEAD-1]=CHECK_CHAR;

		OutboxIndex=Datatemp+OUTBOX_INDEX_HEAD;

		OutboxIndex[MAXBOXITEM-1].flag=EMPTYINDEX;

		

	}

	if (FlashCheck.outbox==FCHECK_FAIL) {

		Datatemp[OUTBOX_HEAD-1]=CHECK_CHAR;

		InboxIndex=(struct inbox_index *)(Datatemp+INBOX_INDEX_HEAD);

		while(InboxIndex->flag!=EMPTYINDEX)

			InboxIndex++;

		InboxIndex->flag=EMPTYINDEX;

	}

	//AdvHintWin("尝试恢复完毕","数据可能丢失",60,0);

	//Disp16String("尝试恢复完毕,数据可能丢失  ",10,125);	

	msgbox = MessageBox( cur, "尝试恢复完毕,数据可能丢失  ","友情提醒", MB_OK|MB_DEFBUTTON1|MB_ICONERROR);

		

	Mailed=TRUE;	

	return 0;

}









U8 MFlashWrite(char *fhead,unsigned char mode)

{

	static	    MSG	   Msg;

	register U8	quit=0;

	U16		i,delay;

//	U32		process[10];

	U32     gc;

	U32   cur;

//	U16		xSrc,ySrc,xDest,yDest;

//	register char	*RamhPoint;

	char  *		statestr;

    



	

	

	unsigned long 			    UserFlashPoint;

	P_U32			RamPoint;

	

	gc=GetGC();

	ClearScreen(gc,GPC_WHITE);

    cur = GetCurWindow();

	//RepaintWindow(cur, 0);         

	 if(mode==MAILFORMAT)

        {	

        	cur = GetCurWindow();

        	if(MessageBox( cur, "严重错误!需格式化,将删除所有文件", "友情提醒", MB_OKCANCEL ) == IDOK){

        	//if (SelButtonWin("严重错误!需格式化","将删除所有文件",str1,2,0)==0){

	        	//for(i=0;i<10;i++)

			//	DrawTextIcon((P_U32)&process[i],5+14*i,160,10,20,GB_NORMAL_FONT,"",0,BLACK,PositionMiddle);   

	        Disp16String("正在进行格式化...",10,55);

	        Disp16String("这是你第一次使用",20,80);

			Disp16String("或存储器有错",20,100);

	        		

			memset(Datatemp,0x0,0x10000);

			strcpy(Datatemp,format_ok);

		

			Datatemp[INBOX_INDEX_HEAD-1]=CHECK_CHAR;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -