FireBirdLib - Topfield TMS PVR TAP Programming Library
KeyTranslateHook.c
Go to the documentation of this file.
1#include "FBLib_tap.h"
2
3dword (*Original_TAP_EventHandler)(word event, dword param1, dword param2) = NULL;
4
6
7dword KeyTranslateHook(word event, dword param1, dword param2)
8{
10
11 dword KeyFlags, NativeKeyCode, TranslatedKeyCode;
12 dword ret;
13 dword SysID;
14
15 if(event == EVT_KEY)
16 {
17 KeyFlags = param1 & 0xfffe0000;
18 NativeKeyCode = param1 & 0x0001ffff;
19 TranslatedKeyCode = NativeKeyCode;
20
21 //Nothing to do for RT_5000 and RT_2100
22 SysID = GetSysID();
24 {
25 switch(NativeKeyCode)
26 {
27 case RKEY_Ab: TranslatedKeyCode = 0x10049; break;
28 case RKEY_Bookmark: TranslatedKeyCode = RKEY_VolDown; break;
29 case RKEY_Goto: TranslatedKeyCode = RKEY_ChUp; break;
30 case RKEY_Check: TranslatedKeyCode = RKEY_ChDown; break;
31 case RKEY_NewF1: TranslatedKeyCode = RKEY_VolUp; break;
32 case RKEY_ChUp: TranslatedKeyCode = RKEY_VFormat; break;
33 case RKEY_VolUp: TranslatedKeyCode = RKEY_NewF1; break;
34 case RKEY_VolDown: TranslatedKeyCode = RKEY_Bookmark; break;
35 case 0x10049: TranslatedKeyCode = RKEY_Goto; break;
36 case 0x1004a: TranslatedKeyCode = RKEY_Check; break;
37 }
38 }
39
41 {
42 switch(NativeKeyCode)
43 {
44 case RKEY_F1: TranslatedKeyCode = RKEY_NewF1; break;
45 }
46 }
47
48 ret = Original_TAP_EventHandler(EVT_KEY, TranslatedKeyCode | KeyFlags, param2);
49
50 TRACEEXIT();
51 return (ret ? NativeKeyCode | KeyFlags : 0);
52 }
53
54 ret = Original_TAP_EventHandler(event, param1, param2);
55
56 TRACEEXIT();
57 return ret;
58}
59
60bool KeyTranslate(bool Enable, void *EventHandler)
61{
62 tTMSTAPTaskTable *TMSTAPTaskTable;
63 dword i;
64 tToppyInfo *ToppyInfo;
65 tFWDATHeader *FWDatHeader;
66
67 TRACEENTER();
68
69 //Get toppy information
70 if(LoadFirmwareDat(&FWDatHeader, &ToppyInfo, NULL))
71 {
72 for(i = 0; i < FWDatHeader->NrOfToppyInfoEntries; i++, ToppyInfo++)
73 {
74 if(ToppyInfo->SysID == TAP_GetSystemId())
75 {
76 RemoteType = ToppyInfo->RemoteType;
77 break;
78 }
79 }
80 }
81
82 //Get the address to the TAP table
83 TMSTAPTaskTable = (tTMSTAPTaskTable*)FIS_vTAPTable();
84 if(!TMSTAPTaskTable || (!LibInitialized && !InitTAPex()))
85 {
86 TRACEEXIT();
87 return FALSE;
88 }
89
90 if(Enable && (TMSTAPTaskTable[TAP_TableIndex].TAP_EventHandler == (dword)EventHandler))
91 {
92 Original_TAP_EventHandler = (void*)TMSTAPTaskTable[TAP_TableIndex].TAP_EventHandler;
93 TMSTAPTaskTable[TAP_TableIndex].TAP_EventHandler = (dword)&KeyTranslateHook;
94
95 TRACEEXIT();
96 return TRUE;
97 }
98 else if(!Enable && (TMSTAPTaskTable[TAP_TableIndex].TAP_EventHandler == (dword)KeyTranslateHook))
99 {
102
103 TRACEEXIT();
104 return TRUE;
105 }
106
107 TRACEEXIT();
108 return FALSE;
109}
bool LibInitialized
Definition: InitTAPex.c:8
dword FIS_vTAPTable(void)
Definition: FIS_vTAPTable.c:3
dword KeyTranslateHook(word event, dword param1, dword param2)
bool KeyTranslate(bool Enable, void *EventHandler)
dword(* Original_TAP_EventHandler)(word event, dword param1, dword param2)
REMOTE_TYPE RemoteType
REMOTE_TYPE
Definition: libFireBird.h:123
@ RT_7100PLUS
Definition: libFireBird.h:126
@ RT_7260PLUS
Definition: libFireBird.h:127
@ RT_2100
Definition: libFireBird.h:125
word GetSysID(void)
Definition: GetSysID.c:3
bool InitTAPex(void)
Definition: InitTAPex.c:10
#define TRACEEXIT()
Definition: libFireBird.h:1244
#define TRACEENTER()
Definition: libFireBird.h:1243
dword TAP_TableIndex
Definition: InitTAPex.c:7
bool LoadFirmwareDat(tFWDATHeader **FWDatHeader, tToppyInfo **ToppyInfo, tFWInfo **FWInfo)
dword NrOfToppyInfoEntries
Definition: libFireBird.h:111
REMOTE_TYPE RemoteType
Definition: libFireBird.h:143