📄 aphearsay.c
字号:
/****************************************************************************/
/* */
/* Copyright (C) 2005 SHENZHEN MEIJIN CO.LTD */
/* */
/* FILE NAME: ApHearSay.c */
/* MODULE NAME: AP应用程序 */
/* DESCRIPTION: HearSayAP的函数 */
/* 数码复读学习界面 */
/* */
/* FUNCTIONS: */
/* */
/****************************************************************************/
/* NAME DATE REMARKS */
/* ========== ============ ==============================================*/
/* DennyHan 2006-03-09 V1.00B */
/****************************************************************************/
// 包含必要的头文件
#include "Ap.h"
#include "ApHearSay.h"
#include "ApHearSayHook.h"
#ifndef HEARSAY_HELP_ID
#define HEARSAY_HELP_ID (UINT)((const UINT8*)"\
1. 按[1]键播放。\r\n\
2. 按[2]键停止播放。\r\n\
3. 对于*.MST文本,播放过程中,声音和文字同步,按[左右]方向键浏览上、下句,同时播放相应位置的语音。\r\n\
4. 对于*.MST文件,系统根据本身设置的断点自动复读指定的范围。按[3]键开始复读,复读完设定的次数后,自动复读下一句,一直复读完毕。\r\n\
5. 对于*.MTL、*.TXT文本,播放过程中,按[上下]方向键、[翻页]键进行文本浏览。\r\n\
6. 对于*.MTL、*.TXT文本,需手动复读。即手动设置“A、B”点,对“A—B”点间的内容进行复读。按[1]键开始播放,并将播放起点自动作为“A”点,此时按字母[A]键将设置新的“A”点,再按字母[B]键设置“B”点,并开始从“A” 点到“B”点复读。\r\n\
7. 手动复读时,按字母[A]键设置新的“A”点,并开始从新的“A”点到原来的“B”点复读;按字母[B]键设置新的“B”点,并开始从原来的“A”点到新的“B”点复读;\r\n\
8. 按[3]键重新复读,此时,按[1]键从“B”点开始播放,并将“B”没置为新的A点,按[2]键,停止复读,并将光标停在“B”点;此时按[1]键将“B”点变成新的“A”点。\r\n\
9. 按[S]键进入复读次数设置画面,系统默认为三次,按键重新更改次数,按[确认]或[1]键保存设置。\r\n\
10. 在没有设置“A、B”点的情况下,按[3]键,复读无效。设置有“A”点,而没有“B”点,按[3]键,复读无效。\r\n\
11. 系统默认“A”点在左,“B”点在右。\r\n\
12. 按[4]键进入跳查的反白状态,正在播放的声音停止。按键可以移动反白块。按住[SHIFT]键再按方向键,可连续反白。\r\n\
13. 按[退出]返回到上一层画面。\r\n\
")
#endif
/****************************************************************************/
// Global 变量
RrParam g_RrParam;
// 内部函数说明
INT HearSayEventProc ( APGUI_STRUCT *pGui, UINT uEvent, UINT uParam );
INT HearSayEvent_Initialize( APGUI_STRUCT *pGui, UINT uEvent, UINT uParam );
INT HearSayEvent_Destroy ( APGUI_STRUCT *pGui, UINT uEvent, UINT uParam );
//INT HearSayEvent_Exit ( APGUI_STRUCT *pGui, UINT uEvent, UINT uParam );
INT HearSayEvent_Draw ( APGUI_STRUCT *pGui, UINT uEvent, UINT uParam );
INT HearSayDraw_ProBar ( APGUI_STRUCT *pGui, UINT uEvent, UINT uParam );
INT HearSayEvent_TimerPolling(APGUI_STRUCT *pGui, UINT uEvent, UINT uParam);
// Ap应用的GUI结构
#define HS_BWR_GUI(p) (pGui+1)
const APGUI_STRUCT g_aHearSayGui[] =
{
GUI_RESERVE_MARK, // UINT uReserveMark;
0, // INT16 nX;
0, // INT16 nY;
LCD_SCREEN_WIDTH, // UINT16 uWidth;
LCD_SCREEN_HEIGHT, // UINT16 uHeight;
(FPGUIHANDLEEVENT)HearSayEventProc, // FPGUIHANDLEEVENT fpHandleFunc;
NULL, // UINT uCurrentIme;
0, // INT nCtrlParam1;
0, // INT nCtrlParam2;
0, // INT nCtrlParam3;
//-------------------------------------
GUI_RESERVE_MARK, // UINT uReserveMark;
HEARSAY_BWR_X, // INT16 nX;
HEARSAY_BWR_Y, // INT16 nY;
HEARSAY_BWR_W, // UINT16 uWidth;
HEARSAY_BWR_H, // UINT16 uHeight;
(FPGUIHANDLEEVENT)HearSayBrowserProc, // FPGUIHANDLEEVENT fpHandleFunc;
(INT)(( BROWSER_OPTION_MARK
| SYSTLIB<<16// BROWSER_OPTION_ALIGNLEFT
| BROWSER_OPTION_RELOAD)),//(BROWSER_OPTION_MARK|BROWSER_OPTION_RELOAD), // UINT uCurrentIme;
HEARSAY_BWR_LINEH, // INT nCtrlParam1; // Line space is 1
0, // INT nCtrlParam2;
0, // INT nCtrlParam3;
//-------------------------------------
// AP的内部控件之GUI模板
//=============================================
// Play
GUI_RESERVE_MARK, // UINT uReserveMark;
HEARSAY_BTN1_X, // INT16 nX;
HEARSAY_BTN1_Y, // INT16 nY;
HEARSAY_BTN1_W, // UINT16 uWidth;
HEARSAY_BTN1_H, // UINT16 uHeight;
(FPGUIHANDLEEVENT)HearSayBar1Proc, // FPGUIHANDLEEVENT fpHandleFunc;
HEARSAY_BTN1_T,
(HEARSAY_BTN1_CMD+(HEARSAY_BTN1_KEY<<16)),
// ('Q' + ('Q' << 16)),
0, // INT nCtrlParam3;
0, // INT nCtrlParam4;
GUI_RESERVE_MARK, // UINT uReserveMark;
HEARSAY_BTN1_X, // INT16 nX;
HEARSAY_BTN1_Y, // INT16 nY;
HEARSAY_BTN1_W, // UINT16 uWidth;
HEARSAY_BTN1_H, // UINT16 uHeight;
(FPGUIHANDLEEVENT)HearSayBar1Proc, // FPGUIHANDLEEVENT fpHandleFunc;
HEARSAY_BTN1_T,
(HEARSAY_BTN1_CMD+(HEARSAY_BTN11_KEY<<16)),
// ('q' + ('q' << 16)),
0, // INT nCtrlParam3;
0, // INT nCtrlParam4;
//=============================================
// Stop
GUI_RESERVE_MARK, // UINT uReserveMark;
HEARSAY_BTN2_X, // INT16 nX;
HEARSAY_BTN2_Y, // INT16 nY;
HEARSAY_BTN2_W, // UINT16 uWidth;
HEARSAY_BTN2_H, // UINT16 uHeight;
(FPGUIHANDLEEVENT)HearSayBar12Proc, // FPGUIHANDLEEVENT fpHandleFunc;
HEARSAY_BTN2_T,
(HEARSAY_BTN7_CMD+(HEARSAY_BTN2_KEY<<16)),
// ('W' + ('W' << 16)),
0, // INT nCtrlParam3;
0, // INT nCtrlParam4;
GUI_RESERVE_MARK, // UINT uReserveMark;
HEARSAY_BTN2_X, // INT16 nX;
HEARSAY_BTN2_Y, // INT16 nY;
HEARSAY_BTN2_W, // UINT16 uWidth;
HEARSAY_BTN2_H, // UINT16 uHeight;
(FPGUIHANDLEEVENT)HearSayBar12Proc, // FPGUIHANDLEEVENT fpHandleFunc;
HEARSAY_BTN2_T,
(HEARSAY_BTN7_CMD+(HEARSAY_BTN22_KEY<<16)),
// ('w' + ('w' << 16)),
0, // INT nCtrlParam3;
0, // INT nCtrlParam4;
#if 0
//----------------------
GUI_RESERVE_MARK, // UINT uReserveMark;
HEARSAY_BTN3_X, // INT16 nX;
HEARSAY_BTN3_Y, // INT16 nY;
HEARSAY_BTN3_W, // UINT16 uWidth;
HEARSAY_BTN3_H, // UINT16 uHeight;
(FPGUIHANDLEEVENT)HearSayBar3Proc, // FPGUIHANDLEEVENT fpHandleFunc;
HEARSAY_BTN3_T,
(HEARSAY_BTN3_CMD+(HEARSAY_BTN3_KEY<<16)),
0, // INT nCtrlParam3;
0, // INT nCtrlParam4;
#else
//----------------------
GUI_RESERVE_MARK, // UINT uReserveMark;
HEARSAY_BTN3_X, // INT16 nX;
HEARSAY_BTN3_Y, // INT16 nY;
HEARSAY_BTN3_W, // UINT16 uWidth;
HEARSAY_BTN3_H, // UINT16 uHeight;
(FPGUIHANDLEEVENT)HearSayBar2Proc, // FPGUIHANDLEEVENT fpHandleFunc;
HEARSAY_BTN3_T,
(HEARSAY_BTN2_CMD+(HEARSAY_BTN3_KEY<<16)),
// ('E' + ('E' << 16)),
0, // INT nCtrlParam3;
0, // INT nCtrlParam4;
GUI_RESERVE_MARK, // UINT uReserveMark;
HEARSAY_BTN3_X, // INT16 nX;
HEARSAY_BTN3_Y, // INT16 nY;
HEARSAY_BTN3_W, // UINT16 uWidth;
HEARSAY_BTN3_H, // UINT16 uHeight;
(FPGUIHANDLEEVENT)HearSayBar2Proc, // FPGUIHANDLEEVENT fpHandleFunc;
HEARSAY_BTN3_T,
(HEARSAY_BTN2_CMD+(HEARSAY_BTN33_KEY<<16)),
// ('e' + ('e' << 16)),
0, // INT nCtrlParam3;
0, // INT nCtrlParam4;
#endif
//=============================================
GUI_RESERVE_MARK, // UINT uReserveMark;
HEARSAY_BTN4_X, // INT16 nX;
HEARSAY_BTN4_Y, // INT16 nY;
HEARSAY_BTN4_W, // UINT16 uWidth;
HEARSAY_BTN4_H, // UINT16 uHeight;
(FPGUIHANDLEEVENT)HearSayBar4Proc, // FPGUIHANDLEEVENT fpHandleFunc;
HEARSAY_BTN4_T,
(HEARSAY_BTN4_CMD+(HEARSAY_BTN4_KEY<<16)),
// ('R' + ('R' << 16)),
0, // INT nCtrlParam3;
0, // INT nCtrlParam4;
GUI_RESERVE_MARK, // UINT uReserveMark;
HEARSAY_BTN4_X, // INT16 nX;
HEARSAY_BTN4_Y, // INT16 nY;
HEARSAY_BTN4_W, // UINT16 uWidth;
HEARSAY_BTN4_H, // UINT16 uHeight;
(FPGUIHANDLEEVENT)HearSayBar4Proc, // FPGUIHANDLEEVENT fpHandleFunc;
HEARSAY_BTN4_T,
(HEARSAY_BTN4_CMD+(HEARSAY_BTN44_KEY<<16)),
// ('r' + ('r' << 16)),
0, // INT nCtrlParam3;
0, // INT nCtrlParam4;
//----------------------
NULL, // 结束符
};
/****************************************************************************/
/* FUNCTION: INT ApComHearSay(INT *pRet,const char *pTitle, UINT8 *pFile)*/
/* DESCRIPTION:运行桌面GUI界面 */
/* INPUTS: nParam */
/* Pointer to */
/* OUTPUTS: NONE */
/* RETURN: NONE */
/****************************************************************************/
/* NAME DATE REMARKS */
/* ========== ============ ==============================================*/
/* DennyHan 2006-01-26 First Issue */
/****************************************************************************/
INT ApComHearSay(INT *pRet,const char *pTitle, UINT8 *pFile)
{
INT nRet;
#if 0
ApComHSTest(&nRet,pTitle,pFile);
#endif
memset(&g_RrParam,0,sizeof(g_RrParam));
g_RrParam.pTitle=(const UINT8*)pTitle;
g_RrParam.pFile=(UINT8*)pFile;
g_RrParam.nApRet=-1;
// if 同步教材
g_RrParam.bSyncMtlEntry = FALSE;
if( (stricmp((char*)pTitle,(const char*)"同步教材"))==0)
{
g_RrParam.bSyncMtlEntry = TRUE;
}
//==================================
HearsayHook_DisableLcdClose();
HearsayHook_DisableBkgndPlay();
//=======================================
nRet=EXIT_CODE_NORMAL;
if (ApHearsayIniParam())
{
// 运行GUI
nRet = RunAp( (APGUI_STRUCT*)g_aHearSayGui);
// Release temp buffer
if (g_RrParam.pTBuf)
{
MemFree(g_RrParam.pTBuf);
}
}
//=======================================
*pRet = g_RrParam.nApRet;
HearsayHook_EnableBkgndPlay();
HearsayHook_EnableLcdClose();
return nRet;
}
// HearSay应用各事件处理函数跳转表
const APEV_HANDLE_TABLE g_aHearSayEvTable[] =
{
{EVENT_DRAW, (FPGUIHANDLEEVENT)HearSayEvent_Draw },
{EVENT_INITIALIZE, (FPGUIHANDLEEVENT)HearSayEvent_Initialize},
{EVENT_DESTROY, (FPGUIHANDLEEVENT)HearSayEvent_Destroy },
{EVENT_VOICE, (FPGUIHANDLEEVENT)HearSayEvent_Voice },
{EVENT_CMDEXP, (FPGUIHANDLEEVENT)HearSayEvent_BrowserEx},
{NULL, NULL}
};
const APEV_HANDLE_TABLE_EX g_aHearSayEvTableEx[] =
{
{EVENT_TIMER, APHS_TIMERID, (FPGUIHANDLEEVENT)HearSayEvent_TimerPolling},
{EVENT_KEY, MVK_ENTER, (FPGUIHANDLEEVENT)HearSayEvent_KeyEnter},
{EVENT_KEY, MVK_ESC, (FPGUIHANDLEEVENT)HearSayEvent_KeyEsc},
{EVENT_KEY, MVK_UP, (FPGUIHANDLEEVENT)HearSayEvent_KeyUp},
{EVENT_KEYREPEAT, MVK_UP, (FPGUIHANDLEEVENT)HearSayEvent_KeyUp},
{EVENT_KEYUP, MVK_UP, (FPGUIHANDLEEVENT)HearSayEvent_KeyUp},
{EVENT_KEY, MVK_DOWN, (FPGUIHANDLEEVENT)HearSayEvent_KeyUp},//Down},
{EVENT_KEYREPEAT, MVK_DOWN, (FPGUIHANDLEEVENT)HearSayEvent_KeyUp},//Down},
{EVENT_KEYUP, MVK_DOWN, (FPGUIHANDLEEVENT)HearSayEvent_KeyUp},//Down},
{EVENT_KEY, MVK_LEFT, (FPGUIHANDLEEVENT)HearSayEvent_KeyLeftRight},
{EVENT_KEYREPEAT, MVK_LEFT, (FPGUIHANDLEEVENT)HearSayEvent_KeyLeftRight},
//// {EVENT_KEYUP, MVK_LEFT, (FPGUIHANDLEEVENT)HearSayEvent_KeyLeftRight},
{EVENT_KEY, MVK_RIGHT, (FPGUIHANDLEEVENT)HearSayEvent_KeyLeftRight},
{EVENT_KEYREPEAT, MVK_RIGHT, (FPGUIHANDLEEVENT)HearSayEvent_KeyLeftRight},
//// {EVENT_KEYUP, MVK_RIGHT, (FPGUIHANDLEEVENT)HearSayEvent_KeyLeftRight},
{EVENT_KEY, MVK_PAGEUP, (FPGUIHANDLEEVENT)HearSayEvent_KeyUp},//PgUp},
{EVENT_KEYREPEAT, MVK_PAGEUP, (FPGUIHANDLEEVENT)HearSayEvent_KeyUp},//PgUp},
{EVENT_KEYUP, MVK_PAGEUP, (FPGUIHANDLEEVENT)HearSayEvent_KeyUp},//PgUp},
{EVENT_KEY, MVK_PAGEDOWN, (FPGUIHANDLEEVENT)HearSayEvent_KeyUp},//PgDn},
{EVENT_KEYREPEAT, MVK_PAGEDOWN, (FPGUIHANDLEEVENT)HearSayEvent_KeyUp},//PgDn},
{EVENT_KEYUP, MVK_PAGEDOWN, (FPGUIHANDLEEVENT)HearSayEvent_KeyUp},//PgDn},
{EVENT_KEY, 'A', (FPGUIHANDLEEVENT)HearSayEvent_KeyAB},
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -