source: svn/trunk/zasc/app/DST_HostInterface.cpp

Last change on this file was 2, checked in by phkim, 11 years ago

1.phkim

  1. revision copy newcon3sk r27
File size: 11.9 KB
RevLine 
[2]1#include "DST_HostInterface.h"
2#include "DST_CommonAPI.h"
3#include "DST_WinManagerTask.h"
4#include "DST_UserInterface.h"
5
6void JST_RFUpdate(DS_U8 RF);
7
8int DST_GetScreenHeight()
9{
10        return 480;
11}
12
13int DST_GetScreenWidth()
14{
15        return 720;
16}
17
18static DS_U8 DST_GetKeyCode(DS_U32 Code)
19{
20        //printf("%s|%X\n", __func__,  (int)Code);
21        DS_U8 g_KeyCode = 0;
22        switch (Code)
23        {
24                case 1: g_KeyCode = VK_KEY_PWR;  break;
25                case 2: g_KeyCode = VK_KEY_UP;  break;
26                case 4: g_KeyCode = VK_KEY_DN; break;
27                       
28#if 1 // DSTAR Űº¸µå »ç¿ë
29                case 0xCAFE002D: g_KeyCode = VK_HYPHEN; break;// -
30                case 0xCAFE0030: g_KeyCode = VK_0; break;
31                case 0xCAFE0031: g_KeyCode = VK_1; break;
32                case 0xCAFE0032: g_KeyCode = VK_2; break;
33                case 0xCAFE0033: g_KeyCode = VK_3; break;
34                case 0xCAFE0034: g_KeyCode = VK_4; break;
35                case 0xCAFE0035: g_KeyCode = VK_5; break;
36                case 0xCAFE0036: g_KeyCode = VK_6; break;
37                case 0xCAFE0037: g_KeyCode = VK_7; break;
38                case 0xCAFE0038: g_KeyCode = VK_8; break;
39                case 0xCAFE0039: g_KeyCode = VK_9; break;
40                case 0xCAFE0020: g_KeyCode = VK_MENU; break;// menu : space
41                case 0xCAFE0114: g_KeyCode = VK_LEFT; break;// left;
42                case 0xCAFE0113: g_KeyCode = VK_RIGHT; break;// right;
43                case 0xCAFE0111: g_KeyCode = VK_UP; break;// up;
44                case 0xCAFE0112: g_KeyCode = VK_DN; break;// dn;
45                case 0xCAFE000D: g_KeyCode = VK_OK; break;// OK : enter
46                case 0xCAFE006D: g_KeyCode = VK_MUTE; break;// mute : m
47                case 0xCAFE0065: g_KeyCode = VK_EPG; break;// epg : e
48                case 0xCAFE0061: g_KeyCode = VK_AUDIO; break;// audio : a
49                case 0xCAFE0106: g_KeyCode = VK_VOL_UP; break; // volume up : 6
50                case 0xCAFE0104: g_KeyCode = VK_VOL_DN; break; // volume down : 4
51                case 0xCAFE0117: g_KeyCode = VK_PWR; break; // end
52                case 0xCAFE0108: g_KeyCode = VK_CH_UP; break; // channel up : 8
53                case 0xCAFE0102: g_KeyCode = VK_CH_DN; break; // channel down : 2
54                case 0xCAFE0008: g_KeyCode = VK_PREV; break; // prev : back space
55                case 0xCAFE007A: g_KeyCode = VK_ZOOM; break;// zoom : z
56                case 0xCAFE0073: g_KeyCode = VK_SIGNAL_METER; break;// signal meter : s
57                case 0xCAFE001B: g_KeyCode = VK_CANCEL; break;// back : esc
58#endif   // DSTAR Űº¸µå »ç¿ë           
59                       
60#if 1 // DST ¸®¸ðÄÜ
61                case 0xE41B3412: g_KeyCode = VK_MENU;  break;
62                case 0xFB043412: g_KeyCode = VK_LEFT;  break;
63                case 0xFA053412: g_KeyCode = VK_RIGHT;  break;
64                case 0xFD023412: g_KeyCode = VK_UP;  break;
65                case 0xFC033412: g_KeyCode = VK_DN;  break;
66                case 0xFE013412: g_KeyCode = VK_OK;  break;
67                case 0xFF003412: g_KeyCode = VK_PWR;  break;
68                case 0xE21D3412: g_KeyCode = VK_PREV_MENU;  break;
69                case 0xDF203412: g_KeyCode = VK_PREV_CH;  break;       
70                case 0xEE113412: g_KeyCode = VK_1;  break;
71                case 0xED123412: g_KeyCode = VK_2;  break;
72                case 0xEC133412: g_KeyCode = VK_3;  break;
73                case 0xEB143412: g_KeyCode = VK_4;  break;
74                case 0xEA153412: g_KeyCode = VK_5;  break;
75                case 0xE9163412: g_KeyCode = VK_6;  break;
76                case 0xE8173412: g_KeyCode = VK_7;  break;
77                case 0xE7183412: g_KeyCode = VK_8;  break;
78                case 0xE6193412: g_KeyCode = VK_9;  break;
79                case 0xEF103412: g_KeyCode = VK_0;  break;
80                case 0xDD223412: g_KeyCode = VK_MUTE;  break;
81                case 0xDC233412: g_KeyCode = VK_AUDIO;  break;
82                case 0xDB243412: g_KeyCode = VK_ZOOM;  break;
83                case 0xE51A3412: g_KeyCode = VK_HYPHEN; break;
84                case 0xDA253412: g_KeyCode = VK_CC; break;
85                case 0xF9063412: g_KeyCode = VK_VOL_UP; break;
86                case 0xF8073412: g_KeyCode = VK_VOL_DN; break;
87                case 0xF7083412: g_KeyCode = VK_CH_UP; break;
88                case 0xF6093412: g_KeyCode = VK_CH_DN; break;
89//              case 0xD32C3412: g_KeyCode = VK_STAR; break;
90#endif // DST ¸®¸ðÄÜ
91                       
92#if 1 // °øÀå¿ë HD200K ¸®¸ðÄÜ
93                case 0xE21D0204: g_KeyCode = VK_HYPHEN;  break;
94                case 0xE9160204: g_KeyCode = VK_FAC_OK;  break;
95                case 0xE51A0204: g_KeyCode = VK_FAC_CANCEL;  break;
96#endif // °øÀå¿ë HD200K ¸®¸ðÄÜ
97
98#if 1 //CMB ¸®¸ðÄÜ
99                case 0xFF000820: g_KeyCode = VK_PWR;  break;
100                case 0xF6090820: g_KeyCode = VK_MENU;  break;
101                case 0xF10E0820: g_KeyCode = VK_LEFT;  break;
102                case 0xF00F0820: g_KeyCode = VK_RIGHT;  break;
103                case 0xF40B0820: g_KeyCode = VK_UP;  break;
104                case 0xF30C0820: g_KeyCode = VK_DN;  break;
105                case 0xF20D0820: g_KeyCode = VK_OK;  break;     
106                case 0xBA450820: g_KeyCode = VK_PREV;  break;
107                case 0xF50A0820: g_KeyCode = VK_CANCEL;  break;
108                case 0xE11E0820: g_KeyCode = VK_0;  break;     
109                case 0xEB140820: g_KeyCode = VK_1;  break;     
110                case 0xEA150820: g_KeyCode = VK_2;  break;     
111                case 0xE9160820: g_KeyCode = VK_3;  break;     
112                case 0xE8170820: g_KeyCode = VK_4;  break;     
113                case 0xE7180820: g_KeyCode = VK_5;  break;     
114                case 0xE6190820: g_KeyCode = VK_6;  break;     
115                case 0xE51A0820: g_KeyCode = VK_7;  break;     
116                case 0xE41B0820: g_KeyCode = VK_8;  break;     
117                case 0xE31C0820: g_KeyCode = VK_9;  break;     
118                case 0xFC030820: g_KeyCode = VK_MUTE;  break;   
119                case 0xF8070820: g_KeyCode = VK_CH_UP;  break; 
120                case 0xF7080820: g_KeyCode = VK_CH_DN;  break; 
121                case 0xFA050820: g_KeyCode = VK_VOL_UP;  break; 
122                case 0xF9060820: g_KeyCode = VK_VOL_DN;  break;
123                case 0xEF100820: g_KeyCode = VK_RED;  break;   
124                case 0xEE110820: g_KeyCode = VK_GREEN;  break;
125                case 0xED120820: g_KeyCode = VK_YELLOW;  break; 
126                case 0xEC130820: g_KeyCode = VK_BLUE;  break;                           
127                case 0xB7480820: g_KeyCode = VK_MUTE;  break; // CMB ½ºÆå¿¡ µû¸§. ¸®¸ðÄÜ¿¡´Â ¾øÀ½
128                case 0xDD220820: g_KeyCode = VK_CC;  break; // »õ·Î Ãß°¡µÈ ¿ìÃøÇÏ´Ü CC ¹öư
129                case 0xDC230820: g_KeyCode = VK_HYPHEN; break; // ÁÂÃøÇÏ´Ü ½ºÅ¸¹öưÀ» ÇÏÀÌÇÂÀ¸·Î »ç¿ëÇÑ´Ù
130#endif //CMB ¸®¸ðÄÜ
131                default: g_KeyCode = 0;        break;
132        }
133        return g_KeyCode;       
134}
135
136// ¸®¸ðÄÜÀÇ Äݹé
137struct Key_Msg
138{
139        bool bIsKeyPad;
140        DS_U8 key;
141        DS_U32 tick;
142};
143
144static DS_U32 MsgQ = 0;
145static void DST_AddKey(bool bIsKeyPad, DS_U8 key, DS_U32 tick)
146{
147        if (MsgQ == 0) MsgQ = DST_OS_CreateMessageQueue("qKey", 0, 100, sizeof(Key_Msg));
148        Key_Msg msg;
149        msg.bIsKeyPad = bIsKeyPad;
150        msg.key = key;
151        msg.tick = tick;
152        DST_OS_SendMessage(MsgQ, (DS_U32 *)&msg, sizeof(Key_Msg));
153        T();
154}
155
156static DS_U8 DST_GetKey()
157{
158        if (MsgQ == 0) return 0;
159        Key_Msg msg;
160        DS_U32 retLen = 0;
161        if (DST_OS_ReceiveMessage_NoWait(MsgQ, (DS_U32*)&msg, sizeof(Key_Msg), &retLen) != noError) return 0;
162        if (msg.tick > DST_OS_GetTickCount()) msg.tick = DST_OS_GetTickCount();
163        if (DST_OS_GetTickCount() - msg.tick > 600) return DST_GetKey(); // 600ms ÀÌ»ó Áö³­Å°´Â ¹ö¸°´Ù.
164        if (DHL_GetKeyPadGPIO() > 0) // ŰÆÐµå°¡ ´­·Á ÀÖ´Ù¸é ¸®¸ðÄÜÀº ¹«½ÃÇÑ´Ù.
165        {
166                if (msg.bIsKeyPad == false) return DST_GetKey(); 
167        }
168        return msg.key;
169}
170
171// ¸®¸ðÄÜ Äݹé
172void DST_IrCallBack(DS_U32 key, DS_U32 repeat, DS_U32 tick)
173{
174        DST_Printf("|%s| key = 0x%02X, repeat = %d\n", __func__, (int)key, (int)repeat);
175                static DS_U32 old_repeat = 0;
176        static DS_U32 repeat_count = 0;
177        DS_U8 KeyCode = DST_GetKeyCode(key);
178        //DST_g_LastKeyPressTime = tick;
179        if (repeat == 0)
180        {
181                repeat_count = 0;
182                DST_AddKey(false, KeyCode, tick);
183        }
184        else
185        {
186                switch (KeyCode)
187                {
188                        case VK_VOL_UP:
189                        case VK_VOL_DN:
190                                if (old_repeat == 0 && repeat == 1) repeat_count = 0;
191                                repeat_count++;
192                                if (repeat_count > 3 /*&& repeat_count % 3 == 2*/) DST_AddKey(false, KeyCode, tick); // 330ms°£°Ý ¸®ÇÍ
193                                break;
194                        case VK_CH_UP:
195                        case VK_CH_DN:
196                                if (old_repeat == 0 && repeat == 1) repeat_count = 0;
197                                repeat_count++;
198                                if (repeat_count > 6 /*&& repeat_count % 3 == 2*/) DST_AddKey(false, KeyCode, tick); // 330ms°£°Ý ¸®ÇÍ
199                                break;
200                        case VK_UP:
201                        case VK_DN:
202                                if (old_repeat == 0 && repeat == 1) repeat_count = 0;
203                                repeat_count++;
204                                if (repeat_count > 3 /*&& repeat_count % 3 == 2*/) DST_AddKey(false, KeyCode, tick); // 330ms°£°Ý ¸®ÇÍ
205                                break;
206                        case VK_LEFT:
207                        case VK_RIGHT:
208                                if (old_repeat == 0 && repeat == 1) repeat_count = 0;
209                                repeat_count++;
210                                if (repeat_count > 3 && repeat_count % 2 == 1) DST_AddKey(false, KeyCode, tick); // 330ms°£°Ý ¸®ÇÍ
211                                break;
212                        default:
213                                repeat_count = 0;
214                                break;
215                }
216        }
217        old_repeat = repeat;
218}
219
220static void tKeyPad()
221{
222        DS_U8 PreKeyCode = 0;
223        DS_U32 tick = 0;
224        while(1)
225        {
226                DST_OS_Delay(DST_OS_GetTicksPerSecond()/100); // 10ms
227                DS_U8 KeyCode = DST_GetKeyCode(DHL_GetKeyPadGPIO());
228                //DST_Printf("KeyCode = %d\n", KeyCode);
229                switch (KeyCode)
230                {
231                        case VK_KEY_PWR:
232                                if (PreKeyCode == KeyCode) break;
233                                DST_AddKey(true, KeyCode, DST_OS_GetTickCount()); 
234                                PreKeyCode = KeyCode;
235                                tick = DST_OS_GetTickCount();
236                                break;
237                        case VK_KEY_UP:
238                                if (PreKeyCode == KeyCode) break;
239                                DST_AddKey(true, KeyCode, DST_OS_GetTickCount()); 
240                                PreKeyCode = KeyCode;
241                                tick = DST_OS_GetTickCount();
242                                break;
243                        case VK_KEY_DN:
244                                if (PreKeyCode == KeyCode) break;
245                                DST_AddKey(true, KeyCode, DST_OS_GetTickCount()); 
246                                PreKeyCode = KeyCode;
247                                tick = DST_OS_GetTickCount();
248                                break;
249                        default:
250                                PreKeyCode = KeyCode;
251                                tick = DST_OS_GetTickCount();
252                                break;
253                }
254                switch (KeyCode)
255                {
256                        case VK_KEY_UP:
257                                if (DST_OS_GetTickCount() - tick < DST_OS_GetTicksPerSecond()/3) break;
258                                DST_AddKey(true, KeyCode, DST_OS_GetTickCount());
259                                tick = DST_OS_GetTickCount(); 
260                                break;
261                        case VK_KEY_DN:
262                                if (DST_OS_GetTickCount() - tick < DST_OS_GetTicksPerSecond()/3) break;
263                                DST_AddKey(true, KeyCode, DST_OS_GetTickCount());
264                                tick = DST_OS_GetTickCount(); 
265                                break;
266                        default:
267                                break;
268                }
269        }
270}
271
272void DST_ResetKeyCode()
273{
274       
275}
276
277DS_U8 DST_GetKeyCode() // À©µµ¿ì ¸Þ´ÏÀú¿¡¼­ È£Ãâ
278{
279        static bool bFirst = true;
280        if (bFirst == true)
281        {
282                bFirst = false;
283                DST_OS_SpawnTask((void(*)(void *))tKeyPad, (char*)"DSTAR_KEY", APP_TASK_PRIO_KEYPAD, WIN_MGR_TASK_STACKSIZE,  0);
284        }
285        DS_U8 KeyCode = DST_GetKey();
286        if (KeyCode == 0) return 0;
287        // ¿¬¼Ó Ű ó¸®
288        static DS_U8 KeyCodes[7] = {0,0,0,0,0,0,0};
289        KeyCodes[0] = KeyCodes[1]; KeyCodes[1] = KeyCodes[2]; KeyCodes[2] = KeyCodes[3];
290        KeyCodes[3] = KeyCodes[4]; KeyCodes[4] = KeyCodes[5]; KeyCodes[5] = KeyCodes[6]; KeyCodes[6] = KeyCode;
291        // 062596 Mute
292        if (KeyCodes[0] == VK_0    && KeyCodes[1] == VK_6   && KeyCodes[2] == VK_2 && 
293                        KeyCodes[3] == VK_5 && KeyCodes[4] == VK_9 && KeyCodes[5] == VK_6 && KeyCodes[6] == VK_MUTE)
294        {
295                DST_ResetKeyCode();
296                DST_Printf("Enter Engineer Menu\n");
297                DST_CreateWin(WIN_ENGINEER_MODE); // ¿£Áö´Ï¾î ¸ðµå ÁøÀÔ
298                return 0;
299        }
300        // »óÇÏ Á¿ì ÁÂÁÂ
301        if (KeyCodes[1] == VK_UP    && KeyCodes[2] == VK_DN   && KeyCodes[3] == VK_LEFT && 
302                        KeyCodes[4] == VK_RIGHT && KeyCodes[5] == VK_LEFT && KeyCodes[6] == VK_LEFT)
303        {
304                DST_ResetKeyCode();
305                DST_Printf("Enter Engineer Menu\n");
306                DST_CreateWin(WIN_ENGINEER_MODE); // ¿£Áö´Ï¾î ¸ðµå ÁøÀÔ
307                return 0;
308        }
309        // ³ë¶û 5 ³ì»ö 1
310        if (KeyCodes[1] == VK_YELLOW    && KeyCodes[2] == VK_YELLOW   && KeyCodes[3] == VK_YELLOW && 
311                        KeyCodes[4] == VK_YELLOW && KeyCodes[5] == VK_YELLOW && KeyCodes[6] == VK_GREEN)
312        {
313                DST_ResetKeyCode();
314                DST_Printf("Enter Engineer Menu\n");
315                DST_CreateWin(WIN_ENGINEER_MODE); // ¿£Áö´Ï¾î ¸ðµå ÁøÀÔ
316                return 0;
317        }
318        // 0 Mute 7 Mute
319        if (KeyCodes[3] == VK_0 && KeyCodes[4] == VK_MUTE && KeyCodes[5] == VK_7 && KeyCodes[6] == VK_MUTE)
320        {
321                DST_ResetKeyCode();
322                DST_g_bUseAirFreq = true;
323                JST_RFUpdate(DST_GetIndexByRFNumber(18)); // RF 18¹øÀÌ RF ¾÷µ¥ÀÌÆ® Á֯ļöÀÓ
324                DST_Printf("Enter RF Update Mode\n");
325                DST_CreateWin(WIN_RF_UPDATE); // RF ¾÷µ¥ÀÌÆ® ¸ðµå ÁøÀÔ
326                return 0;
327        }
328        // 0 MUTE 3 MUTE
329        if (KeyCodes[3] == VK_0 && KeyCodes[4] == VK_MUTE && KeyCodes[5] == VK_3 && KeyCodes[6] == VK_MUTE)
330        {
331                DST_ResetKeyCode();
332                DST_Printf("Enter Factory Mode\n");
333                DST_g_bUseAirFreq = true;
334                DST_CreateWin(WIN_FACTORY_MODE); // °øÀå ¸ðµå ÁøÀÔ
335                return 0;
336        }
337        // 0 ÀÌÀü  3 ÀÌÀü
338        if (KeyCodes[3] == VK_0 && KeyCodes[4] == VK_PREV && KeyCodes[5] == VK_3 && KeyCodes[6] == VK_PREV)
339        {
340                DST_ResetKeyCode();
341                DST_Printf("Enter Factory Mode\n");
342                DST_g_bUseAirFreq = true;
343                DST_CreateWin(WIN_FACTORY_MODE); // °øÀå ¸ðµå ÁøÀÔ
344                return 0;
345        }
346        // 0 ÀÌÀüä³Î  3 ÀÌÀüä³Î
347        if (KeyCodes[3] == VK_0 && KeyCodes[4] == VK_PREV_CH && KeyCodes[5] == VK_3 && KeyCodes[6] == VK_PREV_CH)
348        {
349                DST_ResetKeyCode();
350                DST_Printf("Enter Factory Mode\n");
351                DST_g_bUseAirFreq = true;
352                DST_CreateWin(WIN_FACTORY_MODE); // °øÀå ¸ðµå ÁøÀÔ
353                return 0;
354        }
355        //HD200K okŰ 3¹øÀ¸·Î °øÀå¸ðµå ÁøÀÔ
356        if (KeyCodes[4] == VK_FAC_OK&& KeyCodes[5] == VK_FAC_OK && KeyCodes[6] == VK_FAC_OK)
357        {
358                DST_ResetKeyCode();
359                DST_Printf("Enter Factory Mode\n");
360                DST_g_bUseAirFreq = true;
361                DST_CreateWin(WIN_FACTORY_MODE); // °øÀå ¸ðµå ÁøÀÔ
362                return 0;
363        }
364        return  KeyCode;
365}
Note: See TracBrowser for help on using the repository browser.