SYS_main.c File Reference


Detailed Description

This module provides operating system task handle.

REVISION

Definition in file SYS_main.c.

#include "sys_main.h"
#include "sys_hardware.h"
#include "sys_hiddenfeature.h"
#include "sys_clock.h"
#include "sys_led.h"
#include "sys_assert.h"
#include "../KEYBOARD/keyboard.h"
#include "../MESSAGE/message.h"
#include "../coder/coder.h"
#include "../encoder/encoder.h"
#include "../LCD/lcd.h"
#include "../USB/usb.h"
#include "../DB/db.h"
#include "../UI/ui.h"
#include "../basicboot/bootmode.h"
#include "../GENERIC/eeprom.h"

Include dependency graph for SYS_main.c:

Include dependency graph

Go to the source code of this file.

Functions

void SYS_main (void)
 Function serves as operating system task handle.
KSTATE SYS_SF_idle (st_MSG *msgIN)
 Function serves as the system idle state handle.
KSTATE SYS_SF_waitIdle (st_MSG *msgIN)
 Function serves as the system wait idle state handle.


Function Documentation

KSTATE SYS_SF_idle st_MSG msgIN  ) 
 

Function serves as the system idle state handle.

Parameters:
msgIN Input message.
Returns:
Next state.

Definition at line 195 of file SYS_main.c.

References st_MSG::d1, st_MSG::d2, DDT_HDL, st_MSG::id, KBD_LED, KEY_PRESET0, LED_OFF, LED_ON, MSG_send(), st_SYSPARAM::recordTime, SCREATETASK, SHIDDENFEATURE, SPOWER_LOW, SPOWER_PLUG, SPOWER_UNPLUG, SSTART2HISI, SSTART2PLAY, SSTATE_END, SSTATE_END_ACK, SUSB_PLUG, SUSB_START, SUSB_STOP, SUSB_UNPLUG, SYS__createDiskDbTask(), SYS_autoffDisable(), SYS_autoffEnable(), SYS_createDecoderTask(), SYS_createEncoderTask(), SYS_delayMicrosecond(), SYS_onOffLEDs(), TMR_BACKLIGHT, TMR_create(), TMR_delete(), TMR_HISI_DOUBLE_CLICK, UI_isPresetValid(), UI_msgbxCreate(), USB_createTask(), USB_deleteTask(), st_SYSPARAM::x_backlight, st_SYSPARAM::x_carmode, and st_SYSPARAM::x_hisibutton.

00196 {
00197     MSG_ID          id = msgIN->id;     
00198     MSG_DATA        d1 = msgIN->d1; 
00199     MSG_DATA        d2 = msgIN->d2;
00200     
00201     switch( id )
00202     {
00203     case KBD_MSG_ID:
00204         // If a different key detected before double click of hisi is verfied, 
00205         // discard hisi key.
00206         if( (TRUE == waitKEY_HISI)&&(KEY_HISI != d1) )
00207         { 
00208             TMR_delete(TMR_HISI_DOUBLE_CLICK);
00209             waitKEY_HISI = FALSE;
00210         }
00211         switch(d1)
00212         {
00213             case KEY_HPLAY:
00214             {               
00215                 if(SYS_isDiagnosisMode()) return K_IDLE;
00216                 if(!SYS_isPowerupSequenceDone()) return K_IDLE;
00217                 
00218                 SYS_kbdDisabled();
00219                 
00220                 SYS_breakPreset(0);
00221                 waitMsgData1 = SSHUT_DOWN;
00222                 waitMsgData2 = DONTCARE;
00223                 waitFlag    = F_WAIT_UI_CHILD|F_WAIT_UI|F_WAIT_UI_PARENT;
00224                 mMSG_send(uiChildMsgQ, SYS_MSG_ID, SSTATE_END, DONTCARE, SYS_FOREVER);
00225                 RETURN_K_WAIT_IDLE();
00226             }
00227             case KEY_HPRESET1:
00228             case KEY_HPRESET2:
00229             case KEY_HPRESET3:
00230             case KEY_HPRESET4:
00231             case KEY_HPRESET5:
00232             {
00233                 if(SYS_isDiagnosisMode()) return K_IDLE;
00234                 if(SYS_HF_linkit()) return K_IDLE;
00235                 if(!SYS_isPowerupSequenceDone()) return K_IDLE;
00236                 
00237                 if(SYS_isPresetable())
00238                 {
00239                     waitMsgData1 = SPRESET;
00240                     waitMsgData2 = d1-KEY_HPRESET1+1;
00241                     waitFlag    = F_WAIT_UI_CHILD;
00242                     mMSG_send(uiChildMsgQ, SYS_MSG_ID, SSTATE_END, DONTCARE, SYS_FOREVER);
00243                     RETURN_K_WAIT_IDLE();
00244                 }
00245                 else UI_msgbxCreate(SYS_isAudioActive()? MSGBX_TIP_PRESETNA: MSGBX_TIP_PRESET); 
00246                 return K_IDLE;
00247             }
00248             case KEY_PRESET0:
00249             case KEY_PRESET1:
00250             case KEY_PRESET2:
00251             case KEY_PRESET3:
00252             case KEY_PRESET4:
00253             case KEY_PRESET5:
00254             {
00255                 int ii = d1-KEY_PRESET0;
00256                 
00257                 if(SYS_isDiagnosisMode()) return K_IDLE;
00258                 if(SYS_HF_linkit()) return K_IDLE;
00259                 if((!SYS_isPowerupSequenceDone())&&(KEY_PRESET0 != d1)) return K_IDLE;
00260                 
00261                 if( (TRUE == UI_isPresetValid(ii))&&(!SYS_isRecordActive()) )
00262                 {
00263                     waitMsgData1 = SGO2PRESET;
00264                     waitMsgData2 = ii;
00265                     // Only preserve radio
00266                     waitFlag =(SYS_isRadioActive())?
00267                         F_WAIT_UI_CHILD|F_WAIT_UI:F_WAIT_UI_PARENT|F_WAIT_UI_CHILD|F_WAIT_UI;
00268                     mMSG_send(uiChildMsgQ, SYS_MSG_ID, SSTATE_END, DONTCARE, SYS_FOREVER);
00269                     RETURN_K_WAIT_IDLE();
00270                 }
00271                 return K_IDLE;
00272             }
00273             case KEY_HHISI:
00274             {
00275                 sysParam.recordTime = 30;
00276             }
00277             case KEY_HISI:
00278             {
00279                 if(SYS_isDiagnosisMode()) return K_IDLE;
00280                 if(SYS_HF_linkit()) return K_IDLE;
00281                 if(!SYS_isPowerupSequenceDone()) return K_IDLE;
00282 //DeepB
00283                 switch (sysParam.x_hisibutton)
00284                 {
00285                     case XTRA_HISI_OFF: return K_IDLE;
00286                     case XTRA_HISI_SMART: if (SYS_isPlayActive()) return K_IDLE;
00287                 }
00288                 // If HiSi or Record command is already issued, HiSi double click 
00289                 // detection is disabled.
00290                 if(SYS_isRecordActive()) break;
00291                 else
00292                 {
00293                     if( TRUE == waitKEY_HISI)
00294                     {
00295                         // Double click of HISI detected.
00296                         TMR_delete(TMR_HISI_DOUBLE_CLICK);
00297                         _wait2record(1);
00298                         return K_WAIT_IDLE;
00299                     }
00300                     else
00301                     {
00302                         waitKEY_HISI = TRUE;
00303                         TMR_create(TMR_HISI_DOUBLE_CLICK, 40, THISI_DOUBLECLICK, 0, NO_RELOAD);
00304                     }
00305                     return K_IDLE;
00306                 }
00307             }
00308             case KEY_UNLOCK:
00309             {
00310                 SYS_onOffLEDs(KBD_LED, LED_ON);
00311                 TMR_create(TMR_BACKLIGHT, 1500, TBACKLIGHTOFF, 0, NO_RELOAD);
00312                 return K_IDLE;
00313             }
00314         }
00315         break;
00316         
00317     case SYS_MSG_ID:
00318         switch( d1 )
00319         {
00320             case SSTART2HISI:
00321             {
00322                 // This happens only when player is powered up to HiSi mode.
00323                 _wait2record(0);
00324                 return K_WAIT_IDLE;
00325             }
00326             case SCREATETASK:
00327             {
00328                 switch(d2)
00329                 {
00330                     case DECODER_TASKS:
00331                         if(!SYS_isDecoderTaskCreated())
00332                         {
00333                             SYS_createDecoderTask();
00334                             SYS_decoderTaskCreated();
00335                         }
00336                         break;
00337                     case ENCODER_TASKS:
00338                         SYS_createEncoderTask();
00339                         break;  
00340                     default:
00341                         GEN_load(DISKDB_CODE);
00342                         GEN_load(DISKDB_CONST);
00343                         GEN_reinit(DISKDB_OBJ);
00344                         SYS__createDiskDbTask((DDT_HDL)d2);
00345                         break;
00346                 }
00347                 return K_IDLE;
00348             }
00349             // USB support start.
00350             case SUSB_PLUG:
00351             {
00352 //DeepB
00353 // Do not activate USB Code while playing
00354 //              if (!(AUDIO_isActive()))
00355 //              {
00356                     waitMsgData1 = SUSB_PLUG;
00357                     waitMsgData2 = d2;
00358                     waitFlag    = F_WAIT_UI_CHILD|F_WAIT_UI|F_WAIT_UI_PARENT;
00359                     mMSG_send(uiChildMsgQ, SYS_MSG_ID, SSTATE_END, DONTCARE, SYS_FOREVER);
00360                     RETURN_K_WAIT_IDLE();
00361 //              }
00362 //              else
00363                     return K_IDLE;
00364             }               
00365             case SUSB_START:
00366             {
00367 //DeepB
00368 // Do not activate USB Code while playing
00369 //              if (!(AUDIO_isActive()))
00370 //              {
00371                     SYS_autoffDisable();
00372                     SYS_kbdDisabled();
00373                     if(d2 == 0)
00374                     {
00375                         GEN_load(USB_CODE);
00376                         GEN_load(USB_CONST);
00377                         GEN_reinit(USB_OBJ);
00378                         USB_createTask();
00379                     }
00380 //              }
00381                 return K_IDLE;
00382             }
00383             case SUSB_UNPLUG:
00384             {
00385 //DeepB
00386 // Do not activate USB Code while playing
00387 //              if (!(AUDIO_isActive()) && !(SYS_isBatteryAnimation()))
00388                 if (!(SYS_isBatteryAnimation()))
00389                 {
00390                     if(d2 == 0) USB_deleteTask();
00391                     SYS_kbdEnabled();
00392                     break;
00393                 }
00394             }
00395             case SUSB_STOP: 
00396             {
00397                 SYS_autoffEnable();
00398                 return K_IDLE;
00399             }
00400             // USB support end.
00401             case SSTART2PLAY:
00402             {
00403                 waitMsgData1 = SSTART2PLAY;
00404                 waitMsgData2 = d2;
00405                 waitFlag     = F_WAIT_UI_CHILD;
00406                 mMSG_send(uiChildMsgQ, SYS_MSG_ID, SSTATE_END, DONTCARE, SYS_FOREVER);
00407                 RETURN_K_WAIT_IDLE();
00408             }
00409             case SPOWER_LOW:
00410             {
00411                 SYS_kbdDisabled();
00412                 waitMsgData1 = SBATLOW_SHUTDOWN;
00413                 waitMsgData2 = DONTCARE;
00414                 waitFlag     = F_WAIT_UI_CHILD;
00415                 mMSG_send(uiChildMsgQ, SYS_MSG_ID, SSTATE_END, DONTCARE, SYS_FOREVER);
00416                 RETURN_K_WAIT_IDLE();
00417             }
00418             case SPOWER_PLUG:
00419             {
00420                 SYS_onOffLEDs(KBD_LED, LED_ON);
00421                 TMR_create(TMR_BACKLIGHT, 500, 
00422                             TBACKLIGHTOFF, 0, NO_RELOAD);
00423                 if(sysParam.x_backlight == XTRA_ON)
00424                 {
00425                     TMR_delete(TMR_BACKLIGHT);
00426                     SYS_onOffLEDs(KBD_LED, LED_ON);
00427                 }
00428                 return K_IDLE;
00429             }
00430             case SPOWER_UNPLUG:
00431             {
00432 //DeepB
00433                 if(sysParam.x_carmode == XTRA_OFF)
00434                 {
00435                     SYS_onOffLEDs(KBD_LED, LED_OFF);
00436                     return K_IDLE;
00437                 }
00438                 else
00439                 {
00440                     SYS_delayMicrosecond(1000000);
00441 //                  _shutDown();
00442                     SYS_kbdDisabled();
00443                     
00444                     SYS_breakPreset(0);
00445                     waitMsgData1 = SSHUT_DOWN;
00446                     waitFlag    = F_WAIT_UI_CHILD|F_WAIT_UI|F_WAIT_UI_PARENT;
00447                     mMSG_send(uiChildMsgQ, SYS_MSG_ID, SSTATE_END, DONTCARE, SYS_FOREVER);
00448                     RETURN_K_WAIT_IDLE();
00449                 }
00450                 break;
00451             }
00452             case SHIDDENFEATURE:
00453             {
00454                 waitMsgData1 = SHIDDENFEATURE;
00455                 waitMsgData2 = d2;
00456                 waitFlag     = F_WAIT_UI_CHILD;
00457                 mMSG_send(uiChildMsgQ, SYS_MSG_ID, SSTATE_END, DONTCARE, SYS_FOREVER);
00458                 RETURN_K_WAIT_IDLE();
00459             }
00460             case SSTATE_END_ACK:    return K_IDLE;          
00461         }
00462         break;
00463             
00464     case TMR_MSG_ID:
00465         switch(d1)
00466         {
00467             case TSHUTDOWN:
00468             {
00469                 SYS_kbdDisabled();
00470                 
00471                 SYS_breakPreset(0);
00472                 waitMsgData1 = SSHUT_DOWN;
00473                 waitFlag    = F_WAIT_UI_CHILD|F_WAIT_UI|F_WAIT_UI_PARENT;
00474                 mMSG_send(uiChildMsgQ, SYS_MSG_ID, SSTATE_END, DONTCARE, SYS_FOREVER);
00475                 RETURN_K_WAIT_IDLE();
00476             }
00477             case TRESUMEPLAY:
00478             {
00479                 waitMsgData1 = SRESUMEPLAY;
00480                 waitFlag    = F_WAIT_UI_CHILD;                  
00481                 mMSG_send(uiChildMsgQ, SYS_MSG_ID, SSTATE_END, DONTCARE, SYS_FOREVER);
00482                 RETURN_K_WAIT_IDLE();
00483             }
00484             case THISI_DOUBLECLICK:
00485             {
00486                 // Single click of HISI detected.
00487                 if(SYS_isRecordActive()) return K_IDLE;
00488                 _wait2record(0);
00489                 return K_WAIT_IDLE;             
00490             }
00491         }
00492         break;
00493     }
00494     
00495     MSG_send(uiChildMsgQ, msgIN, SYS_FOREVER);
00496     return K_IDLE;
00497 }

Here is the call graph for this function:

KSTATE SYS_SF_waitIdle st_MSG msgIN  ) 
 

Function serves as the system wait idle state handle.

Parameters:
msgIN Input message.
Returns:
Next state.

Definition at line 508 of file SYS_main.c.

References MSG_send(), SCSF_NULL, SPSF_NULL, SSF_NULL, and SSTATE_END.

Referenced by SYS_main().

00509 {
00510     MSG_ID          id = msgIN->id;     
00511     MSG_DATA        d1 = msgIN->d1; 
00512     MSG_DATA        d2 = msgIN->d2;
00513     
00514     if( SYS_MSG_ID == id )
00515     {
00516         if(SSF_NULL == d1)       waitFlag &= ~F_WAIT_UI;    
00517         else if(SCSF_NULL == d1) waitFlag &= ~F_WAIT_UI_CHILD;
00518         else if(SPSF_NULL == d1) waitFlag &= ~F_WAIT_UI_PARENT;
00519         else
00520         {
00521             if(waitFlag&F_WAIT_UI_CHILD)
00522             {   
00523                 mMSG_send(uiChildMsgQ, SYS_MSG_ID, SSTATE_END, DONTCARE, SYS_FOREVER);
00524             }
00525             else if(waitFlag&F_WAIT_UI)
00526             {
00527                 waitFlag |= F_WAIT_UI_CHILD;
00528                 mMSG_send(uiMsgQ, SYS_MSG_ID, SSTATE_END, DONTCARE, SYS_FOREVER);
00529             }
00530             else if(waitFlag&F_WAIT_UI_PARENT)
00531             {
00532                 waitFlag |= F_WAIT_UI|F_WAIT_UI_CHILD;
00533                 mMSG_send(uiParentMsgQ, SYS_MSG_ID, SSTATE_END, DONTCARE, SYS_FOREVER);
00534             }
00535             else
00536             {   
00537                 mMSG_send(uiChildMsgQ, SYS_MSG_ID, waitMsgData1, waitMsgData2, SYS_FOREVER);                
00538                 waitMsgData1 = 0x0ffff;
00539                 waitMsgData2 = DONTCARE;
00540                 return K_IDLE;
00541             }
00542         }
00543     }
00544     else if( (TMR_MSG_ID == id)&&(TSYSBUSY == d1) )
00545     {
00546         // Pass this message through to indicate system busy status.
00547         MSG_send(uiChildMsgQ, msgIN, 0);
00548     }    
00549     
00550     return K_WAIT_IDLE;
00551 }

Here is the call graph for this function:


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