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

📄 at_app.c

📁 国家ASIC工程中心使用的嵌入式操作系统
💻 C
📖 第 1 页 / 共 2 页
字号:
	dialPanel = CreateWindow( WNDCLASS_KEYBD,
					NULL,
					WS_CHILD|KBS_DIALPAD|0xff,
					1,(U16)(formH-16),
					(U16)(formW-2),16,
					mainwin,
					0,
					NULL);
	
//	SetFocus( editor );
	CreateTimer( &ringTimer, 10000, NULL, NULL, ALARM_MODE|AUTO_CLEAR_MODE );

	while( !quit )
	{
		ASIXGetMessage( &msg, NULL, 0, 0 );
		switch( msg.message )
		{			
			case WM_COMMAND:
				if( msg.lparam == btCall )
				{
					//char	*add = "13809000282";
					//char	*add = "13851614197";
					//char	*add = "13813839703";
					//char	*add = "0253794248";
					char	*add = GetEditorStr( editor, NULL, 0 );
					
					DIAL( add );
					state = ST_DIALING;
					SetWindowText( stState, "拨号中", NULL );
				}
				else if( msg.lparam == btHangUp )
				{
					HANG_UP( );
					SetWindowText( stState, "通话结束", NULL );
				}
				else if( msg.lparam == btDel )
				{
					MSG	ed_msg;

					ed_msg.message = WM_CHAR;
					ed_msg.lparam = editor;
					ed_msg.wparam = ASIX_KEY_DROP;
					ed_msg.data = ((ASIX_WINDOW *)editor)->ctrl_str;

					AdvSendMessage(GetCurTask()->id, (P_MESSAGE)(&ed_msg), NO_SWAP_TASK);
				}
				else if( msg.lparam == btSMS )
				{
					SMSCenter( );
				}
				break;
			case WM_AT:
				switch( msg.lparam )
				{
					case AT_RPS_OK:
//						uartmsg.message = SM_SWITCH;
//						uartmsg.lparam = SWAP_TASK_LATER;
//						uartmsg.wparam = PSA_TASK_ID;
//						uartmsg.data = NULL;										
//						SysSendMessage( SYSTASK_ID, &uartmsg );
						if( state == ST_DIALING )
						{
							state = ST_TALKING;
							SetWindowText( stState, "通话中", NULL );
						}
//						else
//							SetWindowText( stState, "OK", NULL );
						break;
					case AT_RPS_RING:
						{
							ID	tid;

							get_tid( &tid );
							uartmsg.message = SM_SWITCH;
							uartmsg.wparam = SWAP_TO_FOREGROUND;
							uartmsg.lparam = tid;
							uartmsg.data = NULL;										
							SysSendMessage( SYSTASK_ID, &uartmsg );
						}
						SetWindowText( stState, "有电话", NULL );
						StartTimer( ringTimer );
						break;
					case AT_RPS_CONNECT:
						SetWindowText( stState, "Connect", NULL );
						break;
					case AT_RPS_BUSY:
						SetWindowText( stState, "占线", NULL );
						break;
					case AT_RPS_NO_CARRIER:
						SetWindowText( stState, "对方挂机", NULL );
						break;
					case AT_RPS_ERROR:
						SetWindowText( stState, "错误", NULL );
						break;
					case AT_RPS_CMTI:
						{
							ID	tid;

							get_tid( &tid );
							uartmsg.message = SM_SWITCH;
							uartmsg.wparam = SWAP_TO_FOREGROUND;
							uartmsg.lparam = tid;
							uartmsg.data = NULL;										
							SysSendMessage( SYSTASK_ID, &uartmsg );
						}
						switch( ReceiveSMSDlg( ) )
						{
							case IDOK:
								{
									AT_RPS_PAR	*par = (AT_RPS_PAR *)msg.data;
									SUBPAR		*subpar = par->head;
									
									// get sms index
									subpar = subpar->next;

									READ_SMS( subpar->data );
								}
								break;
							default:
								break;
						}
						FreeParameter( msg.data );
						break;
					case AT_RPS_CLIP:
						{
							ID	tid;

							get_tid( &tid );
							uartmsg.message = SM_SWITCH;
							uartmsg.lparam = SWAP_TO_FOREGROUND;
							uartmsg.wparam = tid;
							uartmsg.data = NULL;										
							SysSendMessage( SYSTASK_ID, &uartmsg );
						}
						{
							AT_RPS_PAR	*par = (AT_RPS_PAR *)msg.data;
							SUBPAR		*subpar = par->head;
							char		info[25];
							
							dataLen = (U8)strlen( subpar->data );
							memcpy( info, &subpar->data[2], dataLen -3 );
							info[dataLen-3] = '\0';
							//SetWindowText( stState, info, NULL );
							FreeParameter( msg.data );
							ReceiveCallDlg( info );
						}
						break;
					default:
						break;
				}
				break;
			case WM_TIMER:
				SetWindowText( stState, "No carrier", NULL );
				CreateTimer( &ringTimer, 10000, NULL, NULL, ALARM_MODE|AUTO_CLEAR_MODE );
				break;
			case WM_QUIT:
				uartmsg.message = SM_SWITCH;
				uartmsg.wparam = SWAP_TASK_LATER;
				uartmsg.lparam = 0;
				uartmsg.data = NULL;										
				SysSendMessage( SYSTASK_ID, &uartmsg );
//				quit = 1;
				break;
		}
		DefWindowProc(msg.message, msg.lparam, msg.data, msg.wparam); 
	}
	
	DestroyWindow( mainwin );

	return 0;
}

U8 SMSCenter( void )
{
	MSG 	msg, uartmsg;
 	U32		mainwin;
	U32		stSrcAd;
	U32		edSrcAd;
	U32		btSend, btRead, btDel, btReply;
	U32		editor;
	U32		kb;
//	U32		hGC;
 	U8		quit = 0;

	// WINDOW ARRANGEMENT
	const	U16		formW = PHY_LCD_W, formH = PHY_LCD_H, formX = 0, formY = 0;
	const	U16		stW = 40, stH = 20;
	const	U16		stSrcAdX = formX + 4, stSrcAdY = formY + 22;
	const	U16		edW = formW - 8, edH = 60, edSrcAdW = edW - stW - 4, edSrcAdH = stH;
	const	U16		edSrcAdX = stSrcAdX + stW + 4, edSrcAdY = formY + 22;
	const	U16		edX = stSrcAdX, edY = stSrcAdY + stH + 4;
	const	U16		btW = 32, btH = 20, btGap = ( formW - btW * 4 )/5;
	const	U16		btSendX = formX + btGap, btSendY = edY + edH + 4;
	const	U16		btReadX = formX + formW - btW - btGap, btReadY = btSendY;
	const	U16		btDelX = btSendX + btW + btGap, btDelY = btSendY;
	const	U16		btReplyX = btDelX + btW + btGap, btReplyY = btSendY;

	mainwin = CreateWindow(	WNDCLASS_WIN,			
							"短信中心",			
							WS_OVERLAPPEDWINDOW,
							formX,formY,				
							formW,formH,
							0,				
							0,				
							NULL);			

	btSend = CreateWindow( WNDCLASS_BUTTON,
					"发送",
					WS_CHILD | BS_REGULAR,
					btSendX,btSendY,
					btW,btH,
					mainwin,
					0,
					NULL);
	
	btRead = CreateWindow( WNDCLASS_BUTTON,
					"读取",
					WS_CHILD | BS_REGULAR,
					btReadX,btReadY,
					btW,btH,
					mainwin,
					0,
					NULL);

	btReply = CreateWindow( WNDCLASS_BUTTON,
					"回复",
					WS_CHILD | BS_REGULAR,
					btReplyX,btReplyY,
					btW,btH,
					mainwin,
					0,
					NULL);

	btDel = CreateWindow( WNDCLASS_BUTTON,
					"删除",
					WS_CHILD | BS_REGULAR,
					btDelX,btDelY,
					btW,btH,
					mainwin,
					0,
					NULL);

	stSrcAd = CreateWindow( WNDCLASS_STATIC,
					"收信人:",
					WS_CHILD | SS_TEXT,
					stSrcAdX,stSrcAdY,
					stW,stH,
					mainwin,
					0,
					NULL);

	edSrcAd = CreateWindow( WNDCLASS_EDITOR,
					NULL, 
					WS_CHILD | ES_SINGLELINE | ES_RIGHT, 
					edSrcAdX,edSrcAdY,
					edSrcAdW,edSrcAdH,
					mainwin,
					0, 
					NULL);


	editor = CreateWindow( WNDCLASS_EDITOR,
					NULL,
					WS_CHILD | ES_MULTI_REGULAR,
					edX,edY,
					edW,edH,
					mainwin,
					0,
					NULL);

	kb = CreateWindow( WNDCLASS_KEYBD,
				NULL,
				WS_CHILD|KBS_PINGYING|0xff,
				1,(U16)(formH-16),
				(U16)(formW-2),16,
				mainwin,
				0,
				NULL);

	SetFocus( editor );

	while( !quit )
	{
		ASIXGetMessage( &msg, NULL, 0, 0 );
		switch( msg.message )
		{			
			case WM_COMMAND:
				if( msg.lparam == btSend )
				{
					char	*sms, *add;

					add = GetEditorStr( edSrcAd, NULL, 0 );
					sms = GetEditorStr( editor, NULL, 0 );
					if( *add != '\0' && *sms != '\0' )
						SEND_SMS( add, sms );
				}
				else if( msg.lparam == btRead )
				{
					switch( ReadSMS( "1" ) )
					{
						case IDOK:
							
							break;
						default:
							break;
					}
				}
				else if( msg.lparam == btReply )
				{
				}
				break;
			case WM_AT:
				switch( msg.lparam )
				{
					case AT_RPS_RING:
						quit = 1;
						break;
					case AT_RPS_ERROR:
						SetWindowText( stSrcAd, "Error", NULL );
						SetWindowText( editor, "错误", NULL );
						break;
					case AT_RPS_CMTI:
						{
							ID	tid;

							get_tid( &tid );
							uartmsg.message = SM_SWITCH;
							uartmsg.wparam = SWAP_TASK_LATER;
							uartmsg.lparam = tid;
							uartmsg.data = NULL;										
							SysSendMessage( SYSTASK_ID, &uartmsg );
						}
						switch( ReceiveSMSDlg( ) )
						{
							case IDOK:
								{
									AT_RPS_PAR	*par = (AT_RPS_PAR *)msg.data;
									SUBPAR		*subpar = par->head;
									
									// get sms index
									subpar = subpar->next;

									READ_SMS( subpar->data );
								}
								break;
							default:
								break;
						}
						FreeParameter( msg.data );
						break;
					case AT_RPS_READY:
						SEND_SMS_DATA();
						break;
					default:
						break;
				}
				break;
			case WM_QUIT:
				quit = 1;
				break;
		}
		DefWindowProc(msg.message, msg.lparam, msg.data, msg.wparam); 
	}
	
	DestroyWindow( mainwin );

	return 0;
}

U8 ReadSMS( char *number )
{
	MSG 	msg, uartmsg;
 	U32		mainwin;
	U32		stSrcAd, stDate;
	U32		btPrev, btNext, btDel, btReply;
	U32		editor;
//	U32		hGC;
 	U8		quit = 0;
	U8		curSMSNum = atoi( number );
	U8		result = 0;

	// WINDOW ARRANGEMENT
	const	U16		formW = PHY_LCD_W, formH = PHY_LCD_H, formX = 0, formY = 0;
	const	U16		stW = formW - 8, stH = 20;
	const	U16		stSrcAdX = formX + 4, stSrcAdY = formY + 22;
	const	U16		stDateX = stSrcAdX, stDateY = stSrcAdY + stH;
	const	U16		edW = stW, edH = formH - 90, edX = stSrcAdX, edY = stDateY + stH;
	const	U16		btW = 32, btH = 20, btGap = ( formW - btW * 4 )/5;
	const	U16		btPrevX = formX + btGap, btPrevY = formY + formH - 24;
	const	U16		btNextX = formX + formW - btW - btGap, btNextY = btPrevY;
	const	U16		btDelX = btPrevX + btW + btGap, btDelY = btPrevY;
	const	U16		btReplyX = btDelX + btW + btGap, btReplyY = btPrevY;

	mainwin = CreateWindow(	WNDCLASS_WIN,			
							"收到的短信",			
							WS_OVERLAPPEDWINDOW,
							formX,formY,				
							formW,formH,
							0,				
							0,				
							NULL);			

	btPrev = CreateWindow( WNDCLASS_BUTTON,
					"前一条",
					WS_CHILD | BS_REGULAR,
					btPrevX,btPrevY,
					btW,btH,
					mainwin,
					0,
					NULL);
	
	btNext = CreateWindow( WNDCLASS_BUTTON,
					"后一条",
					WS_CHILD | BS_REGULAR,
					btNextX,btNextY,
					btW,btH,
					mainwin,
					0,
					NULL);

	btReply = CreateWindow( WNDCLASS_BUTTON,
					"回复",
					WS_CHILD | BS_REGULAR,
					btReplyX,btReplyY,
					btW,btH,
					mainwin,
					0,
					NULL);

	btDel = CreateWindow( WNDCLASS_BUTTON,
					"删除",
					WS_CHILD | BS_REGULAR,
					btDelX,btDelY,
					btW,btH,
					mainwin,
					0,
					NULL);

	stSrcAd = CreateWindow( WNDCLASS_STATIC,
					NULL, 
					WS_CHILD|SS_TEXT, 
					stSrcAdX,stSrcAdY,
					stW,stH,
					mainwin,
					0, 
					NULL);

	stDate = CreateWindow( WNDCLASS_STATIC,
					NULL, 
					WS_CHILD|SS_TEXT, 
					stDateX,stDateY,
					stW,stH,
					mainwin,
					0, 
					NULL);

	editor = CreateWindow( WNDCLASS_EDITOR,
					NULL,
					WS_CHILD | ES_MULTI_REGULAR | ES_READONLY,
					edX,edY,
					edW,edH,
					mainwin,
					0,
					NULL);
		
//	SetFocus( editor );
	READ_SMS( number );

	while( !quit )
	{
		ASIXGetMessage( &msg, NULL, 0, 0 );
		switch( msg.message )
		{			
			case WM_COMMAND:
				if( msg.lparam == btPrev )
				{
					char	preSMS[4];
					
					if( curSMSNum != 0 )
					{
						curSMSNum--;
						sprintf( preSMS, "%d", curSMSNum );
						ReadSMS( preSMS );
					}
				}
				else if( msg.lparam == btNext )
				{
					char	preSMS[4];
					
					if( curSMSNum != 50 )
					{
						curSMSNum++;
						sprintf( preSMS, "%d", curSMSNum );
						ReadSMS( preSMS );
					}
				}
				else if( msg.lparam == btDel )
				{
					char	curSMS[4];
					MSG		uartmsg;

					sprintf( curSMS, "%d", curSMSNum );
					DELETE_SMS( curSMS );
					if( WAIT_AT_COMMAND_RPS( &uartmsg, AT_COM_CMGD ) == SYS_OK )
					{
						if( curSMSNum == LastSMS )
						{
							curSMSNum--;
							LastSMS--;
						}
						READ_SMS( curSMS );
					}
				}
				else if( msg.lparam == btReply )
				{
					quit = 1;
					result = IDOK;
				}
				break;
			case WM_AT:
				switch( msg.lparam )
				{
					case AT_RPS_RING:
						quit = 1;
						break;
					case AT_RPS_ERROR:
						SetWindowText( stSrcAd, "Error", NULL );
						SetWindowText( stDate, "Error", NULL );
						SetWindowText( editor, "错误", NULL );
						break;
					case AT_RPS_CMTI:
						{
							ID	tid;

							get_tid( &tid );
							uartmsg.message = SM_SWITCH;
							uartmsg.wparam = SWAP_TASK_LATER;
							uartmsg.lparam = tid;
							uartmsg.data = NULL;										
							SysSendMessage( SYSTASK_ID, &uartmsg );
						}
						switch( ReceiveSMSDlg( ) )
						{
							case IDOK:
								{
									AT_RPS_PAR	*par = (AT_RPS_PAR *)msg.data;
									SUBPAR		*subpar = par->head;
									
									// get sms index
									subpar = subpar->next;

									READ_SMS( subpar->data );
								}
								break;
							default:
								break;
						}
						FreeParameter( msg.data );
						break;
					case AT_RPS_CMGR:
						{
							AT_RPS_PAR	*par = (AT_RPS_PAR *)msg.data;
							SUBPAR		*subpar = par->head;
							
							int			i = 0, line = 0;
							SMS_DELIVER_PDU_CONTENT *pdu;

							if( curSMSFormat == 0 )	// PDU format
							{
								int	k = 0;

								// get user data
								while( subpar->next != NULL && k < 3 )
								{
									subpar = subpar->next;
									k++;
								}

								pdu = TranslateSDPC( subpar->data );

								if( pdu != NULL )
								{
									char	time[30];
									TIME_STAMP	*t = &pdu->time;

									SetWindowText( stSrcAd, pdu->oa, NULL );
									sprintf( time, "20%02u年%u月%u日 %02u:%02u:%02u",
										t->year, t->month, t->day, t->hour, t->min, t->sec );
									SetWindowText( stDate, time, NULL );
									SetWindowText( editor, pdu->ud, NULL );
								}

								FreeSDPC( pdu );
							}
							FreeParameter( msg.data );
						}
						break;
					default:
						break;
				}
				break;
			case WM_QUIT:
				quit = 1;
				break;
		}
		DefWindowProc(msg.message, msg.lparam, msg.data, msg.wparam); 
	}
	
	DestroyWindow( mainwin );

	return result;
}

⌨️ 快捷键说明

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