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:

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 serves as the system idle state handle.
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:

|
|
Function serves as the system wait idle state handle.
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:

1.3.9.1