source: svn/zasc/app_c/DST_BaseWin.c @ 22

Last change on this file since 22 was 22, checked in by phkim, 11 years ago
  1. phkim
  2. newcon3sk 를 kctv 로 브랜치 함
File size: 14.1 KB
Line 
1#include "DST_WinManager.h"
2#include "DST_ChannelTune.h"
3#include "DST_DB.h"
4//#include "DST_OTC_Main.h"
5#include "DST_ISDBT_ChannelTask.h"
6#include "DST_MemoryDB.h"
7
8#if 0
9____CBasicSystemWin___()
10#endif
11
12bool DST_IsTuneMode();
13
14//class CBasicSystemWin : public CWindow
15//{
16//private:
17        static int nScanCount = 0;
18        static int nRF = 10000;
19        static bool bPSIPTimeOut = false; // LOCKÀÌ ¾ÈµÇ°Å³ª PSIPÀ» ¸ø¹Þ¾Æ¼­ ŸÀӾƿôÀÌ ³­ °æ¿ì
20        static bool bLockTimeOut = false; // LOCKÀÌ ¾ÈµÇ°Å³ª PSIPÀ» ¸ø¹Þ¾Æ¼­ ŸÀӾƿôÀÌ ³­ °æ¿ì
21        static bool bReceiveTVCT = false; // PSIPÀ» ¹Þ¾Ò´Ù.
22        static int    nPrevChannelCount = 0; // ÀÌÀü¿¡ ÇØ´ç RF¿¡ °¡Áö°í ÀÖ´ø ä³Î°¹¼ö
23//public:
24//      virtual ~CBasicSystemWin()
25        void CBasicSystemWin_Destructor(CWindow *pWin)
26        {
27                DST_Printf("\n\n\n\n\n\n\n\n\n\nERROR : Base Window Deleted!!!!\n\n\n\n\n\n\n\n\n\n\n");
28        }
29//      CBasicSystemWin(SWinEventMsg event):CWindow(event)
30        void CBasicSystemWin_CBasicSystemWin(CWindow *this, SWinEventMsg event)
31        {
32                this->SetWinName(this,  "Basic");
33                this->RegisterAllKey(this);
34                this->RegisterKey(this, VK_LEFT, true, KEY_DELAY_VOLUME, KEY_REPEAT_VOLUME);
35                this->RegisterKey(this, VK_RIGHT, true, KEY_DELAY_VOLUME, KEY_REPEAT_VOLUME);
36                this->RegisterKey(this, VK_UP, true, KEY_DELAY_CHANNEL, 400);
37                this->RegisterKey(this, VK_DN, true, KEY_DELAY_CHANNEL, 400);
38                this->SetTimeOut(this, 0);
39                nScanCount = 0;
40//              DST_CreateWin(WIN_MAIN_MENU, WIN_NULL,0,0,0,0);
41        }
42
43//      virtual void OnMessage(SWinEventMsg event)
44        void CBasicSystemWin_OnMessage(CWindow *this, SWinEventMsg event)
45        {
46                if (event.cmd == WM_CVT)
47                {
48                        this->KillTimer(this, 1); // Background ScanÀ» ÁßÁöÇÑ´Ù.
49                        memcpy(&DST_g_strSWVersion[0], &event.data[0], 16);
50                        DS_U8 download_command = event.data32[4];
51                        DST_g_OTC_Modulation_type = (event.data32[5]==1)?(DHL_MODULATION_64QAM):(DHL_MODULATION_256QAM);
52                        DST_g_OTC_RF = event.data32[6];
53                        DST_g_OTC_PID = event.data32[7];
54                       
55                        DST_Printf("WM_CVT\n");
56                        DST_Printf("strSWVersion = %02X %02X %02X %02X\n", DST_g_strSWVersion[0], DST_g_strSWVersion[1], DST_g_strSWVersion[2], DST_g_strSWVersion[3]); 
57                        DST_Printf("download_command = %s(%d)\n", download_command==0 ? "Download Now" : download_command==1 ? "Deferred Download" : "No Exception", download_command);
58                        DST_Printf("modulation_type = %s(%d)\n", event.data32[5]==1 ? "64QAM" : "256QAM", (int)event.data32[5]);
59                        DST_Printf("rf = %d Hz\n", (int)DST_g_OTC_RF);
60                        DST_Printf("pid = 0x%X\n", DST_g_OTC_PID);
61                        download_command = 2; // °­Á¦ ¸ðµå·Î ÇÑ´Ù.                     
62                        JST_OTC(DST_GetIndexByMHzFrequency(DST_g_OTC_RF/1000000), (DHL_MODULATION_MODE)DST_g_OTC_Modulation_type, DST_g_OTC_PID);
63                        DST_CreateWin(WIN_OTC_DOWNLOAD, WIN_NULL, 0,0,0,0);
64                }
65               
66                switch (event.cmd)
67                {
68                        case WM_SIGNAL_STATE:
69                                if (DST_g_PowerOn == false)
70                                {
71                                        if (DST_GetWin(WIN_ERROR)) DST_CloseWin(WIN_ERROR);
72                                        break;
73                                }
74                                switch (event.data32[0])
75                                {
76                                        case SM_WAIT_SIGNAL:
77                                        case SM_GOOD_SIGNAL: // Good Signal
78                                                if (DST_GetWin(WIN_ERROR)) DST_CloseWin(WIN_ERROR);
79                                                break;
80                                        case SM_NO_PROGRAM:
81                                        case SM_AUDIO_ONLY:
82                                                if (DST_g_HWTestMode == false && DST_g_bFactoryMode == false) DST_CreateWin(WIN_ERROR, WIN_NULL, event.data32[0],0,0,0);
83                                                break;
84                                        case SM_WEAK_SIGNAL: // Error
85                                                if (DST_GetWin(WIN_UPDATE)) break;
86                                                if (DST_GetWin(WIN_POWER_DOWN_CAUTION)) break;
87                                                if (DST_GetWin(WIN_OTC_DOWNLOAD)) break;
88//                                              if (DST_GetWin(WIN_CHANNEL_BANNER)) break;
89                                                if (DST_GetWin(WIN_DIRECT_TUNE)) break;
90//                                              if (DST_GetWin(WIN_VOLUME)) break;
91//                                              if (DST_GetWin(WIN_VOLUME_MUTE)) break;
92                                                if (DST_GetWin(WIN_SIGNAL_METER)) break;
93                                                if (DST_GetWin(WIN_AUDIO_HOT)) break;
94//                                              if (DST_GetWin(WIN_DISPLAY_MODE_HOT)) break;
95                                                if (DST_GetWin(WIN_CLOSED_CAPTION_HOT)) break;
96                                                if (DST_GetWin(WIN_AGE_RATING)) break;
97                                                if (DST_GetWin(WIN_FACTORY_RESET)) break;
98                                                if (DST_GetWin(WIN_MAIN_MENU)) break;
99                                                if (DST_GetWin(WIN_PASSWD_CONFIRM)) break;
100                                                if (DST_GetWin(WIN_PASSWD_CHANGE)) break;
101                                                if (DST_GetWin(WIN_PASSWD_CHECK)) break;
102                                                if (DST_GetWin(WIN_AUTO_SEARCH)) break;
103                                                if (DST_GetWin(WIN_MANUAL_SEARCH)) break;
104                                                if (DST_GetWin(WIN_PROGRAM_GUIDE)) break;
105                                                if (DST_GetWin(WIN_CHANNEL_LIST)) break;
106                                                if (DST_g_HWTestMode == false && DST_g_bFactoryMode == false) DST_CreateWin(WIN_ERROR, WIN_NULL, event.data32[0], 0,0,0);
107                                                break;
108
109                                        default:
110                                                break;
111                                }
112                                break;
113                               
114                        case WM_POWER_DOWN_ENTER:
115                                JST_POWER_Display(false);
116                                printf("Channel Count = %d\n", CT_ChMapCount());
117                                DST_PowerDown();
118                                break;
119                               
120                        case WM_POWER_OFF:
121                                DST_Printf("WM_POWER_OFF\n");
122                                DST_g_PowerOn = false;
123                                DST_g_SleepTimer = 0;
124                                DST_g_sleepTimercheckTime = 0;
125                                DST_g_bSleepTimerOut = false;
126                                DST_g_PrevRF = 0;
127                                DST_g_PrevProgramNumber = 0;
128                                DST_UI_InitMenuCursor();
129                               
130#if 1
131                                JST_POWER_Display(false);
132                                DHL_INFO_SetLastPowerState(true); // AC ¸®Ä¿¹ö¸® ½Ã Ç×»ó ÄÑÁöµµ·Ï ÇÑ´Ù.
133                                DST_RemoveAllWindowExceptBasicWin();
134                                nScanCount = 0;
135                                // CMB CVT Á֯ļö 639MHz
136                                //JST_CVT(DST_GetIndexByMHzFrequency(639), DHL_MODULATION_256QAM); // CMB OTC üũ
137                                //JST_CVT(DST_GetIndexByMHzFrequency(651), DHL_MODULATION_256QAM); // ±Ý°­¹æ¼Û
138                                JST_CVT(DST_GetIndexByMHzFrequency(405), DHL_MODULATION_256QAM); // ¼­°æ¹æ¼Û
139                                this->SetTimer(this, 1, 5000);
140#else   // º¸µå¿¡¼­ Àü¿øÅ° ´©¸£¸é ¹Ù·Î ²¨Áöµµ·Ï Àӽà ¼öÁ¤
141                                DST_PowerDown();
142#endif
143                                break;
144                               
145                        case WM_POWER_ON:
146                                this->KillTimer(this, 1); // Background ScanÀ» ÁßÁöÇÑ´Ù.
147                                DHL_INFO_SetLastPowerState(true);
148                                T();
149                                nScanCount = 0;
150                                DST_g_PowerOn = true;
151                                DST_UI_SetMute(false);
152                                DST_DB_TuneFirstChannel();
153                                JST_POWER_Display(true);
154                                break;
155                       
156                        case WM_CT_MSG:
157                                if (DST_g_PowerOn == true) break;
158                                switch (event.data32[0])
159                                {
160                                        case CT_SCAN_START:
161//                                              T();
162                                                bPSIPTimeOut = false; // LOCKÀÌ ¾ÈµÇ°Å³ª PSIPÀ» ¸ø¹Þ¾Æ¼­ ŸÀӾƿôÀÌ ³­ °æ¿ì
163                                                bLockTimeOut = false; // LOCKÀÌ ¾ÈµÇ°Å³ª PSIPÀ» ¸ø¹Þ¾Æ¼­ ŸÀӾƿôÀÌ ³­ °æ¿ì
164                                                bReceiveTVCT = false; // PSIPÀ» ¹Þ¾Ò´Ù.
165                                                nPrevChannelCount = 0;
166                                                DBLock(true);
167                                                {
168                                                        int i;
169                                                        for (i = 0; i < DB_CHANNEL_DB_MAX; i++) 
170                                                        {
171                                                                if (db_channel_db[i].program_number == 0) continue;
172                                                                if (db_channel_db[i].rf != event.data32[1]) continue;
173                                                                nPrevChannelCount++;
174                                                                break;
175                                                        }
176                                                }
177                                                DBLock(false);
178                                                break;
179                                               
180                                        case CT_SCAN_PSIP_WAIT:
181//                                              T();
182                                                if (event.data32[2] < 7000) break;
183                                                if (bPSIPTimeOut || bLockTimeOut || bReceiveTVCT) break;
184                                                bPSIPTimeOut = true;
185                                                if (nScanCount > 0 && CT_ScanFindChannel() == false) JST_DB_Del(event.data32[1]);
186                                                if (nScanCount > DST_MaxRF() - DST_MinRF()+1 - DST_DB_GetExceptRFCount())
187                                                {
188                                                        DST_SendWindowEventWithOnlyCmd(WM_POWER_DOWN_ENTER);
189                                                        return;
190                                                }
191                                                //nRF = (nRF >= DST_MaxRF()) ? DST_MinRF() : nRF+1;
192                                                nRF = DST_DB_GetNextUnexceptRF(nRF);
193                                                JST_Scan(nRF);
194                                                nScanCount++;
195                                                break;
196                                                       
197                                        case CT_SCAN_LOCK_WAIT:
198//                                              T();
199                                                if (event.data32[4] < 20) // POWER LEVELÀÌ 20º¸´Ù ÀÛÀº °æ¿ì´Â ½ÅÈ£°¡ ¾ø´Â°É·Î °£ÁÖÇÏ°í ¹Ù·Î ¹ö¸°´Ù.
200                                                {
201                                                        if (event.data32[2] < 200) break; 
202                                                }
203                                                else if (event.data32[4] < 27) // POWER LEVELÀÌ 27º¸´Ù ÀÛÀº °æ¿ì´Â ¹Ì¾à½ÅÈ£·Î ÆÇ´ÜÇÏ¿© 2.2ÃÊ ±â´Ù¸°´Ù.
204                                                {
205                                                        if (event.data32[2] < 2200) break; 
206                                                }
207                                                else // ÀϹÝÀûÀÎ °æ¿ì·Î 1300ms ±â´Ù¸°´Ù.
208                                                {
209                                                        if (event.data32[2] < 1300) break; 
210                                                }
211                                                if (nPrevChannelCount > 0) // ÀÌÀü¿¡ ä³ÎÀÌ ÀÖ´ø Á֯ļö¶ó¸é 5ÃʱîÁö ±â´Ù·Á º¸ÀÚ
212                                                {
213                                                        if (event.data32[2] < 5000) break; 
214                                                }
215                                                if (event.data32[3] > 0) break; // lockÀÌ µÇ¾î ÀÖ´Ù¸é ¹«½Ã
216                                                if (bPSIPTimeOut || bLockTimeOut || bReceiveTVCT) break;
217                                                bLockTimeOut = true;
218                                                if (nScanCount > 0 && CT_ScanFindChannel() == false) JST_DB_Del(event.data32[1]);
219                                                if (nScanCount > DST_MaxRF() - DST_MinRF()+1- DST_DB_GetExceptRFCount())
220                                                {
221                                                        DST_SendWindowEventWithOnlyCmd(WM_POWER_DOWN_ENTER);
222                                                        return;
223                                                }
224                                                //nRF = (nRF >= DST_MaxRF()) ? DST_MinRF() : nRF+1;
225                                                nRF = DST_DB_GetNextUnexceptRF(nRF);
226                                                JST_Scan(nRF);
227                                                nScanCount++;
228                                                break;
229                                       
230                                        case CT_SCAN_RECEIVE_TVCT:
231//                                              T();
232                                                if (bPSIPTimeOut || bLockTimeOut || bReceiveTVCT) break;
233                                                bReceiveTVCT = true;
234                                                if (nScanCount > DST_MaxRF() - DST_MinRF()+1- DST_DB_GetExceptRFCount())
235                                                {
236                                                        DST_SendWindowEventWithOnlyCmd(WM_POWER_DOWN_ENTER);
237                                                        return;
238                                                }
239                                                //nRF = (nRF >= DST_MaxRF()) ? DST_MinRF() : nRF+1;
240                                                nRF = DST_DB_GetNextUnexceptRF(nRF);
241                                                JST_Scan(nRF);
242                                                nScanCount++;
243                                                break;
244                                }
245                }
246        }
247        bool IsTVHotKeyPossible()
248        {
249                if (DST_g_PowerOn == false) return false;
250                if (DST_IsTuneMode() == false) return false;
251                if (DST_g_LastTuneTime == 0) return false;
252                if (DST_GetWin(WIN_AUTO_SEARCH)) return false;
253                if (DST_GetWin(WIN_MANUAL_SEARCH)) return false;
254                return true;
255        }
256//      virtual void OnTimer(char nID)
257        void CBasicSystemWin_OnTimer(CWindow *this, char nID)
258        {
259                switch (nID)
260                {
261                        case 1:
262#if 0                           
263                                // OTC¸¸ È®ÀÎÇÏ°í ¹é±×¶ó¿îµå ½ºÄµÀ» ¾ÈÇÏ°í ¹Ù·Î Á¾·áÇÔ
264                                DST_SendWindowEventWithOnlyCmd(WM_POWER_DOWN_ENTER);
265#else                           
266                                this->KillTimer(this, 1); // Background ScanÀ» ÁßÁöÇÑ´Ù.
267                                if (DST_g_PowerOn == true) break;
268                                //nRF = (nRF >= DST_MaxRF()) ? DST_MinRF() : nRF+1;
269                                nRF = DST_DB_GetNextUnexceptRF(nRF);
270                                JST_Scan(nRF);
271                                nScanCount++;
272#endif
273                                break;
274                }
275        }
276//      virtual void KeyInput(unsigned char key, bool /*bRepeat*/)
277        void CBasicSystemWin_KeyInput(CWindow *this, unsigned char key, bool bRepeat)
278        {
279                static bool power_key_pressed = false;
280                static DS_U32 power_key_tick = 0; // POWER ۰¡ ºü¸£°Ô ´­¸®´Â°ÍÀ» ¸·´Â´Ù.
281                if (power_key_tick > DST_OS_GetTickCount()) power_key_tick = DST_OS_GetTickCount();
282                if (DST_OS_GetTickCount() - power_key_tick < DST_OS_GetTicksPerSecond()) return; // POWER ۰¡ ´­¸®°í 1ÃÊ À̳»¿¡ ´Ù¸¥ Ű ó¸® ¾È ÇÔ
283                switch (key)
284                {
285                        case VK_PWR:
286                        case VK_KEY_PWR:
287                                power_key_tick = DST_OS_GetTickCount();
288                                if (DST_g_PowerOn == true)
289                                {
290                                        DST_SendWindowEventWithOnlyCmd(WM_POWER_OFF);
291                                        power_key_pressed = true;
292                                }
293                                else
294                                {
295                                        DST_SendWindowEventWithOnlyCmd(WM_POWER_ON);
296                                        power_key_pressed = false;
297                                }
298                                break;
299                }
300                // POWER OFF ۰¡ ´­¸° °æ¿ì ´Ù¸¥ Űó¸® ¾ÈÇÔ
301                if (power_key_pressed == true) return;
302                       
303                switch (key)
304                {
305                        case VK_0:
306                        case VK_1:
307                        case VK_2:
308                        case VK_3:
309                        case VK_4:
310                        case VK_5:
311                        case VK_6:
312                        case VK_7:
313                        case VK_8:
314                        case VK_9:
315                                if (IsTVHotKeyPossible())
316                                {
317                                        if(DST_GetWin(WIN_CHANNEL_BANNER)) DST_CloseWin(WIN_CHANNEL_BANNER);
318                                        DST_CreateWin(WIN_CHANNEL_BANNER, WIN_NULL, BANNER_DIGIT, key, 0, 0);
319                                }
320                                break;
321
322                        case VK_ZOOM:
323                                if (IsTVHotKeyPossible()) DST_CreateWin(WIN_DISPLAY_MODE_HOT, WIN_NULL,0,0,0,0);
324                                break;
325                        case VK_AUDIO:
326                                if (IsTVHotKeyPossible()) DST_CreateWin(WIN_AUDIO_HOT, WIN_NULL,0,0,0,0);
327                                break;
328                               
329                        case VK_EPG:
330                                if (IsTVHotKeyPossible()) DST_CreateWin(WIN_PROGRAM_GUIDE, WIN_NULL,0,0,0,0);
331                                break;
332
333                               
334                        case VK_HYPHEN:
335                                //if (IsTVHotKeyPossible()) DST_CreateWin(WIN_DIRECT_TUNE, WIN_NULL,0,0,0,0);
336                                break;
337                               
338                        case VK_VOL_DN:
339                        case VK_VOL_UP:
340                                if (IsTVHotKeyPossible() == false) break; 
341                                DST_CreateWin(WIN_VOLUME, WIN_NULL,0,0,0,0);
342                                break;
343                               
344                        case VK_MUTE:
345                                if (IsTVHotKeyPossible() == false) break; 
346                                DST_UI_SetMute(!DST_UI_GetMute());
347                                if(DST_UI_GetMute())
348                                        DST_CreateWin(WIN_VOLUME_MUTE, WIN_NULL,0,0,0,0);
349                                else
350                                        DST_CreateWin(WIN_VOLUME, WIN_NULL,0,0,0,0);
351                       
352                       
353                                break;
354
355                        case VK_SIGNAL_METER:
356                                if (IsTVHotKeyPossible()) DST_CreateWin(WIN_SIGNAL_METER, WIN_NULL,0,0,0,0);
357                                break;
358
359                        case VK_CC:
360                                if (IsTVHotKeyPossible()) DST_CreateWin(WIN_CLOSED_CAPTION_HOT,WIN_NULL, 0,0,0,0);
361//                              {
362//                                      SWinEventMsg event;
363//                                      memset(&event, 0, sizeof(SWinEventMsg));
364//                                      event.cmd = WM_CVT;
365//                                      char swversion[16] = {0,};
366//                                      sprintf(swversion, "0.2000");
367//                                      memcpy(&event.data[0], swversion, 16);
368//              //              case 0: DST_Printf("Download Now\n"); break;
369//              //              case 1: DST_Printf("Deferred Download\n"); break;
370//              //              case 2: DST_Printf("No Exception\n"); break;
371//                                      event.data32[4] = 0;
372//                                      event.data32[5] = 1;
373//                                      event.data32[6] = 627000000;
374//                                      event.data32[7] = 0x66;
375//                                      DST_SendWindowEvent(event);
376//                              }
377
378                                break;
379                               
380                        case VK_CH_UP:
381                        case VK_CH_DN:
382                        case VK_KEY_UP:
383                        case VK_KEY_DN:
384                                if (IsTVHotKeyPossible() == false) break;
385                                T();
386                                if (DST_DB_PresentChMap() == false) // ä³Î¸ÊÀÌ ¾ø´Â °æ¿ì
387                                {
388                                T();
389                                        DST_CreateWin(WIN_AUTO_SEARCH, WIN_NULL, 1, 0, 0, 0); // Rescan
390                                        break;
391                                }
392                                T();
393                                switch (key)
394                                {
395                                        case VK_CH_UP:
396                                        case VK_KEY_UP:
397                                                DST_UI_ChannelUpDn(true);
398                                                break;
399                                        default:
400                                                DST_UI_ChannelUpDn(false);
401                                                break;
402                                }
403                                break;
404
405                        case VK_MENU:
406                                if (IsTVHotKeyPossible()) DST_CreateWin(WIN_MAIN_MENU, WIN_NULL,0,0,0,0);
407                                break;
408
409                        case VK_OK:
410#if EPG_SUPPORT                         
411                                if (IsTVHotKeyPossible()) DST_CreateWin(WIN_INFOR_BANNER, WIN_NULL,0,0,0,0);
412#else
413                                DST_CreateWin(WIN_CHANNEL_BANNER, WIN_NULL, BANNER_NORMAL, 3, 0, 0);
414#endif
415                                break;
416
417                        case VK_PREV:
418                        case VK_PREV_CH:
419                                if (IsTVHotKeyPossible()) 
420                                {
421                                        int nCh_Major = DST_DB_GetMajor(DST_g_PrevRF,DST_g_PrevProgramNumber);
422                                        int nCh_Minor = DST_DB_GetMinor(DST_g_PrevRF,DST_g_PrevProgramNumber);
423                                        if(DST_DB_PresentMatchChannel(DST_g_PrevRF, nCh_Major,nCh_Minor ))
424                                        {
425                                                DST_UI_ChannelTune(DST_g_PrevRF, DST_g_PrevProgramNumber);
426                                        }
427                                        else
428                                        {
429                                                DST_g_PrevRF = DST_EEPROM_GetRF();
430                                                DST_g_PrevProgramNumber = DST_EEPROM_GetProgramNumber();
431                                        }
432                                }
433                                break;
434                        case VK_DISPLAY_MODE:
435                                if (IsTVHotKeyPossible()) DST_CreateWin(WIN_DISPLAY_MODE_HOT, WIN_NULL,0,0,0,0);
436                                break;
437                        case VK_CHANNEL_SEARCH:
438                                if (IsTVHotKeyPossible()) DST_CreateWin(WIN_AUTO_SEARCH, WIN_NULL, 0, 1, 0, 0);
439                               
440                                break;
441                }
442        }
443//};
444
445void DST_CreateBaseSystemWindow(SWinEventMsg event)
446{
447        CWindow*pWin = NewCWindow(event);
448        pWin->Destructor = CBasicSystemWin_Destructor;
449        pWin->OnMessage = CBasicSystemWin_OnMessage;   
450        pWin->OnTimer = CBasicSystemWin_OnTimer;
451        pWin->KeyInput = CBasicSystemWin_KeyInput;
452        // »ý¼ºÀÚ È£Ãâ
453        CBasicSystemWin_CBasicSystemWin(pWin, event);
454        // À©µµ¿ì ¸Þ´ÏÀú¿¡ µî·Ï
455        DST_AddWin((WinID)(event.data[0]), pWin);
456}
Note: See TracBrowser for help on using the repository browser.