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

📄 call.c

📁 国家ASIC工程中心使用的嵌入式操作系统
💻 C
📖 第 1 页 / 共 2 页
字号:
							formW,formH,
							0,				
							0,				
							NULL);
	btHangUp = CreateWindow( WNDCLASS_BUTTON,
					"挂断",
					WS_CHILD | BS_REGULAR,
					btHangUpX,btHangUpY,
					btW,btH,
					mainwin,
					0,
					NULL);
	{
		U16	len = 0;

		if( name != NULL && name[0] != '\0' )
			len += (U16)strlen( name );
		if( number != NULL && number[0] != '\0' )
			len += (U16)strlen( number );

		number_info = (S8 *)Lmalloc( len );
		if( number_info == NULL )
		{
		}

		number_info[0] = '\0';
		if( name != NULL )
			strcat( number_info, name );
		strcat( number_info, "\n" );
		if( number != NULL )
			strcat( number_info, number );
	}

	stPrompt = CreateWindow( WNDCLASS_STATIC,
					number_info, 
					WS_CHILD|SS_TEXT|SS_MULTILINE, 
					stX,stY,
					stW,stH,
					mainwin,
					0, 
					NULL);

	DIAL( number );
	state = ST_DIALING;
	
	while( !quit )
	{
		ASIXGetMessage( &msg, NULL, 0, 0 );
		switch( msg.message )
		{			
			case WM_COMMAND:
				if( msg.lparam == btHangUp )	// 挂断
				{
					if( state == ST_DIALING )
					{
						HANG_UP( );
					}
					quit = 1;
				}
				else if( msg.lparam == btReDial )	// 重拨
				{
					SetWindowText( mainwin, "拨号中...", NULL );
					SetWindowText( stPrompt, number_info, NULL );
					DestroyWindow( btHangUp );
					DestroyWindow( btReDial );
					btHangUp = CreateWindow( WNDCLASS_BUTTON,"挂断",WS_CHILD | BS_REGULAR,btHangUpX,btHangUpY,btW,btH,mainwin,0,NULL);
					DIAL( number );
					state = ST_DIALING;
				}
				break;
			case WM_AT:
				switch( msg.lparam )
				{
					case AT_RPS_OK:		// 接通电话
						SetWindowText( mainwin, "通话中...", NULL );
						TalkingDlg( number, name, PhHisTypeLst[DIALED_TYPE][0] );
						quit = 1;
						break;
					case AT_RPS_BUSY:	// 忙音
						SetWindowText( mainwin, "网络繁忙!", NULL );
						SetWindowText( stPrompt, "请稍后再拨...", NULL );
						state = ST_INACTIVE_HANG_UP;
						{
							DestroyWindow( btHangUp );
							btHangUp = CreateWindow( WNDCLASS_BUTTON,"挂断",WS_CHILD | BS_REGULAR,(U16)(btHangUpX-24),btHangUpY,btW,btH,mainwin,0,NULL);
							btReDial = CreateWindow( WNDCLASS_BUTTON,"重拨",WS_CHILD | BS_REGULAR,(U16)(btHangUpX+24),btHangUpY,btW,btH,mainwin,0,NULL);
						}
						break;
					case AT_RPS_NO_CARRIER:
						if( state == ST_DIALING )	// 未接通
						{
							SetWindowText( mainwin, "占线!", NULL );
							SetWindowText( stPrompt, "请稍后再拨...", NULL );
							state = ST_INACTIVE_HANG_UP;
						}
//						quit = 1;
						break;
					case AT_RPS_ERROR:
						SetWindowText( stPrompt, "对话失败!", NULL );
						state = ST_INACTIVE_HANG_UP;
//						quit = 1;
						break;
					default:
						FreeParameter( msg.data );
						break;
				}
				break;
			case WM_ALARM:
				if( msg.wparam == ALARM_PHONE )	// 来电
				{
					char	*name, *number;

					// 获取来电号码和来电者姓名
					name = (char *)msg.data;
					if( *name == '\0' )
						name = NULL;
					number = (char *)msg.data + 25;
					if( *number == '\0' )
						number = NULL;

					// 通话
					TalkingDlg( number, name, PhHisTypeLst[RECEIVED_TYPE][0] );
					Lfree( msg.data );
				}
				break;
			case WM_QUIT:
				if( state == ST_DIALING )
				{
					HANG_UP( );
				}
				quit = 1;
				break;
		}
		DefWindowProc(msg.message, msg.lparam, msg.data, msg.wparam); 
	}
	
	Lfree( number_info );
	DestroyWindow( mainwin );
	dbgprintf( "### Exit 拨号 ###" );
	return;
}

//---------------------------------------------------------------
//  Name:				TalkingDlg
//
//	Description:		This is talking dialog window.
//
//	Parameters:
//		number			number for dialing.
//		name			name of the number owner
//		type			type of talking ( "0" received, "2" dialed )
//
//	Returns:
//
//---------------------------------------------------------------
U8 TalkingDlg( char *number, char *name, char *type )
{
	MSG 	msg;

	// 窗口和控件
	U32		mainwin;	// 主窗口
	U32		bt;			// 挂断键
	U32		dialPanel;	// 拨号键盘
	U32		editor;		// 号码输入显示框
	U32		stPrompt;	// 通话时间显示栏
	U32		tskbar;		// 任务栏
	
	U8		state;		// 通话状态

	// 通话计时相关
	U32		timer;		// 通话计时器
	ASIX_TIME	start_tim;	// 通话起始时间
	ASIX_TIME	cur_tim;	// 系统当前时间
	ASIX_TIME	elapse_tim;	// 通话用时

	// 数据库相关
	DBLACB	*lacb;
//	LOCALSEARCHLIST	*search_result;


	U8		quit = 0;
	U16		temp;
	
	S8		*btcap = "挂断";
	
	// WINDOW ARRANGEMENT
	const	U16		form_w = PHY_LCD_W, form_h = PHY_LCD_H, form_x = 0, form_y = 0;
	const	U16		ed_w = form_w - 8, ed_h = 20, ed_x = form_x + 4, ed_y = form_y + 42;
	const	U16		bt_w = 24, bt_h = 24, bt_x = PHY_LCD_W - bt_w -11, bt_y = ed_y + ed_h + 5;
	const	U16		st_w = form_w, st_h = 24, st_x = form_x, st_y = form_y + form_h - st_h - 20;

	dbgprintf( "### Enter 通话 ###" );
	mainwin = CreateWindow(	WNDCLASS_WIN,			
					"通话中...",			
					WS_OVERLAPPEDWINDOW,
					form_x,form_y,				
					form_w,form_h,
					0,				
					0,				
					NULL);			
	
	temp = bt_y;
	bt = CreateWindow( WNDCLASS_BUTTON, 
						btcap, 
						WS_CHILD | BS_REGULAR,
						bt_x,temp,
						bt_w,bt_h,
						mainwin,0,NULL);
	

	editor = CreateWindow( WNDCLASS_EDITOR,
					NULL,
					WS_CHILD | ES_SINGLELINE | ES_RIGHT,
					ed_x,ed_y,
					ed_w,ed_h,
					mainwin,
					0,
					NULL);
	
	dialPanel = CreateWindow( WNDCLASS_KEYBD,
					NULL,
					WS_CHILD|KBS_DIALPAD|0xff,
					ed_x,bt_y,
					(U16)(form_w-2),16,
					mainwin,
					0,
					NULL);
	stPrompt = CreateWindow( WNDCLASS_STATIC,
					"通话时间: 00:00:00", 
					WS_CHILD|SS_TEXT|SS_BOARD, 
					st_x,st_y,
					st_w,st_h,
					mainwin,
					0, 
					NULL);

	tskbar = CreateWindow(WNDCLASS_TSKBAR, NULL, WS_CHILD|TBS_TYPICAL, 0, 0, 0, 0,mainwin, 0, NULL);

	SetFocus( editor );
	PopUpWindow( mainwin, 0 );

	// 连接通话记录数据库
	lacb = LinkDataBase( PH_DATA_BASE );
	if( lacb == NULL )	// 连接数据库失败
	{
	}

	CreateTimer( &timer, 1000, NULL, NULL, CYC_MODE|AUTO_START_MODE );
	StartTimer( timer );
	GetTime( &start_tim );
	
	while( !quit )
	{
		ASIXGetMessage( &msg, NULL, 0, 0 );
		switch( msg.message )
		{			
			case WM_COMMAND:
				if( msg.lparam == bt )	// 主动挂断
				{
					StopTimer( timer );
					HANG_UP( );
					state = ST_ACTIVE_HANG_UP;
					quit = 1;
				}
				break;
			case WM_AT:
				switch( msg.lparam )
				{
					case AT_RPS_NO_CARRIER:	// 对方挂断
						{						
							StopTimer( timer );
							state = ST_INACTIVE_HANG_UP;
							GetTime( &cur_tim );
							GetElapsedTime( &elapse_tim, &start_tim, &cur_tim );
							quit = 1;
						}
						break;
					default:
						FreeParameter( msg.data );
						break;
				}
				break;
			case WM_TIMER:
				if( msg.lparam == timer )	// 通话计时
				{
					char	info[20];
					WORD	mc = 0, hc = 0;

					GetTime( &cur_tim );
					GetElapsedTime( &elapse_tim, &start_tim, &cur_tim );

					sprintf( info, "通话时间: %02d:%02d:%02d", elapse_tim.hour, elapse_tim.minute, elapse_tim.second );
					SetWindowText( stPrompt, info, NULL );
				}
				break;
			case WM_QUIT:
				StopTimer( timer );
				HANG_UP( );
				state = ST_ACTIVE_HANG_UP;
				quit = 1;
				break;
		}
		DefWindowProc(msg.message, msg.lparam, msg.data, msg.wparam); 
	}
	
	FreeTimer( timer );
	
	// 保存到通话记录数据库
	{
		PHONEHISDATA	hisdata;
		ASIX_DATE		date;

		GetDate( &date );
		hisdata.date = &date;
		hisdata.name = name;
		hisdata.number = number;
		hisdata.type = type;
		hisdata.time = &start_tim;
		hisdata.elapse = &elapse_tim;

		SavePhoneHistory( lacb, &hisdata );
	}
	
	DetachDataBase( lacb );

	DestroyWindow( mainwin );
	dbgprintf( "### Exit 通话 ###" );

	return state;
}
/*
char *SelectCommonUsePhNum( void )
{
	MSG 	msg;
 	U8		quit = 0;

	// 窗口和控件ID
 	U32		mainwin;	// 对话框主窗口
	U32		bt[10];		// 挂断键和重拨键

	U8		state;		// 拨号状态
	S8		*number_info;

	U8		i;
	
// WINDOW ARRANGEMENT
	const	U16		formW = PHY_LCD_W*2/3, formH = PHY_LCD_H/3, formX = PHY_LCD_W/6, formY = ( PHY_LCD_H - formH )/2;
	const	U16		stW = formW - 8, stH = 30, stX = formX + 4, stY = formY + 22;
	const	U16		btW = 32, btH = 20, btGap = ( formW - btW )/2;
	const	U16		btHangUpX = formX + btGap, btHangUpY = formY + formH - 24;

	mainwin = CreateWindow(	WNDCLASS_WIN,			
							"拨号中...",			
							WS_POPUPWINDOW,
							formX,formY,				
							formW,formH,
							0,				
							0,				
							NULL);
	btHangUp = CreateWindow( WNDCLASS_BUTTON,
					"挂断",
					WS_CHILD | BS_REGULAR,
					btHangUpX,btHangUpY,
					btW,btH,
					mainwin,
					0,
					NULL);

}
*/

⌨️ 快捷键说明

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