Coremain.c
上传用户:super_houu
上传日期:2008-09-21
资源大小:4099k
文件大小:103k
源码类别:

DVD

开发平台:

Others

  1. /****************************************************************************************
  2.  *  Copyright (c) 2002 ZORAN Corporation, All Rights Reserved
  3.  *  THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF ZORAN CORPORATION
  4.  *
  5.  *  File: $Workfile: Coremain.c $             
  6.  *
  7.  * Description: Interface for creating and manipulating a generic Array.
  8.  * ============
  9.  * 
  10.  * 
  11.  * Log:
  12.  * ====
  13.  * $Revision: $
  14.  * Last Modified by $Author: $ at $Modtime: $ 
  15.  ****************************************************************************************
  16.  * Updates:
  17.  ****************************************************************************************
  18.  * $Log: /I76/I76_Common/I76_Reference/Playcore/Coremain/Coremain.c $
  19.  * 
  20.  ****************************************************************************************/
  21. #include "Config.h" // Global Configuration - do not remove!
  22. #ifdef RELEASE_TRACE_MODULE
  23. #define _DEBUG
  24. #endif
  25. #ifdef _DEBUG
  26. #undef IFTRACE
  27. #ifdef RELEASE_TRACE_MODULE
  28. #define IFTRACE if (trace_flags.nav) 
  29. #else
  30. #define IFTRACE if (gTraceCore) 
  31. #include "DebugDbgMain.h"
  32. #endif
  33. #endif //_DEBUG
  34. /////////////////////////////////////////////////////////////////////////////////////////////////
  35. // Include files
  36. #include <embedded.h>
  37. #include "IncludeSysDefs.h"
  38. #include "Kernelker_api.h"
  39. #include "KernelEventDef.h"
  40. #include "KerneluITRONrtos.h"
  41. #include "CPUCPU_API.h"
  42. #include "Drivedrv_api.h"
  43. #include "DecoderAudioSetting.h"
  44. #include "Decoderdecoder.h"
  45. #include "LogoLogo.h"
  46. #include "PlaycoreCoremaincoregdef.h"
  47. #include "PlaycoreCoremaincoremain.h"
  48. #include "PlaycoreCoremaincust_ui.h"
  49. #include "PlaycoreExceptionException.h"
  50. #include "PlaycoreKaraokeio_kar.h"
  51. #include "PlaycoreMediaDetectionCDDetection.h"
  52. #include "PlaycoreNav_DVDHeadernav_dvd.h"
  53. #include "PlaycoreNav_DVDHeadernvgadefs.h"
  54. #include "PlaycoreNav_DVDHeadernvgaprot.h"
  55. #include "PlaycoreNav_ClipsNav_Clips.h"
  56. #include "PlaycorePlayModeplaymode.h"
  57. #include "PlaycorePSps.h"
  58. #include "PlaycoreScPadscmgr.h"
  59. #include "PlaycoreKaraokeKaraoke.h"
  60. #ifndef EXINO_FP
  61. #include "RemoteIR_API.h"
  62. #endif // EXINO_FP
  63. #ifdef D_USE_LCD//tecobest gxd 20051007
  64. #include "fplcd_api.h"
  65. #else
  66. #include "FPfp_api.h"
  67. #endif
  68. #include "Includecpu_address.h"
  69. #include "Includeaddress.h"
  70. #include "PlaycoreNav_CDDAPE_CD.h"
  71. #include "PlaycoreMediaDetectionDVDDetection.h"
  72. #include "UartUart_api.h"
  73. #ifdef GAME_SUPPORT
  74. extern int g_ui_notification_handler_id;
  75. #endif
  76. #ifdef TUNER_ENABLE
  77. #include "PlaycoreNav_ReceiverNav_Receiver.h"
  78. #endif
  79. #ifdef DIGITAL_AMPLIFIER_ENABLE
  80. #include "PlaycoreNav_AmplifierNav_Amplifier.h"
  81. #endif
  82. #ifdef SPDIF_IN_ENABLE
  83. #include "Decoderlow_levelDEC_LL_Api.h"
  84. #endif
  85. #ifdef EXINO2
  86. #ifdef HW_POWER_ON_RESUME
  87. #include "PlaycoreCoremainnvm_bmk.h"
  88. #endif
  89. #endif //EXINO2
  90. #ifdef VIDEO_MODE_DETECTION
  91. #include "Decoderlow_levelDEC_LL_EnCoderAPI.h"
  92. #endif
  93. #if defined(SUPPORT_FLASH_CARD)||defined(MACESTROLINK_SUPPORT)
  94. #include "DriveFE_Manager.h" //Hansen_1105_2004B
  95. #include "Drivemacestrolink.h"
  96. static gbOpenTrayAfterChangeFE = 0;
  97. #endif
  98. #ifdef I77_COMPANION_CHIP
  99. #include "HDMIMonitorDetection.h"
  100. #include "HDMIHDCPHDCP.h"
  101. #endif // I77_COMPANION_CHIP
  102. #ifdef I76_CPU_POWER_DOWN
  103. #include "DecoderDec_Power.h"
  104. #endif //I76_CPU_POWER_DOWN
  105. #if D_SUPPORT_SACD
  106. #include "PlaycoreSAMPsamp_gen.h"
  107. #include "PlaycoreSAMPschedulerSAMPScheduler.h"
  108. #include "Decoderlow_leveladp_if.h"
  109. extern ADP_TASKS CurrADPDecoder;
  110. #include "Decoderadp_api.h"
  111. #include "Playcorenav_sacdnav_sacd.h"
  112. #endif
  113. #ifdef D_ENABLE_HEADPHONE_DETECT
  114. #include "PlaycoreHeadPhoneHeadPhone.h"
  115. #endif
  116. #ifdef TV_GUARDIAN_ENABLE
  117. #include "PlaycoreTVGTVGHI.h"
  118. #include "PlaycoreTVGTVG.h"
  119. #endif
  120. #ifdef MACEATROLINK_SUPPORT
  121. #include "drivemacestrolink.h"
  122. #endif
  123. #ifdef DVD_VR_SUPPORT
  124. #include "PlaycoreNav_VRnav_vr.h"
  125. #endif
  126. #include "Customerdevicedacaudio_dac.h"
  127. extern CONST WORD g_ir_eject_key_code;
  128. /////////////////////////////////////////////////////////////////////////////////////////////////
  129. // Constants and Defines
  130. /* Max number of core handlers allowed */
  131. #define MAX_CORE_HANDLER 6
  132. /* Max number of core handlers allowed */
  133. #ifdef RELEASE_TRACE_INPUT
  134. #define MAX_UI_HANDLER  6
  135. #else
  136. #define MAX_UI_HANDLER  5
  137. #endif // RELEASE_TRACE_INPUT
  138. #ifdef PANEL_SKIP_FAST_COMBINE
  139. #define NO_KEY_PRESS_CHECK_TIME 4
  140. #endif
  141. /* Convert 'a' minutes into number of tick events of 200ms */
  142. #define CONVERT_MIN2TICK(a) (a*5*60)
  143. /* IDLE time threshold to perform spin down */
  144. #define ONE_MINUTE_IDLE_TIME 1
  145. #define MAX_TICK_EVENT_QUEUED 2
  146. #define MAX_IR_EVENT_QUEUED 3
  147. #define MAX_UI_EVENT_QUEUED 5
  148. #define CIRCULAR_LEVEL_BYTE(w,r)     ( ((w)>=(r)) ? ((w)-(r)) : ((0xFF-(r))+(w)+1) )
  149. #define TICK_CHECK_AND_SEND(w, r, e) { if ((CIRCULAR_LEVEL_BYTE(w,r) < MAX_TICK_EVENT_QUEUED) && k_ie_send(e)) w++; }
  150. #define THREE_SECOND 8
  151. #ifdef ENABLE_CHECK_SUM
  152. #define CODE_BEGIN_ADDRESS      0x4000
  153. #define CODE_SIZE_START_ADDRESS MK_FP(CODE_BEGIN_ADDRESS, 0xf0)
  154. #endif
  155. /////////////////////////////////////////////////////////////////////////////////////////////////
  156. // External functions and variables declaration
  157. extern int CDDA_Navigator(HDLR_OP, EVENT, void*);
  158. extern int SVCD_Navigator(HDLR_OP Op, EVENT Event, void *Param);
  159. extern int Receiver_Navigator(HDLR_OP Op, EVENT Event, void *Param);
  160. extern void sc_InitFlagReg(void);
  161. extern int DiscReadyDownload(void);
  162. extern BOOL DiscDownload(void);
  163. #ifdef EXINO2
  164. extern CONST WORD g_language_code_array[]; /* defined in customer.c */
  165. #endif
  166. #ifndef NO_WATCHDOG
  167. extern void ResetWatchdogVars(void);
  168. #endif //NO_WATCHDOG
  169. #ifdef OLD_ADP_CODE
  170. extern BYTE g_audio_sid;
  171. #endif
  172. extern DEC_BYPASS_TYPE_ET bBypassDecryptionUnits;
  173. #ifdef EXINO_FE //HK04232004
  174. BYTE SACD_CD_Key_In = 0;
  175. #endif
  176. #ifdef I77_COMPANION_CHIP
  177. extern SETTING_SPDIF_CHNL_PARAM_VALUE AS_GetSPDIF_Chnl_Status_Setting(SETTING_SPDIF_CHNL_PARAM spdif_chnl_param);
  178. #endif // I77_COMPANION_CHIP
  179. #ifdef BATTERY_LOW_DETECTION
  180. extern void BatteryLowProcess(void);
  181. #endif
  182. #ifdef OPEN_CLOSE_DETECTION
  183. extern void DoorDetection(void);
  184. #endif
  185. #ifdef VIDEO_MODE_DETECTION
  186. extern void VideoModeDetection(void);
  187. extern BOOL   SoftVideomode;
  188. #endif
  189. #ifdef AUX_IN_ENABLE
  190. extern UINT8 g_bIsAuxModeOn;
  191. #endif
  192. #ifdef DVD_IP_REVERSE
  193. extern void DEC_DVDReverseVobu(void);
  194. #endif
  195. // Full stop check for spindown
  196. #ifdef ZS5XX
  197. extern BOOL g_in_full_stop;
  198. #endif // ZS5XX
  199. /////////////////////////////////////////////////////////////////////////////////////////////////
  200. // Internal Core Services and Variables
  201. void core_init(void);
  202. void core_apply_settings(WORD setting, WORD value);
  203. int no_disc_fsm(HDLR_OP op, EVENT evt, void *param);
  204. int power_off_fsm(HDLR_OP op, EVENT evt, void *param);
  205. //SeanLiu_0902_2004
  206. #ifdef AUDIO_IN_SUPPORT
  207. //static int ain_core_event_handler(HDLR_OP op, EVENT evt, void *param);
  208. //static void ain_core_constructor(void);
  209. //static void ain_core_destructor(void);
  210. #endif
  211. //<<<SeanLiu_0902_2004
  212. void run_all_core_handlers(HDLR_OP op, EVENT evt, void *param);
  213. void run_all_ui_handlers(HDLR_OP op, EVENT evt, void *param);
  214. void acknowledge_event(EVENT event);
  215. #ifdef RELEASE_TRACE_INPUT
  216. int ui_trace_handler(HDLR_OP op, EVENT event, void *param);
  217. #endif
  218. #ifdef TV_GUARDIAN_ENABLE
  219. void Initiazlie_Line21DataBufferPool(void);
  220. #endif
  221. /* The following holds the UI and the core handlers */
  222. static int (*pfn_core_handler[MAX_CORE_HANDLER])(HDLR_OP op, EVENT evt, void *param) = {0};
  223. static int (*pfn_ui_handler[MAX_UI_HANDLER])(HDLR_OP op, EVENT evt, void *param) = {0};
  224. /* The following holds the Global Core State */
  225. CORE_STATE gcs;
  226. /* The following holds the Global Navigator State */
  227. NAV_STATE gns;
  228. /* The following holds the currently played content */
  229. DEC_DISC_TYPE g_disc_type = DEC_DISC_TYPE_NO_DISK;
  230. /*
  231.  * The following is used not to send tick events before 
  232.  * the UI and the CORE tasks are engaged 
  233.  */
  234. BOOL g_core_20ms_tick_handler_enabled = FALSE;
  235. /* The following holds the navigator handler ID */
  236. static int g_nav_handler_id = -1;
  237. /* The following is used not to run the UI task before the core is ready */
  238. static BOOL g_core_task_ready = FALSE;
  239. #ifdef ENABLE_REDUCE_CPU_FREQUENCY_FOR_STANDBY
  240. /* The following is used to change the CPU frequency */
  241. BYTE g_ReduceCPUFrequency = 1;
  242. #endif
  243. /* The following are used to avoid mail box fullness by tick events */
  244. #ifdef TUNER_ENABLE
  245. static BYTE wcount_core_tick_20MS = 0;
  246. static BYTE rcount_core_tick_20MS = 0;
  247. #endif
  248. static BYTE wcount_ui_tick_100MS = 0;
  249. static BYTE wcount_ui_tick_200MS = 0;
  250. static BYTE wcount_ui_tick_1SEC = 0;
  251. static BYTE wcount_core_tick_200MS = 0;
  252. static BYTE wcount_core_tick_100MS = 0;
  253. static BYTE wcount_core_tick_1SEC = 0;
  254. static BYTE rcount_ui_tick_100MS = 0;
  255. static BYTE rcount_ui_tick_200MS = 0;
  256. static BYTE rcount_ui_tick_1SEC = 0;
  257. static BYTE rcount_core_tick_200MS = 0;
  258. static BYTE rcount_core_tick_100MS = 0;
  259. static BYTE rcount_core_tick_1SEC = 0;
  260. static BYTE wcount_ir_keycode = 0;
  261. static BYTE rcount_ir_keycode = 0;
  262. #ifdef PANEL_SKIP_FAST_COMBINE
  263. unsigned long uLastUnRepeat = 0;
  264. unsigned long uLastRepeat = 0;
  265. #endif
  266. #ifdef D_USE_VARIABLE_FOR_LIB
  267. extern void core_varible_init(void);
  268. #endif
  269. /* I77 related */
  270. #ifdef I77_COMPANION_CHIP
  271. #ifdef I77_HDCP_ENABLED
  272. static HDCP_STATUS HDCPStatus = HDCP_STATUS_IDLE; /* Polls for HDCP status */
  273. static BOOL bBlueScreenOn = FALSE;   /* Indicates whether a blue screen is already engaged */
  274. #endif
  275. static SETTING_SPDIF_CHNL_PARAM_VALUE prevSpdifSR = 0xffff;  /* Holds the previously detected spdif sampling rate */
  276. static WORD prevVideoDisplayRatio = 0xffff;  /* Holds the current spdif sampling rate   */
  277. #ifdef I77_BRAIN_STORM
  278. static BYTE prev_vid_mode = 0xFF;
  279. BYTE switch_analog_status = FALSE;
  280. #endif//I77_BRAIN_STORM
  281. #endif // I77_COMPANION_CHIP
  282. /* TV Guardian related */
  283. #ifdef TV_GUARDIAN_ENABLE
  284. BYTE gLine21DataBufferPool_Read = 0xFF;
  285. BYTE gLine21DataBufferPool_Write = 0xFF;
  286. BYTE gLine21DataStruc_Read = 0xFF;
  287. BYTE gLine21DataStruc_Write = 0xFF;
  288. BYTE gLine21MuteQueue_Read = 0xFF;
  289. BYTE gLine21MuteQueue_Write = 0xFF;
  290. BYTE Line21DataBuffer_Flag = 0;
  291. WORD Line21DataBuffer[LINE21DATABUFFERSIZE] = 
  292. {
  293. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  294. 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 
  295. };
  296. LINE21DATASTRUC Line21DataStruc[NUM_OF_LINE21DATASTRUC] =
  297. { 0x00, 0x00 },
  298.    { 0x00, 0x00 }
  299. };
  300. LINE21DATA_BUFFER_POOL Line21DataBufferPool[NUM_OF_LINE21DATA_BUFFER_POOL] = 
  301. {
  302. { 0x00, 0x00 },
  303.    { 0x00, 0x00 },
  304.    { 0x00, 0x00 },
  305.    { 0x00, 0x00 }
  306. };
  307. LINE21MUTEENTRY Line21MuteQueue[LINE21MUTEQUEUESIZE] = 
  308. {
  309. { 0xFF, 0xFF, 0xFF },
  310.    { 0xFF, 0xFF, 0xFF },
  311.    { 0xFF, 0xFF, 0xFF },
  312.    { 0xFF, 0xFF, 0xFF }
  313. };
  314. #ifdef _DEBUG
  315. BYTE datain_session_id = 0x00;
  316. #endif
  317. #endif //TV_GUARDIAN_ENABLE
  318. /* SACD related */
  319. #if D_SUPPORT_SACD
  320. /* The flag remains valid when playing either CD layer or HD layer of a SACD disc */
  321. BOOL g_disc_is_hybrid_sacd = 0;
  322. BOOL gbplayCDLayerOfSACD = 0;
  323. #endif
  324. /* SPDIF input related */
  325. #ifdef SPDIF_IN_ENABLE
  326. BYTE gbOutputSamplingFrequency = 0;
  327. BYTE gbOutputSamplingFrequencyold =0xff;
  328. #endif
  329. #ifdef PANEL_SKIP_FAST_COMBINE
  330. unsigned long uTickCount = 0;
  331. KEY_STATE gks = {0,NO_KEY_PRESS_CHECK_TIME};
  332. #endif
  333. //SeanLiu_0902_2004
  334. /* The following holds the auxilary input handler ID */
  335. #ifdef AUDIO_IN_SUPPORT
  336. static int g_ain_handler_id = -1;
  337. #endif
  338. //<<<SeanLiu_0902_2004
  339. /*
  340.  * The following is used to enable auto drive spindown after 
  341.  * 8 min of idle time (Idle = STOP or PAUSE mode).
  342.  */
  343. static WORD gwStopTickCount = 0;
  344. static PLAY_STATE giPreviousPstate;
  345. /* Trace flags for release version */
  346. #ifdef RELEASE_TRACE_INPUT
  347. TRACE_FLAGS_STRUCT trace_flags = {0};
  348. #endif
  349. #ifdef REMOTE_ISR_MONITOR   
  350. BYTE ir_interval =0 ;
  351. #endif
  352. /////////////////////////////////////////////////////////////////////////////
  353. // Function name : ui_dispatch
  354. // Purpose : The main UI task function.
  355. // Input Parameters : none.
  356. // Return type : none.
  357. // Output Parameters: none.
  358. // Remarks          : The UI is not dispatched prior to the core 
  359. //   task initialization.
  360. /////////////////////////////////////////////////////////////////////////////
  361. void ui_dispatch( void )
  362. {
  363. EVENT evt;
  364. void *param;
  365.    _enable ();
  366. while (!g_core_task_ready)
  367. {
  368. usleep(5000L); /* sleep 5 ms */
  369. }
  370. tr_printf(("Starting UI dispatch...n"));
  371.    
  372. /* Installing the default handler (defined in Customer.c file) */
  373. // install_ui_event_handler(ui_notification_handler);
  374. #ifdef GAME_SUPPORT
  375. g_ui_notification_handler_id = install_ui_event_handler(ui_notification_handler);
  376. #else
  377. /* Installing the default handler (defined in Customer.c file) */
  378. install_ui_event_handler(ui_notification_handler);
  379. #endif
  380. #ifdef RELEASE_TRACE_INPUT
  381. /* Enable tty input for release trace menu */
  382. install_ui_event_handler(ui_trace_handler);
  383. #endif
  384. /* Enable receiving core ticks */
  385. g_core_20ms_tick_handler_enabled = TRUE;
  386. /* Main loop - activate UI handlers to respond to the received message */
  387. while (1)
  388. {
  389. /* Wait for ui event */
  390. evt = ie_get_ex( EVENT_CLASS_UI, &param );
  391. /* Pass the event to the UI handlers */
  392. run_all_ui_handlers( HDLR_EVENT, evt,  param);
  393. /* Do post processing after making sure the event was handled */
  394. acknowledge_event( evt );
  395. }
  396. }
  397. /////////////////////////////////////////////////////////////////////////////
  398. // Function name : core_dispatch
  399. // Purpose : The main core task function.
  400. // Input Parameters : none.
  401. // Return type : none.
  402. // Output Parameters: none.
  403. /////////////////////////////////////////////////////////////////////////////
  404. void core_dispatch( void )
  405. {
  406. EVENT evt;
  407. void *param;
  408.    _enable ();
  409. tr_printf(("Power ON sequence...n"));
  410. core_init(); /* Initialize core first */
  411. tr_printf(("Starting core_dispatch...n"));
  412. /* Signal to the UI dispatcher that the core has been initialized */
  413. g_core_task_ready = TRUE;
  414. /* Main loop - activate Core handlers to respond to the received message */
  415. while (TRUE)
  416. {
  417. /* Wait for core event */
  418. evt = ie_get_ex( EVENT_CLASS_CORE, &param );
  419. /* Pass the event to the core handlers */
  420. run_all_core_handlers( HDLR_EVENT, evt,  param);
  421. /* Do post processing after making sure the event was handled */
  422. acknowledge_event( evt );
  423. }
  424. }
  425. /////////////////////////////////////////////////////////////////////////////
  426. // Function name : ndf_on_loading
  427. // Purpose : Detecting the played content after closing the tray.
  428. // Input Parameters : none.
  429. // Return type : none.
  430. // Output Parameters: none.
  431. // Remarks          : Installs a callback to the drive to get notification
  432. //   regarding the detected media.
  433. /////////////////////////////////////////////////////////////////////////////
  434. static void ndf_on_loading(void)
  435. {
  436. #ifdef MACESTROLINK_SUPPORT //Hansen_20040910
  437. if(IS_PLAYING_MLNK)
  438. return;
  439. #endif
  440. tr_printf(("entering loadingn"));
  441. gcs.mstate = MST_LOADING;
  442. gcs.pstate = PST_STOP;
  443. gcst.mCDDTSDetected = CDDTS_NOT_DETECTED;
  444. gcs.cop_mask = COP_EJECT|COP_POWER_OFF;
  445. CLEAR_COP_MASK(COP_SETUP);
  446. drv_install_callback(CANCEL_POLLING);
  447. drv_install_callback (POLL_MEDIA_TYPE);
  448. }
  449. /////////////////////////////////////////////////////////////////////////////
  450. // Function name : power_off_fsm
  451. // Purpose : The state machine installed in power off state.
  452. // Input Parameters : none.
  453. // Return type : none.
  454. // Output Parameters: none.
  455. // Remarks          : The state machine waits for power on IR request.
  456. //   When power up is recieved, a software reset 
  457. //   is performed.
  458. /////////////////////////////////////////////////////////////////////////////
  459. #ifndef NO_POWER_SEQUENCE
  460. static int power_off_fsm( HDLR_OP op, EVENT evt, void *param )
  461. {
  462. if (op == HDLR_EVENT)
  463. {
  464. switch( evt )
  465. {
  466. case IE_CORE_CMD_POWER:
  467. g_power_state = POWER_SEQUENCE_ON_REQUESTED;
  468. #ifdef _DEBUG
  469. DisplayINT5Reg(GPCIO_STATUS, "Requested");
  470. #endif
  471. tr_printf(("ADP reset!n"));
  472. I49_ParameterWrite(POWER_CONFIG_ADDR, 0x8000); // disable ADP clk
  473. outport(ADPRESET_ADDR, 0x0001); //reset ADP
  474. outport(ADPRESET_ADDR, 0x0000); //reset ADP
  475. I49_ParameterWrite(POWER_CONFIG_ADDR, 0x0000); // disable ADP clk
  476. #ifdef ENABLE_REDUCE_CPU_FREQUENCY_FOR_STANDBY
  477. I49_ParameterWrite (CGU_CLKDHSPLLMULT_ADDR,0x19);   // change CLKD_HSPLL multiplier to 25 (clk = 27*25/5 = 135Mhz).
  478. I49_ParameterWrite (CGU_CONFIG_ADDR,0x8);    // exit CLKD_HSPLL powerdown mode.
  479. delay_us(1000L);//wait at least 1ms.
  480. #ifndef I86_USB_SUPPORT
  481. I49_ParameterWrite (CGU_CONFIG_ADDR,0x0);    // exit CLKD_HSPLL re-reset mode, USB clock disabled.
  482. #else
  483. I49_ParameterWrite (CGU_CONFIG_ADDR,0x40);   // exit CLKD_HSPLL re-reset mode, USB clock enabled.
  484. #endif
  485. g_ReduceCPUFrequency =1;
  486. outport(SxBDIV, (WORD)(CLK/BAUD/16));
  487. #endif
  488. cpu_soft_reset();
  489. break;
  490. #ifdef D_EJECT_WAKE_UP //Wesleyj032004: Add EJECT key to wake up from standby and eject
  491. /* EJECT key to wake up from standby and eject */
  492. case IE_CORE_CMD_EJECT:
  493. g_power_state = POWER_SEQUENCE_ON_EJECT;
  494. I49_ParameterWrite(POWER_CONFIG_ADDR, 0x8000); // disable ADP clk
  495. outport(ADPRESET_ADDR, 0x0001); //reset ADP
  496. outport(ADPRESET_ADDR, 0x0000); //reset ADP
  497. I49_ParameterWrite(POWER_CONFIG_ADDR, 0x0000); // disable ADP clk
  498. cpu_soft_reset();
  499. break;
  500. #endif //D_EJECT_WAKE_UP
  501. }
  502. }
  503. return 0;
  504. }
  505. #endif
  506. /////////////////////////////////////////////////////////////////////////////
  507. // Function name : no_disc_fsm
  508. // Purpose : Used to respond to non-playback messages.
  509. // Input Parameters : none.
  510. // Return type : none.
  511. // Output Parameters: none.
  512. /////////////////////////////////////////////////////////////////////////////
  513. static int no_disc_fsm( HDLR_OP op, EVENT evt, void *param )
  514. {
  515. UINT16 uiLoopIndex;
  516.    BYTE data;
  517. if (op == HDLR_ENTER) 
  518. {
  519. #if defined(SERVO_TEST) || defined(DRV_SAMPLER_MODE)
  520. gcs.mstate = MST_NO_DISC;
  521. #else
  522. #ifdef D_EJECT_WAKE_UP
  523. if ( POWER_SEQUENCE_ON_EJECT == g_power_state )
  524. evt = IE_CORE_CMD_EJECT;
  525. else
  526. #endif
  527. /* Start detecting the media */
  528. {
  529. ndf_on_loading();
  530. return 0;
  531. }
  532. #endif
  533. }
  534. /* Event handling */
  535. switch (evt)
  536. {
  537. #if D_SUPPORT_SACD
  538. case IE_CORE_SWITCH_HYBRID_SACD_LAYER:
  539. #endif
  540. #if defined(SUPPORT_FLASH_CARD )||defined(MACESTROLINK_SUPPORT)
  541. /* In case of from flash to optical, tray will be closed */
  542. case IE_CORE_SWITCH_FE:
  543. //fall through!
  544. #endif
  545. case IE_CORE_CMD_EJECT:
  546. //fall through!
  547. #if defined(STORE_BMK_ON_EJECT) && defined(HW_POWER_ON_RESUME)
  548. //#ifdef D_MEMORY_SETTING
  549. if (/*gps->memory_mode && */((gcs.pstate != PST_STOP) && (gcs.pstate != PST_WAIT_UI))
  550. // && (!(( g_disc_type == DEC_DISC_TYPE_SVCD )&&(PM_IsPBC(PM_GetPlaybackMode()))) )
  551. // && (!(IS_DISC_TYPE_DVD && (!IS_IN_TITLE_DOMAIN)))
  552. )
  553. {
  554. NVM_BMK_SET(0);
  555. }
  556. else
  557. NVM_BMK_FlushAll();
  558. //#else
  559. //        NVM_BMK_SET(0);
  560. //#endif//D_MEMORY_SETTING
  561. #endif//STORE_BMK_ON_EJECT && HW_POWER_ON_RESUME
  562.     if(IE_CORE_CMD_EJECT == evt)
  563.     {
  564. #if D_SUPPORT_SACD
  565. gbplayCDLayerOfSACD = 0;
  566.      g_disc_is_hybrid_sacd = 0;
  567. #endif
  568.     }
  569. #ifdef EXINO2
  570. clear_PonRsm_info();// SEC CH.KO042704:porting for trino // SEC shKang121103 : If Ejecting the tray at the Power Off Status, Bookmark Information is not cleared
  571. #endif
  572. IFDEF(Dvd_Macro.bMACROVISION_ENABLE)
  573. DEC_on_set_macrovision_mode(0);
  574. ENDIF
  575. /* Clear any navigation information */
  576. if (g_nav_handler_id >= 0) 
  577. {
  578. remove_core_event_handler( g_nav_handler_id );
  579. g_nav_handler_id = -1;
  580. core_clear_bookmark_info( 0 ); /* Clear all bookmarks */
  581. Logo_clear();
  582. Logo_selectSource(eStartup);
  583. Logo_display();
  584. }
  585.      if(IE_CORE_CMD_EJECT == evt)
  586. {
  587. gcs.mstate = MST_TRAY_OPENING;
  588. }
  589. gcs.pstate = PST_STOP;
  590.      if(IE_CORE_CMD_EJECT == evt)
  591. {
  592. ie_send(IE_UI_OSDMEM_CHANGED);
  593. }
  594. #ifdef AUX_IN_ENABLE
  595. if(!g_bIsAuxModeOn)
  596. #endif
  597. DEC_SetDiskType(DEC_DISC_TYPE_DVD_VIDEO );
  598. #ifdef MACESTROLINK_SUPPORT
  599. Logo_display(); //Hansen_May11_2005
  600. #endif
  601. PM_SetPlaybackMode(PM_PLAYBACK_NORMAL);
  602. PM_ClearRepeat();
  603. dbg_printf(("new state tray_openingn"));
  604. if ((IE_CORE_CMD_EJECT == evt)
  605. #ifdef SUPPORT_FLASH_CARD 
  606.      && (!IS_PLAYING_CARD)
  607. #endif
  608. #ifdef MACESTROLINK_SUPPORT
  609. &&(!IS_PLAYING_MLNK)
  610. #endif
  611.       )
  612. {
  613. drv_tray_open();
  614. }
  615. #ifdef SUPPORT_FLASH_CARD 
  616.     else
  617.     if(IE_CORE_SWITCH_FE == evt || (IE_CORE_CMD_EJECT == evt && IS_PLAYING_CARD))
  618.     {
  619.      enFE_TYPE eNewFE;
  620.     
  621.      if(!IS_PLAYING_CARD)
  622.      {
  623.      eNewFE = eFE_FLASHCARD;
  624.       }
  625.      else
  626.      if(IS_PLAYING_CARD)
  627.      {
  628. drv_abort_play();      
  629.      eNewFE = eFE_OPTICAL_DISC;
  630.    drv_init();
  631.         if(IE_CORE_CMD_EJECT == evt)
  632. {
  633.          gbOpenTrayAfterChangeFE = 1;
  634. }
  635.         else
  636. {
  637.          gbOpenTrayAfterChangeFE = 0;
  638.      }
  639.      }
  640. if(1 != gbOpenTrayAfterChangeFE)
  641. {
  642. Exception_catch(EXCEPTION_ALL);
  643. }
  644. else
  645. {
  646. Exception_throw(EXCEPTION_MEDIUM_EJECTED);
  647. }
  648.      FEM_SelectFE(eNewFE);
  649.     }
  650. #endif
  651. #if D_SUPPORT_SACD
  652. else if(IE_CORE_SWITCH_HYBRID_SACD_LAYER == evt)
  653.     {
  654. gcs.mstate = MST_LOADING;
  655. #ifdef EXINO_FE //HK04232004
  656. SACD_CD_Key_In = 1;
  657. drv_install_callback(POLL_SPIN_DOWN);
  658. drv_spindown();
  659. #else
  660. drv_spindown();
  661.     drv_install_callback(POLL_SPIN_DOWN);
  662. #endif // EXINO_FE
  663. }
  664. #endif
  665. #ifdef MACESTROLINK_SUPPORT
  666. else if(IE_CORE_SWITCH_FE == evt || (IE_CORE_CMD_EJECT == evt && IS_PLAYING_MLNK))
  667. {
  668. //<<<//Hansen_feb01_2005
  669. #ifdef MLNK_WITHOUT_LOADER
  670. if(!Get_Loader_Conf())
  671. {
  672. Exception_catch(EXCEPTION_ALL);
  673. FEM_SelectFE(eFE_MACESTROLINK);
  674. }else
  675. #endif
  676. //>>>>//Hansen_feb01_2005
  677. {
  678.      enFE_TYPE sel_FE;
  679. if(IS_PLAYING_MLNK) {
  680. MLNK_abort_play();
  681. MLNK_Disable();
  682. // drv_init();
  683. if(!(MLNK_status()&MLNK_STATUS_VOLUME)) //Hansen_1105_2004
  684. {
  685. sel_FE=eFE_OPTICAL_DISC;
  686.        if(IE_CORE_CMD_EJECT == evt)
  687.          gbOpenTrayAfterChangeFE = 1;
  688. else
  689. gbOpenTrayAfterChangeFE = 0;
  690. }
  691. else //Hansen_1116_2004
  692. sel_FE=eFE_MACESTROLINK;
  693. }
  694. else
  695. sel_FE=eFE_MACESTROLINK;
  696. if (1 != gbOpenTrayAfterChangeFE)
  697. {
  698. Exception_catch(EXCEPTION_ALL);
  699. }
  700. else
  701. {
  702. Exception_throw(EXCEPTION_MEDIUM_EJECTED);
  703. }
  704. FEM_SelectFE(sel_FE);
  705. }
  706.  }
  707. #endif
  708. #ifdef TV_GUARDIAN_ENABLE
  709. Initiazlie_Line21DataBufferPool();
  710. #endif
  711. #ifdef AUX_IN_ENABLE
  712. if(!g_bIsAuxModeOn)
  713. #endif
  714. g_disc_type = DEC_DISC_TYPE_NO_DISK;
  715. gcs.pstate = PST_STOP;
  716. #if defined(SUPPORT_FLASH_CARD)||defined(MACESTROLINK_SUPPORT)
  717.     if(IE_CORE_SWITCH_FE == evt)
  718. {
  719.  gcs.cop_mask = COP_EJECT|COP_POWER_OFF;
  720. }
  721. else 
  722. #endif
  723. #if D_SUPPORT_SACD
  724.      if(IE_CORE_SWITCH_HYBRID_SACD_LAYER == evt)
  725.  gcs.cop_mask = COP_EJECT|COP_POWER_OFF;
  726.    else
  727. #endif
  728. gcs.cop_mask = COP_CLOSE|COP_POWER_OFF|COP_RESTART|COP_SETUP; //kz 07122002
  729. #ifdef AUX_IN_ENABLE
  730. if(!g_bIsAuxModeOn)
  731. #endif
  732.       {
  733.       if(IE_CORE_CMD_EJECT == evt
  734. #if defined(SUPPORT_FLASH_CARD)||defined(MACESTROLINK_SUPPORT)
  735.        && 0 == gbOpenTrayAfterChangeFE
  736. #endif
  737.       )
  738.  drv_install_callback (POLL_TRAY_POSITION);
  739.       }
  740. gcst.m3dEffect = EFFECT3D_SETTING_OFF;
  741. gtps.m3dEffect = EFFECT3D_SETTING_OFF;
  742. gcst.mDMM = gtps.mDMM = DMM_SETTING_NORMAL;
  743. break;
  744. // End of IE_CORE_CMD_EJECT/IE_CORE_SWITCH_FE events handling
  745. //----------------------------------------------------------------------------------
  746.    case IE_CORE_TRAY_OPENED:
  747. if ((MST_TRAY_OPENING != gcs.mstate) || (PST_STOP != gcs.pstate))
  748. break;
  749.     gcs.mstate = MST_TRAY_OPEN;
  750. #ifdef AUX_IN_ENABLE
  751. if(!g_bIsAuxModeOn)
  752. #endif
  753.       /* Identify tray push events */
  754.       drv_install_callback (POLL_TRAY_POSITION);
  755.       break;
  756.             
  757. // End of IE_CORE_TRAY_OPENED event handling
  758. //----------------------------------------------------------------------------------
  759.            
  760. case IE_CORE_CMD_CLOSE_TRAY:
  761. dbg_printf(("entering tray_closingn"));
  762. drv_tray_close();
  763. // Fall-Through!
  764. case IE_CORE_CMD_PUSH_TRAY:
  765. // Clear all raised Exceptions
  766. #ifdef PATCH_FOR_IO_KEY_SCAN
  767. if ((( gcs.mstate == MST_DISC_READY ) || ( gcs.mstate == MST_LOADING )) && (IE_CORE_CMD_PUSH_TRAY == evt) )
  768. {
  769. tr_printf(("Wrong tray push detectionn"));
  770. break;
  771. }
  772. #endif
  773. Exception_catch(EXCEPTION_ALL);
  774. gcs.mstate = MST_TRAY_CLOSING;
  775. gcs.pstate = PST_STOP;
  776. gcs.cop_mask = COP_EJECT|COP_POWER_OFF;
  777. #ifdef AUX_IN_ENABLE
  778. if(!g_bIsAuxModeOn)
  779. #endif
  780. {
  781. drv_install_callback (POLL_TRAY_POSITION);
  782. #ifdef SCREEN_SAVER
  783.     DEC_StopScreenSaver();
  784. #endif
  785. }
  786. #ifdef D_QSI_LOADER
  787. ie_send(IE_UI_TRAY_PUSHED_IN);
  788. #endif
  789. break;
  790. // End of IE_CORE_CMD_CLOSE_TRAY/IE_CORE_CMD_PUSH_TRAY events handling
  791. //----------------------------------------------------------------------------------
  792. #ifdef DRV_TRAY_JAM_NOTIFY
  793.     case IE_CORE_TRAY_JAMMED:
  794. gcs.mstate = MST_TRAY_OPENING;
  795. break;
  796. #endif
  797. // End of IE_CORE_TRAY_JAMMED event handling
  798. //----------------------------------------------------------------------------------
  799. #ifdef DRV_TRAY_OPENING_CLOSING_NOTIFY
  800.     case IE_CORE_TRAY_OPENING:
  801. gcs.mstate = MST_TRAY_OPENING;
  802. break;
  803.     
  804. // End of IE_CORE_TRAY_OPENING event handling
  805. //----------------------------------------------------------------------------------
  806.     
  807. case IE_CORE_TRAY_CLOSING:
  808. gcs.mstate = MST_TRAY_CLOSING;
  809. break;
  810. // End of IE_CORE_TRAY_CLOSING event handling
  811. //----------------------------------------------------------------------------------
  812. #endif
  813. case IE_CORE_STOP_DRIVE_SPINING:
  814. if ( PST_STOP == gcs.pstate )
  815. {
  816. drv_spindown();
  817. }
  818. break;
  819. // End of IE_CORE_STOP_DRIVE_SPINING event handling
  820. //----------------------------------------------------------------------------------
  821. case IE_CORE_CMD_POWER:
  822. #if defined(STORE_BMK_ON_POWER_OFF) && defined(HW_POWER_ON_RESUME)
  823. //#ifdef D_MEMORY_SETTING
  824. if (/*gps->memory_mode && */(gcs.pstate != PST_STOP) && (gcs.pstate != PST_WAIT_UI)
  825. // && (!(( g_disc_type == DEC_DISC_TYPE_SVCD )&&(PM_IsPBC(PM_GetPlaybackMode()))) )
  826. // && (!(IS_DISC_TYPE_DVD && (!IS_IN_TITLE_DOMAIN)))
  827. )
  828. {
  829. NVM_BMK_SET(0);
  830. }
  831. else
  832. NVM_BMK_FlushAll();
  833. //#else
  834. // NVM_BMK_SET(0);
  835. //#endif
  836. #endif//STORE_BMK_ON_POWER_OFF && HW_POWER_ON_RESUME
  837. #ifdef I77_COMPANION_CHIP
  838. /* Power down the I77 */
  839. #ifdef I77_HDCP_ENABLED
  840. /* Terminate HDCP if it working */
  841. MonitorDetection_TerminateHDCP(TRUE);
  842. HDCP_Init(TRUE);
  843. HDCPStatus = HDCP_STATUS_IDLE;
  844. bBlueScreenOn = FALSE;
  845. #endif
  846. prevSpdifSR = 0xffff;
  847. prevVideoDisplayRatio = 0xffff;
  848. I77_PowerDown(TRUE);
  849. #endif // I77_COMPANION_CHIP
  850. DAC_SetMute(TRUE);   /* the pop noise caused by the power down down command below     */
  851. dbg_printf(("entering power_offn"));
  852. #ifdef DIGITAL_AMPLIFIER_ENABLE
  853.               amplifier_mute(TRUE);
  854. #endif
  855. OSD_TurnOff();
  856. #ifdef D_SCART_OUTPUT
  857. /* SCART I/F power off */
  858. ScartLL_VMOD(SCART_VMOD_STANDBY);
  859. #endif //D_SCART_OUTPUT
  860. // FrankMei_1018_2004: When IR port is GPCIO0
  861. #ifdef IR_USE_GPCIO0
  862. outport(IMASK, ~(IMASK_TMR|IMASK_GPCIO0|IMASK_DSP)); // Enable only IR, DSP and timer interrupts
  863. #else
  864. outport(IMASK, ~(IMASK_TMR|IMASK_GPCIO7_1|IMASK_DSP)); // Enable only IR, DSP and timer interrupts
  865. #endif
  866. //<<<FrankMei_1018_2004
  867. DEC_LL_ENC_SetDacsEnable(0);//DEC_LL_ENC_output_enable(FALSE);
  868. // Removing all core handlers
  869. for (uiLoopIndex=0; uiLoopIndex<MAX_CORE_HANDLER; uiLoopIndex++)
  870. {
  871. if (NULL != pfn_core_handler[uiLoopIndex]) 
  872. {
  873. remove_core_event_handler(uiLoopIndex);
  874. }
  875. }
  876. API_ADP_Terminate();       // Terminate ADP first avoid system stuck in soft reset
  877. gcs.mstate = MST_POWER_OFF;
  878. #ifndef D_NO_VFD
  879. ui_fp_update_handler();    // Display "-off-" on FP VFD
  880. #endif
  881. /*
  882.  * Power down the drive.
  883.  * The function returns only after making sure the driver is powered down.
  884.  */
  885. #ifdef MACESTROLINK_SUPPORT
  886. if(IS_PLAYING_MLNK)
  887. {
  888. MLNK_Disable();
  889. FE2disc();
  890. }
  891. else
  892. #endif
  893. drv_power_down();
  894. /* Set video and audio signal pins to be floating */
  895. I49_ParameterWrite(FLOAT_CONFIG_ADDR,0x07);
  896. delay_us(1000L);
  897. #ifdef I76_CPU_POWER_DOWN
  898. DEC_DSPPowerDown(TRUE);
  899. #endif //I76_CPU_POWER_DOWN
  900. I49_ParameterWrite(POWER_CONFIG_ADDR, 0xffff); // Power down 
  901. delay_us(1000L);
  902. #ifndef I76_CPU_POWER_DOWN
  903. #ifndef BATTERY_LOW_DETECTION
  904. EX_Standby_Set();
  905. I49_ParameterWrite(POWERCONFIG2_ADDR, 0x00db); // Power down (without the MCU and BCI unit)
  906. #endif   
  907. #endif //I76_CPU_POWER_DOWN
  908.    
  909. /* Install the core handler in power off state */
  910. install_core_event_handler(power_off_fsm);
  911. gcs.pstate = PST_STOP;
  912. gcs.cop_mask = COP_EJECT|COP_POWER_OFF;
  913.    g_power_state = POWER_SEQUENCE_IN_OFF_STATE;
  914. dbg_printf(("Install power off fsm for power off state machinen"));
  915. #ifdef ENABLE_REDUCE_CPU_FREQUENCY_FOR_STANDBY
  916. I49_ParameterWrite(CGU_CONFIG_ADDR,0x8); // enter CLKD_HSPLL re-reset mode - clk is equal to gclk (27Mhz).
  917. asm {nop }; asm {nop }; asm {nop }; //wait at least 3 cycles.
  918. I49_ParameterWrite(CGU_CONFIG_ADDR,0x9); // enter CLKD_HSPLL powerdown mode.
  919. I49_ParameterWrite(CGU_CLKDHSPLLMULT_ADDR,0x6); // change CLKD_HSPLL multiplier to 6 (clk = 27*6/5 = 32.4Mhz).
  920. g_ReduceCPUFrequency = 5; // (135MHz/27MHz)
  921. outport(SxBDIV, (WORD)((CLK/BAUD/16)/g_ReduceCPUFrequency));
  922. #endif
  923. #ifdef I76_CPU_POWER_DOWN   
  924. if (DEC_PowerDown() == TRUE) 
  925. {
  926. ie_send_ex( IE_CORE_CMD_POWER, (void *) 1 ); 
  927.     }
  928. #endif //I76_CPU_POWER_DOWN
  929. #ifdef EXINO2
  930.           if ( gps->customer_reserved & B_CUSTOMER_PREVIOUSLY_POWERED_ON )
  931.           {
  932.        PS_Save(); // ZKR GL062503 : Saved current palyer setting when power-off.
  933.           }
  934.       else
  935.       {
  936.                   PS_RestoreFactoryDefault();
  937.       }
  938.        tr_printf(("nSend power-off commands to fp micom..."));
  939.        fp_send_power_off();
  940. #endif       
  941. break;
  942. // End of IE_CORE_CMD_POWER event handling
  943. //----------------------------------------------------------------------------------
  944. #if defined(EXINO2) && defined(D_ENABLE_HDCP_FREE) //ZKR JK0429 : hdcp_free mode
  945. case IE_CORE_HDCP_FREE: //ZKR JK0506
  946. if (gps->hdcp_free == TRUE)
  947. {
  948. tr_printf(("ncoremain : bypass always for HDCP_FREEn"));
  949. MonitorDetection_TerminateHDCP(TRUE);
  950. HDCP_Init(TRUE);
  951. MonitorDetection_HDCPByPass();
  952. }
  953. #endif //EXINO2
  954. case IE_CORE_TICK_200:
  955. #ifdef PANEL_SKIP_FAST_COMBINE
  956. uTickCount++;
  957. if (gks.mKeyPressed)
  958. gks.mKeyPressed--;
  959. #endif
  960. #ifdef I77_COMPANION_CHIP
  961. if (FALSE == MonitorDetection_IsMonitorPluggedIn())
  962. {
  963. if (TRUE == MonitorDetection_CheckHotPlugDetect())
  964. {
  965. BOOL edid_status;
  966. UINT16  retrynum;
  967. tr_printf(("I77 Detected monitor plugging...n"));
  968. MonitorDetection_TerminateHDCP(TRUE);
  969. HDCP_Init(TRUE);
  970. /* Start getting the EDID */
  971. retrynum = 0;
  972. edid_status = MonitorDetection_ReadAndParseEDID();
  973. //+++++++++++++++++++++++++++
  974. //  E D I D  R e t r y
  975. //+++++++++++++++++++++++++++
  976. #define NUM_EDID_RETRY 8
  977. while(retrynum < NUM_EDID_RETRY && FALSE == edid_status)
  978. {
  979. edid_status = MonitorDetection_ReadAndParseEDID() ;
  980. retrynum++;
  981. tr_printf(("Reading and Verify EDID retries: %dn", retrynum));
  982. }
  983. //+++++++++++++++++++++++++++
  984. if (FALSE == edid_status)
  985. {
  986. tr_printf(("I77 - FAILED to read the EDID, set default output to 480p DVIn"));
  987. #ifdef I77_BRAIN_STORM
  988. if (gps->hd_lock_mode == FALSE)
  989. {
  990. #endif//I77_BRAIN_STORM
  991. /* Set default output to 480p/576p with DVI mode */
  992. I77_SetHDMIMode(FALSE);
  993. I77_SetDisplayColorSpace(COLOR_SPACE_RGB);
  994. /* Set default to 480p or 576p according to NTSC/PAL output */
  995. I77_SetDefaultResolution();
  996. #ifdef I77_BRAIN_STORM
  997. }
  998. else
  999. {
  1000. dbg_printf(("I77 load previous settingn"));
  1001. /* Set default output to 480p/576p with DVI mode */
  1002. I77_SetHDMIMode(FALSE);
  1003. I77_SetDisplayColorSpace(gps->lastest_hdmi_mode.color_space);
  1004. /* Set default to 480p or 576p according to NTSC/PAL output */
  1005. I77_SetResolution(gps->lastest_hdmi_mode.output_resolution);
  1006. }
  1007. #endif//I77_BRAIN_STORM
  1008. }
  1009. else
  1010. {
  1011. /* EDID was successfully parsed - set the I77 to the output resolution */
  1012. INT8 resolution = MonitorDetection_GetResolution();
  1013. #ifdef I77_BRAIN_STORM
  1014. extern BYTE isHDMIChanged;
  1015. if(gps->hd_lock_mode == FALSE || isHDMIChanged)
  1016. {
  1017. #endif//I77_BRAIN_STORM
  1018. /* Set DVI/HDMI mode to the I77 */
  1019. I77_SetHDMIMode(MonitorDetection_IsHDMI());
  1020. /* Set the display's color space */
  1021. I77_SetDisplayColorSpace(MonitorDetection_GetColorSpace());
  1022. /* Check if the native resolution was detected */
  1023. if (resolution != -1)
  1024. {
  1025. I77_SetResolution(resolution);
  1026. }
  1027. else
  1028. {
  1029. /* Could not detect native resolution.
  1030.  * Set default to 480p or 576p according to NTSC/PAL output.
  1031.  */
  1032. I77_SetDefaultResolution();
  1033. }
  1034. #ifdef I77_BRAIN_STORM
  1035. }
  1036. else
  1037. {
  1038. dbg_printf(("I77 load previous settingn"));
  1039. /* Set default output to 480p/576p with DVI mode */
  1040. I77_SetHDMIMode(gps->lastest_hdmi_mode.hdmi_mode);
  1041. I77_SetDisplayColorSpace(gps->lastest_hdmi_mode.color_space);
  1042. /* Set default to 480p or 576p according to NTSC/PAL output */
  1043. I77_SetResolution(gps->lastest_hdmi_mode.output_resolution);
  1044. }
  1045. #endif//I77_BRAIN_STORM
  1046. #ifndef I77_HDCP_ENABLED
  1047. MonitorDetection_HDCPByPass();
  1048. #endif
  1049. }
  1050. #ifdef I77_BRAIN_STORM
  1051. if( gps->hd_jpeg_mode_preference == SD_JPEG_MODE )
  1052. gcst.hd_jpeg_mode_preference = SD_JPEG_MODE;
  1053. else
  1054. {
  1055. switch(gps->hd_vid_out_mode)
  1056. {
  1057. case HD_NTSC_IN_OUT_720P:
  1058. case HD_NTSC_IN_OUT_1080I:
  1059. case HD_NTSC_IN_OUT_1024X768:
  1060. case HD_NTSC_IN_OUT_1360X768:
  1061. gcst.hd_jpeg_mode_preference = gps->hd_vid_out_mode;
  1062. break;
  1063. default:
  1064. gcst.hd_jpeg_mode_preference = SD_JPEG_MODE;
  1065. break;
  1066. }
  1067. }
  1068. gps->lastest_hdmi_mode.output_resolution = I77_GetResolution();
  1069. gps->lastest_hdmi_mode.color_space = I77_GetDisplayColorSpace();
  1070. gps->lastest_hdmi_mode.hdmi_mode = I77_GetHDMIMode();
  1071. if(gps->hd_lock_mode == HD_MODE_LOCKED)
  1072. ie_send_ex(IE_CORE_UPDATE_PS, (void*)(((DWORD)PS_UPDATE_HD_LOCK_MODE<<16) | (DWORD)gps->hd_lock_mode));
  1073. #endif//I77_BRAIN_STORM
  1074. }
  1075. gps->hd_vid_out_mode = I77_GetResolution();
  1076. #if defined(EXINO2) && defined(D_ENABLE_DVI_OUTPUT) //ZKR JK0319 : default setting
  1077. if ( gps->hd_vid_out_mode == 0xFF ) 
  1078.  gps->hd_vid_out_mode = HD_NTSC_IN_OUT_480P;
  1079. #endif
  1080. }
  1081. else if (FALSE == MonitorDetection_CheckHotPlugDetect())
  1082. {
  1083. /* The monitor was plugged out - reset comminucation to HDE1 */
  1084. BYTE bWorkingByte;
  1085. tr_printf(("Monitor was un plugged...n"));
  1086. #ifdef I77_HDCP_ENABLED
  1087. /* If HDCP is running then terminate it */
  1088. MonitorDetection_TerminateHDCP(TRUE);
  1089. HDCP_Init(TRUE);
  1090. HDCPStatus = HDCP_STATUS_IDLE;
  1091.    MonitorDetection_HDCPByPass();
  1092. bBlueScreenOn = FALSE;
  1093. #endif // I77_HDCP_ENABLED
  1094. MonitorDetection_Init();
  1095. prevSpdifSR = 0xffff;
  1096. prevVideoDisplayRatio = 0xffff;
  1097.    //clear ctl0 bit andyh
  1098.  I77_ReadBytes(0x1CA, 1, &data);
  1099.  data = data & ~0x01;
  1100.  I77_WriteBytes(0x1CA, 1, &data);
  1101.           
  1102. /* Reset to 480p/576p DVI, RGB encoding */
  1103. //set back to OESS
  1104.          
  1105. // Signal to I77 to use OESS
  1106. I77_ReadBytes(I77_GLOBAL_MODE_CONTROL1_ADDRESS, 1, &bWorkingByte);
  1107. bWorkingByte = bWorkingByte & (~HDCP_I77_ESS_BIT_MASK);
  1108. I77_WriteBytes(I77_GLOBAL_MODE_CONTROL1_ADDRESS, 1, &bWorkingByte);
  1109.           
  1110.          tr_printf(("Resetting output to 480p/576p DVI, RGB encodingn"));
  1111. I77_SetHDMIMode(FALSE);
  1112. I77_SetDisplayColorSpace(COLOR_SPACE_RGB);
  1113. /* Set default to 480p or 576p according to NTSC/PAL output */
  1114. I77_SetDefaultResolution();
  1115. }
  1116. #ifdef I77_HDCP_ENABLED
  1117. else
  1118. {
  1119. extern DEC_BYPASS_TYPE_ET bBypassDecryptionUnits;
  1120. /* Check the HDCP status */
  1121. HDCPStatus = MonitorDetection_GetHDCPStatus();
  1122. /* Check if the played content needs copy protection
  1123.  * and activate/bypass HDCP accordingly.
  1124.  */
  1125. #if defined(EXINO2) && defined(D_ENABLE_HDCP_FREE) //ZKR JK0429 : for hdcp_free moce
  1126. if ( (!(bBypassDecryptionUnits & DEC_BYPASS_CSS1_E) ||
  1127.  !(bBypassDecryptionUnits & DEC_BYPASS_CPPM_E)) && (gps->hdcp_free == FALSE) )
  1128. #else  
  1129. if ( !(bBypassDecryptionUnits & DEC_BYPASS_CSS1_E) ||
  1130.  !(bBypassDecryptionUnits & DEC_BYPASS_CPPM_E) )
  1131. #endif //EXINO2  
  1132. {
  1133. /* Activate HDCP if it is bypassed, and the display is HDCP receiver */
  1134. if(HDCP_STATUS_FAILED == HDCPStatus)  //added andyh to restart HDCP on failure
  1135.             {
  1136. dbg_printf(("andyh attempt to restart threadn"));
  1137.                   MonitorDetection_TerminateHDCP(FALSE);
  1138.                   MonitorDetection_ActivateHDCP();
  1139.             }
  1140. else if ( (HDCP_STATUS_BYPASSED == HDCPStatus) ||
  1141.  (HDCP_STATUS_IDLE == HDCPStatus) )
  1142. {
  1143. tr_printf(("Detected protected contentn"));
  1144. MonitorDetection_ActivateHDCP();
  1145. }
  1146. else if ( (HDCP_STATUS_NO_RECEIVER == HDCPStatus) && (FALSE == bBlueScreenOn) )
  1147. {
  1148. /* Non-HDCP receiver - view a blue screen */
  1149. // tr_printf(("Non HDCP receiver - blue screenn"));
  1150. #ifdef EXINO2 //ZKR JK0507 : can't detect DVI TV when power on/off
  1151. MonitorDetection_TerminateHDCP(FALSE);
  1152. MonitorDetection_ActivateHDCP();
  1153. #else
  1154. MonitorDetection_TerminateHDCP(FALSE);
  1155. HDCP_Init(FALSE); /* To view a blue screen */
  1156. bBlueScreenOn = TRUE;
  1157. #endif
  1158. }
  1159. }
  1160. else
  1161. {
  1162. /* Non-protected content - bypass HDCP if it is not already bypassed */
  1163. if (HDCP_STATUS_BYPASSED != HDCPStatus)
  1164. {
  1165. tr_printf(("Detected un-protected contentn"));
  1166. MonitorDetection_TerminateHDCP(FALSE);
  1167. MonitorDetection_HDCPByPass();
  1168. bBlueScreenOn = FALSE;
  1169. }
  1170. }
  1171. }
  1172. #endif // I77_HDCP_ENABLED
  1173. #ifdef _DEBUG
  1174. {
  1175. extern BOOL gHDMIAudioTestOn;
  1176. if (TRUE == gHDMIAudioTestOn)
  1177. {
  1178. I77_HDMIAudioTest();
  1179. }
  1180. I77_SpdifSyncTest();
  1181. }
  1182. #endif
  1183. /* Check if the spdif sampling rate has changed or the aspect ratio has changed
  1184.  * If so, update the I77 HDMI parameters.
  1185.  */
  1186. #ifdef I77_HDCP_ENABLED
  1187. if (HDCP_STATUS_FAILED != HDCPStatus) /* HDCP didn't fail */
  1188. #endif      
  1189. {
  1190. SETTING_SPDIF_CHNL_PARAM_VALUE currSpdifSR = AS_GetSPDIF_Chnl_Status_Setting(SET_AUDIO_SAMPLE_RATE);
  1191. extern NV_SETTINGS *gps;
  1192. extern DEC_DISC_TYPE gDiskType;
  1193. WORD wCurrentVideoDisplayRatio = sprm_Get(P_CFG_VIDEO) & 0x0300;
  1194. if ( (prevSpdifSR != currSpdifSR) || 
  1195.  ( (wCurrentVideoDisplayRatio != prevVideoDisplayRatio) &&
  1196.    (DEC_DISC_TYPE_DVD_VIDEO == gDiskType) ) )
  1197. {
  1198. I77_LoadHDMIParams(I77_GetResolution(), FALSE,FALSE);
  1199. prevSpdifSR = currSpdifSR;
  1200. prevVideoDisplayRatio = wCurrentVideoDisplayRatio;
  1201. }
  1202. }
  1203. #endif // I77_COMPANION_CHIP
  1204. /* Auto Drive Spindown after 8min of idle time (Idle = STOP or PAUSE mode) */
  1205. /* Spin down only if disc is ready and the pstate is stop */
  1206. if ((gcs.mstate == MST_DISC_READY) || (gcs.mstate == MST_UNKNOWN_DISC))
  1207.   {
  1208. if(gcs.pstate == PST_STOP)
  1209. {
  1210.                 gwStopTickCount++;
  1211.                 if ( (gwStopTickCount == CONVERT_MIN2TICK(ONE_MINUTE_IDLE_TIME)) && /* 1 min Idle Time */
  1212.                   (giPreviousPstate != PST_STOP) )
  1213.                 { 
  1214. dbg_printf(("Coremain: Auto Spindownn"));
  1215.                    gwStopTickCount=0;
  1216.                    giPreviousPstate = PST_STOP;
  1217.                    drv_spindown();
  1218. #ifdef EXINO_FE //HK04232004
  1219. SACD_CD_Key_In = 0; // Luis
  1220. #endif
  1221.                 }
  1222. }
  1223. else
  1224. {
  1225. gwStopTickCount = 0;
  1226. giPreviousPstate = gcs.pstate;
  1227. }
  1228.       }
  1229.       else
  1230.       {
  1231.          giPreviousPstate = PST_PLAY;   
  1232.       }
  1233. #ifdef READ_BIT_RATE
  1234. if (( PST_PLAY == gcs.pstate ) && 
  1235.  ((DEC_DISC_TYPE_DVD_VIDEO == g_disc_type) || IS_IN_AVTT_DOMAIN ||IS_IN_AMGM_DOMAIN
  1236. #ifdef DVD_VR_SUPPORT
  1237. ||( DEC_DISC_TYPE_DVD_VR == g_disc_type )
  1238. #endif
  1239.  ) )
  1240. {
  1241. UINT16 uiBitRate;
  1242. uiBitRate = drv_get_bit_rate();
  1243. dbg_printf(("BitRate is %dn", uiBitRate));
  1244. sc_SetBytes(SC_BITRATE_INFO_ADDR, 0, 2, (BYTE *)&(uiBitRate));
  1245. }
  1246. #endif
  1247. break;
  1248. // End of IE_CORE_TICK_200 event handling
  1249. //----------------------------------------------------------------------------------
  1250. #ifdef MACESTROLINK_SUPPORT
  1251. case IE_CORE_FE_CHANGED_TO_MLNK:
  1252. if(!IS_PLAYING_MLNK) //Hansen_20040910
  1253. break;
  1254. gcs.mstate = MST_LOADING;
  1255. MLNK_init(FALSE);
  1256. break;
  1257. #endif
  1258. #ifdef SUPPORT_FLASH_CARD 
  1259. case IE_CORE_FE_CHANGED_TO_CARD:
  1260.   gcs.mstate = MST_LOADING;
  1261. break;
  1262. #endif
  1263. #if defined(SUPPORT_FLASH_CARD)||defined(MACESTROLINK_SUPPORT)
  1264. case IE_CORE_FE_CHANGED_TO_DISC:
  1265.   gcs.mstate = MST_LOADING;
  1266. //Hansen_2004_12_29 remove
  1267.     if(gbOpenTrayAfterChangeFE)
  1268.     {
  1269. Exception_catch(EXCEPTION_ALL);
  1270.    gbOpenTrayAfterChangeFE = 0;
  1271. ie_send( IE_CORE_CMD_EJECT );
  1272.       break;
  1273.     }
  1274. // Else fall through - close the tray.
  1275. #endif
  1276. case IE_CORE_TRAY_CLOSED:
  1277. dbg_printf(("tray closed!n"));
  1278. #ifdef AUX_IN_ENABLE
  1279. if(!g_bIsAuxModeOn)
  1280. #endif
  1281. #if !(defined(SERVO_TEST) || defined(DRV_SAMPLER_MODE))
  1282. ndf_on_loading();
  1283. #endif
  1284. ie_send(IE_UI_TRAY_PUSHED_IN);
  1285. break;
  1286. // End of IE_CORE_TRAY_CLOSED event handling
  1287. //----------------------------------------------------------------------------------
  1288. #if D_SUPPORT_SACD
  1289. // This event is subcribed only before reloading
  1290. case IE_CORE_SPIN_DOWN_FINISHED:
  1291. drv_install_callback (NULL);
  1292. drv_tray_close();
  1293.     break;
  1294. case IE_CORE_SACD_IDENTIFICATION_FAILED:
  1295.         // Remove navigator and SAMP scheduler.
  1296. if (g_nav_handler_id >= 0)
  1297.       {
  1298. remove_core_event_handler( g_nav_handler_id );
  1299. g_nav_handler_id = -1;
  1300.       }
  1301. g_disc_type = DEC_DISC_TYPE_DVD_ROM;
  1302. g_nav_handler_id = install_core_event_handler(Clips_Navigator);
  1303. if (g_nav_handler_id >= 0) 
  1304. {
  1305. tr_printf(("Entering Ready State 1n"));
  1306. gcs.mstate = MST_DISC_READY;
  1307. gcs.pstate = PST_STOP;
  1308. SET_COP_MASK( COP_EJECT|COP_POWER_OFF );
  1309. }
  1310.       break;
  1311. #endif
  1312. #ifdef EXINO2 //ZKR JK0509 : can't construct fail
  1313. case IE_CORE_MEDIA_UNIDENTIFIED:
  1314. gcs.mstate = MST_UNKNOWN_DISC; //set the state to unknown disc
  1315. gcs.pstate = PST_STOP;
  1316. gcs.cop_mask = COP_EJECT|COP_POWER_OFF|COP_SETUP;
  1317. dbg_printf(("Media Type is unavailable discn"));
  1318. g_disc_type = DEC_DISC_TYPE_NO_DISK;
  1319. Logo_selectSource(eStartup);
  1320. Logo_display();
  1321. break;
  1322. #endif
  1323. #ifdef SUPPORT_FLASH_CARD
  1324.   case IE_CORE_CARD_INSERTED:
  1325.    gcs.mstate = MST_LOADING;
  1326.        break;
  1327.        
  1328.   case IE_CORE_CARD_REMOVED:
  1329. if (g_nav_handler_id >= 0) 
  1330. {
  1331. remove_core_event_handler( g_nav_handler_id );
  1332. g_nav_handler_id = -1;
  1333. core_clear_bookmark_info( 0 ); // clear all bookmarks
  1334. Logo_clear();
  1335. Logo_selectSource(eStartup);
  1336. Logo_display();
  1337. }
  1338.     //fall through
  1339. case IE_CORE_CARD_IDENTIFIED:
  1340. if ((!IS_PLAYING_CARD) || (FALSE== FlashCard_IsFSInitDone()))
  1341. break;
  1342. //fall through
  1343. #endif
  1344. #if !(defined(SERVO_TEST) || defined(DRV_SAMPLER_MODE))
  1345. case IE_CORE_MEDIA_IDENTIFIED:
  1346. #ifdef SUPPORT_FLASH_CARD 
  1347. if (MEDIA_IDENTIFIED || (IS_PLAYING_CARD && IS_CD_MEDIA))  // MEDIA is DVD or CD
  1348. #else
  1349. if (MEDIA_IDENTIFIED)  // MEDIA is DVD or CD
  1350. #endif
  1351. {
  1352. //angiehe_0608_2004:Reset the all navigator exclusive static structure before install navigator.
  1353. memset((BYTE*)&gns,0,sizeof(gns));
  1354. /* bypass the decription units for the common case */
  1355. bBypassDecryptionUnits = DEC_BYPASS_ALL_E;
  1356. if (IS_DVD_PHYSICAL_MEDIA)
  1357. {
  1358. tr_printf(("DVD MEDIAn"));
  1359. #if D_SUPPORT_SACD
  1360.             if(IS_SACD_MEDIA)
  1361.             {
  1362.              g_disc_type = DEC_DISC_TYPE_SACD;
  1363. #if (!defined SACD_HW_EVAL) | (defined TEST_HARNASS)
  1364.              g_nav_handler_id = SAMP_SchedulerInstall();
  1365. #endif
  1366. #ifdef SACD_HW_EVAL
  1367.              SAMP(BE_Init)();
  1368. #endif
  1369.              break;
  1370.             }
  1371. #endif
  1372. /* Determine the content located on the DVD media */
  1373. gns.dvd.i_dvd_type = DVD_DetermineDiscType();
  1374. //<<<<Hansen_04_09_21
  1375. #ifdef MACESTROLINK_SUPPORT
  1376. if((IS_PLAYING_MLNK)&&(DVD_TYPE_VMG!=gns.dvd.i_dvd_type))
  1377. {
  1378. if (!Exception_catchAndRethrow(EXCEPTION_MEDIUM_EJECTED | EXCEPTION_POWER_DOWN_REQUEST)) //Hansen_04_09_24
  1379. ie_send(IE_CORE_SWITCH_FE);
  1380. break;
  1381. }
  1382. #endif
  1383. //>>>>Hansen_04_09_21
  1384. // <<< SEC shKang042304 : if ejecting the tray before determining the DVD Video,SACD Installed. 
  1385. // don't have to install the SACD Navigator.
  1386. #ifdef EXINO2
  1387. if (Exception_catchAndRethrow(EXCEPTION_MEDIUM_EJECTED | EXCEPTION_POWER_DOWN_REQUEST)) 
  1388. gns.dvd.i_dvd_type = DVD_TYPE_NO_DISC;
  1389. #endif // EXINO2
  1390. // SEC shKang042304 >>>
  1391. switch (gns.dvd.i_dvd_type)
  1392. {
  1393. #ifdef DVD_AUDIO_SUPPORT
  1394. case DVD_TYPE_AMG:
  1395. // Start DVD-Audio Navigator
  1396. gns.dvd.i_dvd_selected_type = DVD_TYPE_AMG;
  1397. g_disc_type = DEC_DISC_TYPE_DVD_AUDIO;
  1398. g_nav_handler_id = install_core_event_handler( nav_dvd );
  1399. break;
  1400. #endif
  1401. case DVD_TYPE_VMG:
  1402. // Start DVD-Video Navigator
  1403. gns.dvd.i_dvd_selected_type = DVD_TYPE_VMG;
  1404. g_disc_type = DEC_DISC_TYPE_DVD_VIDEO;
  1405. g_nav_handler_id = install_core_event_handler( nav_dvd );
  1406. #ifdef TV_GUARDIAN_ENABLE
  1407. Initiazlie_Line21DataBufferPool();
  1408. #endif
  1409. break;
  1410. case DVD_TYPE_DVD_ROM:
  1411. #if D_SUPPORT_SACD
  1412. #ifndef SACD_HW_EVAL
  1413.               //Check if it's a SACD disc.
  1414. #ifdef EXINO2 
  1415. //<<ZKR ML:033104 Aviod pop sound  when loading  sacd
  1416.         DAC_SACD_SetMute(TRUE);  
  1417. #endif
  1418.                g_disc_type = DEC_DISC_TYPE_SACD;
  1419.            g_nav_handler_id = SAMP_SchedulerInstall();
  1420.               break;
  1421. #endif
  1422. #endif
  1423. // Start Clip Navigator
  1424. g_disc_type = DEC_DISC_TYPE_DVD_ROM;
  1425. g_nav_handler_id = install_core_event_handler(Clips_Navigator);
  1426. break;
  1427. #ifdef DVD_VR_SUPPORT
  1428. case DVD_TYPE_VR_VMG:
  1429. g_disc_type = DEC_DISC_TYPE_DVD_VR;
  1430.    g_nav_handler_id = install_core_event_handler( nav_vr );
  1431. break;
  1432. #endif
  1433. case DVD_TYPE_NO_DISC:
  1434. default:
  1435. tr_printf(("Warnning: Can't identify DVD Media Type, Bad Discn"));
  1436. #if defined(SUPPORT_FLASH_CARD)||defined(MACESTROLINK_SUPPORT)
  1437. if (Exception_catchAndRethrow(EXCEPTION_MEDIUM_EJECTED | EXCEPTION_POWER_DOWN_REQUEST) )
  1438. break;
  1439. #endif
  1440. // <<< SEC shKang042304 : must not display the Bad disc Menu !!!
  1441. #ifdef EXINO2
  1442. if (Exception_catchAndRethrow(EXCEPTION_MEDIUM_EJECTED | EXCEPTION_POWER_DOWN_REQUEST)) 
  1443. gcs.mstate = MST_TRAY_OPENING; //set the state to unknown disc
  1444. else
  1445. #endif // EXINO2
  1446. // SEC shKang042304 >>>
  1447. gcs.mstate = MST_UNKNOWN_DISC; //set the state to unknown disc
  1448. gcs.pstate = PST_STOP;
  1449. gcs.cop_mask = COP_EJECT|COP_POWER_OFF|COP_SETUP;
  1450. dbg_printf(("Media Type is not DVDn"));
  1451. g_disc_type = DEC_DISC_TYPE_NO_DISK;
  1452. Logo_selectSource(eStartup);
  1453. Logo_display();
  1454. break;
  1455. }
  1456. #ifdef INTERNAL_KARAOKE//tecobest gxd 20051028
  1457. #ifdef  DVD_AUTO_CHANGE_DEFAULT_CH  //add by jt (temp)//tecobest gxd 20051028 for audio is 6ch off when dvd play
  1458. switch (g_disc_type) 
  1459. {
  1460. case DEC_DISC_TYPE_DVD_VIDEO:
  1461. case DEC_DISC_TYPE_DVD_AUDIO:
  1462. // case DEC_DISC_TYPE_DVD_ROM:
  1463. #ifdef D_DEFAULT_6CH_ON
  1464. if(gtps.mKaraoke==KARAOKE_SETTING_ON)
  1465. gtps.mKaraoke==KARAOKE_SETTING_OFF;
  1466. gps->SpeakersConfigIndex = SPEAKERS_LSS1_CONFIG;
  1467. #else
  1468. gps->SpeakersConfigIndex = SPEAKERS_DEFAULT_CONFIG;
  1469. #endif
  1470. break;
  1471. default:
  1472. break;
  1473. }
  1474. #endif
  1475. #endif
  1476. }
  1477. else // if (IS_DVD_MEDIA)
  1478. {
  1479. tr_printf(("CD MEDIAn"));
  1480. #ifdef SUPPORT_FLASH_CARD 
  1481.     if (IS_PLAYING_CARD)  // MEDIA is DVD or CD
  1482.   g_disc_type= DEC_DISC_TYPE_CDROM;
  1483.     else
  1484. #endif
  1485. /* Determine the CD content */
  1486. g_disc_type= CD_DetermineDiscType();
  1487. if(CdMedia_Macro.bVCD_SELECTION_ENABLE)
  1488. {
  1489. if ( (gps->vcd_playable_mode==VCD_OFF) &&
  1490.  ( (g_disc_type==DEC_DISC_TYPE_VCD) || (g_disc_type==DEC_DISC_TYPE_SVCD) ) )
  1491.    {
  1492. gds.disctype = g_disc_type;
  1493. g_disc_type = DEC_DISC_TYPE_NO_DISK;
  1494.    }
  1495. }
  1496. switch (g_disc_type) 
  1497. {
  1498. case DEC_DISC_TYPE_CDDA:
  1499. tr_printf(("CDDA Disc Detected.n"));
  1500. #ifdef INTERNAL_KARAOKE//tecobest gxd 20051028
  1501. #ifdef  AUTO_CHANGE_6CH_2CH  //add by jt (temp)
  1502. //if(gtps.mKaraoke==KARAOKE_SETTING_ON)
  1503. gps->BassManagement = BASS_MANAGEMENT_OFF;
  1504. gps->SpeakersConfigIndex = SPEAKERS_DEFAULT_CONFIG; // Config with only front speakers, no center, no surround, no SW
  1505. #endif
  1506. #endif
  1507. PE_CD_DisableCGMSData();
  1508. g_nav_handler_id= install_core_event_handler(CDDA_Navigator);
  1509. break;
  1510. case DEC_DISC_TYPE_VCD:
  1511. case DEC_DISC_TYPE_SVCD:
  1512. tr_printf(("VCD/SVCD Disc deteced.n"));
  1513. #ifdef INTERNAL_KARAOKE//tecobest gxd 20051028
  1514. #ifdef  AUTO_CHANGE_6CH_2CH  //add by jt (temp)
  1515. //if(gtps.mKaraoke==KARAOKE_SETTING_ON)
  1516. gps->BassManagement = BASS_MANAGEMENT_OFF;
  1517. gps->SpeakersConfigIndex =SPEAKERS_DEFAULT_CONFIG; // Config with only front speakers, no center, no surround, no SW
  1518. #endif
  1519. #endif
  1520. PE_CD_DisableCGMSData();
  1521. g_nav_handler_id= install_core_event_handler(SVCD_Navigator);
  1522. break;
  1523. case DEC_DISC_TYPE_CDROM:
  1524. case DEC_DISC_TYPE_PICTURE_CD:
  1525. tr_printf(("CD-RROM/Picture CD Deteced.n"));
  1526. #ifdef INTERNAL_KARAOKE//tecobest gxd 20051028
  1527. #ifdef  AUTO_CHANGE_6CH_2CH  //add by jt (temp)
  1528. //if(gtps.mKaraoke==KARAOKE_SETTING_ON)
  1529. gps->BassManagement = BASS_MANAGEMENT_OFF;
  1530. gps->SpeakersConfigIndex = SPEAKERS_DEFAULT_CONFIG; // Config with only front speakers, no center, no surround, no SW
  1531. #endif
  1532. #endif
  1533. PE_CD_DisableCGMSData();
  1534. g_nav_handler_id = install_core_event_handler(Clips_Navigator);
  1535. break;
  1536. case DEC_DISC_TYPE_SW_UPDATE:
  1537. {
  1538. unsigned long disc_addr;
  1539. tr_printf(("Media Type Unsupported, could be SW-Update Discn"));
  1540. gcs.mstate =  MST_UNKNOWN_DISC;
  1541. #ifndef D_NO_CD_UPDATE_MENU
  1542. if ((disc_addr = DiscReadyDownload()) == FALSE) 
  1543. {
  1544. tr_printf(("no_disc_fsm(): Fatal: Failed to acquire SW-Update address.n"));
  1545. g_disc_type = DEC_DISC_TYPE_NO_DISK; // sign for bad disc
  1546. Logo_selectSource(eStartup);
  1547. Logo_display();
  1548. }
  1549. else 
  1550. {
  1551. tr_printf(("SW-Update Discn"));
  1552. g_dl_state = CD_REQUEST_USR_INPUT;
  1553. dbg_printf(("About to send event to UIn"));
  1554. ie_send (IE_UI_FUPGRADE_REQUEST);
  1555. dbg_printf(("About to enter while loopn"));
  1556. while (g_dl_state == CD_REQUEST_USR_INPUT) 
  1557. {
  1558. usleep (50000L);
  1559. }
  1560. dbg_printf(("Exiting while loopn"));
  1561. if ((g_dl_state == CD_PARTIAL_DOWNLOAD) || 
  1562. (g_dl_state == CD_TOTAL_DOWNLOAD)) 
  1563. {
  1564. if (!DiscDownload()) 
  1565. {
  1566. tr_printf(("no_disc_fsm(): Fatal: SW-Update Error.n"));
  1567. g_dl_state = CD_FAILED_DOWNLOAD;
  1568. }
  1569. }
  1570. if (g_dl_state == CD_CANCEL_DOWNLOAD) 
  1571. {
  1572. // If pressed CANCEL
  1573. Logo_selectSource(eStartup);
  1574. Logo_display();
  1575. }
  1576. }
  1577. #else
  1578. if ((disc_addr = DiscReadyDownload()) == FALSE) 
  1579. {
  1580. tr_printf(("no_disc_fsm(): Fatal: Failed to acquire SW-Update address.n"));
  1581. g_disc_type = DEC_DISC_TYPE_NO_DISK; // sign for bad disc
  1582. gcs.mstate = MST_UNKNOWN_DISC;
  1583. Logo_selectSource(eStartup);
  1584. Logo_display();
  1585. }
  1586. else {
  1587. if (! DiscDownload()) 
  1588. {
  1589. tr_printf(("no_disc_fsm(): Fatal: SW-Update Error.n"));
  1590. g_dl_state = CD_FAILED_DOWNLOAD;
  1591. g_disc_type = DEC_DISC_TYPE_NO_DISK; 
  1592. gcs.mstate = MST_UNKNOWN_DISC;
  1593. Logo_selectSource(eStartup);
  1594. Logo_display();
  1595. }
  1596. }
  1597. #endif // D_NO_CD_UPDATE_MENU
  1598. //gcs.mstate = MST_NO_DISC;
  1599. gcs.pstate = PST_STOP;
  1600. gcs.cop_mask = COP_EJECT|COP_POWER_OFF;
  1601. break;
  1602. }
  1603. default:
  1604. tr_printf(("no_disc_fsm(): Warning: Unsupported CD type.n"));
  1605. gcs.mstate = MST_UNKNOWN_DISC;
  1606. if(CdMedia_Macro.bVCD_SELECTION_ENABLE)
  1607. {
  1608. if ( (gps->vcd_playable_mode==VCD_OFF) &&
  1609.  ( (gds.disctype==DEC_DISC_TYPE_VCD) || (gds.disctype==DEC_DISC_TYPE_SVCD) ) )
  1610.    {
  1611. gcs.mstate = MST_NO_DISC;
  1612.    }
  1613. }
  1614. drv_spindown();
  1615. gcs.pstate = PST_STOP;
  1616. PE_CD_AbortPlayback(FALSE); // DM050703 Force a complete stop
  1617. DEC_SetDiskType(DEC_DISC_TYPE_DVD_VIDEO);
  1618. gcs.cop_mask = COP_EJECT|COP_POWER_OFF;
  1619. }
  1620. }
  1621. #if D_SUPPORT_SACD
  1622.         // Don't set mstate for SACD.
  1623.           if(g_disc_type == DEC_DISC_TYPE_SACD)
  1624.     break;
  1625. #endif
  1626. #if defined(SUPPORT_FLASH_CARD)||defined(MACESTROLINK_SUPPORT)
  1627. if (Exception_catchAndRethrow(EXCEPTION_MEDIUM_EJECTED | EXCEPTION_POWER_DOWN_REQUEST) )
  1628. break;
  1629. #endif
  1630. if (g_nav_handler_id >= 0) 
  1631. tr_printf(("Entering Ready State 2n"));
  1632. gcs.mstate = MST_DISC_READY;
  1633. gcs.pstate = PST_STOP;
  1634. SET_COP_MASK( COP_EJECT|COP_POWER_OFF );
  1635. }
  1636. }
  1637. else
  1638. // NO_DISC, UNKNOWN or ERROR
  1639. tr_printf(("Non detected disc: No Disc or Error or Unknownn"));
  1640. #if defined(SUPPORT_FLASH_CARD)||defined(MACESTROLINK_SUPPORT)
  1641. if (Exception_catchAndRethrow(EXCEPTION_MEDIUM_EJECTED | EXCEPTION_POWER_DOWN_REQUEST) )
  1642. break;
  1643. #endif
  1644. if (gds.disctype == DISCTYPE_NODISC)
  1645. {
  1646.          
  1647. #if defined(SUPPORT_FLASH_CARD)||defined(MACESTROLINK_SUPPORT)
  1648.   g_disc_type= DEC_DISC_TYPE_NO_DISK;
  1649. #endif
  1650. gcs.mstate = MST_NO_DISC;
  1651. gcs.pstate = PST_STOP;
  1652. gcs.cop_mask = COP_SETUP|COP_EJECT|COP_POWER_OFF;
  1653. tr_printf(("No Disc in trayn"));
  1654. }
  1655. else 
  1656. {
  1657. gcs.mstate = MST_UNKNOWN_DISC;
  1658. gcs.pstate = PST_STOP;
  1659. gcs.cop_mask = COP_SETUP|COP_EJECT|COP_POWER_OFF;
  1660. tr_printf(("Disc Type Unknownn"));
  1661. // Initialize the Drive
  1662. drv_init();
  1663. }
  1664. break;
  1665. // End of IE_CORE_MEDIA_IDENTIFIED event handling
  1666. //----------------------------------------------------------------------------------
  1667. #endif // SERVO_TEST
  1668. case IE_CORE_UPDATE_PS:
  1669. PS_Update((DWORD)param);
  1670. /* Apply settings to the specific command */
  1671. /* 16 MSB store the command - 16 LSB store the value */
  1672. core_apply_settings((WORD)((DWORD)param>>16), (WORD) ((DWORD)param&0x0FFFF));
  1673. break;
  1674. // End of IE_CORE_UPDATE_PS event handling
  1675. //----------------------------------------------------------------------------------
  1676. case IE_CORE_DEC_CMD:
  1677. DEC_Apply_Cmd((DWORD)param);
  1678. break;
  1679. // End of IE_CORE_DEC_CMD event handling
  1680. //----------------------------------------------------------------------------------
  1681. case IE_CORE_ZOOM:
  1682. DEC_SetZoomScale((int)param);
  1683. break;
  1684. // End of IE_CORE_ZOOM event handling
  1685. //----------------------------------------------------------------------------------
  1686. case IE_CORE_PANNING:
  1687. DEC_SetZoomPanning((int)param);
  1688. break;
  1689. // End of IE_CORE_PANNING event handling
  1690. //----------------------------------------------------------------------------------
  1691. case IE_CORE_ZOOM_CUSTOM_PANNING:
  1692. // on future require
  1693. break;
  1694. case IE_CORE_SCREEN_SAVER:
  1695. #ifdef SCREEN_SAVER
  1696. if (param == SCREEN_SAVER_START) 
  1697. {    
  1698. #if !(defined(SERVO_TEST) || defined(DRV_SAMPLER_MODE))
  1699. DEC_StartScreenSaver();
  1700. gcs.bScreenSaverOn = TRUE;
  1701. #endif
  1702. }
  1703. else if (param == SCREEN_SAVER_STOP) 
  1704. {
  1705. gcs.bScreenSaverOn = FALSE;
  1706. DEC_StopScreenSaver();
  1707. }
  1708. #endif
  1709. break;
  1710. // End of IE_CORE_SCREEN_SAVER event handling
  1711. //----------------------------------------------------------------------------------
  1712. case IE_CORE_SET_KARAOKE_MODE:
  1713. #ifdef EXTERNAL_KARAOKE
  1714. DEC_SET_MICROPHONE_ON_OFF((MICROPHONE_SETTING) param);
  1715. #endif
  1716. break;
  1717. // End of IE_CORE_SET_KARAOKE_MODE event handling
  1718. //----------------------------------------------------------------------------------
  1719. case IE_CORE_PINK_NOISE:
  1720. #if D_SUPPORT_SACD
  1721. if( CurrADPDecoder == SACD_TASK )
  1722. {
  1723. DEC_DISC_TYPE disc_type = g_disc_type;
  1724.        SAMP(BE_Term)();
  1725.   //restore ADP IO setting.
  1726. DEC_SetSID(DEC_SID_TYPE_AUDIO, MPEG_SID1);
  1727. g_disc_type = disc_type;
  1728.       }
  1729. #endif
  1730. DEC_ADPPng(param);
  1731. break;
  1732. #ifdef AUDIO_IN_SUPPORT
  1733. case IE_CORE_AUDIO_IN_MODE :
  1734. {
  1735. /*
  1736. switch((BYTE) param)
  1737. {
  1738. case AUDIO_IN_MODE_ANALOG :
  1739. if ((MP3_SID == g_audio_sid) || (WMA_SID == g_audio_sid))  //add by wl082404
  1740. DEC_SetSID(DEC_SID_TYPE_AUDIO, CDDA_SID);     //add by wl082404
  1741. gtps.mAudioInMode = AUDIO_IN_MODE_ANALOG;
  1742. DEC_SetSID(DEC_SID_TYPE_AUDIO, ANALOG_IN_SID);
  1743. break;
  1744. #ifdef D_ENABLE_SPDIF_IN_PORT
  1745. case AUDIO_IN_MODE_COAXIAL :
  1746. DEC_SetSID(DEC_SID_TYPE_AUDIO, NoAudio);
  1747. gtps.mAudioInMode = AUDIO_IN_MODE_COAXIAL;
  1748. IO_Select_SPDIFIN_Pin(TRUE);
  1749. DEC_SetSID(DEC_SID_TYPE_AUDIO, DIGITAL_IN_SID);
  1750. break;
  1751. case AUDIO_IN_MODE_OPTICAL :
  1752. DEC_SetSID(DEC_SID_TYPE_AUDIO, NoAudio);
  1753. gtps.mAudioInMode = AUDIO_IN_MODE_OPTICAL;
  1754. IO_Select_SPDIFIN_Pin(FALSE);
  1755. DEC_SetSID(DEC_SID_TYPE_AUDIO, DIGITAL_IN_SID);
  1756. break;
  1757. #endif
  1758. default:
  1759. gtps.mAudioInMode = AUDIO_IN_MODE_OFF;
  1760. DEC_SetSID(DEC_SID_TYPE_AUDIO, NoAudio);
  1761. }
  1762. */
  1763. gtps.mAudioInMode = ((BYTE) param);
  1764. if (AUDIO_IN_MODE_OFF != gtps.mAudioInMode)
  1765. {
  1766. g_disc_type = DEC_DISC_TYPE_AIN;
  1767. gcs.mstate = MST_DISC_READY; 
  1768. gcs.pstate = PST_PLAY;
  1769. }
  1770. PE_CD_AUDIO_IN_MODE(gtps.mAudioInMode);
  1771. if (AUDIO_IN_MODE_OFF == gtps.mAudioInMode)
  1772. {
  1773. gds.disctype = DISCTYPE_UNINITIALIZED;
  1774. gcs.mstate = MST_LOADING;
  1775. gcs.pstate = PST_STOP;
  1776. g_disc_type = DEC_DISC_TYPE_NO_DISK;
  1777. }
  1778. }
  1779. break;
  1780. #endif
  1781. #ifdef TV_GUARDIAN_ENABLE
  1782. case IE_CORE_LINE21_DATA_IN:
  1783. {
  1784. unsigned short sc_address;
  1785. unsigned char pool_index;
  1786. unsigned short temp;
  1787. BYTE bTopField;
  1788. unsigned char length;
  1789. unsigned short temp_buffer[LINE21DATABUFFERSIZE + 1];
  1790. unsigned char i;
  1791. BYTE errnum = 0x00;
  1792. int prev_IE = InterruptDisable();
  1793. if ( gLine21DataStruc_Write == gLine21DataStruc_Read ){
  1794. dbg_printf(("Line21 Data Struc emptyn"));
  1795. set_SR(prev_IE);
  1796. break;
  1797. }
  1798. else{
  1799. gLine21DataStruc_Read = ( gLine21DataStruc_Read + 1 ) % NUM_OF_LINE21DATASTRUC;
  1800. }
  1801. pool_index = ( gLine21DataBufferPool_Write + 1 ) % NUM_OF_LINE21DATA_BUFFER_POOL;
  1802. //Check if buffer pool is full
  1803. if ( pool_index == gLine21DataBufferPool_Read ){
  1804. tr_printf(("no_disc_fsm(): Warning: Can't find empty buffer pool to hold Line21 Datan"));
  1805. set_SR(prev_IE);
  1806. break;
  1807. }
  1808. if ( Line21DataStruc[gLine21DataStruc_Read].DataLength == 0x00 ){
  1809. dbg_printf(("Emtpy Line21DataStrucn"));
  1810. set_SR(prev_IE);
  1811. break;
  1812. }
  1813. gLine21DataBufferPool_Write = pool_index;
  1814.  
  1815. if ( Line21DataBuffer_Flag ){
  1816. for( temp = 0; temp < LINE21DATABUFFERSIZE; temp ++ )
  1817. temp_buffer[temp+1] = Line21DataBuffer[temp];
  1818. Line21DataBuffer_Flag = 0;
  1819. }
  1820. else
  1821. {
  1822. unsigned char toggle_flag, index=0, datalength;
  1823. dbg_printf(("take data from DVP FIFO in coremainn"));
  1824. datalength = (unsigned char)(Line21DataStruc[gLine21DataStruc_Read].DataLength & 0x3F);
  1825. i = (unsigned char)param & 0x7F;
  1826. bTopField = (BYTE)param & 0x80;
  1827. toggle_flag = bTopField ? 1: 0;
  1828. for ( temp = 0; temp < (62 - i); temp ++){
  1829. if ( ( toggle_flag ) && ( temp < datalength ) ){
  1830. temp_buffer[(index++)+1] = I49_ParameterRead( DS2CFIFO_DATA_ADDR);
  1831. toggle_flag = 0;
  1832. }else{
  1833. toggle_flag = 1;
  1834. }
  1835. Line21DataStruc[gLine21DataStruc_Read].DataLength = index;
  1836. }
  1837.   }
  1838. length = Line21DataStruc[gLine21DataStruc_Read].DataLength;
  1839. Line21DataStruc[gLine21DataStruc_Read].DataLength = 0x00;
  1840. if ( length > 20 ){
  1841. tr_printf(("Data too long!n"));
  1842. length = 20;
  1843. }
  1844. if ( length > 0 )
  1845. Line21DataBufferPool[pool_index].DataLength = length;
  1846. else
  1847. tr_printf(("Input length is zeron"));
  1848. Line21DataBufferPool[pool_index].GopCounter = Line21DataStruc[gLine21DataStruc_Read].GopCounter;
  1849. Line21DataStruc[gLine21DataStruc_Read].GopCounter = 0x00;
  1850. #ifdef _DEBUG
  1851. datain_session_id ++;
  1852. #endif
  1853. //call tvg_process here
  1854. swab((char*)&temp_buffer[0], (char*)&temp_buffer[0], ((length+1) * sizeof(UINT16)));
  1855. for ( i = 0; i < length; i ++ ){
  1856. if (errnum = tvg_process_gop((BYTE *)(&temp_buffer[1+i]), (BYTE *)(&temp_buffer[i]), i, length))
  1857. {
  1858. tr_printf(("Encounts errors %02xn",errnum));
  1859. }
  1860. }
  1861. swab((char*)&temp_buffer[0], (char*)&temp_buffer[0], ((length+1) * sizeof(UINT16)));
  1862. dbg_printf(("Data In==>Write Index: %02x  Read Index: %02x Length: %02x Gop: %02xn",
  1863.           gLine21DataStruc_Write,
  1864. gLine21DataStruc_Read,
  1865. Line21DataBufferPool[pool_index].DataLength,
  1866. Line21DataBufferPool[pool_index].GopCounter));
  1867.            
  1868. gLine21DataBufferPool_Write = pool_index;
  1869. //Now transfers Line21 Text and Control Characters to Sc Pad Buffer Pool
  1870. sc_address = pool_index * SC_LINE21_DATA_POOL_SIZE + SC_LINE21_DATA_BUFFER_ADDR;
  1871. sc_Write( sc_address, SC_LINE21_DATA_POOL_SIZE/*in Dwords*/, (Sc_cont *)&temp_buffer[0]);
  1872. #if 0
  1873. {
  1874. WORD status2;
  1875. status2 = I49_ReadStatus(DEC_LL_STATUS_2);
  1876. dbg_printf(("Status2 is: %04x Gop counter is: %02xn",
  1877. (status2&0xE000)>>13, Line21DataBufferPool[pool_index].GopCounter));
  1878. }
  1879. #endif
  1880. set_SR(prev_IE);
  1881. }
  1882. break;
  1883. case IE_CORE_LINE21_DATA_OUT:
  1884. {
  1885. BYTE pool_index = (BYTE)param;
  1886. #if 0
  1887. if ( gLine21DataBufferPool_Read == gLine21DataBufferPool_Write ){
  1888. tr_printf(("no_disc_fsm(): Warning: Buffer Pool is emptyn"));
  1889. break;
  1890. }
  1891. pool_index = (gLine21DataBufferPool_Read + 1 ) % NUM_OF_LINE21DATA_BUFFER_POOL;
  1892. if ( ( Line21DataBufferPool[pool_index].DataLength & 0x7F) == 0 ){
  1893. tr_printf(("no_disc_fsm(): Fatal: Error on receiving IE_CORE_LINE21_DATA_OUT_EVENT, pool is emptyn"));
  1894. break;
  1895. }
  1896. gLine21DataBufferPool_Read = pool_index;
  1897. dbg_printf(("Data Out<==Write Index: %02x Read Index: %02xn", 
  1898.           gLine21DataBufferPool_Write
  1899. gLine21DataBufferPool_Read));
  1900. #ifdef _DEBUG
  1901. {
  1902. WORD status2;
  1903. status2 = I49_ReadStatus(I49_STATUS_2);
  1904. dbg_printf(("Status2 is: %04x Gop counter is: %02xn",
  1905. (status2&0xE000)>>13, Line21DataBufferPool[pool_index].GopCounter));
  1906. }
  1907. #endif
  1908. #endif
  1909. dbg_printf(("Data Out<==Read Index: %02x Length: %02x Gop: %02xn",
  1910.           pool_index,
  1911. Line21DataBufferPool[pool_index].DataLength,
  1912. Line21DataBufferPool[pool_index].GopCounter));
  1913.             
  1914. DEC_WriteLine21DataToDVP (pool_index);
  1915. Line21DataBufferPool[pool_index].GopCounter = 0x00;
  1916. Line21DataBufferPool[pool_index].DataLength = 0;
  1917. }
  1918. break;
  1919. case IE_CORE_CLEAN_LINE21:
  1920. dbg_printf(("Re-Initialize all Line21 Structsn"));
  1921. Initiazlie_Line21DataBufferPool();
  1922. tvg_init(1);
  1923. break;
  1924. #endif // TV_GUARDIAN_ENABLE
  1925. //<<<Leslie_0828_2003_B: Comment out
  1926. #if 0
  1927. case IE_CORE_PAUSE_DRIVE:
  1928. drv_suspend_data_transmission();
  1929. break;
  1930. case IE_CORE_RESUME_DRIVE:
  1931. drv_resume_data_transmission((DWORD)param);
  1932. break;
  1933. #endif
  1934. //Leslie_0828_2003_B>>>
  1935. case IE_CORE_EXIT_NAVIGATOR:
  1936. gcs.pstate = PST_STOP;
  1937. if (g_nav_handler_id >= 0) 
  1938. {
  1939. remove_core_event_handler( g_nav_handler_id );
  1940. g_nav_handler_id = -1;
  1941. core_clear_bookmark_info( 0 ); // Clear all bookmarks
  1942. }
  1943. PM_SetPlaybackMode(PM_PLAYBACK_NORMAL);
  1944. PM_ClearRepeat();
  1945. gcs.pstate = PST_STOP;
  1946. break;
  1947. #if defined(TUNER_ENABLE) && defined(AUDIO_IN_SUPPORT)
  1948. case IE_CORE_SET_WORKMODE:
  1949. DEC_EX_workmode_convert(gps->TunerWorkmode);
  1950. if (RADIO_WORKMODE == gps->TunerWorkmode)
  1951. usleep(100000UL);
  1952. //Should just remove DVD/VCD/CD/Clips navigator, keep amplifier navigator
  1953. if (DVD_WORKMODE == gps->TunerWorkmode)
  1954. {
  1955. #ifndef DIRECT_KEY_SCAN//teocbest gxd 20051008
  1956. #ifdef D_USE_LCD
  1957. LCD_InitDisplay();
  1958. #elif !defined(D_NO_VFD)
  1959. VFD_InitDisplay();
  1960. #endif
  1961. #endif
  1962. //VFD_InitDisplay();
  1963. DEC_EncoderPowerDown();
  1964.          OSD_TurnOff();
  1965. cpu_soft_reset();
  1966. }
  1967. else if (DEC_DISC_TYPE_AIN != g_disc_type)
  1968. {
  1969. DEC_EncoderPowerDown();
  1970. gcst.m3dEffect = gtps.m3dEffect = EFFECT3D_SETTING_OFF;
  1971. gcst.mDMM = gtps.mDMM = DMM_SETTING_NORMAL;
  1972. if (g_nav_handler_id >= 0)
  1973. {
  1974. remove_core_event_handler( g_nav_handler_id );
  1975. g_nav_handler_id = -1;
  1976. }
  1977. // DEC_PlaybackCommand(DEC_PLAYBACK_CMD_STOP, NULL ); 
  1978. // drv_abort_play();
  1979. ie_send_ex(IE_CORE_AUDIO_IN_MODE, (void *)AUDIO_IN_MODE_ANALOG);
  1980. drv_spindown();
  1981. }
  1982. if (RADIO_WORKMODE == gps->TunerWorkmode)
  1983. {
  1984. if (g_nav_handler_id >= 0)
  1985. {
  1986. remove_core_event_handler( g_nav_handler_id );
  1987. g_nav_handler_id = -1;
  1988. }
  1989. g_nav_handler_id = install_core_event_handler( Receiver_Navigator );
  1990. }
  1991. break;
  1992. #endif  //TUNER_ENABLE
  1993. #ifdef SPDIF_IN_CH_SELECT
  1994.        case IE_CORE_SPDIF_IN_CHANNELS_SEL:
  1995.               Digital_In_Channel_Select(gps->dig_aud_in_chan);
  1996.        break;
  1997. #endif
  1998. #if defined(TUNER_ENABLE)&&defined(D_CHANGE_SR_FOR_TUNER_AM_PERFORMANCE)  
  1999.        case IE_CORE_SR_CHANGE:
  2000. gcs.pstate = PST_STOP;
  2001. PE_CD_AIN_Play(0);
  2002. DEC_SetDiskType(DEC_DISC_TYPE_CDDA);
  2003. PE_CD_AIN_Play(1);
  2004. gcs.pstate = PST_PLAY;
  2005.         break;
  2006. #endif
  2007. #ifdef DVD_IP_REVERSE
  2008. case IE_CORE_DVDREV_VSYNC_HANDLER:
  2009. DEC_DVDReverseVobu();
  2010. break;
  2011. #endif
  2012. #ifdef D_RESET_FUNCTION
  2013. case IE_CORE_RESET_FACTORY_SETTING:
  2014. /* Clear any navigation information */
  2015. if (g_nav_handler_id >= 0) 
  2016. {
  2017. remove_core_event_handler( g_nav_handler_id );
  2018. g_nav_handler_id = -1;
  2019. Logo_clear();
  2020. Logo_selectSource(eStartup);
  2021. Logo_display();
  2022. }
  2023. gcs.pstate = PST_STOP;
  2024. ie_send(IE_UI_SHOW_RESET_OSD);
  2025. ui_tmp_string(L"RESET");
  2026. DEC_SetDiskType(DEC_DISC_TYPE_DVD_VIDEO );
  2027. ie_send_ex(IE_CORE_UPDATE_PS, (void *) (((DWORD)PS_UPDATE_TO_FACTORY_SETTING)<<16));
  2028. break;
  2029. #endif
  2030. }
  2031. return 0;
  2032. }
  2033. /////////////////////////////////////////////////////////////////////////////
  2034. // Function name : core_init
  2035. // Purpose : Initializes the core task.
  2036. // Input Parameters : none.
  2037. // Return type : none.
  2038. // Output Parameters: none.
  2039. /////////////////////////////////////////////////////////////////////////////
  2040. static void core_init(void)
  2041. {
  2042. #ifdef _DEBUG_VERILOG
  2043. verilog_print("core_initn");
  2044. #endif //_DEBUG_VERILOG
  2045. #ifdef I77_COMPANION_CHIP
  2046. #ifdef HDCP_TEST
  2047. {
  2048. extern unsigned char bHDCPProducKeys;
  2049. if (!bHDCPProducKeys)
  2050. {
  2051. tr_printf(("HDCP test keys are loadedn"));
  2052. I77_LoadPrivateKeys(FALSE);
  2053. }
  2054. else
  2055. {
  2056. tr_printf(("HDCP production keys are loadedn"));
  2057. I77_LoadPrivateKeys(TRUE);
  2058. }
  2059. }
  2060. #else
  2061. /* Load the I77 HDCP private keys*/
  2062. I77_LoadPrivateKeys(TRUE);
  2063. #endif
  2064. MonitorDetection_Init();
  2065. #endif
  2066. gcs.bScreenSaverOn = FALSE;
  2067. #ifdef TV_GUARDIAN_ENABLE
  2068. Initiazlie_Line21DataBufferPool();
  2069. #endif
  2070. #ifndef NO_WATCHDOG
  2071. ResetWatchdogVars();
  2072. #endif //NO_WATCHDOG
  2073. #ifdef INTEL_C_SERIES_FLASH_TYPE
  2074. asm{cli};
  2075. Init_FLASH_Burner_API();
  2076. asm{sti};
  2077. #endif
  2078. DEC_SDRAMPowerUp();
  2079. // Initialize scratch pad
  2080. sc_Init(0);
  2081. // Restore player settings
  2082. #ifndef  _DEBUG_VERILOG
  2083. PS_Restore();
  2084. #else
  2085. PS_RestoreFactoryDefault();
  2086. #endif
  2087. #ifdef D_USE_VARIABLE_FOR_LIB
  2088. core_varible_init();
  2089. #endif
  2090. #ifdef I77_BRAIN_STORM
  2091. {
  2092. BYTE data;
  2093. I77_ReadBytes(I77_HDE1_STATUS_ADDRESS, 1, &data);
  2094. if( data & I77_HOT_PLUG_DETECT_MASK )
  2095. {
  2096. //gps->prog_inter_select = TRUE;
  2097. if( gps->hd_jpeg_mode_preference == SD_JPEG_MODE )
  2098. {
  2099. gcst.hd_jpeg_mode_preference = SD_JPEG_MODE;
  2100. }
  2101. else
  2102. {
  2103. switch(gps->hd_vid_out_mode)
  2104. {
  2105. case HD_NTSC_IN_OUT_720P:
  2106. case HD_NTSC_IN_OUT_1080I:
  2107. case HD_NTSC_IN_OUT_1024X768:
  2108. case HD_NTSC_IN_OUT_1360X768:
  2109. gcst.hd_jpeg_mode_preference = gps->hd_vid_out_mode;
  2110. break;
  2111. default:
  2112. gcst.hd_jpeg_mode_preference = SD_JPEG_MODE;
  2113. break;
  2114. }
  2115. }
  2116. }
  2117. else
  2118. {
  2119. //gps->prog_inter_select = FALSE;
  2120. gcst.hd_jpeg_mode_preference = SD_JPEG_MODE;
  2121. }
  2122. }
  2123. #endif //I77_BRAIN_STORM
  2124. #ifdef D_SCART_OUTPUT
  2125. // Check g_power_state to decide if need to set 16:9 and 4:3
  2126. if (g_power_state == POWER_SEQUENCE_IN_ON_STATE  || g_power_state == POWER_SEQUENCE_ON_REQUESTED || g_power_state == POWER_SEQUENCE_ON_EJECT)
  2127. {
  2128. if ( PS_TV169 == gps->tv_shape )
  2129. {
  2130. ScartLL_VMOD(SCART_VMOD_16V9);
  2131. }
  2132. else
  2133. {
  2134. ScartLL_VMOD(SCART_VMOD_4V3);
  2135. }
  2136. if ( VID_OUT_RGB == gps->vid_out )
  2137. {
  2138. ScartLL_VFMD(SCART_VFMD_RGB);
  2139. }
  2140. else
  2141. {
  2142. ScartLL_VFMD(SCART_VFMD_CVBS);
  2143. }
  2144. }
  2145. #endif //D_SCART_OUTPUT
  2146. #ifdef AUX_IN_ENABLE
  2147. g_ain_handler_id=-1;
  2148. #endif
  2149. // Call power up only in power up status
  2150. #ifdef DEFAULT_POWER_OFF_STATE
  2151. if (( g_power_state == POWER_SEQUENCE_ON_REQUESTED || g_power_state == POWER_SEQUENCE_ON_EJECT))
  2152. #endif
  2153. {
  2154. DEC_PowerUp();
  2155. }
  2156. #ifdef I77_COMPANION_CHIP
  2157. I77_SetResolution(gps->lastest_hdmi_mode.output_resolution);  //add by wl070505
  2158. #endif
  2159. PE_CD_DisableCGMSData();
  2160. // Initialize scratch pad
  2161. // sc_Init(0);
  2162. // Initialize the Front-Panel
  2163. #ifndef DIRECT_KEY_SCAN//tecobest gxd 20051008
  2164. #ifdef D_USE_LCD
  2165. LCD_InitDisplay();
  2166. #elif !defined(D_NO_VFD)
  2167. VFD_InitDisplay();
  2168. #endif
  2169. #endif
  2170. #ifdef TUNER_ENABLE
  2171. #ifdef D_RDS_SUPPORT
  2172. HAL_InitRDSInterrupt();
  2173. #endif
  2174. DEC_EX_workmode_init();
  2175. #endif
  2176. inport( GPCIO_STATUS ); //BT021703: read Status register 5. This will clear pending IRQs
  2177. ir_init(); /* initialize Remote module, from now on IR events can be issued to UI task */
  2178. #ifdef SPDIF_IN_ENABLE
  2179. DEC_EX_Chips_Init();
  2180. #ifdef SPDIF_IN_CH_SELECT
  2181.         Digital_In_Channel_Select(gps->dig_aud_in_chan);
  2182. #endif
  2183. #endif
  2184. #ifdef TUNER_ENABLE
  2185. if(DVD_WORKMODE != gps->TunerWorkmode)
  2186. {
  2187. DEC_EncoderPowerDown();
  2188. g_power_state = POWER_SEQUENCE_IN_ON_STATE;
  2189. // Display logo and reset loader
  2190. Logo_selectSource(eStartup);
  2191. Logo_display();
  2192. drv_power_down();
  2193. // Install the default handler
  2194. install_core_event_handler( no_disc_fsm );
  2195. ie_send(IE_CORE_SET_WORKMODE);
  2196. return;
  2197. }
  2198. #endif
  2199. #ifndef DEFAULT_POWER_OFF_STATE
  2200. // Display logo and reset loader
  2201. Logo_selectSource(eStartup);
  2202. Logo_display();
  2203. #else
  2204. tr_printf(("g_power_state A: = %02xn", g_power_state));
  2205. if ( g_power_state == POWER_SEQUENCE_ON_REQUESTED || g_power_state == POWER_SEQUENCE_ON_EJECT)
  2206. {
  2207. // Display logo and reset loader
  2208. Logo_selectSource(eStartup);
  2209. Logo_display();
  2210. }
  2211. #endif
  2212. //Set Furore to bypass mode.
  2213. #if D_SUPPORT_SACD && (!defined(AUDIO_DAC_SUPPORT_DSD))
  2214. FuroreSetExternalInputPCMMode();
  2215. #endif
  2216. drv_init();
  2217. #ifdef ENABLE_CHECK_SUM
  2218. if(check_sum() == FALSE)
  2219. {
  2220. while(1)
  2221. {
  2222. usleep(100000L);
  2223. }
  2224. }
  2225. #endif
  2226. #ifndef DEFAULT_POWER_OFF_STATE
  2227. // Install the default handler
  2228. install_core_event_handler( no_disc_fsm );
  2229. g_power_state = POWER_SEQUENCE_IN_ON_STATE;
  2230. #else
  2231. tr_printf(("g_power_state B: = %02xn", g_power_state));
  2232. if ( g_power_state != POWER_SEQUENCE_ON_REQUESTED && 
  2233.  g_power_state != POWER_SEQUENCE_ON_EJECT )
  2234. {
  2235. install_core_event_handler( power_off_fsm);
  2236. // FrankMei_1018_2004: When IR port is GPCIO0
  2237. #ifdef IR_USE_GPCIO0
  2238. outport(IMASK, ~(IMASK_TMR|IMASK_GPCIO0|IMASK_DSP)); // Enable only IR, DSP and timer interrupts
  2239. #else
  2240. outport(IMASK, ~(IMASK_TMR|IMASK_GPCIO7_1|IMASK_DSP)); // Enable only IR, DSP and timer interrupts
  2241. #endif
  2242. //<<<FrankMei_1018_2004
  2243. g_power_state = POWER_SEQUENCE_IN_OFF_STATE;
  2244. gcs.mstate = MST_POWER_OFF;
  2245. #ifndef DIRECT_KEY_SCAN
  2246. ui_fp_update_handler();
  2247. #endif
  2248. gcs.pstate = PST_STOP;
  2249. gcs.cop_mask = COP_EJECT|COP_POWER_OFF;
  2250. drv_power_down(); // the function returns only after making sure the driver is powered down
  2251. I49_ParameterWrite(POWER_CONFIG_ADDR, 0xffff); // Power down 
  2252. I49_ParameterWrite(POWERCONFIG2_ADDR, 0x00db); // Power down (without the MCU and BCI unit)
  2253.     }
  2254. else
  2255. {
  2256. install_core_event_handler( no_disc_fsm );
  2257. g_power_state = POWER_SEQUENCE_IN_ON_STATE;
  2258. }
  2259. #endif
  2260. #if (defined(INTERNAL_KARAOKE) || defined(EXTERNAL_KARAOKE) )
  2261. #ifndef D_KEYSHIFT_SINGLE_KEY
  2262. // Initialize Karaoke
  2263. karKaraokeInit();
  2264. #endif
  2265. #endif
  2266. #ifdef D_ENABLE_HEADPHONE_DETECT
  2267. HeadPhoneDetectionInit();
  2268. #endif
  2269. // Initialize bookmarks
  2270. core_clear_bookmark_info(0); /* Clear all bookmarks */
  2271. #ifdef DIGITAL_AMPLIFIER_ENABLE
  2272. install_core_event_handler( Amplifier_Navigator );
  2273. #endif
  2274. #ifdef TV_GUARDIAN_ENABLE
  2275. tvg_init(0);
  2276. #endif
  2277. #ifdef SUPPORT_KEYS_UPDATE
  2278. _uartOpen();
  2279. timer_service_create(Check_Uart_Rx,(WORD) 10, TIMER_ENABLED|TIMER_REPEAT);
  2280. #endif
  2281. }
  2282. /////////////////////////////////////////////////////////////////////////////
  2283. // Function name : core_apply_settings
  2284. // Purpose : Apply the user setup.
  2285. // Input Parameters : setting - The setting to be applied.
  2286. //   value - The value of the setting.
  2287. // Return type : none.
  2288. // Output Parameters: none.
  2289. /////////////////////////////////////////////////////////////////////////////
  2290. static void core_apply_settings(WORD setting, WORD value)
  2291. {
  2292. #ifdef I77_COMPANION_CHIP
  2293. if (PS_UPDATE_HD_VID_OUT == setting)
  2294. {
  2295. I77_SetResolution(value);
  2296. return;
  2297. }
  2298. #endif
  2299. /* Audio Settings to Apply */
  2300. if (setting <= 0xFF)
  2301. {
  2302. DEC_ApplyAudioSettings(setting, value);
  2303. }
  2304. /* Video Settings to Apply */
  2305. if ((setting >= 0x100) && (setting <= 0x1FF))
  2306. {
  2307. DEC_ApplyVideoSettings(setting);
  2308. }
  2309. /* General Settings to Apply */
  2310. if ((setting >= 0x200) && (setting <= 0x2FF)) 
  2311. {
  2312. dbg_printf(("WARNING: core_apply_settings(): Unsupported setting - %xn", setting));
  2313. }
  2314. }
  2315. /////////////////////////////////////////////////////////////////////////////
  2316. // Function name : run_all_core_handlers
  2317. // Purpose : Run all of the core handlers with the given event.
  2318. // Input Parameters : op - Handler request (ENTER/EXIST)
  2319. //   evt - Event ID.
  2320. //   param - Event parameter.
  2321. //   value - The value of the setting.
  2322. // Return type : none.
  2323. // Output Parameters: none.
  2324. /////////////////////////////////////////////////////////////////////////////
  2325. static void run_all_core_handlers(HDLR_OP op, EVENT evt, void *param)
  2326. {
  2327. int i;
  2328. /* Broadcast event to all active handlers */
  2329. for (i=0; i < MAX_CORE_HANDLER; i++)
  2330. {
  2331. if (NULL != pfn_core_handler[i])
  2332. {
  2333. (*pfn_core_handler[i])(op, evt, param); 
  2334. }
  2335. }
  2336. }
  2337. /////////////////////////////////////////////////////////////////////////////
  2338. // Function name : run_all_ui_handlers
  2339. // Purpose : Run all of the UI handlers with the given event.
  2340. // Input Parameters : op - Handler request (ENTER/EXIST)
  2341. //   evt - Event ID.
  2342. //   param - Event parameter.
  2343. //   value - The value of the setting.
  2344. // Return type : none.
  2345. // Output Parameters: none.
  2346. /////////////////////////////////////////////////////////////////////////////
  2347. static void run_all_ui_handlers(HDLR_OP op, EVENT evt, void *param)
  2348. {
  2349. int i;
  2350. /* Broadcast event to all active handlers */
  2351. for (i=0; i<MAX_UI_HANDLER; i++)
  2352. {
  2353. if (pfn_ui_handler[i])
  2354. {
  2355. (*pfn_ui_handler[i])(op, evt, param); 
  2356. }
  2357. }
  2358. }
  2359. /////////////////////////////////////////////////////////////////////////////
  2360. // Function name : install_core_event_handler
  2361. // Purpose : Installs the given handler as a core one.
  2362. // Input Parameters : new_handler - The handler function.
  2363. // Return type : The handler ID if successful, otherwise -1.
  2364. // Output Parameters: none.
  2365. /////////////////////////////////////////////////////////////////////////////
  2366. int install_core_event_handler( int (*new_handler)(HDLR_OP Op, EVENT Event, void *Param))
  2367. {
  2368. int i;
  2369. /* Search for an empty slot */
  2370. for (i=0; i<MAX_CORE_HANDLER; i++) 
  2371. {
  2372. if (NULL == pfn_core_handler[i]) 
  2373. {
  2374. pfn_core_handler[i]= new_handler;
  2375. (*new_handler)(HDLR_ENTER, 0, NULL);
  2376. break;
  2377. }
  2378. }
  2379. if (MAX_CORE_HANDLER == i)
  2380. {
  2381. tr_printf(("FATAL: Could not install core handlern"));
  2382. return -1;
  2383. }
  2384. return i;
  2385. }
  2386. /////////////////////////////////////////////////////////////////////////////
  2387. // Function name : remove_core_event_handler
  2388. // Purpose : Removes the given core handler.
  2389. // Input Parameters : handler_id - The handler ID to be removed.
  2390. // Return type : none.
  2391. // Output Parameters: none.
  2392. /////////////////////////////////////////////////////////////////////////////
  2393. void remove_core_event_handler( int handler_id )
  2394. {
  2395. if (NULL == pfn_core_handler[handler_id])
  2396. {
  2397. tr_printf(("WARNING: Attempt to remove non-existing core handlern"));
  2398. return;
  2399. }
  2400. (*pfn_core_handler[handler_id])(HDLR_EXIT, 0, NULL);
  2401. pfn_core_handler[handler_id]= NULL;
  2402. }
  2403. /////////////////////////////////////////////////////////////////////////////
  2404. // Function name : install_ui_event_handler
  2405. // Purpose : Installs the given handler as a UI one.
  2406. // Input Parameters : new_handler - The handler function.
  2407. // Return type : The handler ID if successful, otherwise -1.
  2408. // Output Parameters: none.
  2409. /////////////////////////////////////////////////////////////////////////////
  2410. int install_ui_event_handler( int (*new_handler)(HDLR_OP Op, EVENT Event, void *Param))
  2411. {
  2412. int i;
  2413. /* Search for an empty slot */
  2414. for (i=0; i < MAX_UI_HANDLER; i++) 
  2415. {
  2416. if (NULL == pfn_ui_handler[i])
  2417. {
  2418. pfn_ui_handler[i]= new_handler;
  2419. (*new_handler)(HDLR_ENTER, 0, NULL);
  2420. break;
  2421. }
  2422. }
  2423. if (MAX_UI_HANDLER == i)
  2424. {
  2425. tr_printf(("FATAL: Could not install UI handlern"));
  2426. return -1;
  2427. }
  2428. return i;
  2429. }
  2430. /////////////////////////////////////////////////////////////////////////////
  2431. // Function name : remove_ui_event_handler
  2432. // Purpose : Removes the given UI handler.
  2433. // Input Parameters : handler_id - The handler ID to be removed.
  2434. // Return type : none.
  2435. // Output Parameters: none.
  2436. /////////////////////////////////////////////////////////////////////////////
  2437. void remove_ui_event_handler( int handler_id )
  2438. {
  2439. if (NULL == pfn_ui_handler[handler_id])
  2440. {
  2441. tr_printf(("WARNING: Attempt to remove non-existing UI handlern"));
  2442. return;
  2443. }
  2444. (*pfn_ui_handler[handler_id])(HDLR_EXIT, 0, NULL );
  2445. pfn_ui_handler[handler_id] = NULL;
  2446. }
  2447. /////////////////////////////////////////////////////////////////////////////
  2448. // Function name : send_tick
  2449. // Purpose : Sends the requested tick event to the UI/Core task.
  2450. // Input Parameters : tick_event - the event to send.
  2451. // Return type : none.
  2452. // Output Parameters: none.
  2453. // Remarks : The function makes sure not to overload the mail boxes
  2454. //   with too many tick events if the previously sent tick
  2455. //   events were not already handled.
  2456. /////////////////////////////////////////////////////////////////////////////
  2457. void send_tick( EVENT tick_event )
  2458. {
  2459. switch (tick_event)
  2460. {
  2461. #ifdef TUNER_ENABLE
  2462.        case IE_CORE_TICK_20:
  2463. TICK_CHECK_AND_SEND( wcount_core_tick_20MS, rcount_core_tick_20MS, tick_event );
  2464. break;
  2465. #endif
  2466.  case IE_CORE_TICK_100:
  2467. TICK_CHECK_AND_SEND( wcount_core_tick_100MS, rcount_core_tick_100MS, tick_event );
  2468. break;
  2469. case IE_CORE_TICK_200:
  2470. TICK_CHECK_AND_SEND( wcount_core_tick_200MS, rcount_core_tick_200MS, tick_event );
  2471. break;
  2472. case IE_CORE_TICK_ONE_SEC:
  2473. TICK_CHECK_AND_SEND( wcount_core_tick_1SEC, rcount_core_tick_1SEC, tick_event );
  2474. #ifdef KARAOKE_SWITCH_PATCH
  2475. {
  2476. static BYTE counter = 0;
  2477. if((g_switch_karaoke) && (counter++ > 10))
  2478. {
  2479. g_switch_karaoke = FALSE;
  2480. counter = 0;
  2481. }
  2482. }
  2483. #endif
  2484. break;
  2485. case IE_UI_TICK_100:
  2486. TICK_CHECK_AND_SEND( wcount_ui_tick_100MS, rcount_ui_tick_100MS, tick_event );
  2487. break;
  2488. case IE_UI_TICK_200:
  2489. TICK_CHECK_AND_SEND( wcount_ui_tick_200MS, rcount_ui_tick_200MS, tick_event );
  2490. break;
  2491. case IE_UI_TICK_ONE_SEC:
  2492. TICK_CHECK_AND_SEND( wcount_ui_tick_1SEC, rcount_ui_tick_1SEC, tick_event );
  2493. break;
  2494. }
  2495. }
  2496. #ifdef PANEL_SKIP_FAST_COMBINE
  2497. /////////////////////////////////////////////////////////////////////////////
  2498. // Function name : UpdateKeyPressStatus
  2499. // Purpose :
  2500. // Input Parameters :
  2501. // Return type : none.
  2502. // Output Parameters: none.
  2503. // Remarks :
  2504. /////////////////////////////////////////////////////////////////////////////
  2505. void UpdateKeyPressStatus(void)
  2506. {
  2507. gks.mKeyPressed = NO_KEY_PRESS_CHECK_TIME;
  2508. }
  2509. #endif
  2510. /////////////////////////////////////////////////////////////////////////////
  2511. // Function name : send_remote_event
  2512. // Purpose : Sends an remote control event to the UI task.
  2513. // Input Parameters : keycode - The requested IR key code.
  2514. // Return type : none.
  2515. // Output Parameters: none.
  2516. // Remarks : The function is called from IR ISR.
  2517. /////////////////////////////////////////////////////////////////////////////
  2518. extern CONST WORD g_ir_power_key_code;
  2519. extern CONST WORD g_ir_eject_key_code;//tecobest gxd 20051024
  2520. void send_remote_event( WORD keycode )
  2521. {
  2522. #ifdef PANEL_SKIP_FAST_COMBINE
  2523. UpdateKeyPressStatus();
  2524. if ( !(keycode & REMOTE_KEY_REPEATED) )
  2525. {
  2526. uLastUnRepeat = uTickCount;
  2527. gks.bKeyPressedLongTime = 0;
  2528. }
  2529. else 
  2530. {
  2531. uLastRepeat = uTickCount;
  2532. if ( (uLastRepeat - uLastUnRepeat) > THREE_SECOND )
  2533. {
  2534. gks.bKeyPressedLongTime = 1;
  2535. }
  2536. }
  2537. #endif
  2538. if ( (g_cUICoreMsgSent) > KER_UI_CORE_MSG_MAX)
  2539. {
  2540. /*
  2541. here, there are many messages in Core queue waiting for process,
  2542. if continuously send IR msg may cause queue overflow
  2543. so dispose IR message
  2544. */
  2545. //dbg_printf(("WARNING: IR msg is disposed:%x.n",g_cUICoreMsgSent));
  2546. return ;
  2547. }
  2548. /* Allow up to 3 IR events to be queued */
  2549. //if (CIRCULAR_LEVEL_BYTE( wcount_ir_keycode, rcount_ir_keycode) < MAX_IR_EVENT_QUEUED)//tecobest gxd 20051024
  2550. if ((CIRCULAR_LEVEL_BYTE( wcount_ir_keycode, rcount_ir_keycode) < MAX_IR_EVENT_QUEUED)||
  2551. (keycode==g_ir_eject_key_code)||(keycode==g_ir_power_key_code))
  2552. {
  2553. tr_printf(("keycount:%2xn",rcount_ir_keycode));
  2554. wcount_ir_keycode++;
  2555. k_ie_send_ex(IE_UI_REMOTE_INPUT,(void *) keycode);
  2556. }
  2557. }
  2558. /////////////////////////////////////////////////////////////////////////////
  2559. // Function name : acknowledge_event
  2560. // Purpose : Post processing after handling an event.
  2561. // Input Parameters : event - The last handled event.
  2562. // Return type : none.
  2563. // Output Parameters: none.
  2564. /////////////////////////////////////////////////////////////////////////////
  2565. static void acknowledge_event( EVENT event )
  2566. {
  2567. switch (event)
  2568. {
  2569. #ifdef TUNER_ENABLE
  2570.        case IE_CORE_TICK_20:
  2571.         rcount_core_tick_20MS++;
  2572.         break;
  2573. #endif
  2574. case IE_CORE_TICK_100:
  2575. rcount_core_tick_100MS++;
  2576. break;
  2577. case IE_CORE_TICK_200:
  2578. rcount_core_tick_200MS++;
  2579. break;
  2580. case IE_CORE_TICK_ONE_SEC:
  2581. rcount_core_tick_1SEC++;
  2582. break;
  2583. case IE_UI_TICK_100:
  2584. rcount_ui_tick_100MS++;
  2585. break;
  2586. case IE_UI_TICK_200:
  2587. rcount_ui_tick_200MS++;
  2588. break;
  2589. case IE_UI_TICK_ONE_SEC:
  2590. rcount_ui_tick_1SEC++;
  2591. break;
  2592. case IE_UI_REMOTE_INPUT:
  2593. rcount_ir_keycode++;
  2594. tr_printf(("ircount:%2xn",rcount_ir_keycode));
  2595. break;
  2596. }
  2597. if ( event & EVENT_CORE_FLAG )
  2598. // msg send with limit
  2599. //if (IE_CORE_PLAY_FILE == event)
  2600. //{
  2601. // if ( g_cPlayFileMsgSent )
  2602. // {
  2603. // g_cPlayFileMsgSent--;
  2604. // g_cUICoreMsgSent--;
  2605. // }
  2606. // else
  2607. // ASSERT(0);
  2608. //}
  2609. //else
  2610. //{
  2611. if ( g_cUICoreMsgSent )
  2612. g_cUICoreMsgSent--;
  2613. else
  2614. ASSERT( g_cUICoreMsgSent > 0 );
  2615. //}
  2616. //dbg_printf(("nr ACK EVT:%x ALL: %x nr",event,g_cUICoreMsgSent));
  2617. }
  2618. }
  2619. /////////////////////////////////////////////////////////////////////////////
  2620. // Function name : query_core
  2621. // Purpose : Provides information regarding the core task.
  2622. // Input Parameters : cq - The information required (query).
  2623. //   pvInput - The input parameters for the query.
  2624. // Return type : pvOutput - The query result.
  2625. // Output Parameters: none.
  2626. /////////////////////////////////////////////////////////////////////////////
  2627. void query_core( CORE_QUERY cq, void *pvInput, void *pvOutput )
  2628. {
  2629.   switch ( cq )
  2630.   {
  2631. case CQ_AVAILABLE_CHANNELS:
  2632. {
  2633. DWORD dwMaxChannels = (DWORD) 6L;
  2634. DWORD *pdw = (DWORD *) pvOutput;
  2635. dbg_printf(("CQ_AVAILABLE_CHANNELS:n"));
  2636. *pdw = dwMaxChannels;
  2637. }
  2638. break;
  2639. case CQ_AVAILABLE_CHAPTERS:
  2640.   {
  2641. DWORD dwTitle = (DWORD) pvInput;
  2642. DWORD *pdw = (DWORD *) pvOutput;
  2643. WORD wMaxChapters = (WORD) 99L;
  2644. dbg_printf(("CQ_AVAILABLE_CHAPTERS: Title is %iln", dwTitle));
  2645. if ( g_disc_type == DEC_DISC_TYPE_DVD_VIDEO )
  2646. {
  2647. get_total_chapters( (WORD) dwTitle, &wMaxChapters );
  2648. }
  2649. #ifdef DVD_VR_SUPPORT
  2650. else if( g_disc_type == DEC_DISC_TYPE_DVD_VR )
  2651. {
  2652. S_RTR_PGI pgi;
  2653. UINT16 i,startcell = 0;
  2654. if(!gns.dvdvr.isPlaylist)
  2655. {
  2656. for(i = 1;i < dwTitle; i++)
  2657. {
  2658. VR_get_PGI(i,&pgi);
  2659. startcell += pgi.C_Ns;
  2660. }
  2661. VR_get_PGI((UINT8)dwTitle,&pgi);
  2662. wMaxChapters = VR_get_Title_Total_EPs(startcell+1,startcell + pgi.C_Ns);
  2663. }
  2664. else
  2665. wMaxChapters = VR_get_Title_Total_EPs(1,gns.dvdvr.pgci.CI_Ns);
  2666. }
  2667. #endif
  2668. #ifdef DVD_AUDIO_SUPPORT
  2669. else if(g_disc_type == DEC_DISC_TYPE_DVD_AUDIO)
  2670. {
  2671. wMaxChapters=SI_DVDA_AVAILABLE_TRACKS(dwTitle);
  2672. }
  2673. #endif
  2674. #if D_SUPPORT_SACD
  2675. else if(g_disc_type == DEC_DISC_TYPE_SACD)
  2676. {
  2677. // Return max sacd track num in active area
  2678. wMaxChapters=Nav_SACD_Get_Num_Of_Tracks(SACD_ACTIVE_AREA);
  2679. }
  2680. #endif 
  2681. else if ( (g_disc_type == DEC_DISC_TYPE_SVCD) || (g_disc_type == DEC_DISC_TYPE_VCD) )
  2682. {
  2683. #ifdef EXINO2
  2684. // Handle numerical selection for PBC.
  2685. if ( PM_IsPBC(PM_GetPlaybackMode()) )
  2686. {
  2687. if ( gns.svcd.m_CurrPosition.ListType == SelectionList )
  2688. {
  2689. wMaxChapters = (WORD) ( gns.svcd.m_CurrList.SelectionList.uSelectionBase + gns.svcd.m_CurrList.SelectionList.uSelectionsCnt - 1);
  2690. }
  2691. }
  2692.             else
  2693. #endif // EXINO2            
  2694. wMaxChapters = SI_SVCD_MAX_TRACK_NUM;
  2695. }
  2696. else if (g_disc_type == DEC_DISC_TYPE_CDDA)
  2697. {
  2698. wMaxChapters = SI_CDDA_MAX_TRACK_NUM;
  2699. }
  2700. else if ( IS_DISC_DATA_ROM ||
  2701.     (g_disc_type == DEC_DISC_TYPE_PICTURE_CD) )
  2702. {
  2703. wMaxChapters = SI_CLIPS_MAX_CLIP_NUM;
  2704. }
  2705. *pdw = (DWORD) wMaxChapters;
  2706.   }
  2707.   break;
  2708. case CQ_VALID_ZOOM:
  2709.   {
  2710. BYTE* pdw = (BYTE *)pvOutput;
  2711.   
  2712. dbg_printf(("CQ_VALID_ZOOM: %i (%il)n", (int) pvInput, *pdw));
  2713. *pdw = DEC_CheckAvailableManualZoom((int) pvInput);
  2714. }
  2715.   break;
  2716. #ifdef EZVIEW_ENABLED
  2717.   case CQ_GET_NEXT_EZVIEW_MODE: // Get Next EZView mode.
  2718.   {
  2719. BYTE* pdw = (BYTE *)pvOutput;
  2720. if(gcst.mUseManualScaling)
  2721. {
  2722. *pdw = DEC_GetNextEZViewMode();
  2723. }
  2724.   }
  2725.   break;
  2726.   case CQ_GET_EZVIEW_MODE: // Get current EZView mode.
  2727.   {
  2728. BYTE* pdw = (BYTE *)pvOutput;
  2729. if(gcst.mUseManualScaling)
  2730. {
  2731. *pdw = DEC_GetEZViewMode();
  2732. }
  2733.   }
  2734.   break;
  2735. #endif   
  2736. #ifdef S1_GUI
  2737. case CQ_WIDESCREEN_MODE:
  2738. #ifdef EZVIEW_ENABLED        
  2739. // In case of EZ View mode, needs to know Output config even with PST_STILL state
  2740. if(gcs.pstate != PST_STOP)
  2741. #endif
  2742.   {
  2743. DWORD *pdw = (DWORD *) pvOutput;
  2744. WORD wWidescreenMode;
  2745. wWidescreenMode = sprm_Get( P_CFG_VIDEO ) & 0x0300;
  2746. #if 0
  2747. switch(wWidescreenMode)
  2748. {
  2749.   case 0x0000:
  2750.   wWidescreenMode = PS_TV_FULL_SCREEN;
  2751.   break;
  2752.   case 0x0100:
  2753.   wWidescreenMode = PS_TV43PS;
  2754.   break;
  2755.   case 0x0200:
  2756.   wWidescreenMode = PS_TV43LB;
  2757.   break;
  2758.   default:
  2759.   dbg_printf(("query_core(): Warning: unknown video moden"));
  2760. }
  2761. #endif 
  2762. dbg_printf(("CQ_WIDESCREEN_MODE: %in", wWidescreenMode));
  2763. *pdw = (DWORD) wWidescreenMode;
  2764.   }
  2765.   break;
  2766. #ifdef EXINO2
  2767. case CQ_CAN_SET_REPEATAB_B:
  2768. {
  2769. BOOL *pb = (BOOL *) pvOutput;
  2770. // Check A point time with current time
  2771. switch (g_disc_type)
  2772. {
  2773. case DEC_DISC_TYPE_DVD_VIDEO:
  2774. #ifdef EXINO2
  2775. if ( SI_DVD_ELAPSED_TIME >= (gns.dvd.dwBookMarkATime +5) )
  2776. #else // EXINO2
  2777. if ( SI_DVD_ELAPSED_TIME >= (BOOKMARK_TIME(4) +5) )
  2778. #endif // EXINO2
  2779. {
  2780. *pb = TRUE;
  2781. }
  2782. else
  2783. {
  2784. *pb = FALSE;
  2785. }
  2786. break;
  2787. #ifdef S1_GUI
  2788. case DEC_DISC_TYPE_CDROM:
  2789. // ML Enable mpeg repeat A-B
  2790. if (IS_CLIPS_TYPE_MPEG4 != 1)
  2791. {
  2792. break;
  2793. }
  2794. #endif
  2795. #if D_SUPPORT_SACD
  2796. case DEC_DISC_TYPE_SACD:
  2797. *pb = TRUE;
  2798.              break;
  2799. #endif
  2800. case DEC_DISC_TYPE_SVCD:
  2801. case DEC_DISC_TYPE_VCD:
  2802. case DEC_DISC_TYPE_CDDA:
  2803. {
  2804. WORD curr_time = PE_CD_GetCurrentLocation()/75;
  2805. if (g_disc_type == DEC_DISC_TYPE_VCD)
  2806. {
  2807. curr_time -= 2;
  2808. }
  2809. else if (g_disc_type == DEC_DISC_TYPE_SVCD)
  2810. {
  2811. curr_time -= 3;
  2812. }
  2813. if ( curr_time >= (BOOKMARK_TIME(4) + (( g_disc_type == DEC_DISC_TYPE_SVCD ) ? 10: 5)) )
  2814. {
  2815. *pb = TRUE;
  2816. }
  2817. else
  2818. {
  2819. *pb = FALSE;
  2820. }
  2821. break;
  2822.         }
  2823.         }
  2824. }
  2825. break;
  2826. case CQ_CAN_GOTO_BOOKMARK:
  2827. {
  2828. BOOL *pb = (BOOL *) pvOutput;
  2829. // Way to avoid the player getting stuck when user presses twice the PLAY
  2830. // button to go to a mark.
  2831. switch (g_disc_type)
  2832. {
  2833. case DEC_DISC_TYPE_DVD_VIDEO:
  2834. if ( (SI_DVD_ELAPSED_TIME >= (BOOKMARK_TIME((BYTE)pvInput) + 3)) &&
  2835.  (gcs.pstate != PST_STILL) ) // If try to go to mark while STILL state : system gets stuck
  2836. {
  2837. *pb = TRUE;
  2838. }
  2839. else
  2840. {
  2841. *pb = FALSE;
  2842. }
  2843. break;
  2844. case DEC_DISC_TYPE_SVCD:
  2845. case DEC_DISC_TYPE_VCD:
  2846. case DEC_DISC_TYPE_CDDA:
  2847. {
  2848. WORD curr_time = PE_CD_GetCurrentLocation()/75;
  2849. if (g_disc_type == DEC_DISC_TYPE_VCD)
  2850. {
  2851. curr_time -= 2;
  2852. }
  2853. else if (g_disc_type == DEC_DISC_TYPE_SVCD)
  2854. {
  2855. curr_time -= 3;
  2856. }
  2857. if ( curr_time >= (BOOKMARK_TIME((BYTE)pvInput) + (( g_disc_type == DEC_DISC_TYPE_SVCD ) ? 7: 5)) )
  2858. {
  2859. *pb = TRUE;
  2860. }
  2861. else
  2862. {
  2863. *pb = FALSE;
  2864. }
  2865. break;
  2866. }
  2867. }
  2868.   }
  2869.   break;
  2870. //  Prevent skipping back from beginning or forward from end
  2871. case CQ_CAN_SKIP_PREVIOUS:
  2872. {
  2873. BOOL *pb = (BOOL *) pvOutput;
  2874. *pb = TRUE;
  2875. if ( ( g_disc_type == DEC_DISC_TYPE_SVCD ) || ( g_disc_type == DEC_DISC_TYPE_VCD ) )
  2876. {
  2877. *pb = SVCD_Nav_Check_UOP(IE_CORE_PREVIOUS_CHAPTER, (void *)NULL);
  2878. }
  2879. if (g_disc_type == DEC_DISC_TYPE_CDDA)
  2880. {
  2881. *pb = CDDA_Nav_Check_UOP(IE_CORE_PREVIOUS_CHAPTER,( void *)NULL);
  2882. }
  2883. #ifdef EXINO2
  2884. if (IS_DISC_TYPE_DVD)
  2885. #else 
  2886. if (g_disc_type == DEC_DISC_TYPE_DVD_VIDEO)
  2887. #endif 
  2888. {
  2889. *pb = DVD_Nav_Check_UOP(IE_CORE_PREVIOUS_CHAPTER,( void *)NULL);
  2890. }
  2891. }
  2892. break;
  2893. case CQ_CAN_SKIP_NEXT:
  2894. {
  2895. BOOL *pb = (BOOL *) pvOutput;
  2896. *pb = TRUE;
  2897. if ( ( g_disc_type == DEC_DISC_TYPE_SVCD ) || ( g_disc_type == DEC_DISC_TYPE_VCD ) )
  2898. {
  2899. *pb = SVCD_Nav_Check_UOP(IE_CORE_NEXT_CHAPTER, (void *)NULL);
  2900. }
  2901. if  (g_disc_type == DEC_DISC_TYPE_CDDA)
  2902. {
  2903. *pb = CDDA_Nav_Check_UOP(IE_CORE_NEXT_CHAPTER,( void *)NULL);
  2904. }
  2905. if (g_disc_type == DEC_DISC_TYPE_DVD_VIDEO)
  2906. {
  2907. *pb = DVD_Nav_Check_UOP(IE_CORE_NEXT_CHAPTER,( void *)NULL);
  2908. }
  2909.   }
  2910.   break;
  2911. #endif // EXINO2
  2912. #ifdef S1_GUI
  2913. case CQ_ONE_SEQUENTIAL_PGC_TITLE:
  2914. {
  2915. // Check if it is one sequential pgc title or not.
  2916.   BOOL bOneSequentialPgc = FALSE;
  2917.   BOOL *pb = (BOOL *) pvOutput;
  2918.   if ( g_disc_type == DEC_DISC_TYPE_DVD_VIDEO )
  2919.   {
  2920.   WORD wTitleNum = (WORD) pvInput;
  2921. printf("n check if it is one sequential pgc title or not!!!n "); 
  2922.   get_one_sequential_pgc( wTitleNum, &bOneSequentialPgc );
  2923.   }
  2924.   *pb = bOneSequentialPgc;
  2925. }
  2926. break;
  2927. #endif
  2928. #endif // S1_GUI
  2929.      
  2930. default:
  2931. tr_printf(("WARNING: query_core() - Undefined query type (0x%04x)n", cq));
  2932.   break;
  2933.   }
  2934. }
  2935. /////////////////////////////////////////////////////////////////////////////
  2936. // Function name : core_report_error
  2937. // Purpose : Reporting an error to the UI task by the core.
  2938. // Input Parameters : event - The error event to report.
  2939. //   pvParam - The event parameters.
  2940. // Return type : none.
  2941. // Output Parameters: none.
  2942. /////////////////////////////////////////////////////////////////////////////
  2943. void core_report_error( EVENT event, void *pvParam )
  2944. {
  2945.   if ( event == IE_UI_REPORT_ERROR )
  2946.   {
  2947. ie_send_ex( event, pvParam );
  2948.   }
  2949.   dbg_printf(("core_report_error(): event: %04x, pvParam: %08lxn", event, (long) pvParam));
  2950.   gcs.mLastError = (unsigned long) pvParam;
  2951. }
  2952. /////////////////////////////////////////////////////////////////////////////
  2953. // Function name : core_20ms_tick_handler
  2954. // Purpose : The handler for 20ms events recieved from io_hal.
  2955. // Input Parameters : none.
  2956. // Return type : none.
  2957. // Output Parameters: none.
  2958. /////////////////////////////////////////////////////////////////////////////
  2959. void core_20ms_tick_handler (void)
  2960. {
  2961. static int tick_counter=0;
  2962. static int tick_100ms=0;
  2963. /* Check if it is disabled (UI task is not initialized yet) */
  2964. if (FALSE == g_core_20ms_tick_handler_enabled) 
  2965. {
  2966.    return;
  2967. }
  2968. #ifdef TUNER_ENABLE
  2969.    if (RADIO_WORKMODE == gps->TunerWorkmode)
  2970.    {
  2971. send_tick(IE_CORE_TICK_20);
  2972.    }
  2973. #endif
  2974. #ifdef REMOTE_ISR_MONITOR   
  2975. if(ir_interval)
  2976. {
  2977. ir_interval --;
  2978. }
  2979. #endif
  2980. tick_counter++;
  2981. /* Check if we reached a 100ms */
  2982. if (tick_counter >= 5)
  2983. {
  2984. tick_100ms++;
  2985. tick_counter = 0;
  2986. #ifdef SCREEN_SAVER
  2987. if(gcs.bScreenSaverOn)
  2988. {
  2989. send_tick(IE_CORE_TICK_100);
  2990. }
  2991. #endif
  2992. /* Notify UI tasks */
  2993. send_tick(IE_UI_TICK_100);
  2994. /* Check if we ellapsed a 200msec */
  2995. if ( !(tick_100ms & 1) )
  2996. {
  2997. send_tick(IE_CORE_TICK_200);
  2998. send_tick(IE_UI_TICK_200);
  2999. }
  3000. /* Check if we ellapsed a second */
  3001. if (tick_100ms >= 10)
  3002. {
  3003. send_tick(IE_CORE_TICK_ONE_SEC);
  3004. send_tick(IE_UI_TICK_ONE_SEC);
  3005. tick_100ms = 0;
  3006. // <<< Stephane.Hollande.032304:Fix NMI problem with fast Paradigm communication
  3007. #if defined(__PDREMOTE__) && !defined(NO_UART_BUG)
  3008. if (inport(SER0_CON) & SER_TMODE) // Test if serial port is enabled
  3009. {
  3010. static unsigned tick_1s = 0;
  3011.             
  3012. // There is a bug in the core or the core initialization that
  3013. // causes the UART to sleep if not used every 20 seconds. This fix 
  3014. // sends a null PDREMOTE command through the port to keep it alive.
  3015. // Otherwise PDREMOTE software and NMI breakpoints stop working.
  3016. if (++tick_1s == 20) 
  3017. {
  3018. tick_1s = 0 ;
  3019. // compare to cpuv186tserio.c#Putch
  3020. // but explicit for PDREMOTE's COMM port 0
  3021. while (!(inport(SER0_STS) & SER_THRE));
  3022. /* Write the character to the transmit buffer */
  3023. outport(SER0_TDATA, 0xFD) ;
  3024. }            
  3025. }
  3026. #endif defined(__PDREMOTE__) && !defined(NO_UART_BUG)         
  3027. // Stephane.Hollande.032304 >>>
  3028. }
  3029. }
  3030. }
  3031. /////////////////////////////////////////////////////////////////////////////
  3032. // Function name : core_clear_bookmark_info
  3033. // Purpose : Clear a bookmark.
  3034. // Input Parameters : bookmark_num - the book mark to clear.
  3035. // Return type : none.
  3036. // Output Parameters: none.
  3037. // Remarks : If the input is 0, all bookmarks are cleared.
  3038. /////////////////////////////////////////////////////////////////////////////
  3039. void core_clear_bookmark_info( int bookmark_num )
  3040. {
  3041. if (bookmark_num)
  3042. {
  3043. gcs.mBookmarkTime[bookmark_num-1] = EMPTY_BOOKMARK;
  3044. }
  3045. else
  3046. {
  3047. #ifdef SUPPORT_FIVE_DVD_BOOKMARKS
  3048. gcs.mBookmarkTime[0] = gcs.mBookmarkTime[1] = gcs.mBookmarkTime[2] = 
  3049.  gcs.mBookmarkTime[3] = gcs.mBookmarkTime[4] = EMPTY_BOOKMARK;
  3050. #else
  3051. gcs.mBookmarkTime[0] = gcs.mBookmarkTime[1] = gcs.mBookmarkTime[2] = EMPTY_BOOKMARK;
  3052. #endif
  3053. }
  3054. }
  3055. /////////////////////////////////////////////////////////////////////////////
  3056. // Function name : core_set_bookmark_info
  3057. // Purpose : Set a book mark.
  3058. // Input Parameters : bookmark_num - the book mark to set.
  3059. //   time_in_sec - The time of the bookmark.
  3060. // Return type : none.
  3061. // Output Parameters: none.
  3062. /////////////////////////////////////////////////////////////////////////////
  3063. void core_set_bookmark_info( int bookmark_num, WORD time_in_sec )
  3064. {
  3065. gcs.mBookmarkTime[bookmark_num-1] = time_in_sec;
  3066. }
  3067. #ifdef EXINO2
  3068. /////////////////////////////////////////////////////////////////////////////
  3069. // Function name : get_language_index
  3070. // Purpose : Returns language index according to PS.H LANGUAGE_SETTINGS.
  3071. // Input Parameters : 
  3072. // Return type : none.
  3073. // Output Parameters: none.
  3074. // Remarks : purpose is to display language stream for DVD 
  3075. //   subtitle and audio Function is mapping LCD to OSD
  3076. //   language index returns -1 if not known.
  3077. /////////////////////////////////////////////////////////////////////////////
  3078. int get_language_index( WORD lcd )
  3079. {
  3080. int i = 0;
  3081. while(( g_language_code_array[i]!=lcd ) && (g_language_code_array[i]))
  3082. i++;
  3083. return ( g_language_code_array[i] ? i:-1 );
  3084. }
  3085. #endif // EXINO2
  3086. #ifdef TV_GUARDIAN_ENABLE
  3087. /////////////////////////////////////////////////////////////////////////////
  3088. // Function name : Initiazlie_Line21DataBufferPool
  3089. // Purpose :
  3090. // Input Parameters : none.
  3091. // Return type : none.
  3092. // Output Parameters: none.
  3093. /////////////////////////////////////////////////////////////////////////////
  3094. static void Initiazlie_Line21DataBufferPool(void)
  3095. {
  3096. BYTE temp;
  3097. for (temp=0; temp<NUM_OF_LINE21DATA_BUFFER_POOL; temp++)
  3098. {
  3099. Line21DataBufferPool[temp].GopCounter = 0xFF;
  3100. Line21DataBufferPool[temp++].DataLength = 0;
  3101. }
  3102. for (temp=0; temp<NUM_OF_LINE21DATASTRUC; temp++)
  3103. {
  3104. Line21DataStruc[temp].DataLength = 0;
  3105. Line21DataStruc[temp].GopCounter = 0xFF;
  3106. }
  3107. for (temp=0; temp<LINE21MUTEQUEUESIZE; temp++)
  3108. {
  3109. Line21MuteQueue[temp].mGOP = 0;
  3110. Line21MuteQueue[temp].mCmd = 0;
  3111. Line21MuteQueue[temp].mOffset = 0xF;
  3112. }
  3113. gLine21MuteQueue_Read = 0xFF;
  3114. gLine21MuteQueue_Write = 0xFF;
  3115. gLine21DataBufferPool_Read = 0xFF;
  3116. gLine21DataBufferPool_Write = 0xFF;
  3117. gLine21DataStruc_Write = 0xFF;
  3118. gLine21DataStruc_Read = 0xFF;
  3119. #ifdef _DEBUG
  3120. datain_session_id = 0x00;
  3121. #endif
  3122. }
  3123. #endif //TV_GUARDIAN_ENABLE
  3124. //<<<SeanLiu_0902_2004
  3125. #if 0//def AUDIO_IN_SUPPORT  //del by wl092304
  3126. /////////////////////////////////////////////////////////////////////////////
  3127. // Function name : ain_core_event_handler
  3128. // Purpose :
  3129. // Input Parameters : 
  3130. // Return type : none.
  3131. // Output Parameters: none.
  3132. /////////////////////////////////////////////////////////////////////////////
  3133. static int ain_core_event_handler(HDLR_OP op, EVENT evt, void *param)
  3134. {
  3135. switch(op)
  3136. {
  3137. case HDLR_ENTER :
  3138. ain_core_constructor();
  3139. break;
  3140. case HDLR_EXIT :
  3141. ain_core_destructor();
  3142. break;
  3143. case HDLR_EVENT :
  3144. switch( evt )
  3145. {
  3146. case IE_CORE_RESTART:
  3147. case IE_CORE_PLAY:
  3148. PE_CD_AUDIO_IN_MODE(gtps.mAudioInMode);
  3149. gcs.pstate = PST_PLAY;
  3150. break;
  3151. case IE_CORE_STOP:
  3152. PE_CD_AUDIO_IN_MODE(AUDIO_IN_MODE_OFF);
  3153. gcs.pstate = PST_STOP;
  3154. break;
  3155. case IE_CORE_AUDIO_IN_MODE :
  3156. if(((AUDIO_IN_MODE_SETTING) param) != gcst.mAudioInMode)
  3157. {
  3158. gtps.mAudioInMode = (AUDIO_IN_MODE_SETTING)  param;
  3159. PE_CD_AUDIO_IN_MODE(gtps.mAudioInMode);
  3160. }
  3161. if(AUDIO_IN_MODE_OFF == ((AUDIO_IN_MODE_SETTING) param))
  3162. {
  3163. gcs.pstate = PST_STOP;
  3164. }
  3165. else
  3166. {
  3167. gcs.pstate = PST_PLAY;
  3168. }
  3169. break;
  3170. }
  3171. break;
  3172. }
  3173. return 0;
  3174. }
  3175. /////////////////////////////////////////////////////////////////////////////
  3176. // Function name : ain_core_constructor
  3177. // Purpose :
  3178. // Input Parameters : 
  3179. // Return type : none.
  3180. // Output Parameters: none.
  3181. /////////////////////////////////////////////////////////////////////////////
  3182. static void ain_core_constructor(void)
  3183. {
  3184. /*        
  3185. AS_Set_Enhancement_Mode( gps->ain_mode );
  3186. PE_CD_SelectAudioStream(CDDA_SID);
  3187. PE_CD_SelectAINChannelMode();
  3188. */
  3189. SET_COP_MASK( 0x00000000 );
  3190. SET_COP_MASK( COP_PLAY | COP_EJECT | COP_STOP | COP_RESTART);
  3191. g_disc_type = DEC_DISC_TYPE_AIN;
  3192. gcs.mstate = MST_DISC_READY; 
  3193. gcs.pstate = PST_PLAY;
  3194. }
  3195. /////////////////////////////////////////////////////////////////////////////
  3196. // Function name : ain_core_destructor
  3197. // Purpose :
  3198. // Input Parameters : 
  3199. // Return type : none.
  3200. // Output Parameters: none.
  3201. /////////////////////////////////////////////////////////////////////////////
  3202. static void ain_core_destructor(void)
  3203. {
  3204. /*
  3205. AS_Set_Enhancement_Mode( M_Mode_OFF );
  3206. gcs.mstate = MST_LOADING;
  3207. */
  3208. /*
  3209. g_disc_type = DEC_DISC_TYPE_NO_DISK;
  3210. gcs.mstate = MST_NO_DISC;
  3211. gcs.pstate = PST_STOP;
  3212. */
  3213. //PE_CD_AUDIO_IN_MODE(AUDIO_IN_MODE_OFF);
  3214. gds.disctype = DISCTYPE_UNINITIALIZED;
  3215. gcs.mstate = MST_LOADING;
  3216. gcs.pstate = PST_STOP;
  3217. gcs.cop_mask = COP_EJECT|COP_POWER_OFF;
  3218. //DEC_StopScreenSaver();
  3219. }
  3220. #endif //AUDIO_IN_SUPPORT
  3221. //<<<SeanLiu_0902_2004
  3222. #ifdef STORE_PS_DATA_IN_FLASH
  3223. /////////////////////////////////////////////////////////////////////////////
  3224. // Function name : core_save_NVM_setting_In_Flash
  3225. // Purpose :
  3226. // Input Parameters : 
  3227. // Return type : none.
  3228. // Output Parameters: none.
  3229. /////////////////////////////////////////////////////////////////////////////
  3230. void core_save_NVM_setting_In_Flash( unsigned short far *flash_sa)
  3231. {
  3232. #ifdef HW_POWER_ON_RESUME
  3233. BOOL NeedCacheBMK = (FALSE == NVM_BMK_IsCached());
  3234. if (NeedCacheBMK)
  3235. NVM_BMK_Cache();
  3236. #endif
  3237. if (!CheckAddressWritable((unsigned short far *)flash_sa))
  3238. {
  3239. dbg_printf(("Updating Flash ROMn"));
  3240. //Flash Rom
  3241. asm{cli};
  3242. Init_FLASH_Burner_API();
  3243. Erase_One_Sector(flash_sa);
  3244. #ifdef STORE_PS_DATA_IN_FLASH
  3245. PS_NVM_Save( TRUE );
  3246. #endif
  3247. #ifdef HW_POWER_ON_RESUME
  3248. NVM_BMK_Save( TRUE );
  3249. #endif
  3250. asm{sti};
  3251. }
  3252. else
  3253. {
  3254. //SRAM in PDRemote Mode
  3255. dbg_printf(("Updating SRAMn"));
  3256. #ifdef STORE_PS_DATA_IN_FLASH
  3257. PS_NVM_Save( FALSE );
  3258. #endif
  3259. #ifdef HW_POWER_ON_RESUME
  3260. NVM_BMK_Save( FALSE );
  3261. #endif
  3262. }
  3263. #ifdef HW_POWER_ON_RESUME
  3264. if (NeedCacheBMK)
  3265. {
  3266. NVM_BMK_UnCache();
  3267. }
  3268. #endif
  3269. }
  3270. #endif // STORE_PS_DATA_IN_FLASH
  3271. #ifdef ENABLE_CHECK_SUM
  3272. /////////////////////////////////////////////////////////////////////////////
  3273. // Function name : check_sum
  3274. // Purpose :
  3275. // Input Parameters : 
  3276. // Return type : none.
  3277. // Output Parameters: none.
  3278. /////////////////////////////////////////////////////////////////////////////
  3279. BOOL check_sum(void)
  3280. {
  3281. WORD check_data_add_all = 0,check_save_data = 0,check_save_data_random;
  3282. DWORD check_data_size,i,check_data_size_random;
  3283. WORD  *temp_check_address;
  3284. WORD *temp_size_address = (WORD *)CODE_SIZE_START_ADDRESS;
  3285. WORD offset = 0,offset_address = 0x00;
  3286. check_data_size = (*temp_size_address) + (((DWORD)(*(temp_size_address+1)))<<16) ;
  3287. check_data_size_random =  (*(temp_size_address+5)) + (((DWORD)(*(temp_size_address+6)))<<16) ;
  3288. check_save_data = *(temp_size_address+2);
  3289. check_save_data_random = *(temp_size_address+7);
  3290. check_data_size ^= check_data_size_random;
  3291. check_data_size = check_data_size/2;
  3292. check_save_data ^= check_save_data_random;
  3293. temp_check_address = MK_FP(CODE_BEGIN_ADDRESS , 0);
  3294. for(i=0x80;i<check_data_size;i++)
  3295. {
  3296. if(((i*2)&0x01ffff) == 0x10000)
  3297. {
  3298. offset ++;
  3299. offset_address = offset*0x100;
  3300. temp_check_address = MK_FP(CODE_BEGIN_ADDRESS + offset_address, 0);
  3301. check_data_size -= i;
  3302. i = 0;
  3303. }
  3304. check_data_add_all += *(temp_check_address+i);
  3305. }
  3306. tr_printf(("check sum add all data is :  %xn", check_data_add_all));
  3307. if(check_data_add_all == check_save_data)
  3308. {
  3309. tr_printf(("------------check sum is succeed ------------n"));
  3310. return TRUE;
  3311. }
  3312. else
  3313. {
  3314. tr_printf(("------------check sum is failed --------------n"));
  3315. return FALSE;
  3316. }
  3317. }
  3318. #endif