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

📄 recordmain.c

📁 Actions ucOS-II mp3方案源码,可以做参考
💻 C
📖 第 1 页 / 共 2 页
字号:
/********************************************************************************
*                        SDK30F_D1
*                     music player main sub
*
*                (c) Copyright 2002, Actions Co,Ld.
*                        All Right Reserved
*
* File: recordmain.c
* By  : wurui
* Version: 1> v1.00     first version     2005-12-12 11:28
*
*  $Id: recordmain.C,v 1.3 2005/12/23 02:44:35 wurui Exp $
*******************************************************************************
*/
//#ifdef __RECORD_
 
#include "record.h"
#include "string.h"
#include "UsbService.h"

void                cbCallBack_RecordWindow(WM_MESSAGE* pMsg);
void                 cbCallBack_FunctionWindow(WM_MESSAGE* pMsg);
void                 cbCallBack_FunctionSubWindow(WM_MESSAGE* pMsg);
void                 _cbCallBack_DeakKeyMsg(WM_MESSAGE* pMsg);
void                _DealKeyMessage(record_vars *RecordTaskVars,msg_t *msg);
void                _DealRecorderMessage(record_vars *RecordTaskVars,msg_t *msg);

void                _ReadDefaultVars(record_vars *RecordTaskVars);
unsigned long        _GetDiskTotalSize1();
unsigned long        _GetDiskFreeSize1();
void                _CreateRecordWindow(record_vars *RecordTaskVars);
void                 _CreateFunctionWindow(record_vars *RecordTaskVars);
void                _BackToMainTask(record_vars *RecordTaskVars);
void                _DeleteAllWindow(record_vars *RecordTaskVars);
void                __DeleteFunctionWindow(record_vars *RecordTaskVars);
char*                _ConvertBTToString(bitrate_t BTIndex,char *string);
char*                _ConvertRectypeToString(RecType_t type,char *string);
char*                _ConvertTimeToString(Full_time_t *time,char *string);
char                 *_ConvertRestTimeToString(Rest_time_t *time,char *string);

void                _StartPauseRecord(record_vars *RecordTaskVars);
void                 _StopRecord(record_vars *RecordTaskVars);
void                __GetRecName(record_vars *RecordTaskVars);
void                 _ExitFunctionsWindow(record_vars *RecordTaskVars);
void                 _SetMemuItems(record_vars *RecordTaskVars);
void                _ForcusToFunctionWin(record_vars *RecordTaskVars);
void                __ForcusToFunctionSubWin(record_vars *RecordTaskVars);
void                _SetUserSelect(record_vars *RecordTaskVars);
void                 _RedrawFunctionSubWin(record_vars *RecordTaskVars);
bitrate_t            _ConvertStringToBT(char *BTString);

void RecordTask()
{
    record_vars RecordTaskVars;
    INT8U err;
    msg_t msg; 

    memset(&RecordTaskVars, 0, sizeof(record_vars));
    RecordTaskVars.RedrawFlag = TRUE;
    _SetMemuItems(&RecordTaskVars);
    
    OSSetTaskOwnPtr((unsigned int *)&RecordTaskVars, RECORD_FACE_ID);
    RecordTaskVars.recorder_vars = (recorder_t *)OSGetTaskOwnPtr(RECORDER_ENGINE_ID);
    _ReadDefaultVars(&RecordTaskVars);
    
    _CreateRecordWindow(&RecordTaskVars);
    while(Recorder_Out == 0)
        OSTimeDly(5);
    
    while(1)
    {
        MYOSQPend(Recorder_Out, &msg, 0);
        switch(msg.type)
        {
        case MSG_KEY:
            _DealKeyMessage(&RecordTaskVars,&msg);
            break;
        case MS_RECORDER:
            _DealRecorderMessage(&RecordTaskVars,&msg); 
            break;                     
        case MS_Err:
            break;
        case MS_END:
            _DeleteAllWindow(&RecordTaskVars);
            RecordTaskDelete();
            break;
        }
    }
}
void _DealKeyMessage(record_vars *RecordTaskVars,msg_t *msg)
{
    if(RecordTaskVars->CurWin == 0)
    {
        switch(msg->msg.data[0])
        {
        case GUI_KeyEnter_KeyMode | GUI_Key_Long:
            _BackToMainTask(RecordTaskVars);
            break;
        case GUI_KeyBackspace_KeyPlay | GUI_Key_Up:
            if(RecordTaskVars->LastOp != (GUI_KeyBackspace_KeyPlay | GUI_Key_Long))
                _StartPauseRecord(RecordTaskVars);
            else
                RecordTaskVars->LastOp = 0;
            break;
        case GUI_KeyBackspace_KeyPlay | GUI_Key_Long:
            _StopRecord(RecordTaskVars);
            RecordTaskVars->LastOp = GUI_KeyBackspace_KeyPlay | GUI_Key_Long;
            break;
        case GUI_KeyEnter_KeyMode | GUI_Key_Up:
            if(RecordTaskVars->recorder_vars->recorder_info.status <= record_stop)
                _CreateFunctionWindow(RecordTaskVars);
            break;
//        case GUI_KeyRight_KeyVolAdd | GUI_Key_Down:  
//        case GUI_KeyLeft_KeyVolSub | GUI_Key_Down:
        case GUI_KeyDelete_KeyLoop | GUI_Key_Up:
        case GUI_KeyEnd_KeyEQ | GUI_Key_Up:    
        case GUI_KeyDown_KeyNext | GUI_Key_Up:
        case GUI_KeyUp_KeyPrev | GUI_Key_Up:
        case GUI_KeyDown_KeyNext | GUI_Key_Long:  
            break;
        } 
    }
    else if(RecordTaskVars->CurWin == 1)
    {
        switch(msg->msg.data[0])
        {
        case GUI_KeyEnter_KeyMode | GUI_Key_Long:
            _BackToMainTask(RecordTaskVars);
            break;
        case GUI_KeyBackspace_KeyPlay | GUI_Key_Up:
            _ExitFunctionsWindow(RecordTaskVars);
            break;
        case GUI_KeyEnter_KeyMode | GUI_Key_Up:
            _RedrawFunctionSubWin(RecordTaskVars);
            break;
        case GUI_KeyUp_KeyPrev | GUI_Key_Up:
            LISTBOX_DecSel(RecordTaskVars->FunctionWin);
            break;
        case GUI_KeyDown_KeyNext | GUI_Key_Up:
            LISTBOX_IncSel(RecordTaskVars->FunctionWin);
            break;
//        case GUI_KeyRight_KeyVolAdd | GUI_Key_Down:  
//        case GUI_KeyLeft_KeyVolSub | GUI_Key_Down:
        case GUI_KeyDelete_KeyLoop | GUI_Key_Up:
        case GUI_KeyEnd_KeyEQ | GUI_Key_Up:    
        case GUI_KeyDown_KeyNext | GUI_Key_Long:  
            break;
        }
    }
    else
    {
        switch(msg->msg.data[0])
        {
        case GUI_KeyEnter_KeyMode | GUI_Key_Long:
            _BackToMainTask(RecordTaskVars);
            break;
        case GUI_KeyEnter_KeyMode | GUI_Key_Up:
            _SetUserSelect(RecordTaskVars);
            _ExitFunctionsWindow(RecordTaskVars);
            break;
        case GUI_KeyBackspace_KeyPlay | GUI_Key_Up:
            _ForcusToFunctionWin(RecordTaskVars);
            break;
        case GUI_KeyUp_KeyPrev | GUI_Key_Up:
            LISTBOX_DecSel(RecordTaskVars->FunctionSubWin);
            break;
        case GUI_KeyDown_KeyNext | GUI_Key_Up:
            LISTBOX_IncSel(RecordTaskVars->FunctionSubWin);
            break;
        }    
    }
}
void _RedrawFunctionSubWin(record_vars *RecordTaskVars)
{
    GUI_ConstString *pptext;
    switch(LISTBOX_GetSel(RecordTaskVars->FunctionWin))
    {
    case 0:
        pptext = (GUI_ConstString*)RecordTaskVars->FunctionSubMenu[0];
        break;
    case 1:
        pptext = (GUI_ConstString*)RecordTaskVars->FunctionSubMenu[RecordTaskVars->FunctionInfo.rec_sort+1];
        break;
    case 2:
        return;
    case 3:
        _ExitFunctionsWindow(RecordTaskVars);
        return;
    }
    LISTBOX_Clear(RecordTaskVars->FunctionSubWin);
    LISTBOX_SetText(RecordTaskVars->FunctionSubWin, pptext);
    
    __ForcusToFunctionSubWin(RecordTaskVars);
}

void _ForcusToFunctionWin(record_vars *RecordTaskVars)
{
    RecordTaskVars->CurWin = 1;
    LISTBOX_SetBackColor(RecordTaskVars->FunctionSubWin, 1, GUI_LIGHTBLUE);
    LISTBOX_SetTextColor(RecordTaskVars->FunctionSubWin, 1, GUI_BLACK);
    LISTBOX_SetBackColor(RecordTaskVars->FunctionWin, 1, GUI_RED);
    LISTBOX_SetTextColor(RecordTaskVars->FunctionWin, 1, GUI_WHITE);
    WM_InvalidateWindow(RecordTaskVars->FunctionWin);
    WM_InvalidateWindow(RecordTaskVars->FunctionSubWin);
    WM_SetFocus(RecordTaskVars->FunctionWin);
}
void __ForcusToFunctionSubWin(record_vars *RecordTaskVars)
{
    RecordTaskVars->CurWin = 2;
    LISTBOX_SetBackColor(RecordTaskVars->FunctionWin, 1, GUI_LIGHTBLUE);
    LISTBOX_SetTextColor(RecordTaskVars->FunctionWin, 1, GUI_BLACK);
    LISTBOX_SetBackColor(RecordTaskVars->FunctionSubWin, 1, GUI_RED);
    LISTBOX_SetTextColor(RecordTaskVars->FunctionSubWin, 1, GUI_WHITE);
    WM_InvalidateWindow(RecordTaskVars->FunctionSubWin);
    WM_InvalidateWindow(RecordTaskVars->FunctionWin);
    WM_SetFocus(RecordTaskVars->FunctionSubWin);
}
void _SetUserSelect(record_vars *RecordTaskVars)
{
    int *pptext;
    int item;
    msg_t msg_send;
    switch(LISTBOX_GetSel(RecordTaskVars->FunctionWin))
    {
    case 0:
        //RecordTaskVars->FunctionInfo.rec_sort = LISTBOX_GetSel(RecordTaskVars->FunctionSubWin);
        //switch(RecordTaskVars->FunctionInfo.rec_sort + 1)
        //{
        //case 1:
            //RecordTaskVars->recorder_vars->rec_control_info.rec_type = REC_AG8;
            //break;
        //case 2:
            //RecordTaskVars->recorder_vars->rec_control_info.rec_type = REC_WAV;
            //break;
        //case 3:
            RecordTaskVars->recorder_vars->rec_control_info.rec_type = REC_MP3;
        //    break;
        //}
        break;
    case 1:
        //pptext = RecordTaskVars->FunctionSubMenu[RecordTaskVars->FunctionInfo.rec_sort + 1];
        pptext = RecordTaskVars->FunctionSubMenu[3];
        item = LISTBOX_GetSel(RecordTaskVars->FunctionSubWin);
        RecordTaskVars->recorder_vars->rec_control_info.BTIndex = _ConvertStringToBT( GUI_GetStringByID( pptext[item], 1 ) );
        //if(RecordTaskVars->FunctionInfo.rec_sort == 1)
        //{
        //    if(item > 1)
        //           RecordTaskVars->recorder_vars->rec_control_info.vor_time = 1; // VOR时长. 0(off)/1/2/3…/10s(max)
        //       if(item % 2 == 0)
        //           RecordTaskVars->recorder_vars->rec_control_info.rec_type = REC_ADPCM;
        //       else
        //           RecordTaskVars->recorder_vars->rec_control_info.rec_type = REC_AG8;
        //}
        break;
    }        
    msg_send.type = MS_SetInfo;
    MYOSQPost(Recorder_In,&msg_send);
}

void _StartPauseRecord(record_vars *RecordTaskVars)
{
    msg_t msg_send;
    if(RecordTaskVars->recorder_vars->recorder_info.status <= record_stop)
    {
//        __GetRecName(RecordTaskVars);
        RecordTaskVars->RedrawFlag = TRUE;
        WM_InvalidateWindow(RecordTaskVars->MainWin);
    }
    msg_send.type = MS_Play;
    MYOSQPost(Recorder_In,&msg_send);
}
void _StopRecord(record_vars *RecordTaskVars)
{
    if(RecordTaskVars->recorder_vars->recorder_info.status > record_stop)
    {
        msg_t msg_send;
        msg_send.type = MS_Stop;
        MYOSQPost(Recorder_In,&msg_send);
    }
}
/*
void __GetRecName(record_vars *RecordTaskVars)
{
    RecordTaskVars->recorder_vars->recorder_filename[0] = 'R';
    RecordTaskVars->recorder_vars->recorder_filename[1] = 'E';
    RecordTaskVars->recorder_vars->recorder_filename[2] = 'C';
    RecordTaskVars->recorder_vars->recorder_filename[3] = '0';
    RecordTaskVars->recorder_vars->recorder_filename[4] = '0';
    RecordTaskVars->recorder_vars->recorder_filename[5] = '1';
    RecordTaskVars->recorder_vars->recorder_filename[6] = '.';
    RecordTaskVars->recorder_vars->recorder_filename[7] = 'A';
    RecordTaskVars->recorder_vars->recorder_filename[8] = 'C';
    RecordTaskVars->recorder_vars->recorder_filename[9] = 'T';
    RecordTaskVars->recorder_vars->recorder_filename[10] = 0;
}
*/
void _DealRecorderMessage(record_vars *RecordTaskVars,msg_t *msg)
{
    switch(msg->msg.data[0])
    {
    case MS_RedrawInfo:
        if(RecordTaskVars->recorder_vars->recorder_info.status >= record_recording)
            WM_InvalidateWindow(RecordTaskVars->MainWin);
        break;
    case MS_DSPExit:
        WM_InvalidateWindow(RecordTaskVars->MainWin);
        break;
    }    
}

void _CreateRecordWindow(record_vars *RecordTaskVars)
{
    RecordTaskVars->MainWin = WM_CreateWindow(0,0,0,0,WM_CF_SHOW,&cbCallBack_RecordWindow,0);
    WM_SetFocus(RecordTaskVars->MainWin);
}
void _CreateFunctionWindow(record_vars *RecordTaskVars)
{
//    RecordTaskVars->FunctionWin = WM_CreateWindow(0,0,0,0,WM_CF_SHOW,&cbCallBack_FunctionWindow,0);
    GUI_SetLanguageMode(2);
    RecordTaskVars->FunctionWin = LISTBOX_Create((GUI_ConstString *)RecordTaskVars->FunctionMenu,  0,0,37,94,cbCallBack_FunctionWindow, WM_CF_SHOW);
    LISTBOX_SetBackColor(RecordTaskVars->FunctionWin, 0, GUI_BLUE);
    LISTBOX_SetBackColor(RecordTaskVars->FunctionWin, 1, GUI_RED);
    LISTBOX_SetTextColor(RecordTaskVars->FunctionWin, 0, GUI_WHITE);
    LISTBOX_SetTextColor(RecordTaskVars->FunctionWin, 1, GUI_WHITE);
    LISTBOX_Clear(RecordTaskVars->FunctionWin);

//    LISTBOX_SetFont(RecordTaskVars->FunctionMenu, &GUI_Font13B_1);
    GUI_SetLanguageMode(2);
    RecordTaskVars->FunctionSubWin = LISTBOX_Create((GUI_ConstString *)RecordTaskVars->FunctionSubMenu[0],  35,0,126-35,94,cbCallBack_FunctionSubWindow, WM_CF_SHOW);
    LISTBOX_SetBackColor(RecordTaskVars->FunctionSubWin, 0, GUI_BLUE);
    LISTBOX_SetBackColor(RecordTaskVars->FunctionSubWin, 1, GUI_LIGHTBLUE);
    LISTBOX_SetTextColor(RecordTaskVars->FunctionSubWin, 0, GUI_WHITE);
    LISTBOX_SetTextColor(RecordTaskVars->FunctionSubWin, 1, GUI_BLACK);
    LISTBOX_Clear(RecordTaskVars->FunctionSubWin);
//    LISTBOX_SetFont(RecordTaskVars->FunctionMenu, &GUI_Font13B_1);

    RecordTaskVars->CurWin = 1;
    WM_SetFocus(RecordTaskVars->FunctionWin);
}
void cbCallBack_RecordWindow(WM_MESSAGE* pMsg)
{
    recorder_t *recorder_vars;
    record_vars *RecordTaskVars;
    char string[13];
    GUI_RECT rClient;
    
    switch (pMsg->MsgId) 
    {
    case WM_PAINT:
        recorder_vars = (recorder_t *)OSGetTaskOwnPtr(RECORDER_ENGINE_ID);
        RecordTaskVars = (record_vars *)OSGetTaskOwnPtr(RECORD_FACE_ID);
        GUI_SetBkColor(GUI_BLUE);
        GUI_SetColor(GUI_WHITE);
        GUI_GetClientRect(&rClient);
        if(recorder_vars->recorder_info.status <= record_stop)
        {
            GUI_Clear();
            GUI_DispStringAt(GUI_GetStringByID(S_TOTSZ , 1), rClient.x0, rClient.y0);
            GUI_DispStringAt(GUI_GetStringByID(S_RESSZ, 1), rClient.x0, rClient.y0+16);
            GUI_DispStringAt(GUI_GetStringByID(S_RESTM , 1), rClient.x0, rClient.y0+32);
            GUI_DispDecAt(_GetDiskTotalSize1(), rClient.x0, rClient.y0+8, 9);            
            GUI_DispDecAt(_GetDiskFreeSize1(), rClient.x0, rClient.y0+24, 9);   
            GUI_DispStringAt(_ConvertRestTimeToString(&recorder_vars->restTime,string), rClient.x0, rClient.y0+40);
            GUI_DispStringAt(recorder_vars->infomation.recorder_filename,rClient.x0, rClient.y0+48);
        }
        else
        {
            if(RecordTaskVars->RedrawFlag == TRUE)
            {
                GUI_RECT tmpClient;
                GUI_Clear();
                
                GUI_ShowPic(PHONE, rClient.x0, rClient.y0);
                GUI_ShowPic(BTTYPE, rClient.x0+36, rClient.y0);
                tmpClient.x0 = rClient.x0 + 37;
                tmpClient.x1 = rClient.x0 + 71;
                tmpClient.y0 = rClient.y0 + 1;
                tmpClient.y1 = rClient.y0 + 18;
                GUI_DispStringInRect(_ConvertBTToString(recorder_vars->rec_control_info.BTIndex, string), &tmpClient, GUI_TA_HCENTER | GUI_TA_VCENTER);
                tmpClient.y0 = rClient.y0 + 20;
                tmpClient.y1 = rClient.y0 + 37;
                GUI_DispStringInRect(_ConvertRectypeToString(recorder_vars->rec_control_info.rec_type, string), &tmpClient, GUI_TA_HCENTER | GUI_TA_VCENTER);
                GUI_DispStringAt(GUI_GetStringByID(W_REC , 1), rClient.x0, rClient.y0+40);
                GUI_DispStringAt(GUI_GetStringByID(W_REST , 1), rClient.x0, rClient.y0+48);
                GUI_DispStringAt(_ConvertRestTimeToString(&recorder_vars->restTime,string), rClient.x0+30, rClient.y0+48);
                GUI_DispStringAt(recorder_vars->infomation.recorder_filename,rClient.x0, rClient.y0+56);
                RecordTaskVars->RedrawFlag = FALSE;
            }
            GUI_DispStringAt(_ConvertTimeToString(&recorder_vars->recorder_info.current_time, string), rClient.x0+30, rClient.y0+40);
        }
        break;
    case WM_KEY:
        _cbCallBack_DeakKeyMsg(pMsg);
        return;
    }
    WM_DefaultProc(pMsg);
}
void _cbCallBack_DeakKeyMsg(WM_MESSAGE* pMsg)
{
    msg_t msg;
    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(Recorder_Out,&msg); 
        return;
/*    case 1:
        msg.type = MSG_KEY;
        msg.msg.data[0] = ((WM_KEY_INFO*)(pMsg->Data.p))->Key | GUI_Key_Down; 

⌨️ 快捷键说明

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