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

📄 e20_dis.c

📁 HSAV DR53E CF卡MP3录放板应用编程源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
#include "E20_main.h"           

/*******************************************************************************************/
/*********** 函数功能为解码板回传对应指令,由用户主机接收处理,                        ***********/
/*******************************************************************************************/
void mcCTB_CommandA03(){
    switch (gCTBCommandBuffer[1]){
        case cCTB_RECORD : 
            FRecordPause = 0;
            #ifndef OTG_MODE
                FRecord_doing = 1;
                MMDIP_Menu_Record_doing();
            #endif
            gAUDAction_State = cAUDAction_RECORD; /*当前状态为播放状态*/
            break;                                           
        case cCTB_RECORD_PAUSE : 
            gAUDAction_State = cAUDAction_RECPause; /*当前状态为播放状态*/
            #ifndef OTG_MODE
            if (gPlay_Minute == gRecord_Minute){
               //继续录入下一段
                FRecordPause = 1;
                FRecord_doing = 0;
                //按进入选择保存/不保存退出菜单
                gCursorMove = 1;
                MDIP_Menu_EnterSaveRevord(gCursorMove);
                gMenuSelect = cMenu_EnterSaveRevord;
            }
            #endif
            break;                                           
        case cCTB_RECORD_STOP : 
            gAUDAction_State = cAUDAction_RECStop; /*当前状态为播放状态*/
            FRecord_doing = 0;
            if (FRecordExit) MSpecify_Delect(gTrack_Max+1);//在不储存退出时要删除最后生成曲目
            FRecordExit = 0;
            break;                                           
        default : break;
    }
    return;
}
void mcCTB_CommandA04(){
    switch (gCTBCommandBuffer[1]){
        case cCTB_PLAY :      /*回传播放状态*/
            gAUDAction_State = cAUDAction_Play; /*当前状态为播放状态*/
            FKyWillPlay = 0;
			#ifndef OTG_MODE
                gCTBCommandBuffer[0] = cCTB_CommandA04;
                gCTBCommandBuffer[1] = cCTB_REARD_INFO;                             
                gCTBCommandBuffer[2] = cCTB_TRACK_NAME;		 
                gCTBCommandBuffer[3] = 0;		 
                MCTBCommandWrite();
			#else 
				mCTB_Read_TreakName();
			#endif
            break;                                                  
        case cCTB_PAUSE :   /*回传暂停状态*/
            gAUDAction_State = cAUDAction_Pause; /*当前状态为暂停状态*/
            break;
        case cCTB_STOP :              /*回传停止状态*/
            gAUDAction_State = cAUDAction_Stop;
            break;
        case cCTB_REARD_INFO : 
		    switch (gCTBCommandBuffer[2]){
		        case cCTB_ReadTrack_Max :      /* 回传播放目录下的曲目最大值,如目录下有3个曲目,最大值回传为3, */
		            gTrack_Max = gCTBCommandBuffer[3]; /*回传字节D为曲目最大值*/
			#ifndef OTG_MODE
                    if (gMenuSelect == cMenu_Main02_SectionErase){
                        gBellLong = gTrack_Max;
                        MDIP_Menu_SectionErase(gCursorMove,gTrack_Max);
                    }
		            else if (gMenuSelect == cMenu_Main02_ALLErase){
                        if (gTrack_Max == 0){
                            FDIPReverse = 1;
                            MDIPWriteChinese_String(64-16*3,cDOTLine2, "成功删");
                            MDIPChineseToScreen(64, cDOTLine2, cDIP_cu);
                            MDIPWriteChinese_String(64+16,cDOTLine2, "曲目");
                        }
                        else {
                            MSpecify_Delect(gTrack_Max);
                            FDIPReverse = 1;
                            MDIPWriteChinese_String(64-16*3,cDOTLine2, "删");
                            MDIPChineseToScreen(64-16*2, cDOTLine2, cDIP_cu);
                            MDIPWriteChinese_String(64-16*1, cDOTLine2, "第");
                            MDIPWriteChinese_String(64+7*2,cDOTLine2, "段");
                            MDIPASCIIToScreen(64,cDOTLine2, gTrack_Max/10 + '0');
                            MDIPASCIIToScreen(64+7*1,cDOTLine2, gTrack_Max%10 + '0');
                        }
                        MDIP_Menu_Quit();
                    }
                    else if (gMenuSelect == cMenu_Main02_Record_doing){
                        Mplay_Stop(cCTB_RECORD);
                        FRecord_doing = 0;
		            }
                    #endif
		            break;
                    case cCTB_Escalate :
                        if (gCTBCommandBuffer[3]) { //正在升级中。。。
                            MDIPClearALL();
                            MDIPWriteEngChinese_String(0,cDOTLine2, " UpDate Setuping..");
                            FErase_UpData = 1;
                        }
                        else {
             //升级版本为               
                            MDIPClearALL();
                            gUpdateCPU_DelayTm = 120;
                            MReturnMenu();
                        }
                    break;
		        default : break;
        	}
            break;
        case cCTB_DRIVER_SELECT : /*接入USB闪盘或拨出USB闪盘回传指令*/
			#ifdef OTG_MODE
	            if ((gCTBCommandBuffer[2] == 0x00) && (gCTBCommandBuffer[3] == 0x01)){ // 检测到有U盘接入
		            gCTBCommandBuffer[0] = 0x02;
		            gCTBCommandBuffer[1] = cCTB_PLAY;
		        	MCTBCommandWrite();
	            }
	            else { // 检测到U盘已拨出
	            }
			#else 
                if ((gCTBCommandBuffer[2] == 0x0c) && (gCTBCommandBuffer[3] == 01)){ /*接入USB闪盘时,回传指令为字节A 0x04/字节B 0x72/字节C 0x0c/字节D 0x01*/
                    FInitiaizeOK = 1;                    /*读起闪盘标志*/
                    FKyWillPlay = 1;                     /*自动播放标志*/
                    /*显示曲目号码*/
                }
                else {      /*拨出USB闪盘时,回传指令为字节A 0x04/字节B 0x72/字节C 0x00/字节D 0x00, */

                }
            #endif
            break;
        default : break;
    }
    return;
}
void mcCTB_CommandA05(){
    switch (gCTBCommandBuffer[1]){
        case cCTB_REARD_INFO :
			if (gCTBCommandBuffer[2] == cCTB_PLAY_TIMER){     /* 回传指令为05H/70H/15H/2个字节的曲目播放时间*/
                g2Main01 = (gCTBCommandBuffer[3] << 8) | gCTBCommandBuffer[4];   /*回传指令字节D、E组成16位的曲目播放总时间*/
                g2Goto_TimePlay = g2Main01;              /*播放总时间,即总秒数*/

                gPlay_Hour = g2Main01/3600;              /*计算得出播放的小时数*/
                gPlay_Minute = (g2Main01%3600)/60;       /*计算得出播放的分钟数*/
                gPlay_Second = (g2Main01%3600)%60;       /*计算得出播放的秒钟数*/
                if (!FDSPLoad_OK){                       /*读起硬盘或闪盘时,第一次回传时间标志*/
                    FInitiaizeOK = 1;                    /*读起硬盘或闪盘标志*/
                    FKyWillPlay = 1;                     /*自动播放标志*/
                }
                FDSPLoad_OK = 1;

                if (FInitiaizeOK){          /*读起硬盘或闪盘标志*/
                    if ((gMenuSelect == cMenu_Main02_Select_MP3)||(gMenuSelect == cMenu_Main03_LoopPlayMP3)
                        ||(gMenuSelect ==cMenu_Main03_MP3Name)||(gMenuSelect ==cMenu_Main02_Record_doing)) {
                        gTAB_HourMinsecond[2] = mNumeration_DecToHex(gPlay_Second); //秒
                        gTAB_HourMinsecond[1] = mNumeration_DecToHex(gPlay_Minute); //分
                        gTAB_HourMinsecond[0] = mNumeration_DecToHex(gPlay_Hour); //小时
                        if (gMenuSelect == cMenu_Main02_Record_doing){
                            #ifndef OTG_MODE
                                FRecord_doing = 1;
                                MMDIP_Menu_Record_doing();
                                if (gPlay_Minute == gRecord_Minute){ //分段储存前要暂停
                                    if (gTAB_HourMinsecond[2] == 0){
                                        Mplay_Stop(cCTB_RECORD_PAUSE);
                                    }
                                }
                            #endif
                        }
                        else {
                            if ((gAUDAction_State != cAUDAction_Stop) && (gAUDAction_State != cAUDAction_Pause)){
                                MDIP_SetupTime_List(0,cDOTLine3,0);
                            }
                        }

                    }
                    if ((gMenuSelect == cMenu_Main02_SectionErase)
                        ||(gMenuSelect == cMenu_Main02_ALLErase)
                        ||(FRecordPause &&(gMenuSelect == cMenu_Main02_Record_doing))){
            			#ifdef OTG_MODE
                            gCTBCommandBuffer[0] = cCTB_CommandA03;
                            gCTBCommandBuffer[1] = cCTB_REARD_INFO;
                            gCTBCommandBuffer[2] = cCTB_ReadTrack_Max;
                            MCTBCommandWrite();
                        #else
                            gCTBCommandBuffer[0] = cCTB_CommandA04;
                            gCTBCommandBuffer[1] = cCTB_REARD_INFO;
                            gCTBCommandBuffer[2] = cCTB_ReadTrack_Max;
                            gCTBCommandBuffer[3] = 0x00;
                            MCTBCommandWrite();
                        #endif
                    }

                }

            }
            break;
        case cCTB_SYSTEM :
            if ((gCTBCommandBuffer[2] & 0x03) == 0x03) mCTB_SYSTEM();
            break;
        default : break;
    }
    return;
}

void MDIPHostDataProcs(){

	#ifdef OTG_MODE
	    if ((gCTBCommandBuffer[1] == cCTB_TRACK_NAME)||(gCTBCommandBuffer[1] == (cCTB_TRACK_NAME+1))){
         	mCTB_TrackNameFONT();		 //汉字左半	
		}
        if ((gCTBCommandBuffer[1] == 0x70)&&(gCTBCommandBuffer[2] == 0x50)) mCTB_SYSTEM();
        mcCTB_CommandA03();
        mcCTB_CommandA04();
        mcCTB_CommandA05();
    #endif
    switch (gCTBCommandBuffer[0]){
        case cCTB_CommandA03 :    /*回传对应指令长度为3字节*/
            mcCTB_CommandA03();
            break;
        case cCTB_CommandA04 :   /*回传对应指令长度为4字节*/
            mcCTB_CommandA04();
            break;
        case cCTB_CommandA05 :   /*回传对应指令长度为5字节*/
            mcCTB_CommandA05();
            break;
        case cCTB_CommandA06 :   /*回传对应指令长度为6字节*/                 
            switch (gCTBCommandBuffer[1]){
                case cCTB_REARD_INFO: 
        			if (gCTBCommandBuffer[2] == cCTB_TRACK_NUMBER){
        	            gTrackNumber = gCTBCommandBuffer[5];/*回传指令字节E为播放曲目的号码*/  

            			#ifdef OTG_MODE
                            gCTBCommandBuffer[0] = cCTB_CommandA03;
                            gCTBCommandBuffer[1] = cCTB_REARD_INFO;
                            gCTBCommandBuffer[2] = cCTB_ReadTrack_Max;
                            MCTBCommandWrite();
                        	mCTB_Read_TreakName(); // 读歌名字库发送指令
                        #else
                            gCTBCommandBuffer[0] = cCTB_CommandA04;
                            gCTBCommandBuffer[1] = cCTB_REARD_INFO;
                            gCTBCommandBuffer[2] = cCTB_ReadTrack_Max;
                            gCTBCommandBuffer[3] = 0x00;
                            MCTBCommandWrite();
                        #endif

                        FDIPSimble_VolDn(0);
                        FDIPSimble_VolUp(0);

        			}
                    break;
                default : break;
            }
            break;
        case cCTB_CommandA10 : 
            if (gCTBCommandBuffer[1] == 0x80){
                gTrack_Name[0] = gCTBCommandBuffer[2];
                gTrack_Name[1] = gCTBCommandBuffer[3];
                gTrack_Name[2] = gCTBCommandBuffer[4];
                gTrack_Name[3] = gCTBCommandBuffer[5];
                gTrack_Name[4] = gCTBCommandBuffer[6];
                gTrack_Name[5] = gCTBCommandBuffer[7];
                gTrack_Name[6] = gCTBCommandBuffer[8];
                gTrack_Name[7] = gCTBCommandBuffer[9];
            } 
            break;
        default : break;
    }
    return;
}

void mCTB_TrackNameFONT(){
    BYTE gLocal_0;
    BYTE gLocal_1;
    BYTE gLocal_2;

    gLocal_2 = gCTBCommandBuffer[0] - 4; //回传长度
    gLocal_1 = gCTBCommandBuffer[3];	 //第1个ASCII码
    gLocal_0 = 4;
    do {
        gTrack_Name[gTrackNameLength++] = gCTBCommandBuffer[gLocal_0++]; 
    } while (gLocal_0 < (gLocal_2+4));


	if (gCTBCommandBuffer[1] == (cCTB_TRACK_NAME+1)){
        gLocal_0 = gTrackNameLength;
        do {
            gTrack_Name[gLocal_0] = ' ';
        } while (++gLocal_0 < 60);
        //启动显示

⌨️ 快捷键说明

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