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

📄 syscnfg.c

📁 一个操作系统源代码 用于嵌入式设备 在Vc++环境下仿真 成功移植到多款处理器上
💻 C
📖 第 1 页 / 共 2 页
字号:
/*************************************************************************
*
* Copyright  2002 National ASIC Center, All rights Reserved
*
* FILE NAME:			syscnfg.c
* PROGRAMMER:			longn_qi
* Date of Creation:		2002/10/11
* 
* DESCRIPTION: 			
*
* NOTE:			 		 
*						 
*
* FUNCTIONS LIST:
* -------------------------------------------------------------------------
*
* GLOBAL VARS LIST:
* 
*
**************************************************************************
*
* MODIFICATION HISTORY
*
*
* 2002/10/11	by longn_qi		Create the file
*								
*************************************************************************/
#include <stdio.h>
#include <string.h> 

#include <asixwin.h>
#include <asixapp.h>

#include <sys\lmalloc.h>
#include <sys\keydef.h>

#include <hardware\drball\pwm.h>
#include <hardware\drball\volt.h>

#include <asixwin\asix_lb.h>
#include <asixwin\select.h>


#include <resource\bitmap.h>

#include "syscnfg.h"

BYTE	LcdCnfgValue[3] = { 3, 0, 0 };
BYTE	AudioCnfgValue[7] = { 0, 0, 0, 0, 0, 0, 0 };

extern unsigned char	UartCnfgValue[4];

extern void ConfigTP( void );
extern void ConfigLCD( void );
extern void ConfigSerials( void );
extern void ConfigAudio( void );
extern void ConfigGSM( void );

TASKDESCRIPTION CnfgTPTskDesp =
{"笔定位",		ASIX_APP,	2,	dingwei,4096, 1,	LCD_WIDTH,	LCD_HEIGHT,	ConfigTP,		APP_PRI};
TASKDESCRIPTION CnfgLCDTskDesp =
{"显示设置",	ASIX_APP,	2,	zi_display,	4096, 1,	LCD_WIDTH,	LCD_HEIGHT,	ConfigLCD,		APP_PRI};
TASKDESCRIPTION CnfgUARTTskDesp =
{"串口设置",	ASIX_APP,	2,	zi_chuankou,	4096, 1,	LCD_WIDTH,	LCD_HEIGHT,	ConfigSerials,	APP_PRI};
TASKDESCRIPTION CnfgAudioTskDesp =
{"声音设置",	ASIX_APP,	2,	zi_voice,	4096, 1,	LCD_WIDTH,	LCD_HEIGHT,	ConfigAudio,	APP_PRI};
TASKDESCRIPTION CnfgGSMTskDesp =
{"通信设置",	ASIX_APP,	2,	zi_tongxun,	4096, 1,	LCD_WIDTH,	LCD_HEIGHT,	ConfigGSM,		APP_PRI};

static void ConfigPromptSound( void );

// 触摸屏设置任务
void ConfigTP( void )
{
	MSG 	msg;

	msg.messageType = ASIX_MESSAGE;
	msg.message = SM_PEN_CALIBRATION;

	SysSendMessage( SYSTASK_ID, &msg );

	EndofTask();
}

// 显示屏设置任务
void ConfigLCD( void )
{
	MSG 	msg;
	U8		quit = 0;
//	U32		hGC;

 	// 窗口和控件ID
	U32		mainwin;		// 主窗口
	U32		bt[3][2];		// 调节按键
	U32		bt_ok;			// 确定键
	U32		bt_cancel;		// 取消键
	U32		st_prompt[3];	// 选项提示
	U32		bt_value[3];	// 调节值提示
	U32		tskbar;			// 任务栏

 	U8		i;
	U16		temp;
	
	S8		*stcap[3] = { "对比度", "背光延时", "关屏延时" };
	S8		value_str[3][6];
	BYTE	temp_value[3];
	BYTE	min_value[3] = { 0, 0, 0 };
	BYTE	max_value[3] = { 4, 0, 0 };
	BYTE	contrast_scale = ( MAX_CONTRAST - MIN_CONTRAST )/( max_value[0] - min_value[0] );
	
	// WINDOW ARRANGEMENT
	const	U16		form_w = PHY_LCD_W, form_h = PHY_LCD_H, form_x = 0, form_y = 0;
	const	U16		st_w = LCD_WIDTH*1/5, st_h = LCD_HEIGHT/8, st_x = form_x + ITEM_GAP_W, st_y = form_y + 20 + ITEM_GAP_H;
	const	U16		bt_w = LCD_WIDTH/10, bt_h = 24, bt_x = st_x + 2*st_w + ITEM_GAP_W, bt_y = st_y;
	const	U16		st_w2 = LCD_WIDTH/3, st_x2 = bt_x + bt_w, bt_x2 = st_x2 + st_w2;
	const	U16		bt_w3 = (PHY_LCD_W-2)/2, bt_x3 = form_x + 1, bt_y3 = form_y + PHY_LCD_H - 20 - bt_h;

	mainwin = CreateWindow(	WNDCLASS_WIN,			
					"显示屏配置",			
					WS_OVERLAPPEDWINDOW,
					form_x,form_y,				
					form_w,form_h,
					0,				
					0,				
					NULL);			
	tskbar = CreateWindow(WNDCLASS_TSKBAR, NULL, WS_CHILD|TBS_TYPICAL, 0, 0, 0, 0,mainwin, 0, NULL);
	
	temp = st_y;
	for( i = 0; i < 3; i++ )
	{
		sprintf( value_str[i], "%d", LcdCnfgValue[i] );
		temp_value[i] = LcdCnfgValue[i];

		// 提示
		st_prompt[i] = CreateWindow( WNDCLASS_STATIC, 
								stcap[i], 
								WS_CHILD | SS_TEXT | SS_RIGHT,
								st_x,temp,
								st_w,st_h,
								mainwin,0,NULL);
		// 减少键
		bt[i][0] = CreateWindow( WNDCLASS_BUTTON, 
								NULL,//"-", 
								WS_CHILD | BS_ICON | BS_FLAT,
								bt_x,temp+(st_h-bt_h)/2,
								bt_w,bt_h,
								mainwin,0,(char *)left10X10);
		EnableFocus( bt[i][0], FALSE );	// 屏蔽焦点
		
		// 设定值
		bt_value[i] = CreateWindow( WNDCLASS_BUTTON, 
								value_str[i], 
								WS_CHILD | BS_BOARD | BS_FLAT,
								st_x2,temp,
								st_w2,st_h,
								mainwin,0,NULL);
		// 增加键
		bt[i][1] = CreateWindow( WNDCLASS_BUTTON, 
								NULL,//"+", 
								WS_CHILD | BS_ICON | BS_FLAT,
								bt_x2,temp+(st_h-bt_h)/2,
								bt_w,bt_h,
								mainwin,0,(char *)right10X10);
		EnableFocus( bt[i][1], FALSE );	// 屏蔽焦点
		
		temp += st_h + 16;
	}

	bt_ok = CreateWindow( WNDCLASS_BUTTON, 
							"确定", 
							WS_CHILD | BS_REGULAR | BS_FLAT | BS_BOARD,
							bt_x3,bt_y3,
							bt_w3,bt_h,
							mainwin,0,NULL);
	bt_cancel = CreateWindow( WNDCLASS_BUTTON, 
							"取消", 
							WS_CHILD | BS_REGULAR | BS_FLAT | BS_BOARD,
							(U16)(bt_x3 + bt_w3),bt_y3,
							bt_w3,bt_h,
							mainwin,0,NULL);

	SetFocus( bt_value[0] );
	
	while( !quit )
	{
		ASIXGetMessage( &msg, NULL, 0, 0 );
		switch( msg.message )
		{			
			case WM_COMMAND:
				for( i = 0; i < 3; i++ )
				{
					if( msg.lparam == bt[i][0] )
					{	
						// 减少值
						if( temp_value[i] == min_value[i] )
							break;

						temp_value[i]--;
						sprintf( value_str[i], "%d", temp_value[i] );
						SetWindowText( bt_value[i], value_str[i], NULL );
						if( GetFocus() != bt_value[i] )
							SetFocus( bt_value[i] );
						switch( i )
						{
							case 0:	// 对比度调节
								SetContrast( (U8)(MIN_CONTRAST + temp_value[i]*contrast_scale) );
								break;
							case 1:	// 背光延时调节
								break;
							case 2:	// 关屏延时调节
								break;
						}
						break;
					}
					else if( msg.lparam == bt[i][1] )
					{	
						// 增加值
						if( temp_value[i] == max_value[i] )
							break;

						temp_value[i]++;
						sprintf( value_str[i], "%d", temp_value[i] );
						SetWindowText( bt_value[i], value_str[i], NULL );
						if( GetFocus() != bt_value[i] )
							SetFocus( bt_value[i] );
						switch( i )
						{
							case 0:	// 对比度调节
								SetContrast( (U8)(MIN_CONTRAST + temp_value[i]*contrast_scale) );
								break;
							case 1:	// 背光延时调节
								break;
							case 2:	// 关屏延时调节
								break;
						}
						break;
					}
				}
				if( i == 3 )
				{
					if( msg.lparam == bt_ok )
					{
						// 保存设置
						for( i = 0; i < 3; i++ )
						{
							LcdCnfgValue[i] = temp_value[i];
						}
						quit = 1;
					}
					else if( msg.lparam == bt_cancel )
					{
						// 恢复设置
						SetContrast( (U8)(MIN_CONTRAST + LcdCnfgValue[0]*contrast_scale) );

						quit = 1;
					}
				}
				break;
			case WM_KEYDOWN:
			case WM_KEYUP:
				// 切换焦点
				for( i = 0; i < 3; i++ )
				{
					if( msg.lparam == bt_value[i] || msg.lparam == bt[i][0] || msg.lparam == bt[i][1] )
					{
						switch( msg.wparam )
						{
							case ASIX_KEY_UP:
								if( i == 0 )	// 第一个
									SetFocus( bt_value[2] );
								else	// 上移一个
									SetFocus( bt_value[i-1] );
								break;
							case ASIX_KEY_DOWN:
								if( i == 2)	// 最后一个
									SetFocus( bt_value[0] );
								else	// 下移一个
									SetFocus( bt_value[i+1] );
								break;
							case ASIX_KEY_LEFT:
								{
									// 减少值
									if( temp_value[i] == 0 )
										break;

									temp_value[i]--;
									sprintf( value_str[i], "%d", temp_value[i] );
									SetWindowText( bt_value[i], value_str[i], NULL );
								}
								break;
							case ASIX_KEY_RIGHT:
								{
									// 增加值
									//if( temp_value[i] == VALUE_MAX )
									//	break;

									temp_value[i]++;
									sprintf( value_str[i], "%d", temp_value[i] );
									SetWindowText( bt_value[i], value_str[i], NULL );
								}
								break;
							case ASIX_KEY_OK:
								// 保存设置
								for( i = 0; i < 3; i++ )
								{
									LcdCnfgValue[i] = temp_value[i];
								}
								quit = 1;
								break;
							case ASIX_KEY_CANCEL:
								// 恢复设置
								SetContrast( (U8)(MIN_CONTRAST + LcdCnfgValue[0]*contrast_scale) );
								quit = 1;
								break;
						}
						break;
					}
				}
				break;
			case WM_QUIT:
				quit = 1;
				break;
		}
		DefWindowProc(msg.message, msg.lparam, msg.data, msg.wparam); 
	}
	
	DestroyWindow( mainwin );
	EndofTask();
}

// 串口设置任务
void ConfigSerials( void )
{
	MSG 	msg;
	U8		quit = 0;
//	U32		hGC;

 	// 窗口和控件ID
	U32		mainwin;		// 主窗口
	U32		lb[4];			// 配置选项列表
	U32		bt_ok;			// 确定键
	U32		bt_cancel;		// 取消键
	U32		st[4];			// 选项提示
	U32		tskbar;			// 任务栏

	S8		*stcap[4] = { "速率", "数据位", "校验", "停止位" };
	struct LBOX_ITEM	lb_baud[] =
	{	
		ICON_ENABLE,	UNUNDERLINE,	"38400",
		ICON_ENABLE,	UNUNDERLINE,	"28800",
		ICON_ENABLE,	UNUNDERLINE,	"19200",
		ICON_ENABLE,	UNUNDERLINE,	"14400",
		ICON_ENABLE,	UNUNDERLINE,	"9600",
		ICON_ENABLE,	UNUNDERLINE,	"4800",
		ICON_ENABLE,	UNUNDERLINE,	"1200",
		ICON_ENABLE,	UNUNDERLINE,	"600",
		ICON_ENABLE,	UNUNDERLINE,	"300",
		ICON_END,		UNUNDERLINE,	NULL
	};
	struct LBOX_ITEM	lb_data[] =
	{	
		ICON_ENABLE,	UNUNDERLINE,	"8",
		ICON_ENABLE,	UNUNDERLINE,	"7",
		ICON_ENABLE,	UNUNDERLINE,	"6",
		ICON_ENABLE,	UNUNDERLINE,	"5",
		ICON_END,		UNUNDERLINE,	NULL
	};
	struct LBOX_ITEM	lb_ck[] =
	{	
		ICON_ENABLE,	UNUNDERLINE,	"无",
		ICON_ENABLE,	UNUNDERLINE,	"偶",
		ICON_ENABLE,	UNUNDERLINE,	"奇",
		ICON_END,		UNUNDERLINE,	NULL
	};
	struct LBOX_ITEM	lb_stp[] =
	{	
		ICON_ENABLE,	UNUNDERLINE,	"1",
		ICON_ENABLE,	UNUNDERLINE,	"1.5",
		ICON_ENABLE,	UNUNDERLINE,	"2",
		ICON_END,		UNUNDERLINE,	NULL
	};

	struct LBOX_ITEM	*lb_cap[4];


	U8		i;
	U16		temp;
	
	BYTE	temp_value[4];
	
	// WINDOW ARRANGEMENT
	const	U16		form_w = PHY_LCD_W, form_h = PHY_LCD_H, form_x = 0, form_y = 0;
	const	U16		st_w = 48, st_h = 24, st_x = form_x + 5, st_y = form_y + 20 + ( form_h - 72 - st_h * 5 )/2;
	const	U16		lb_w = LCD_WIDTH*1/2, lb_h = st_h, lb_x = st_x + st_w + 5, lb_y = st_y;
	const	U16		bt_w = (PHY_LCD_W-2)/2, bt_h = st_h, bt_x = form_x + 1, bt_y = form_y + PHY_LCD_H - 20 - bt_h;

	lb_cap[0] = lb_baud;
	lb_cap[1] = lb_data;
	lb_cap[2] = lb_ck;
	lb_cap[3] = lb_stp;

	mainwin = CreateWindow(	WNDCLASS_WIN,			
					"串口设置",			
					WS_OVERLAPPEDWINDOW,
					form_x,form_y,				
					form_w,form_h,
					0,				
					0,				
					NULL);			
	tskbar = CreateWindow(WNDCLASS_TSKBAR, NULL, WS_CHILD|TBS_TYPICAL, 0, 0, 0, 0,mainwin, 0, NULL);
	
	temp = st_y;
	for( i = 0; i < 4; i++ )
	{
		temp_value[i] = UartCnfgValue[i];

		// 提示
		st[i] = CreateWindow( WNDCLASS_STATIC, 
								stcap[i], 
								WS_CHILD | SS_TEXT | SS_RIGHT,
								st_x,temp,
								st_w,st_h,
								mainwin,0,NULL);
		// 选项
		lb[i] = CreateWindow( WNDCLASS_LIST, 
								NULL,
								WS_CHILD | BS_ICON,// | BS_REGULAR,
								lb_x,temp,
								lb_w,lb_h,

⌨️ 快捷键说明

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