source: svn/trunk/zasc/app_c/DST_WinManagerTask.c @ 3

Last change on this file since 3 was 3, checked in by jglee, 11 years ago

reduce window manager load

File size: 15.4 KB
Line 
1#include "DST_WinList.h"
2#include "DST_Window.h"
3#include "DST_WinManager.h"
4#include "DST_OSDImage.h"
5#include "DST_CommonAPI.h"
6#include "DST_SignalMonitor.h"
7
8static int gWinEventMsgQ = 0;
9static int gWinEventMsgQ_Count = 0;
10
11void DST_CreateBaseSystemWindow(SWinEventMsg event);
12
13void DST_CreateTestOSDWin(SWinEventMsg event);
14void DST_CreateEAWindow(SWinEventMsg event);
15
16void DST_CreateCaptionWin(SWinEventMsg event);
17void DST_CreateSuperImposeWin(SWinEventMsg event);
18// Muon2 Àü¿ë OSD
19void DST_CreateSignalMeterWin(SWinEventMsg event);
20
21#if CHANNEL_EDIT_SUPPORT
22void DST_CreateChannelEditWin(SWinEventMsg event);
23#endif
24
25void DST_CreateLowBatteryWindow(SWinEventMsg event);
26void DST_CreateSplashScreenWindow(SWinEventMsg event);
27
28// Maya Àü¿ë
29void DST_CreateFMWin(SWinEventMsg event);
30void DST_CreateMayaMain(SWinEventMsg event);
31void DST_CreateMayaSub(SWinEventMsg event);
32void DST_CreateSetUpWizard(SWinEventMsg event);
33
34// miru
35void DST_CreateErrorWin(SWinEventMsg event);
36void DST_CreateAudioWindow(SWinEventMsg event);
37void DST_CreateEWSWin(SWinEventMsg event);
38void DST_CreateFactoryResetWin(SWinEventMsg event);
39void DST_CreateFactoryResetAskWin(SWinEventMsg event);
40
41void DST_CreateStationSearchWin(SWinEventMsg event);
42void DST_CreateLowBattery(SWinEventMsg event);
43void DST_CreateSplashWindow(SWinEventMsg event);
44
45void DST_CreateWinPasswordCheck(SWinEventMsg event);
46void DST_CreateWinPasswordChange(SWinEventMsg event);
47void DST_CreateWinPasswordConfirm(SWinEventMsg event);
48void DST_CreateAgeRating(SWinEventMsg event);
49void DST_CreateMainMenu(SWinEventMsg event);
50void DST_CreateMenu2Depth(SWinEventMsg event);
51void DST_CreateMenu3Depth(SWinEventMsg event);
52void DST_CreateMenu4Depth(SWinEventMsg event);
53void DST_CreateVolumeMuteWindow(SWinEventMsg event);
54void DST_CreateDirectTuneWindow(SWinEventMsg event);
55void DST_CreateSignalMeterWindow(SWinEventMsg event);
56void DST_CreateClosedCaptionHotWindow(SWinEventMsg event);
57void DST_CreatePowerDownCautionWin(SWinEventMsg event);
58void DST_CreateRFUpdateWindow(SWinEventMsg event);
59//void DST_CreateDebugSQLWin(SWinEventMsg event);
60//void DST_CreateDebugSQLSubWin(SWinEventMsg event);
61void DST_CreateFactoryWin(SWinEventMsg event);
62void DST_CreateDisplayModeWindow(SWinEventMsg event);;
63void DST_CreateEngineerMenuWin(SWinEventMsg event);
64void DST_CreateManualSearchWin(SWinEventMsg event);
65void DST_CreateCC708Win(SWinEventMsg event);
66void DST_CreateOTCDownloadFailResetWin(SWinEventMsg event);
67void DST_CreateOTCDownLoadingWin(SWinEventMsg event);
68void DST_CreateUpdateResetWin(SWinEventMsg event);
69void DST_CreateUpdateWin(SWinEventMsg event);
70void DST_CreateSTBInfo(SWinEventMsg event);
71
72DS_U8 DST_GetKeyCode();
73void DST_ResetKeyCode();
74
75// CC¿Í µ¿ÀÏ PlaneÀ» »ç¿ëÇϱâ À§ÇØ Àӽ÷ΠstaticÀ» Ç®¾î³õÀ½
76// ŽºÅ© ÅëÇÕÈÄ ´Ù½Ã staticÀ¸·Î µ¿ÀÛÇØ¾ß ÇÔ
77
78static void DST_BlockCopy(OSD_PIXEL_T *src, int x, int y, int w, int h)
79{
80        static bool bInit = false;
81        if (bInit == false)
82        {
83                DHL_GFX_Open();
84                bInit = true;
85        }
86        if (src) DHL_GFX_Draw(src,x,y,w,h);
87}
88
89// µÎ ¹Ú½ºÀÇ °øÅë ¿µ¿ªÀ» ±¸ÇÑ´Ù.
90static bool MakeCommonRect(DST_RECT A, DST_RECT B, DST_RECT *C)
91{
92        C->x= (A.x > B.x) ? A.x : B.x;
93        C->y= (A.y > B.y) ? A.y : B.y;
94        C->w= (A.x + A.w < B.x + B.w) ? (A.x + A.w - C->x) : (B.x + B.w - C->x);
95        C->h= (A.y + A.h < B.y + B.h) ? (A.y + A.h - C->y) : (B.y + B.h - C->y);
96        if (C->w <= 0 || C->h <= 0) return false;
97        return true;
98}
99static void WinMgrWinCreate(SWinEventMsg event)
100{
101        switch (event.data[0])
102        {
103                case WIN_ENGINEER_MODE:
104                        DST_CreateEngineerMenuWin(event); // C ¾ð¾î Æ÷ÆÃ ÇÊ¿ä
105                        break;
106                       
107                case WIN_FACTORY_MODE:
108                        DST_CreateFactoryWin(event); // C ¾ð¾î Æ÷ÆÃ ÇÊ¿ä
109                        break;
110                       
111                case WIN_DEBUG_SQL_SUB:
112                        DST_CreateDebugSQLSubWin(event); // C ¾ð¾î Æ÷ÆÃ ÇÊ¿ä
113                        break;
114                       
115                case WIN_DEBUG_SQL:
116                        DST_CreateDebugSQLWin(event); // C ¾ð¾î Æ÷ÆÃ ÇÊ¿ä
117                        break;
118
119                case WIN_RF_UPDATE:
120                        DST_CreateRFUpdateWindow(event); // C ¾ð¾î Æ÷ÆÃ ÇÊ¿ä
121                        break;
122                       
123                case WIN_CLOSED_CAPTION_HOT:
124                        DST_CreateClosedCaptionHotWindow(event); // C ¾ð¾î Æ÷ÆÃ ÇÊ¿ä
125                        break;
126                       
127                case WIN_SIGNAL_METER:
128                        DST_CreateSignalMeterWindow(event); // C ¾ð¾î Æ÷ÆÃ ÇÊ¿ä
129                        break;
130                       
131                case WIN_MAIN_MENU:
132                        DST_CreateMainMenu(event);
133                        break;
134
135                case WIN_POWER_DOWN_CAUTION:
136                        DST_CreatePowerDownCautionWin(event); // C ¾ð¾î Æ÷ÆÃ ÇÊ¿ä
137                        break;
138
139                case WIN_OTC_DOWNLOAD:
140                        DST_CreateOTCDownLoadingWin(event); // C ¾ð¾î Æ÷ÆÃ ÇÊ¿ä
141                        break;
142
143                case WIN_OTC_DOWNLOAD_FAIL:
144                        DST_CreateOTCDownloadFailResetWin(event); // C ¾ð¾î Æ÷ÆÃ ÇÊ¿ä
145                        break;
146                       
147                case WIN_UPDATE:
148                        DST_CreateUpdateWin(event); // C ¾ð¾î Æ÷ÆÃ ÇÊ¿ä
149                        break;
150                case WIN_UPDATE_RESET:
151                        DST_CreateUpdateResetWin(event); // C ¾ð¾î Æ÷ÆÃ ÇÊ¿ä
152                        break;
153
154                case WIN_BASIC:
155                        DST_CreateBaseSystemWindow(event);
156                        break;
157
158                case WIN_AUTO_SEARCH:
159                        DST_CreateAutoSearchWin(event); // C ¾ð¾î Æ÷ÆÃ ÇÊ¿ä
160                        break;
161
162                case WIN_MANUAL_SEARCH:
163                        DST_CreateManualSearchWin(event); // C ¾ð¾î Æ÷ÆÃ ÇÊ¿ä
164                        break;
165
166#if EPG_SUPPORT                 
167                case WIN_PROGRAM_GUIDE:
168                        DST_CreateProgramGuideWin(event); // C ¾ð¾î Æ÷ÆÃ ÇÊ¿ä
169                        break;
170#endif
171
172#if CHANNEL_EDIT_SUPPORT
173                case WIN_CHANNEL_LIST:
174                        DST_CreateChannelEditWin(event); // C ¾ð¾î Æ÷ÆÃ ÇÊ¿ä
175                        break;
176#endif
177
178                case WIN_CHANNEL_BANNER:
179                        DST_CreateChannelBannerWindow(event); // C ¾ð¾î Æ÷ÆÃ ÇÊ¿ä
180                        break;
181               
182                case WIN_DIRECT_TUNE:
183                        DST_CreateDirectTuneWindow(event); // C ¾ð¾î Æ÷ÆÃ ÇÊ¿ä
184                        break;
185
186                case WIN_INFOR_BANNER:
187                        DST_CreateInforbannerWindow(event); // C ¾ð¾î Æ÷ÆÃ ÇÊ¿ä
188                        break;
189
190                case WIN_FACTORY_RESET:
191                        DST_CreateFactoryResetWin(event); // C ¾ð¾î Æ÷ÆÃ ÇÊ¿ä
192                        break;
193
194                case WIN_FACTORY_RESET_ASK:
195                        DST_CreateFactoryResetAskWin(event); // C ¾ð¾î Æ÷ÆÃ ÇÊ¿ä
196                        break;
197
198                case WIN_VOLUME:
199                        DST_CreateVolumeWindow(event);
200                        break;
201
202                case WIN_VOLUME_MUTE:
203                        DST_CreateVolumeMuteWindow(event);
204                        break;
205
206                case WIN_AUDIO_HOT:
207                        DST_CreateAudioWindow(event); // C ¾ð¾î Æ÷ÆÃ ÇÊ¿ä
208                        break;
209
210                case WIN_DISPLAY_MODE_HOT:
211                        DST_CreateDisplayModeWindow(event); // C ¾ð¾î Æ÷ÆÃ ÇÊ¿ä
212                        break;
213                       
214                case WIN_CAPTION:
215                         DST_CreateCC708Win(event); // C ¾ð¾î Æ÷ÆÃ ÇÊ¿ä
216                        break;
217
218                case WIN_ERROR:
219                        DST_CreateErrorWin(event); // C ¾ð¾î Æ÷ÆÃ ÇÊ¿ä
220                        break;
221
222                case WIN_STB_INFO:
223                        DST_CreateSTBInfo(event);
224                        break;
225                       
226        }
227}
228
229static void WinMgrKeyProcess()
230{
231        static CWindow *pPrevWin = 0;
232        static DS_U8 ucPrevKey = 0;
233        static DS_U32 nPrevKeyTime = 0;
234        static bool bRepeat = false;
235        DS_U8 nKeyCode = DST_GetKeyCode();
236
237        if (nKeyCode == 0)  //۰¡ ¸±¸®Áî µÇ¸é 0ÀÌ µÈ´Ù.
238        {
239                pPrevWin = 0;
240                ucPrevKey = 0;
241                nPrevKeyTime = 0;
242                bRepeat = false;
243                return;
244        }
245        int i;
246        for ( i = 1; i < WIN_ID_MAX; i++)
247        {
248                CWindow *pWin = DST_GetWin((WinID)i);
249                if (pWin == 0) continue;
250                if (pWin->IsRegisterKey(pWin, nKeyCode) == false) continue;
251                pWin->ResetTimer(pWin, 0);
252                // Repeat ۰¡ ¾Æ´Ñ ۵é
253                if (pWin->GetKeyDelay(pWin, nKeyCode)==0 || pWin->GetKeyRepeat(pWin, nKeyCode)==0)
254                {
255                        DST_ResetKeyCode();
256                        pWin->KeyInput(pWin, nKeyCode, false);
257                        nKeyCode = 0;
258                        break;
259                }
260                // Repeat ŰÀÇ Ã³À½ µ¿ÀÛ ½ÇÇà
261                if (pPrevWin != pWin || ucPrevKey != nKeyCode)
262                {
263                        pWin->KeyInput(pWin, nKeyCode, false);
264                        pPrevWin = pWin;
265                        ucPrevKey = nKeyCode;
266                        nPrevKeyTime = DST_OS_GetTickCount();
267                        bRepeat = false;
268                        break;
269                }
270                if (bRepeat == false)
271                {
272                        // Repeat ŰÀÇ µÎ¹øÂ° µ¿ÀÛ ½ÇÇà
273                        if (nPrevKeyTime > DST_OS_GetTickCount()) nPrevKeyTime = DST_OS_GetTickCount();
274                        if (DST_OS_GetTickCount() - nPrevKeyTime < pWin->GetKeyDelay(pWin, nKeyCode)) break;
275                        pWin->KeyInput(pWin, nKeyCode, true);
276                        nPrevKeyTime = DST_OS_GetTickCount();
277                        bRepeat = true;
278                }
279                else
280                {
281                        // Repeat ŰÀÇ ¼¼¹øÂ° ºÎÅÍ µ¿ÀÛ ½ÇÇà
282                        if (nPrevKeyTime > DST_OS_GetTickCount()) nPrevKeyTime = DST_OS_GetTickCount();
283                        if (DST_OS_GetTickCount() - nPrevKeyTime < pWin->GetKeyRepeat(pWin, nKeyCode)) break;
284                        nPrevKeyTime = DST_OS_GetTickCount();
285                        pWin->KeyInput(pWin, nKeyCode, true);
286                }
287                break;
288        }
289}
290
291static void WinMgrMessageProcess(SWinEventMsg event)
292{
293        switch (event.cmd)
294        {
295                case WM_WIN_CREATE:
296                        WinMgrWinCreate(event);
297                        break;
298
299                case WM_WIN_DELETE:
300                        {
301                                CWindow *pWin = DST_GetWin((WinID)event.data[0]);
302                                if (pWin) pWin->Close(pWin);
303                        }
304                        break;
305
306                default:
307                        {
308                                int i;
309                                for ( i= 1; i < WIN_ID_MAX; i++)
310                                {
311                                        CWindow *pWin = DST_GetWin((WinID)i);
312                                        if (pWin) pWin->DoOnMessage(pWin, event);
313                                }
314                        }
315                        break;
316        }
317}
318static bool WinMgrSub()
319{
320        SWinEventMsg event;
321        DS_U32 retLen;
322        DST_OS_Delay(10);
323        if (DST_OS_ReceiveMessage_NoWait(gWinEventMsgQ, (DS_U32*)&event, sizeof(SWinEventMsg), &retLen) == noError) // ¸Þ½ÃÁö¸¦ ¹ÞÀº °æ¿ì ¸Þ½ÃÁö ó¸®
324        {
325                gWinEventMsgQ_Count--;
326                if (event.cmd == WM_MANAGER_CLOSE) return false;
327                WinMgrMessageProcess(event);
328        }
329        WinMgrKeyProcess();
330
331        int i;
332        for ( i= 1; i < WIN_ID_MAX; i++)
333        {
334                CWindow *pWin = DST_GetWin((WinID)i);
335                if (pWin == 0) continue;
336                switch (pWin->GetState(pWin))
337                {
338                        case 0: // Before Create
339                                {
340                                        pWin->DoShow(pWin);
341                                        pWin->SetState(pWin, 1);
342                                        int j;
343                                        for ( j= 1; j < WIN_ID_MAX; j++)
344                                        {
345                                                CWindow *pWin1 = DST_GetWin((WinID)j);
346                                                if (pWin1) pWin1->ShowWindow(pWin1, (WinID)i);
347                                        }
348                                }
349                                break;
350
351                        case 2: // Before Close
352                                {
353                                        pWin->UpdateScreen(pWin);
354                                        int j;
355                                        for ( j= 1; j < WIN_ID_MAX; j++)
356                                        {
357                                                CWindow *pWin1 = DST_GetWin((WinID)j);
358                                                if (pWin1) pWin1->Hide(pWin1, (WinID)i);
359                                        }
360                                        DST_RemoveWin((WinID)i);
361                                }
362                                break;
363                }
364        }
365        // ŸÀÌ¸Ó Ã³¸®
366        for ( i= 1; i < WIN_ID_MAX; i++)
367        {
368                CWindow *pWin = DST_GetWin((WinID)i);
369                if (pWin == 0) continue;
370                // ŸÀÌ¸Ó Ã³¸®¿Í ±×¸®±âÀÇ µ¿±âÈ­?
371                if (pWin->ProcessTimer(pWin) == true) continue;
372        }
373
374        DST_RECT rectTemp =     DST_GetUpdateRegion();
375        if (rectTemp.w != 0 && rectTemp.h != 0)
376        {
377#if 1   
378                static int imgBuffSize = 0;
379                static OSD_PIXEL_T *imgBuff = 0;
380                if (rectTemp.w * rectTemp.h > imgBuffSize)
381                {
382                        DST_OS_Free(&imgBuff);
383                        imgBuffSize = rectTemp.w * rectTemp.h;
384                        imgBuff = (OSD_PIXEL_T*)DST_OS_Malloc(imgBuffSize*sizeof(OSD_PIXEL_T));
385                }
386                memset(imgBuff,0, rectTemp.w * rectTemp.h*sizeof(OSD_PIXEL_T));
387#else
388                static OSD_PIXEL_T imgBuff[720 * 480];
389                memset(imgBuff,0, 720 * 480*sizeof(OSD_PIXEL_T));
390#endif
391                int i;
392                for ( i= WIN_ID_MAX - 2; i >=0 ; i--)
393                {
394                        CWindow *pWin = DST_GetWin((WinID)i);
395                        if (pWin== 0) continue;
396                        if (pWin->GetVisible(pWin) == false) continue;
397                        OSD_PIXEL_T *srcBuff = pWin->GetImgBuff(pWin);
398                        if (srcBuff == 0) continue;
399                        DST_RECT rectCommon;
400                        DST_RECT rectSrc = pWin->GetSize(pWin);
401                        if (MakeCommonRect(rectTemp, rectSrc, &rectCommon ) == false) continue;
402                        int srcStartX = rectCommon.x - rectSrc.x;
403                        if (srcStartX < 0) srcStartX = 0;
404                        int srcStartY = rectCommon.y - rectSrc.y;
405                        if (srcStartY < 0) srcStartY = 0;
406                        int desStartX = rectCommon.x - rectTemp.x;
407                        if (desStartX < 0) desStartX = 0;
408                        int desStartY = rectCommon.y - rectTemp.y;
409                        if (desStartY < 0) desStartY = 0;
410
411                        OSD_PIXEL_T *des = imgBuff + desStartY * rectTemp.w + desStartX;
412                        OSD_PIXEL_T *src = srcBuff + srcStartY * rectSrc.w + srcStartX;
413                        if (pWin->GetTransparent(pWin))
414                                {
415                                        int y;
416                                        for ( y = 0; y <        rectCommon.h; y++)
417                                        {
418                                                OSD_PIXEL_T* des1 = des;
419                                                OSD_PIXEL_T* src1 = src;
420                                                int x;
421                                                for ( x = 0; x < rectCommon.w; x++)
422                                                {
423                                                        OSD_PIXEL_T max = (sizeof(OSD_PIXEL_T) == 2) ? 0x0F : 0xFF;
424                                                        OSD_PIXEL_T sa,sr,sg,sb;
425                                                        DST_GetColor(*src1, &sa, &sr, &sg, &sb);
426                                                        OSD_PIXEL_T da,dr,dg,db;
427                                                        DST_GetColor(*des1, &da, &dr, &dg, &db);
428                                                        if (sa != 0) // Åõ¸íÀÌ ¾Æ´Ñ °æ¿ì¸¸ ±×¸°´Ù.
429                                                        {
430                                                                if (sa == max || da == 0) // ¼Ò½º°¡ ¿ÏÀüºÒÅõ¸íÀ̰ųª ¹è°æÀÌ Åõ¸íÀΰæ¿ì
431                                                                {
432                                                                        *des1 = *src1;
433                                                                }
434                                                                else // ¹ÝÅõ¸í
435                                                                {
436                                                                        // http://en.wikipedia.org/wiki/Alpha_compositing#Alpha_blending
437                                                                        OSD_PIXEL_T t = (da * (max-sa) + (max/2)) / max;
438                                                                        OSD_PIXEL_T a = sa + t;
439                                                                        if (a > max) a = max;
440                                                                        OSD_PIXEL_T r = ((sr * sa + dr * t) + (a/2)) / a;
441                                                                        OSD_PIXEL_T g = ((sg * sa + dg * t) + (a/2)) / a;
442                                                                        OSD_PIXEL_T b = ((sb * sa + db * t) + (a/2)) / a;
443                                                                        *des1 = DST_SetColor(a, r, g, b);
444                                                                }
445                                                        }
446                                                        des1++;
447                                                        src1++;
448                                                }
449                                                des += rectTemp.w;
450                                                src += rectSrc.w;
451                                        }
452                                }
453                        else
454                        {
455                                int yy = rectCommon.h;
456                                int nDataLength = rectCommon.w*sizeof(OSD_PIXEL_T);
457                                if (rectTemp.w == rectSrc.w)
458                                {
459                                        memcpy(des, src, nDataLength * yy);
460                                }
461                                else
462                                {
463                                        while (yy--)
464                                        {
465                                                memcpy(des, src, nDataLength);
466                                                des += rectTemp.w;
467                                                src += rectSrc.w;
468                                        }
469                                }
470                        }
471                }
472                DST_BlockCopy(imgBuff, rectTemp.x, rectTemp.y, rectTemp.w, rectTemp.h);
473                DST_ResetUpdateRegion();
474        }
475        return true;
476}
477
478
479bool bWinManagerReady = false;
480int DST_IsWinManagerReady(void)
481{
482        return (bWinManagerReady == true) ? 1 : 0;
483}
484
485static void tWinMgr()
486{
487        T();
488        OSD_PIXEL_T tmp=0;
489        DST_BlockCopy(&tmp, 0,0,1,1);
490        DST_CreateWin(WIN_BASIC, WIN_NULL, 0,0,0,0);
491        bWinManagerReady = true;
492        while (1) WinMgrSub();
493}
494
495// À©µµ¿ì ¸Å´ÏÀú µð¹ö±× ÇÔ¼ö
496static void PrintWindowMsg(SWinEventMsg event)
497{
498#if 0
499        switch (event.cmd)
500        {
501                case WM_WIN_CREATE: DST_Printf("WM_WIN_CREATE\n"); break;
502                case WM_WIN_DELETE: DST_Printf("WM_WIN_DELETE\n"); break;
503                case WM_POWER_DOWN_ENTER: DST_Printf("WM_POWER_DOWN_ENTER\n"); break;
504                case WM_SOURCE_FORMAT_DONE: DST_Printf("WM_SOURCE_FORMAT_DONE\n"); break;
505                case WM_MANAGER_CLOSE: DST_Printf("WM_MANAGER_CLOSE\n"); break;
506                case WM_SIGNAL_STATE: DST_Printf("WM_SIGNAL_STATE\n"); break;
507                case WM_MTS_UPDATE: DST_Printf("WM_MTS_UPDATE\n"); break;
508                case WM_MENU_LANGUAGE_CHANGE: DST_Printf("WM_MENU_LANGUAGE_CHANGE\n"); break;
509                case WM_CT_MSG: DST_Printf("WM_CT_MSG\n"); break;
510                case WM_FACTORY_KEYPAD: DST_Printf("WM_FACTORY_KEYPAD\n"); break;
511        }
512#endif
513}
514
515void DST_SendWindowEventWithOnlyCmd(int command)
516{
517        SWinEventMsg event;
518        memset(&event, 0, sizeof(SWinEventMsg));
519        event.cmd=command;
520        DST_SendWindowEvent(event);
521}
522
523void DST_SendWindowEvent(SWinEventMsg event)
524{
525        if (!gWinEventMsgQ) return;
526        PrintWindowMsg(event);
527        //DST_Printf("event.cmd = %d %d\n", event.cmd, event.data32[0]);
528        if (gWinEventMsgQ_Count > 100)
529        {
530                DST_Printf("gWinEventMsgQ_Count = %d\n", gWinEventMsgQ_Count);
531                return;
532        }
533        gWinEventMsgQ_Count++;
534
535#if 0
536        if (gWinEventMsgQ_Count > 100)
537        {
538                DST_Printf("DST_SendWindowEvent - event.cmd = %ld gWinEventMsg Q_Count = %d\n", event.cmd, gWinEventMsgQ_Count);
539                DST_Reset((char*)__func__);
540        }
541#endif
542
543        DST_OS_SendMessage(gWinEventMsgQ, (DS_U32 *)&event, sizeof(SWinEventMsg));
544}
545
546void DST_CreateWin(WinID nID, WinID nParentID, unsigned char nParameter1 , unsigned char nParameter2, unsigned char nParameter3, unsigned char nParameter4)
547{
548        if (nID == WIN_NULL) return;
549        SWinEventMsg event;
550        memset(&event, 0, sizeof(SWinEventMsg));
551        event.cmd = WM_WIN_CREATE;
552        event.data[0] = nID;
553        event.data[1] = nParentID;
554        event.data[2] = nParameter1;
555        event.data[3] = nParameter2;
556        event.data[4] = nParameter3;
557        event.data[5] = nParameter4;
558        DST_SendWindowEvent(event);
559}
560
561void DST_CreateWin2(WinID nID, WinID nParentID, unsigned long nParameter1)
562{
563        SWinEventMsg event;
564        memset(&event, 0, sizeof(SWinEventMsg));
565        event.cmd = WM_WIN_CREATE;
566        event.data[0] = nID;
567        event.data[1] = nParentID;
568        event.data32[1] = nParameter1;
569        DST_SendWindowEvent(event);
570}
571
572void DST_CloseWin(WinID nID)
573{
574        SWinEventMsg event;
575        memset(&event, 0, sizeof(SWinEventMsg));
576        event.cmd = WM_WIN_DELETE;
577        event.data[0] = nID;
578        DST_SendWindowEvent(event);
579}
580
581void DST_WinManagerInit(void)
582{
583        static int WinMngTaskID = 0;
584        if (WinMngTaskID != 0) return;
585        DST_RemoveAllWindows();
586        DST_ResetUpdateRegion();
587        gWinEventMsgQ = DST_OS_CreateMessageQueue("gWinEventMsgQ", 0/*OS_MSGQ_FIFO*/, 300/*100*/, sizeof(SWinEventMsg));
588        WinMngTaskID = DST_OS_SpawnTask((void(*)(void *))tWinMgr, (char*)"tWinMgr", APP_TASK_PRIO_WIN_MGR, WIN_MGR_TASK_STACKSIZE,  0);
589        T();
590}
Note: See TracBrowser for help on using the repository browser.