📄 main.c
字号:
/***************************************************************************\
Copyright (c) 2004-2007 threewater@up-tech.com, All rights reserved.
by threewter 2004.5.12
\***************************************************************************/
/***************************************************************************\
#说明: C main 函数,ucos-ii初始化等定义
---------------------------------- Bug --------------------------------------
---------------------------------- TODO list --------------------------------------
----------------------------------修正--------------------------------------
2004-5-12 创建
\***************************************************************************/
#include"../ucos-ii/includes.h" /* uC/OS interface */
#include "../ucos-ii/add/osaddition.h"
#include "../inc/drivers.h"
#include "../inc/sys/lib.h"
#include "../src/gui/gui.h"
#include <string.h>
#include <stdio.h>
#pragma import(__use_no_semihosting_swi) // ensure no functions that use semihosting
///******************任务定义***************///
OS_STK Main_Stack[STACKSIZE]={0, }; //Main_Test_Task堆栈
void Main_Task(void *Id); //Main_Test_Task
#define Main_Task_Prio 12
OS_STK test_Stack[STACKSIZE]={0, }; //test_Test_Task堆栈
void test_Task(void *Id); //test_Test_Task
#define test_Task_Prio 15
int num=0;
extern List OSCtrl; //系统控件的链表,表头保留
List OSCtrl1,OSCtrl2;
List BakOSCtrl;
/**************已经定义的OS任务*************
#define SYS_Task_Prio 1
#define Touch_Screen_Task_Prio 9
#define Main_Task_Prio 12
#define Key_Scan_Task_Prio 58
#define Lcd_Fresh_prio 59
#define Led_Flash_Prio 60
***************************************/////////
///*****************事件定义*****************///
/////////////////////////////////////////////////////
// Main function. //
////////////////////////////////////////////////////
int main(void)
{ BakOSCtrl=OSCtrl;
ARMTargetInit(); // do target (uHAL based ARM system) initialisation //
OSInit(); // needed by uC/OS-II //
OSInitUart();
initOSFile();
#if USE_MINIGUI==0
initOSMessage();
initOSList();
initOSDC();
initOSCtrl();
LoadFont();
#endif
loadsystemParam();
// create the tasks in uC/OS and assign increasing //
// priorities to them so that Task3 at the end of //
// the pipeline has the highest priority. //
LCD_printf("Create task on uCOS-II...\n");
OSTaskCreate(Main_Task, (void *)0, (OS_STK *)&Main_Stack[STACKSIZE-1], Main_Task_Prio);
// OSTaskCreate(test_Task, (void *)0, (OS_STK *)&test_Stack[STACKSIZE-1], test_Task_Prio);
OSAddTask_Init(1);
LCD_printf("Starting uCOS-II...\n");
LCD_printf("Entering graph mode...\n");
LCD_ChangeMode(DspGraMode);
OSStart(); // start the OS //
// never reached //
return 0;
}//main
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
PListCtrl pMainListCtrl;//列表框控件指针
PListCtrl pMainListCtrl1;//列表框控件指针
char FileExName[]={'B','M','P',0};//文件扩展名
char BmpFile[100][256];//文件名数组
U16 UBmpFile[100][256];//文件名数组
char *BmpFilenew[100];//文件名数组
U16 *UBmpFilenew[100];//文件名数组
U16 * UBmpf;
char * Bmpf;
U8 count;
U8 ucount;
#define ID_MainListBox 101//列表框控件ID
#define ID_MainListBox_1 102//列表框控件ID
int ListNextFileName(U32 pos, char exname[], char filename[])
{
file_DIR *d=(file_DIR *)pos;
file_dirent *de;
file_stat s;
char* str;
if(d==NULL){
d = opendir("/sys/ucos/fj");
if(!d)
{
printf("opendir failed\n");
return 0;
}
}
while(1){
de = readdir(d);
if(de==NULL){
closedir(d);
return 0;
}
str = de->d_name+strlen(de->d_name)-4;
if(strcmp(str, ".BMP")!=0 && strcmp(str, ".bmp")!=0)
continue;
sprintf(filename,"/sys/ucos/fj/%s", de->d_name);
lstat(filename,&s);
if((s.st_mode & S_IFMT)!=S_IFREG)
continue;
break;
}
printf("find file: %s\n", filename);
return (int)d;
}
void onSlideShow()
{
PDC pdc;
static int p=0;
ClearScreen();
pdc=CreateDC();//创建绘图设备上下文
ShowBmp(pdc, BmpFile[p++], 260, 20);//显示图片
ReDrawOSCtrl();//重画控件
DestoryDC(pdc);//删除绘图设备上下文
if(p>=pMainListCtrl->ListNum)
p=0;
}
void CreateFileList()
{
structRECT rect;//定义矩形结构
structRECT rect1;//定义矩形结构
char filename[256];
U32 filepos=0;
U16 Ufilename[256];
int i=0,j=0;
SetRect(&rect, 0,18,240,200); //创建列表框控件
SetRect(&rect1, 0,250,240,432); //创建列表框控件
pMainListCtrl=CreateListCtrl(ID_MainListBox, &rect, 100,FONTSIZE_MIDDLE,CTRL_STYLE_DBFRAME,NULL);//创建列表框
pMainListCtrl1=CreateListCtrl(ID_MainListBox_1, &rect1, 100,FONTSIZE_MIDDLE,CTRL_STYLE_DBFRAME,NULL);//创建列表框
SetWndCtrlFocus(NULL, ID_MainListBox);//焦点移到列表框控件
while(filepos=ListNextFileName(filepos, FileExName, filename)){
strChar2Unicode(Ufilename,filename);//将文件名转换为Unicode
AddStringListCtrl(pMainListCtrl, Ufilename);//向列表框中添加表项
SetWndCtrlFocus(NULL, ID_MainListBox_1);//焦点移到列表框控件
AddStringListCtrl(pMainListCtrl1, Ufilename);//向列表框中添加表项
j=0;
while(UBmpFile[i][j]=Ufilename[j])
{//UBmpFilenew[i][j]=Ufilename[j];
j++;
}
strcpy(BmpFile[i++],filename);//将文件名存入文件名数组
//strcpy(BmpFilenew[i],filename);//将文件名存入文件名数组
SetWndCtrlFocus(NULL, ID_MainListBox);//焦点移到列表框控件
}
onSlideShow();
ReDrawOSCtrl();//重画控件
}
U8 onKey(int nkey, int fnkey);
void Main_Task(void *Id) //Main_Test_Task
{
POSMSG pMsg=0;//定义消息结构
num=0;
UBmpf=0;
Bmpf=0;
count=0;
ucount=0;
ClearScreen();//清屏
CreateFileList(); //创建文件列表框
OSCtrl1=BakOSCtrl;
OSCtrl2=*(BakOSCtrl.pNextList);
//消息循环
for(;;){
POS_Ctrl pCtrl;//定义控件结构指针
pMsg=WaitMessage(0);//等待消息
if(pMsg->pOSCtrl){//发送给控件的消息
if(pMsg->pOSCtrl->CtrlMsgCallBk)
(*pMsg->pOSCtrl->CtrlMsgCallBk)(pMsg);
}
else{
switch(pMsg->Message){
case OSM_KEY://键盘消息
if(num%2==0)
{SetWndCtrlFocus(NULL, ID_MainListBox);//焦点移到列表框控件
pCtrl=GetCtrlfromID(NULL, GetWndCtrlFocus(NULL));//得到焦点控件的指针
if(pCtrl->CtrlType==CTRLTYPE_WINDOW){
if((((PWnd)pCtrl)->style&WND_STYLE_MODE)==WND_STYLE_MODE){
//焦点是有模式窗口,消息直接传递过去
OSCtrl=OSCtrl1;
OSOnSysMessage(pMsg);
}
}
else if(num%2==1)
{SetWndCtrlFocus(NULL, ID_MainListBox_1);//焦点移到列表框控件
pCtrl=GetCtrlfromID(NULL, GetWndCtrlFocus(NULL));//得到焦点控件的指针
if(pCtrl->CtrlType==CTRLTYPE_WINDOW){
if((((PWnd)pCtrl)->style&WND_STYLE_MODE)==WND_STYLE_MODE){
//焦点是有模式窗口,消息直接传递过去
OSCtrl=OSCtrl2;
OSOnSysMessage(pMsg);
}
}
break;
}
}
if(onKey(pMsg->WParam,pMsg->LParam))
break;
default:
OSOnSysMessage(pMsg);
break;
case OSM_TOUCH_SCREEN://键盘消息
if(TCHSCR_ACTION_UP == pMsg->LParam)
onSlideShow();
break;
}
}
DeleteMessage(pMsg);//删除消息
memset(pMsg,0,sizeof(pMsg));
}
}
U8 onKey(int nkey, int fnkey)
{
PDC pdc;
static U8 flag;
switch(nkey&0xff){
case '\r'://enter
ClearScreen();
pdc=CreateDC();//创建绘图设备上下文
if(num%2==0)
{SetWndCtrlFocus(NULL, ID_MainListBox);//焦点移到列表框控件
ShowBmp(pdc, BmpFile[pMainListCtrl->CurrentSel], 260, 20);//显示图片
}
else if(num%2==1)
{SetWndCtrlFocus(NULL, ID_MainListBox_1);//焦点移到列表框控件
ShowBmp(pdc, BmpFile[pMainListCtrl1->CurrentSel], 260, 20);//显示图片
}
ReDrawOSCtrl();//重画控件
DestoryDC(pdc);//删除绘图设备上下文
return TRUE;
case '0':
num++;
return TRUE;
}
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -