UI_PSF_play.c File Reference


Detailed Description

This module provides parent play state handle.

REVISION

Definition in file UI_PSF_play.c.

#include "../SYSTEM/sys_main.h"
#include "../SYSTEM/sys_clock.h"
#include "../SYSTEM/sys_param.h"
#include "../SYSTEM/sys_hardware.h"
#include "../SYSTEM/sys_hiddenfeature.h"
#include "../AUDIO/audio.h"
#include "../DECODER/decoder.h"
#include "../ear/ear.h"
#include "../FMXMIT/xmit_inc.h"
#include "ui.h"
#include "ui_assert.h"
#include "xim.h"
#include "playQ.h"
#include "m3u.h"

Include dependency graph for UI_PSF_play.c:

Include dependency graph

Go to the source code of this file.

Functions

PARENT_STATE UI_PSF_play (st_MSG *msgIN)
 Function serves as the parent play state handle.

Variables

PLAY_SRC playSource
 Global to hold playback source definition.


Function Documentation

PARENT_STATE UI_PSF_play st_MSG msgIN  ) 
 

Function serves as the parent play state handle.

Parameters:
msgIN Input message.
Returns:
Next state.

Definition at line 126 of file UI_PSF_play.c.

References st_UI::abMode, st_UI::abStart, AF_ILINK, AI_PAUSE, AI_START, AI_UNMUTE, st_PLAYQ::album, AM_ILINK, AM_MYFI, st_UI::aPtr, st_PLAYQ::artist, Audio, st_DBNAV::audio, st_PRESET::audio, AUDIO_getCacheTrackFile(), AUDIO_getFilePtr(), AUDIO_initInterface(), AUDIO_resetMyfiQuality(), AUDIO_setCurrentTrack(), AUDIO_setFilePtr(), AUDIO_setInterface(), BTN_CANCEL, BTN_NEUROS, BTN_PCDELETE, BTN_YES, CLOCK_PLAY, D2PEAR_ID, DB_deleteRecordByMdb(), DECODER_cacheDepthReset(), st_PLAYQ::duration, st_DBNAV::failedhisi, FAT_delete(), st_PLAYQ::fname, st_PLAYQ::genre, st_DBNAV::idedhisi, st_PLAYQ::mdb, MENU_buf, MENU_CLOSE, MENU_isValid(), MENU_TXTSCROLL, st_AUDIO::mode, st_SYSPARAM::myfiChannel, st_SYSPARAM::myfiMode, PEAR_DATA, st_AUDIO::playtime, st_NDSYSPARAM::preset, SAUDIOTIME_UPDT, SBROWSE, SCURRENTAUDIOFILE, SENDOFMENU, SENDOFMUSIC, st_PRESET::share, st_PLAYQ::size, SMIFIMODECHANGED, SMIFIQUALITYCHANGED, SMSGBOX_EXIT, SMYFICHANNELCHANGED, SMYMIXCHANGED, SNEXTAUDIOFILE, SPLAYQCHANGED, SPRESET, SRESUMEPLAY, SSHUFFLECHANGED, SSTARTRADIO, SSTATE_END, SSTATE_START, SXIM_CREATE, SXIM_EXIT, SYS_clockSetup(), SYS_die(), st_PLAYQ::title, UI_audioPresetUpdate(), UI_earPut(), UI_m3uActvItemPtr(), UI_m3uChgOrder(), UI_m3uPut(), UI_m3uRemove(), UI_msgbxCreate(), UI_playQcurrent(), UI_playQreset(), UI_presetAudio(), UI_updateMembar(), st_DBNAV::unidedhisi, and st_SYSPARAM::x_granularity.

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 //DeepB
00194 // Bugzilla #213
00195 // Only get file pointer while paused
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                     // No playable contents.
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                 // Check new myfi mode.
00276                 if( ((sysParam.myfiMode == 1) // off.
00277                     &&(AUDIO_isMyfiActive())) ||
00278 //DeepB
00279                     ((sysParam.myfiMode == 2) // on
00280                     && (!AUDIO_isMyfiActive())) ||
00281 //Auto detectar
00282                     ((sysParam.myfiMode == 3) // auto-detect.
00283                     &&((AUDIO_isMyfiActive()) == (SYS_isHPpresent()))) )
00284                 {
00285                     // Restart.
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                         // Start next track from the very beginning.
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                     // Start next track from the very beginning.
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                 // Auto resume play window.
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                     //sysParam.myfiChannel = 911;
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 //DeepB
00472 // To previous song
00473 // if on first 5 seconds
00474 // of non-paused song
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                     //sysParam.myfiChannel = 1049;
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 }

Here is the call graph for this function:


Generated on Wed Jan 19 01:13:32 2005 for neuros-firmware by  doxygen 1.3.9.1