00001
00002
00003
00004
00005
00006
00007
00060
00061 #include "../SYSTEM/sys_main.h"
00062 #include "../SYSTEM/sys_clock.h"
00063 #include "../SYSTEM/sys_param.h"
00064 #include "../SYSTEM/sys_hardware.h"
00065 #include "../SYSTEM/sys_hiddenfeature.h"
00066 #include "../AUDIO/audio.h"
00067 #include "../DECODER/decoder.h"
00068 #include "../ear/ear.h"
00069 #include "../FMXMIT/xmit_inc.h"
00070 #include "ui.h"
00071 #include "ui_assert.h"
00072 #include "xim.h"
00073 #include "playQ.h"
00074 #include "m3u.h"
00075
00076
00077 static PARENT_STATE _startPlay(MSG_DATA, BOOL);
00078 static BOOL _setupPlay(ULONG, st_PLAYQ *);
00079 static void _stopPlay(void);
00080 static void _setupPlayMenu(st_PLAYQ *);
00081 static void _updatePlayTime(void);
00082 static PARENT_STATE _prevNextMusic(int);
00083 static void _displayMyfiChannel(void);
00084 static PARENT_STATE _ximAction(UINT);
00085 static PARENT_STATE _stateEnd(void);
00086 static void _add2mymix(void);
00087 static BOOL _playFromMymix(void);
00088
00089 static void _linkitGUIon(BOOL);
00090 static void _updateLinkitDisplay(USHORT, HMENU);
00091
00092 static void _abInit(void);
00093 static void _abReset(ULONG);
00094 static void _abCheck(void);
00095
00096 #define F_PLAY_FROMDB 0x0001
00097 #define F_PLAY_PAUSED 0x0002
00098
00099 #define PLAY_isFromDb() (playFlag & F_PLAY_FROMDB)
00100 #define PLAY_fromDb() {playFlag |= F_PLAY_FROMDB;}
00101 #define PLAY_notFromDb() {playFlag &= ~F_PLAY_FROMDB;}
00102
00103 #define PLAY_wasPaused() (playFlag & F_PLAY_PAUSED)
00104 #define PLAY_setPaused() {playFlag |= F_PLAY_PAUSED;}
00105 #define PLAY_unsetPaused() {playFlag &= ~F_PLAY_PAUSED;}
00106
00107
00108 static HMENU menu = INVALID_MENU_HDL;
00109 static int playFlag;
00110
00111
00114 PLAY_SRC playSource;
00115
00116
00117 #pragma CODE_SECTION(UI_PSF_play, ".play_code")
00126 PARENT_STATE UI_PSF_play( st_MSG * msgIN )
00127 {
00128 MSG_ID id = msgIN->id;
00129 MSG_DATA d1 = msgIN->d1;
00130 MSG_DATA d2 = msgIN->d2;
00131
00132 switch(id)
00133 {
00134 case SYS_MSG_ID:
00135
00136 switch(d1)
00137 {
00138 case SSTATE_START:
00139 {
00140 SYS_clockSetup(CLOCK_PLAY);
00141 if(SYS_HF_linkit())
00142 {
00143 AUDIO_initInterface(AM_ILINK, AF_ILINK, 0, 0);
00144 AUDIO_setInterface(AI_START);
00145 SYS_audioNotPaused();
00146 _linkitGUIon(TRUE);
00147 return P_PLAY;
00148 }
00149
00150 #ifdef DJ_SUPPORT
00151 _abInit();
00152 #endif
00153 return _startPlay(d2, TRUE);
00154 }
00155 case SSTATE_END:
00156 {
00157 if(SYS_HF_linkit())
00158 {
00159 _stopPlay();
00160 return P_NULL;
00161 }
00162 return(_stateEnd());
00163 }
00164 case SSTARTRADIO:
00165 _stopPlay();
00166 return P_RADIO;
00167
00168 case SRESUMEPLAY:
00169 case SENDOFMENU:
00170 {
00171 if(MENU_isValid(menu) == FALSE )
00172 {
00173 _setupPlayMenu(UI_playQcurrent());
00174 menu = mMENU_create((void*)&MENU_buf[0]);
00175 _displayMyfiChannel();
00176 if(SYS_isAudioPaused())
00177 {
00178 mMENU_update(menu, 5, (ULONG)graf_icon_pause, FALSE);
00179 }
00180 else
00181 {
00182 mMENU_update(menu, 5, (ULONG)graf_icon_play, FALSE);
00183 }
00184 _updatePlayTime();
00185 }
00186 return P_PLAY;
00187 }
00188 case SPRESET:
00189 {
00190 if(SYS_isPresetable())
00191 {
00192 ULONG fptr;
00193
00194
00195
00196 if (SYS_isAudioPaused())
00197 fptr = AUDIO_getFilePtr();
00198 else
00199 fptr = 0;
00200 UI_presetAudio(d2, UI_presetDbId(0),
00201 UI_playQcurrent()->actvTrack,
00202 UI_presetFldEntry(0),
00203 UI_presetFldIdx(0),
00204 fptr);
00205 switch(UI_presetFldIdx(0))
00206 {
00207 case 1: UI_msgbxCreate(MSGBX_PLAYLIST_PRESETDONE); break;
00208 case 2: UI_msgbxCreate(MSGBX_ARTIST_PRESETDONE); break;
00209 case 3: UI_msgbxCreate(MSGBX_ALBUM_PRESETDONE); break;
00210 case 4: UI_msgbxCreate(MSGBX_GENRE_PRESETDONE); break;
00211 case 5: UI_msgbxCreate(MSGBX_RECORDING_PRESETDONE);break;
00212 default: UI_msgbxCreate(MSGBX_SONGS_PRESETDONE); break;
00213 }
00214 }
00215 return P_PLAY;
00216 }
00217 case SAUDIOTIME_UPDT:
00218 {
00219 #ifdef DJ_SUPPORT
00220 _abCheck();
00221 #endif
00222 _updatePlayTime();
00223 return P_PLAY;
00224 }
00225 case SENDOFMUSIC:
00226 {
00227 #ifdef DJ_SUPPORT
00228 if( (Ui.abMode)&&(2 == Ui.abStart) ) return _prevNextMusic(0);
00229 #endif
00230 DECODER_cacheDepthReset(1);
00231 return _prevNextMusic(1);
00232 }
00233 case SPLAYQCHANGED:
00234 {
00235 #ifdef M3U_SUPPORT
00236 if( UI_getPlaySource() != PLAY_FROM_PLAYQ )
00237 {
00238 st_PLAYQ * q = UI_playQcurrent();
00239
00240 UI_presetAudio(0, 0x1234, 1, DONTCARE, DONTCARE, 0);
00241
00242 DB_LOCK(SYS_FOREVER);
00243 UI_m3uPut(0, q->fname, q->artist, q->title, q->album, q->genre, q->duration, q->size);
00244 *UI_m3uActvItemPtr(0) = 2;
00245 UI_m3uChgOrder(0, 0);
00246 DB_UNLOCK();
00247 UI_playQreset(0x1234);
00248 return P_PLAY;
00249 }
00250 #endif
00251 }
00252 case SMYMIXCHANGED:
00253 {
00254 if(FALSE == UI_playQreset(d2))
00255 {
00256
00257 _stopPlay();
00258 UI_msgbxCreate(MSGBX_CONTENTSNA);
00259 return P_NULL;
00260 }
00261 return P_PLAY;
00262 }
00263 case SSHUFFLECHANGED:
00264 {
00265 UI_playQreset(DONTCARE);
00266 return P_PLAY;
00267 }
00268 case SMIFIQUALITYCHANGED:
00269 {
00270 AUDIO_resetMyfiQuality();
00271 return P_PLAY;
00272 }
00273 case SMIFIMODECHANGED:
00274 {
00275
00276 if( ((sysParam.myfiMode == 1)
00277 &&(AUDIO_isMyfiActive())) ||
00278
00279 ((sysParam.myfiMode == 2)
00280 && (!AUDIO_isMyfiActive())) ||
00281
00282 ((sysParam.myfiMode == 3)
00283 &&((AUDIO_isMyfiActive()) == (SYS_isHPpresent()))) )
00284 {
00285
00286 UI_presetAudio(0, UI_presetDbId(0),
00287 UI_playQcurrent()->actvTrack,
00288 UI_presetFldEntry(0),
00289 UI_presetFldIdx(0),
00290 AUDIO_getFilePtr());
00291 _stopPlay();
00292 return _startPlay(0, FALSE);
00293 }
00294 break;
00295 }
00296 case SMYFICHANNELCHANGED:
00297 {
00298 _displayMyfiChannel();
00299 return P_PLAY;
00300 }
00301 case SXIM_EXIT:
00302 {
00303 return(_ximAction(d2));
00304 }
00305 case SMSGBOX_EXIT:
00306 {
00307 if(MENU_curMsgbx() == MSGBX_CONTENTSNA)
00308 {
00309 return P_NULL;
00310 }
00311 else if(MENU_curMsgbx() == MSGBX_REMOVEQRECORD)
00312 {
00313 if(BTN_YES == d2)
00314 {
00315 _stateEnd();
00316 UI_m3uRemove(0, UI_playQcurrent()->actvTrack);
00317
00318 nandSysParam.preset[0].share.audio.fptr = 0L;
00319 return _startPlay(0, TRUE);
00320 }
00321 else return P_PLAY;
00322 }
00323 else if(MENU_curMsgbx() == MSGBX_DELETERECORD)
00324 {
00325 D2PEAR_ID earID;
00326 st_PLAYQ * q = UI_playQcurrent();
00327
00328 if( BTN_CANCEL == d2 ) return P_PLAY;
00329
00330 if( (BTN_NEUROS == d2)||(BTN_PCDELETE == d2) )
00331 {
00332 _stateEnd();
00333 FAT_delete(q->fname);
00334 switch(UI_getPlaySource())
00335 {
00336 case PLAY_FROM_IDEDHISI:
00337 DB_deleteRecordByMdb(DBnav.idedhisi, q->mdb);
00338 break;
00339 case PLAY_FROM_FAILEDHISI:
00340 DB_deleteRecordByMdb(DBnav.failedhisi, q->mdb);
00341 break;
00342 case PLAY_FROM_AUDIODB:
00343 DB_deleteRecordByMdb(DBnav.audio, q->mdb);
00344 UI_audioPresetUpdate(-1);
00345 break;
00346 default: SYS_die(UI_PSF_PLAY);
00347 }
00348 }
00349
00350 earID = (BTN_NEUROS == d2)? DELETE_NEUROS_AUDIO: DELETE_PC_AUDIO;
00351
00352 if(SYS_isHDDpresent())
00353 {
00354 UI_earPut(strDISKC, earID,(PEAR_DATA)q->fname,strlen(q->fname)+1, 0);
00355 SYS_NAND_DBMOD_2HDD_PENDING();
00356 }
00357 else
00358 {
00359 UI_earPut(strDISKD, earID,(PEAR_DATA)q->fname,strlen(q->fname)+1, 0);
00360 SYS_NAND_CONTENTS_CHANGED();
00361 }
00362
00363 nandSysParam.preset[0].share.audio.fptr = 0L;
00364 return _startPlay(0, TRUE);
00365 }
00366 else if(MENU_curMsgbx() == MSGBX_DELETERECORDFILE)
00367 {
00368 if(BTN_YES == d2)
00369 {
00370 st_PLAYQ * q = UI_playQcurrent();
00371 _stateEnd();
00372 FAT_delete(q->fname);
00373 UI_updateMembar();
00374 return P_NULL;
00375 }
00376 }
00377 else if(MENU_curMsgbx() == MSGBX_DELETEHISICLIP)
00378 {
00379 if(BTN_YES == d2)
00380 {
00381 st_PLAYQ * q = UI_playQcurrent();
00382
00383 _stateEnd();
00384 FAT_delete(q->fname);
00385 if(UI_getPlaySource() == PLAY_FROM_UNIDEDHISI)
00386 {
00387 DB_deleteRecordByMdb(DBnav.unidedhisi, q->mdb);
00388 UI_earPut(SYS_isHDDpresent()? strDISKC:strDISKD,
00389 HISI_DELETE_UNIDED_CLIP,(PEAR_DATA)q->fname, strlen(q->fname)+1, 0);
00390
00391 if(SYS_isHDDpresent())
00392 {
00393 SYS_NAND_DBMOD_2HDD_PENDING();
00394 }
00395 else
00396 {
00397 SYS_NAND_CONTENTS_CHANGED();
00398 }
00399 }
00400 return P_NULL;
00401 }
00402 }
00403 return P_PLAY;
00404 }
00405 case SCURRENTAUDIOFILE:
00406 {
00407 AUDIO_setCurrentTrack();
00408 return P_PLAY;
00409 }
00410 case SNEXTAUDIOFILE:
00411 {
00412 AUDIO_getCacheTrackFile(d2);
00413 return P_PLAY;
00414 }
00415 }
00416 break;
00417
00418 case TMR_MSG_ID:
00419 switch(d1)
00420 {
00421 case TTXTSCROLL:
00422 mMENU_action(menu, MENU_TXTSCROLL);
00423 return P_PLAY;
00424 }
00425 break;
00426
00427 case KBD_MSG_ID:
00428 switch(d1)
00429 {
00430 case KEY_BACK:
00431 if(SYS_HF_linkit())
00432 {
00433 _stopPlay();
00434 return P_NULL;
00435 }
00436
00437 if(!PLAY_isFromDb())
00438 {
00439 _stopPlay();
00440 return (SYS_wasFromHisi())? P_HISIDONE:P_RECORDDONE;
00441 }
00442 mMENU_action(menu, MENU_CLOSE);
00443
00444 SYS_autoResumePlayEnable();
00445 mMSG_send(uiChildMsgQ, SYS_MSG_ID, SBROWSE, DONTCARE, SYS_FOREVER);
00446 return P_PLAY;
00447
00448 case KEY_HREWIND:
00449 if(SYS_HF_myfiTest())
00450 {
00451
00452 sysParam.myfiChannel = 875;
00453 _updateLinkitDisplay(sysParam.myfiChannel, menu);
00454 XMIT_SetFreq(XMIT_SET, (MAX_CHANNEL-sysParam.myfiChannel)/2);
00455 }
00456 case KEY_RREWIND:
00457 if(SYS_HF_linkit()) return P_PLAY;
00458 DECODER_frwd();
00459 return P_PLAY;
00460
00461 case KEY_REWIND:
00462 if(SYS_HF_linkit()) return P_PLAY;
00463 DECODER_cacheDepthReset(0);
00464 #ifdef DJ_SUPPORT
00465 if(Ui.abStart == 2)
00466 {
00467 AUDIO_setFilePtr(Ui.aPtr);
00468 return P_PLAY;
00469 }
00470 #endif
00471
00472
00473
00474
00475 if((Audio.playtime < 5) && !(SYS_isAudioPaused())) return _prevNextMusic(-1);
00476 else return _prevNextMusic(0);
00477
00478 case KEY_FORWARD:
00479 if(SYS_HF_linkit()) return P_PLAY;
00480 DECODER_cacheDepthReset(0);
00481 #ifdef DJ_SUPPORT
00482 if(Ui.abStart == 2)
00483 {
00484 AUDIO_setFilePtr(Ui.aPtr);
00485 return P_PLAY;
00486 }
00487 #endif
00488 return _prevNextMusic(1);
00489
00490 case KEY_HFORWARD:
00491 if(SYS_HF_myfiTest())
00492 {
00493
00494 sysParam.myfiChannel = 1041;
00495 _updateLinkitDisplay(sysParam.myfiChannel, menu);
00496 XMIT_SetFreq(XMIT_SET, (MAX_CHANNEL-sysParam.myfiChannel)/2);
00497 }
00498 case KEY_RFORWARD:
00499 if(SYS_HF_linkit()) return P_PLAY;
00500 DECODER_ffwd();
00501 return P_PLAY;
00502
00503 case KEY_PLAY:
00504
00505 SYS_toggleAudioPaused();
00506 if(SYS_isAudioPaused())
00507 {
00508 PLAY_setPaused();
00509 AUDIO_setInterface(AI_PAUSE);
00510 if(SYS_HF_linkit())
00511 mMENU_update(menu, 7, (ULONG)text_tunermuted, FALSE);
00512 else
00513 mMENU_update(menu, 5, (ULONG)graf_icon_pause, FALSE);
00514 }
00515 else
00516 {
00517 PLAY_unsetPaused();
00518 AUDIO_setInterface(AI_START);
00519 AUDIO_setInterface(AI_UNMUTE);
00520 if(SYS_HF_linkit())
00521 mMENU_update(menu, 7, (ULONG)text_null, FALSE);
00522 else
00523 mMENU_update(menu, 5, (ULONG)graf_icon_play, FALSE);
00524 }
00525 mMENU_refresh(menu);
00526 return P_PLAY;
00527
00528 case KEY_HUP:
00529 case KEY_UP:
00530 case KEY_RUP:
00531 if(SYS_HF_linkit())
00532 {
00533 if(sysParam.myfiChannel < MAX_CHANNEL)
00534 {
00535 sysParam.myfiChannel+=sysParam.x_granularity;
00536 _updateLinkitDisplay(sysParam.myfiChannel, menu);
00537 XMIT_SetFreq(XMIT_SET, (MAX_CHANNEL-sysParam.myfiChannel)/2);
00538 }
00539 return P_PLAY;
00540 }
00541 case KEY_HDOWN:
00542 case KEY_DOWN:
00543 case KEY_RDOWN:
00544 if(SYS_HF_linkit())
00545 {
00546 if(sysParam.myfiChannel > MIN_CHANNEL)
00547 {
00548 sysParam.myfiChannel-=sysParam.x_granularity;
00549 _updateLinkitDisplay(sysParam.myfiChannel, menu);
00550 XMIT_SetFreq(XMIT_SET, (MAX_CHANNEL-sysParam.myfiChannel)/2);
00551 }
00552 return P_PLAY;
00553 }
00554 mMSG_send(uiChildMsgQ, SYS_MSG_ID, (AM_MYFI == Audio.mode)?
00555 SMYFICHANNELWIN_CREATE:SVOLWIN_CREATE, DONTCARE, SYS_FOREVER);
00556 return P_PLAY;
00557
00558 case KEY_SELECT:
00559 {
00560 int ximPtr;
00561
00562 if(SYS_HF_linkit()) return P_PLAY;
00563 SYS_autoResumePlayEnable();
00564
00565 if(PLAY_FROM_PLAYQ == UI_getPlaySource())
00566 {
00567 ximPtr = (AM_MYFI == Audio.mode)? XIMWIN_PLAYER_MYFIQ:XIMWIN_PLAYERQ;
00568 }
00569 else
00570 {
00571 ximPtr = (AM_MYFI == Audio.mode)? XIMWIN_PLAYER_MYFI:XIMWIN_PLAYER;
00572
00573 if(PLAY_FROM_AUDIODB == UI_getPlaySource())
00574 {
00575 if(FALSE == _playFromMymix())
00576 {
00577 ximPtr = (AM_MYFI == Audio.mode)?
00578 XIMWIN_PLAYER_MYFI_ADD2MYMIX:XIMWIN_PLAYER_ADD2MYMIX;
00579 }
00580 }
00581 }
00582
00583 mMSG_send(uiChildMsgQ, SYS_MSG_ID, SXIM_CREATE, ximPtr, SYS_FOREVER);
00584 return P_PLAY;
00585 }
00586 }
00587 break;
00588 }
00589
00590 return P_PLAY;
00591 }
00592
00593
00594 #pragma CODE_SECTION (_add2mymix, ".play_code")
00595 static void _add2mymix(void)
00596 {
00597 char mymix[8];
00598 int pri;
00599 st_PLAYQ * q = UI_playQcurrent();
00600
00601 DB_LOCK(SYS_FOREVER);
00602 pri = SYS_SETPRI(SYS_BGDPRI);
00603 SYS_kbdDisabled();
00604 SYS_setBusy();
00605
00606 GEN_readXdata((ULONG)mymixRecord, (USHORT*)mymix, 8);
00607
00608
00609
00610
00611
00612
00613 if(PLAY_FROM_PLAYQ == UI_getPlaySource())
00614 {
00615 q->mdb = DB_getMdbByRecord(DBnav.audio, (const unsigned short *)q->title);
00616 }
00617
00618 if(FALSE == DB_add2child(q->mdb, DB_childID(DBnav.audio, 1), (DB_DATA *)mymix))
00619 {
00620
00621 }
00622 else
00623 {
00624 if(FALSE == UI_earPut(SYS_isHDDpresent()? strDISKC:strDISKD,
00625 ADD_NEUROS_AUDIO_2Q,(PEAR_DATA)q->fname, strlen((const char*)q->fname)+1, 0))
00626 {
00627 UI_msgbxCreate(MSGBX_DISKFULL);
00628 }
00629
00630 UI_audioPresetUpdate(1);
00631 }
00632
00633 DB_UNLOCK();
00634 SYS_clearBusy();
00635 SYS_SETPRI(pri);
00636
00637
00638
00639
00640
00641
00642 if(SYS_isHDDpresent())
00643 {
00644 SYS_NAND_DBMOD_2HDD_PENDING();
00645 }
00646 else
00647 {
00648 SYS_NAND_CONTENTS_CHANGED();
00649 }
00650 SYS_kbdEnabled();
00651 }
00652
00653 #pragma CODE_SECTION (_playFromMymix, ".play_code")
00654 static BOOL _playFromMymix( void )
00655 {
00656 const char * mymix;
00657
00658 if(UI_getPlayQGbl()->flag&F_PLAYQGBL_FROMPLAYLIST)
00659 {
00660 mymix = (const char *)UI_getPlayQGbl()->playlist;
00661
00662 if(mymix[0] == ( ('!'<<8)|'M') )
00663 {
00664 if(mymix[1] == ( ('y'<<8)|' ') )
00665 {
00666 if(mymix[2] == ( ('M'<<8)|'i') )
00667 {
00668 if(mymix[3] == ( ('x'<<8)| 0) )
00669 {
00670 if(mymix[4] == 0) return TRUE;
00671 }
00672 }
00673 }
00674 }
00675 }
00676 return FALSE;
00677 }
00678
00679 #pragma CODE_SECTION(_stateEnd, ".decoder_code")
00680
00681 static PARENT_STATE _stateEnd(void)
00682 {
00683
00684
00685
00686 UI_presetAudio(0, UI_presetDbId(0),
00687 UI_playQcurrent()->actvTrack,
00688 UI_presetFldEntry(0),
00689 UI_presetFldIdx(0),
00690 AUDIO_getFilePtr());
00691
00692
00693 if( (!SYS_isPresetable())&&(PRESET_PLAYQ != UI_presetType(0)) )
00694 {
00695 SYS_breakPreset(0);
00696 }
00697 _stopPlay();
00698 if(!PLAY_isFromDb())
00699 {
00700 return (SYS_wasFromHisi())? P_HISIDONE:P_RECORDDONE;
00701 }
00702 return P_NULL;
00703 }
00704
00705 #pragma CODE_SECTION(_setupPlay, ".decoder_code")
00706
00707 static BOOL _setupPlay(ULONG offset, st_PLAYQ * playQ)
00708 {
00709 AUDIO_MODE mode;
00710
00711 if(NULL == playQ) return FALSE;
00712
00713
00714 if(SYS_isMyFiOff()||((sysParam.myfiMode == 3)&&(SYS_isHPpresent()))) mode = AM_PLAY;
00715 else mode = AM_MYFI;
00716
00717 if(FALSE == AUDIO_initInterface(mode,
00718 playQ->format,
00719 offset,
00720 playQ->duration))
00721 {
00722 return FALSE;
00723 }
00724 AUDIO_setInterface(AI_START);
00725 #ifdef DJ_SUPPORT
00726 _abReset(Audio.file.size);
00727 #endif
00728
00729 SYS_audioNotPaused();
00730 SYS_playActive();
00731 return TRUE;
00732 }
00733
00734 #pragma CODE_SECTION(_stopPlay, ".decoder_code")
00735
00736 static void _stopPlay(void)
00737 {
00738 SYS_autoResumePlayDisable();
00739 mMENU_action(menu, MENU_CLOSE);
00740 AUDIO_setInterface(AI_SHUTDOWN);
00741 if(SYS_HF_linkit())
00742 {
00743 SYS_HF_linkitDisable();
00744 SYS_HF_myfiTestDisable();
00745 }
00746 else UI_playQshutdown();
00747 mMENU_statusBar(STBAR_SYSIDLE, NULL);
00748 }
00749
00750
00751 #pragma CODE_SECTION(_startPlay, ".decoder_code")
00752
00753 static PARENT_STATE _startPlay(MSG_DATA d2, BOOL createMenu)
00754 {
00755 ULONG startFptr;
00756 st_PLAYQ * playQ;
00757
00758 SYS_notPresetable();
00759 PLAY_fromDb();
00760
00761 DECODER_cacheDepthReset(0);
00762
00763
00764
00765 if(DONTCARE == d2)
00766 {
00767 playQ = UI_setupPlayQ( DB_INVALID_ID,0,0,0);
00768 startFptr= 0;
00769 PLAY_notFromDb();
00770 }
00771 else
00772 {
00773 playQ = UI_setupPlayQ( UI_presetDbId(d2),
00774 UI_presetFldIdx(d2),
00775 UI_presetFldEntry(d2),
00776 UI_presetDbEntry(d2));
00777 startFptr = UI_presetFptr(d2);
00778 if( PRESET_PLAYQ != UI_presetType(0) )
00779 {
00780 if(DB_rootID(UI_presetDbId(d2)) == DBnav.audio)
00781 {
00782 SYS_presetable();
00783 if( NULL == playQ )
00784 {
00785 SYS_breakPreset(d2);
00786 if(0 == d2)
00787 {
00788
00789 playQ = UI_setupPlayQ(DBnav.audio,-1,0,1);
00790 startFptr = 0L;
00791 }
00792 }
00793 }
00794 }
00795 }
00796
00797 do
00798 {
00799 if(TRUE == _setupPlay(startFptr,playQ)) break;
00800 else
00801 {
00802 playQ = UI_playQnext();
00803 startFptr = 0;
00804 }
00805 }while(playQ);
00806
00807
00808 if(NULL == playQ)
00809 {
00810 UI_msgbxCreate(MSGBX_CONTENTSNA);
00811 return P_PLAY;
00812 }
00813
00814 if(TRUE == createMenu)
00815 {
00816 _setupPlayMenu(playQ);
00817 menu = mMENU_create((void*)&MENU_buf[0]);
00818 _displayMyfiChannel();
00819 }
00820
00821 if(SYS_isPresetable())
00822 {
00823 UI_presetAudio(0, UI_presetDbId(d2),
00824 UI_presetDbEntry(d2),
00825 UI_presetFldEntry(d2),
00826 UI_presetFldIdx(d2),
00827 Audio.fptr);
00828 SYS_breakPreset(0);
00829 }
00830
00831 return P_PLAY;
00832 }
00833
00834 #pragma CODE_SECTION(_prevNextMusic, ".decoder_code")
00835
00836 static PARENT_STATE _prevNextMusic(int prev)
00837 {
00838 st_PLAYQ * playQ;
00839 ULONG dptr = 0L;
00840
00841 AUDIO_setInterface(AI_STOP);
00842
00843 do
00844 {
00845 if(-1 == prev ) playQ = UI_playQprevious();
00846 else if( 1 == prev) playQ = UI_playQnext();
00847 else
00848 {
00849 #ifdef DJ_SUPPORT
00850 if( (2 == Ui.abStart)&&(Ui.abMode) ) dptr = Ui.aPtr;
00851 #endif
00852 playQ = UI_playQcurrent();
00853 }
00854
00855 if(NULL == playQ) break;
00856 if(TRUE == _setupPlay(dptr, playQ)) break;
00857 } while(playQ);
00858
00859 if(NULL == playQ)
00860 {
00861 PARENT_STATE ret = P_NULL;
00862
00863 _stopPlay();
00864 if(!PLAY_isFromDb())
00865 {
00866 ret = SYS_wasFromHisi()? P_HISIDONE:P_RECORDDONE;
00867 }
00868 return ret;
00869 }
00870
00871 if(MENU_isValid(menu) == TRUE )
00872 {
00873 mMENU_action(menu, MENU_CLOSE);
00874 _setupPlayMenu(playQ);
00875 menu = mMENU_create((void*)&MENU_buf[0]);
00876 _displayMyfiChannel();
00877 }
00878
00879 return P_PLAY;
00880 }
00881
00882 #pragma CODE_SECTION(_setupPlayMenu, ".decoder_code")
00883
00884 static void _setupPlayMenu(st_PLAYQ * playQ)
00885 {
00886 int * pD = (int *)&MENU_buf[0];
00887
00888 *pD++ = DP_PLAYER;
00889
00890
00891
00892
00893
00894
00895
00896
00897
00898
00899
00900 if ( (sysParam.x_layout == XTRA_TITLE_BOLD) )
00901 {
00902 *pD++ = 0;
00903 *pD++ = (int)playQ->title;
00904
00905 *pD++ = 0;
00906 *pD++ = (int)playQ->artist;
00907 }
00908 else
00909 {
00910 *pD++ = 0;
00911 *pD++ = (int)playQ->artist;
00912
00913 *pD++ = 0;
00914 *pD++ = (int)playQ->title;
00915 }
00916 *pD++ = 0;
00917 *pD++ = (int)playQ->album;
00918
00919 *pD++ = 0;
00920 *pD++ = 0;
00921
00922 *pD++ = 0;
00923 *pD++ = (UI_getPlayQGbl()->flag&F_PLAYQGBL_FROMPLAYLIST)?
00924 (int)UI_getPlayQGbl()->playlist:(int)playQ->genre;
00925
00926 if(playQ->duration > 0)
00927 {
00928 *pD++ = (int)(playQ->duration>>16);
00929 *pD++ = (int)(playQ->duration&0x0ffff);
00930 }
00931 else
00932 {
00933
00934 *pD++ = 0;
00935 *pD++ = 220;
00936 }
00937
00938 *pD++ = sysParam.repeat;
00939 *pD++ = sysParam.shuffle;
00940
00941 *pD++ = (int)playQ->format;
00942 #ifdef DJ_SUPPORT
00943 *pD++ = (int)Ui.abStart;
00944 #endif
00945
00946 mMENU_statusBar(STBAR_SYSIDLE, NULL);
00947 }
00948
00949 #pragma CODE_SECTION(_updatePlayTime, ".decoder_code")
00950
00951 static void _updatePlayTime(void)
00952 {
00953 st_PLAYMENU * pPlay;
00954 char strTime[16];
00955 ULONG curTime = SYS_getCurPlayTime();
00956
00957 GEN_createTimeString(curTime, strTime);
00958 mMENU_update(menu, 6, (ULONG)strTime, FALSE);
00959
00960
00961 pPlay = (st_PLAYMENU*)mMENU_getObj(menu);
00962 if(pPlay) mMENU_vbarReposition(pPlay->vbar, curTime);
00963
00964 mMENU_refresh(menu);
00965 }
00966
00967 #pragma CODE_SECTION(_displayMyfiChannel, ".decoder_code")
00968
00969 static void _displayMyfiChannel(void)
00970 {
00971 ULONG dptr = (ULONG)text_null;
00972 char strStation[15];
00973 char * pC = &strStation[0];
00974
00975 if(AM_MYFI == Audio.mode)
00976 {
00977
00978 pC += GEN_int2ASCII(sysParam.myfiChannel, strStation, FALSE, 0);
00979
00980
00981 *pC = *(pC-1);
00982 *(pC-1) = '.';
00983 pC++;
00984 *pC++ = 'M';
00985 *pC++ = 'H';
00986 *pC++ = 'z';
00987 *pC = 0;
00988 dptr = (ULONG)strStation;
00989 }
00990 mMENU_update(menu, 9, dptr, FALSE);
00991 mMENU_refresh(menu);
00992 }
00993
00994
00995 #pragma CODE_SECTION(_ximAction, ".decoder_code")
00996
00997 static PARENT_STATE _ximAction(UINT ximID)
00998 {
00999 XIM_ACTTYPE actType;
01000 XIM_ACTID actID;
01001
01002 actType = (XIM_ACTTYPE)((ximID & 0xC000)>>14);
01003 actID = (XIM_ACTID)(ximID & 0x3FFF);
01004
01005 #ifdef DJ_SUPPORT
01006 SYS_autoResumePlayDisable();
01007 #endif
01008
01009 switch( actType )
01010 {
01011 case XIM_ACT_DEV:
01012 actID = (XIM_ACTID)(actID | XIM_DEV_IDMASK);
01013 switch( actID )
01014 {
01015 #ifdef DJ_SUPPORT
01016 case XIM_DEV_DJ:
01017 mMENU_action(menu, MENU_CLOSE);
01018 UI_menuBrowse(SENDOFMENU, DONTCARE, MENU_DJ);
01019 break;
01020 #endif
01021
01022 case XIM_DEV_SHUFFLE:
01023 mMENU_action(menu, MENU_CLOSE);
01024 UI_menuBrowse(SENDOFMENU, DONTCARE, MENU_SHUFFLE);
01025 break;
01026
01027 case XIM_DEV_FMOUT:
01028 mMENU_action(menu, MENU_CLOSE);
01029 UI_menuBrowse(SENDOFMENU, DONTCARE, MENU_MYFI_MODE);
01030 break;
01031
01032 case XIM_DEV_REPEAT:
01033 mMENU_action(menu, MENU_CLOSE);
01034 UI_menuBrowse(SENDOFMENU, DONTCARE, MENU_REPEAT);
01035 break;
01036
01037 case XIM_DEV_EQ:
01038 mMENU_action(menu, MENU_CLOSE);
01039 UI_menuBrowse(SENDOFMENU, DONTCARE, MENU_EQ);
01040 break;
01041
01042 case XIM_DEV_MYFIGAIN:
01043 mMENU_action(menu, MENU_CLOSE);
01044 UI_menuBrowse(SENDOFMENU, DONTCARE, MENU_MYFI_GAIN);
01045 break;
01046
01047 case XIM_DEV_DELETE:
01048 switch(UI_getPlaySource())
01049 {
01050 case PLAY_FROM_RECORD_DONE:
01051 UI_msgbxCreate(MSGBX_DELETERECORDFILE);
01052 break;
01053
01054 case PLAY_FROM_HISI_DONE:
01055 case PLAY_FROM_UNIDEDHISI:
01056 UI_msgbxCreate(MSGBX_DELETEHISICLIP);
01057 break;
01058
01059 case PLAY_FROM_IDEDHISI:
01060 case PLAY_FROM_FAILEDHISI:
01061 case PLAY_FROM_AUDIODB:
01062 UI_msgbxCreate(MSGBX_DELETERECORD);
01063 break;
01064 }
01065 break;
01066
01067 case XIM_DEV_ADD2QUEUE:
01068 _add2mymix();
01069 break;
01070
01071 case XIM_DEV_REMOVE:
01072 UI_msgbxCreate(MSGBX_REMOVEQRECORD);
01073 break;
01074
01075 case XIM_DEV_STOP_PLAY:
01076 return(_stateEnd());
01077
01078 default:
01079 #ifndef DJ_SUPPORT
01080 SYS_autoResumePlayDisable();
01081 #endif
01082 break;
01083 }
01084 break;
01085 }
01086
01087
01088 return P_PLAY;
01089 }
01090
01091
01092 #pragma CODE_SECTION (_linkitGUIon, ".decoder_code")
01093
01094 static void _linkitGUIon(BOOL on)
01095 {
01096 if(FALSE == on)
01097 {
01098 mMENU_action(menu, MENU_CLOSE);
01099 TMR_delete(TMR_FRWD_DOUBLECLICK);
01100 TMR_delete(TMR_TUNERSEEK);
01101 }
01102 else
01103 {
01104 if(MENU_isValid(menu) == FALSE )
01105 {
01106 MENU_buf[0] = DP_LINKIT;
01107 menu = mMENU_create((void*)&MENU_buf[0]);
01108 }
01109 if(SYS_isAudioPaused())
01110 {
01111 mMENU_update(menu, 7, (ULONG)text_tunermuted, FALSE);
01112 }
01113 else
01114 {
01115 mMENU_update(menu, 7, (ULONG)text_null, FALSE);
01116 }
01117
01118 _updateLinkitDisplay(sysParam.myfiChannel, menu);
01119 mMENU_refresh(menu);
01120 }
01121 }
01122
01123 #pragma CODE_SECTION (_updateLinkitDisplay, ".decoder_code")
01124
01125
01126
01127
01128 static void _updateLinkitDisplay(USHORT station, HMENU menu)
01129 {
01130 char strStation[6];
01131 int ii;
01132
01133 ii = GEN_int2ASCII(station, strStation, FALSE, 0);
01134
01135
01136 strStation[ii+1] = 0;
01137 strStation[ii] = strStation[ii-1];
01138 strStation[ii-1] = '.';
01139
01140 mMENU_update(menu, 3, (ULONG)strStation, FALSE);
01141 mMENU_refresh(menu);
01142 }
01143
01144 #ifdef DJ_SUPPORT
01145 #pragma CODE_SECTION (_abInit, ".decoder_code")
01146
01147 static void _abInit(void)
01148 {
01149 Ui.abMode = 0;
01150 Ui.abStart= 0;
01151 }
01152
01153 #pragma CODE_SECTION (_abReset, ".decoder_code")
01154
01155 static void _abReset(ULONG len)
01156 {
01157 if(2 == Ui.abStart ) return;
01158
01159 Ui.aPtr = 0;
01160 Ui.bPtr = 0;
01161 Ui.abPtr= 0;
01162 Ui.abStep = 0;
01163 Ui.abLen= len;
01164 }
01165
01166 #pragma CODE_SECTION (_abCheck, ".decoder_code")
01167
01168 static void _abCheck(void)
01169 {
01170 if(Ui.abStart == 2)
01171 {
01172 if(AUDIO_getFilePtr() >= Ui.bPtr)
01173 {
01174 AUDIO_setFilePtr(Ui.aPtr);
01175 }
01176 }
01177 }
01178 #endif
01179
01180
01181
01182