📄 main.c
字号:
/********************************************************************************
* SDK30F_D1
* music player main sub
*
* (c) Copyright 2002, Actions Co,Ld.
* All Right Reserved
*
* File: main.c
* By : wurui
* Version: 1> v1.00 first version 2005-9-19 8:28
*
* $Id: main.c,v 1.17 2005/12/30 07:54:44 wurui Exp $
*******************************************************************************
*/
//#include "music.h"
#include "main.h"
#include "string.h"
//#include "UsbService.h"
#include "driver.h"
#include "FIFO.h"
non_banked int usb_main(void);
#ifdef WIN32
bool MainTaskExistFlag = FALSE;
#endif
extern char RTCSchTimer;
void main();
void USB_Entry(void);
void System_KillAllTask();
bool System_DetectAllTask();
void System_KillIdleTask();
void Main_CreateMainWindow(stack_vars *MainTaskVars);
void Main_DeleteMainWindow(stack_vars *MainTaskVars);
void Main_HideMainWindow(stack_vars *MainTaskVars);
void Main_ShowMainWindow(stack_vars *MainTaskVars);
void Main_SelectKeyResolve(stack_vars *MainTaskVars);
void Main_KeyResolve(stack_vars *MainTaskVars,int key);
void Main_GetPicRect(GUI_RECT *PicRect,int i);
void Main_ReadMainVars(stack_vars *MainTaskVars);
void cbCallBack_MainMenu(WM_MESSAGE *pMsg);
void Main_SemInit(msg_t *msg_list);
void Main_ShowPicLock();
void Main_ShowPicUnlock();
void Main_SemExit();
static OS_EVENT *ShowPicSem = 0;
void MainTask()
{
stack_vars MainTaskVars;
msg_t msg;
msg_t msg_list[10];
int pic_invaliable[]={MUSIC_I, EBOOK_I, RECORD_I, RPL_I, FM_I,SYSTEM_I};
int pic_valiable[]={MUSIC_V, EBOOK_V, RECORD_V, RPL_V, FM_V,SYSTEM_V};
api_init();
Main_SemInit(msg_list);
memset(&MainTaskVars, 0, sizeof(stack_vars));
OSSetTaskOwnPtr((unsigned int *)&MainTaskVars, MAIN_FACE_ID);
MainTaskVars.point[1] = pic_invaliable;
MainTaskVars.point[2] = pic_valiable;
Main_CreateMainWindow(&MainTaskVars);
//主循环
while(1)
{
//msg = (msg_t *)MYOSQPend(GUIToMainWindow,0,&err);
MYOSQPend(GUIToMainWindow,&msg,0);
switch(msg.type)
{
case MSG_REPAINTWIN:
Main_ShowMainWindow(&MainTaskVars);
break;
case MSG_KEY:
Main_KeyResolve(&MainTaskVars,msg.msg.data[0]);
break;
case MS_USB:
USB_Entry();
break;
}
}
}
void USB_Entry(void)
{
System_KillAllTask();
OS_ENTER_CRITICAL();
KillTimer(RTCSchTimer); //uninstall rtcschtimer
SwitchRcodeToRam(DRV_USB_B); //switch usb entry bank
OS_EXIT_CRITICAL();
usb_main();
}
void Main_ShowMainWindow(stack_vars *MainTaskVars)
{
MainTaskVars->RedrawFlag = TRUE;
WM_ShowWindow(MainTaskVars->FrameWin);
WM_SetFocus(MainTaskVars->FrameWin);
}
void Main_KeyResolve(stack_vars *MainTaskVars,int key)
{
GUI_RECT rClient;
switch(key)
{
case GUI_KeyEnter_KeyMode | GUI_Key_Up:
if(MainTaskVars->lastkey == 0)
{
Main_SelectKeyResolve(MainTaskVars);
MainTaskVars->lastkey = GUI_KeyEnter_KeyMode | GUI_Key_Up;
return;
}
MainTaskVars->lastkey = 0;
break;
case GUI_KeyDown_KeyNext | GUI_Key_Down:
case GUI_KeyDown_KeyNext | GUI_Key_Hold:
Main_ShowPicLock();
Main_GetPicRect(&rClient,MainTaskVars->CurSelect);
MainTaskVars->LastSelect = MainTaskVars->CurSelect;
WM_InvalidateRect(MainTaskVars->FrameWin,&rClient);
MainTaskVars->CurSelect = (MainTaskVars->CurSelect +1) % 6;
Main_GetPicRect(&rClient,MainTaskVars->CurSelect);
WM_InvalidateRect(MainTaskVars->FrameWin,&rClient);
break;
case GUI_KeyUp_KeyPrev | GUI_Key_Down:
case GUI_KeyUp_KeyPrev | GUI_Key_Hold:
Main_ShowPicLock();
Main_GetPicRect(&rClient,MainTaskVars->CurSelect);
MainTaskVars->LastSelect = MainTaskVars->CurSelect;
WM_InvalidateRect(MainTaskVars->FrameWin,&rClient);
if(MainTaskVars->CurSelect ==0)
MainTaskVars->CurSelect = 5;
else
MainTaskVars->CurSelect--;
Main_GetPicRect(&rClient,MainTaskVars->CurSelect);
WM_InvalidateRect(MainTaskVars->FrameWin,&rClient);
break;
}
}
void Main_SelectKeyResolve(stack_vars *MainTaskVars)
{
switch(MainTaskVars->CurSelect)
{
#ifndef WIN32
case 0:
WM_SetFocus(WM_HBKWIN);
Main_HideMainWindow(MainTaskVars);
MusicTaskCreate();
break;
#endif
case 1:
WM_SetFocus(WM_HBKWIN);
Main_HideMainWindow(MainTaskVars);
EBookTaskCreate();
break;
case 2:
WM_SetFocus(WM_HBKWIN);
Main_HideMainWindow(MainTaskVars);
RecordTaskCreate();
break;
}
}
void Main_CreateMainWindow(stack_vars *MainTaskVars)
{
MainTaskVars->RedrawFlag = TRUE;
MainTaskVars->FrameWin = WM_CreateWindow(0,0,96,64,WM_CF_SHOW,&cbCallBack_MainMenu,0);
WM_SetFocus(MainTaskVars->FrameWin);
}
void cbCallBack_MainMenu(WM_MESSAGE *pMsg)
{
GUI_RECT rClient;
stack_vars *MainTaskVars;
int *pic_invaliable,*pic_valiable;
int i;
msg_t msg;
switch (pMsg->MsgId)
{
case WM_PAINT:
GUI_SetBkColor(GUI_LIGHTBLUE);
//GUI_Clear();
MainTaskVars = (stack_vars *)OSGetTaskOwnPtr(MAIN_FACE_ID);
pic_invaliable = (int*)MainTaskVars->point[1];
pic_valiable = (int*)MainTaskVars->point[2];
for(i=0;i<6;i++)
{
if(!MainTaskVars->RedrawFlag)
if(i!=MainTaskVars->LastSelect && i!=MainTaskVars->CurSelect)
continue;
Main_GetPicRect(&rClient,i);
if(i != MainTaskVars->CurSelect)
GUI_ShowPic(pic_invaliable[i], rClient.x0, rClient.y0);
else
GUI_ShowPic(pic_valiable[i], rClient.x0, rClient.y0);
}
Main_ShowPicUnlock();
MainTaskVars->RedrawFlag = 0;
break;
case WM_KEY:
switch(((WM_KEY_INFO*)(pMsg->Data.p))->PressedCnt)
{
case 0:
msg.type = MSG_KEY;
msg.msg.data[0] = ((WM_KEY_INFO*)(pMsg->Data.p))->Key | GUI_Key_Up;
MYOSQPost(GUIToMainWindow,&msg);
return;
case 1:
msg.type = MSG_KEY;
msg.msg.data[0] = ((WM_KEY_INFO*)(pMsg->Data.p))->Key | GUI_Key_Down;
MYOSQPost(GUIToMainWindow,&msg);
return;
case 3:
msg.type = MSG_KEY;
msg.msg.data[0] = ((WM_KEY_INFO*)(pMsg->Data.p))->Key | GUI_Key_Hold;
MYOSQPost(GUIToMainWindow,&msg);
return;
case 4:
System_DealMessage(pMsg);
return;
}
break;
}
WM_DefaultProc(pMsg);
}
void Main_GetPicRect(GUI_RECT *PicRect,int i)
{
PicRect->x0= 32*(i % 3);
PicRect->x1 = PicRect->x0 + 32;
PicRect->y0 = 32*(i / 3);
PicRect->y1 = PicRect->y0 + 32;
}
void Main_HideMainWindow(stack_vars *MainTaskVars)
{
WM_HideWindow(MainTaskVars->FrameWin);
}
void Main_DeleteMainWindow(stack_vars *MainTaskVars)
{
WM_DeleteWindow(MainTaskVars->FrameWin);
}
void MainTaskCreate()
{
//IF MAINTASK IS NOT EXIST THEN
if(!MainTaskDetect())
{
#ifdef WIN32
CREATE_TASK(&aTCB[0], "MAIN MENU", MainTask, 3, Stack_0);
#else
OSTaskCreate((void(*)(void *))(long)MainTask, (void *)0x0000,
(void *)MAIN_FACE_SPACE, MAIN_FACE_PRIO, MAIN_FACE_ID);
#endif
}
//ELSE THEN DO NOTHING
else
{
msg_t msg;
msg.type = MSG_REPAINTWIN;
MYOSQPost(GUIToMainWindow,&msg);
}
}
void MainTaskDelete()
{
#ifndef WIN32
Main_SemExit();
for(;;)
{
OSTaskDel(OS_PRIO_SELF);
}
#endif
}
bool MainTaskDetect()
{
#ifndef WIN32
OS_ENTER_CRITICAL();
if(OSTCBPrioTbl[MAIN_FACE_PRIO] != (OS_TCB *)0)
{
OS_EXIT_CRITICAL();
return TRUE;
}
OS_EXIT_CRITICAL();
return FALSE;
#else
if(!MainTaskExistFlag)
{
MainTaskExistFlag = TRUE;
return FALSE;
}
return TRUE;
#endif
}
void Main_SemInit(msg_t *msg_list)
{
if(ShowPicSem == 0)
{
ShowPicSem = OSSemCreate(1);
}
if(GUIToMainWindow == 0)
{
GUIToMainWindow = MYOSQCreate(msg_list,10);
}
}
void Main_ShowPicUnlock()
{
OSSemPost(ShowPicSem);
}
void Main_ShowPicLock()
{
INT8U err;
OSSemPend(ShowPicSem, 0, &err);
}
void Main_SemExit()
{
INT8U err;
MYOSQDel (GUIToMainWindow, OS_DEL_ALWAYS, &err);
}
void System_KillAllTask()
{
msg_t msg_send;
msg_send.type = MS_END;
MYOSQPost(Engine_Out,&msg_send);
MYOSQPost(GUIToEBookWindow,&msg_send);
OSTimeDly(10);
DelGUITask();
GUI_ShowPic(BACK, 0, 0);
GUI_ShowPic(USBIMG,4,14);
MYOSQPost(Engine_In,&msg_send);
do
{
OSTimeDly(5);
}while(PlayerEngineDetect() != 0);
}
void System_KillIdleTask()
{
OSTaskDel(IDEL_PRIO);
}
bool System_DetectAllTask()
{
bool result;
result = EBookTaskDetect();
result |= MusicTaskDetect();
result |= PlayerEngineDetect();
return result;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -