summaryrefslogtreecommitdiff
path: root/Jslib/jslibrc/jslibrc_client.c
diff options
context:
space:
mode:
Diffstat (limited to 'Jslib/jslibrc/jslibrc_client.c')
-rwxr-xr-xJslib/jslibrc/jslibrc_client.c653
1 files changed, 653 insertions, 0 deletions
diff --git a/Jslib/jslibrc/jslibrc_client.c b/Jslib/jslibrc/jslibrc_client.c
new file mode 100755
index 0000000..b942a38
--- /dev/null
+++ b/Jslib/jslibrc/jslibrc_client.c
@@ -0,0 +1,653 @@
+#include <jslibrc_client.h>
+#include <divine.h>
+
+
+
+#define DFBCHECK(x...) \
+do { \
+ DFBResult err; \
+ err = x; \
+ if (err != DFB_OK) { \
+ printf ("Fail!! err!=DFB_OK"); \
+ DirectFBError (#x, err); \
+ } \
+} while(0);
+
+
+#define HK_HOMESCREEN DIKS_CUSTOM36
+#define HK_MEDIA DIKS_CUSTOM20
+#define HK_TELETEXT DIKS_CUSTOM17
+#define HK_HTML DIKS_CUSTOM19
+#define HK_DFU DIKS_CUSTOM49
+#define HK_REMOTEAPP DIKS_CUSTOM97
+#define HK_EXPERIENCE DIKS_CUSTOM58
+
+#define DFB_RAW_KEY DIKS_CUSTOM31
+#define DFB_AMBILIGHT DIKS_CUSTOM33
+#define DFB_BATTERY_LOW DIKS_CUSTOM94
+#define DFB_3D DIKS_CUSTOM110
+
+/*added by Vivek to solve brg36mgr#235014 */
+
+#define DFB_NETTV DIKS_CUSTOM19
+#define DFB_MEDIA_CB DIKS_CUSTOM20
+#define DFB_MEDIA_DLNA DIKS_CUSTOM21
+#define DFB_LKB_TACT DIKS_CUSTOM32
+#define DFB_EXPERIENCE DIKS_CUSTOM58
+#define DFB_MUTE DIKS_CUSTOM93
+#define DFB_DEALERRC DIKS_CUSTOM111
+#define DFB_DEALERRC_DEMO DIKS_CUSTOM112
+
+
+
+#define NOTRCSOURCEMASK 0x20
+
+#define MAX_NR_OF_ELEMENTS( a, b ) ( sizeof( a ) / sizeof( b ) )
+
+
+typedef enum{
+ MEDIA_USB,
+ MEDIA_Network,
+ MEDIA_Scenea,
+ MEDIA_DRM
+} EnumMediaStart;
+
+
+static IDiVine *divine = NULL;
+
+static DFBInputDeviceKeySymbol Rc5Sys0TranslateTable[0x80] =
+{
+ /**********************/
+ /* SYSTEM CODE 0x00 */
+ /**********************/
+ /****************************************************************************************************************************************************************************/
+ /* * 0x00 / 0x08 0x01 / 0x09 0x02 / 0x0A 0x03 / 0x0B 0x04 / 0x0C 0x05 / 0x0D 0x06 / 0x0E 0x07 / 0x0F */
+ /****************************************************************************************************************************************************************************/
+ /* 0x00 */ DIKS_0, DIKS_1, DIKS_2, DIKS_3, DIKS_4, DIKS_5, DIKS_6, DIKS_7,
+ /* */ DIKS_8, DIKS_9, DFB_RAW_KEY, DFB_RAW_KEY, DIKS_POWER, DIKS_MUTE, DFB_RAW_KEY, DIKS_INFO,
+ /* 0x10 */ DIKS_VOLUME_UP, DIKS_VOLUME_DOWN, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* 0x20 */ DIKS_CHANNEL_UP, DIKS_CHANNEL_DOWN, DIKS_PREVIOUS, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* 0x30 */ DFB_RAW_KEY, DFB_RAW_KEY, DIKS_REWIND, DFB_RAW_KEY, DIKS_FASTFORWARD, DIKS_PLAYPAUSE, DIKS_STOP, DIKS_RECORD,
+ /* */ DIKS_NEXT, DIKS_F2, DIKS_SUBTITLE, DFB_RAW_KEY, DIKS_TEXT, DIKS_POWER2, DFB_RAW_KEY, DIKS_TUNER,
+ /* 0x40 */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_AMBILIGHT,
+ /* */ DFB_RAW_KEY, DFB_AMBILIGHT, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* 0x50 */ DIKS_CURSOR_UP, DIKS_CURSOR_DOWN, DIKS_MENU, DFB_RAW_KEY, DFB_RAW_KEY, DIKS_CURSOR_LEFT, DIKS_CURSOR_RIGHT, DIKS_OK,
+ /* */ DIKS_MODE, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* 0x60 */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DIKS_RED, DIKS_GREEN, DIKS_YELLOW, DIKS_BLUE, DFB_RAW_KEY,
+ /* 0x70 */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DIKS_ZOOM, DFB_RAW_KEY
+ /****************************************************************************************************************************************************************************/
+};
+
+
+/* sync'ed the table of TV side to fix the issue brg36mgr#235014 , vivek*/
+static DFBInputDeviceKeySymbol Rc5Sys3TranslateTable[0x80] =
+{
+ /**********************/
+ /* SYSTEM CODE 0x03 */
+ /**********************/
+ /****************************************************************************************************************************************************************************/
+ /* * 0x00 / 0x08 0x01 / 0x09 0x02 / 0x0A 0x03 / 0x0B 0x04 / 0x0C 0x05 / 0x0D 0x06 / 0x0E 0x07 / 0x0F */
+ /****************************************************************************************************************************************************************************/
+ /* 0x00 */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DIKS_F1, DIKS_F12, DIKS_F6, DIKS_F7,
+ /* */ DIKS_F8, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* 0x10 */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_MEDIA_CB, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* 0x20 */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* */ DFB_AMBILIGHT, DFB_AMBILIGHT, DFB_RAW_KEY, DFB_RAW_KEY, DIKS_EPG, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* 0x30 */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* */ DIKS_F3, DIKS_F4, DIKS_F12, DFB_RAW_KEY, DFB_RAW_KEY, DIKS_ZOOM, DIKS_ZOOM, DFB_RAW_KEY,
+ /* 0x40 */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* */ DIKS_TUNER, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* 0x50 */ DIKS_ZOOM, DIKS_ZOOM, DFB_RAW_KEY, DIKS_ZOOM, DFB_RAW_KEY, DIKS_ZOOM, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* 0x60 */ DFB_MEDIA_DLNA, DFB_NETTV, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* 0x70 */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DIKS_ZOOM, DIKS_ZOOM, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DIKS_F5, DFB_RAW_KEY, DIKS_ZOOM, DIKS_ZOOM, DFB_RAW_KEY
+ /****************************************************************************************************************************************************************************/
+};
+
+static DFBInputDeviceKeySymbol Rc6TranslateTable[0x100] =
+{
+ /****************************************************************************************************************************************************************************/
+ /* * 0x00 / 0x08 0x01 / 0x09 0x02 / 0x0A 0x03 / 0x0B 0x04 / 0x0C 0x05 / 0x0D 0x06 / 0x0E 0x07 / 0x0F */
+ /****************************************************************************************************************************************************************************/
+ /* 0x00 */ DIKS_0, DIKS_1, DIKS_2, DIKS_3, DIKS_4, DIKS_5, DIKS_6, DIKS_7,
+ /* */ DIKS_8, DIKS_9, DIKS_PREVIOUS, DFB_RAW_KEY, DIKS_POWER, DIKS_MUTE, DFB_RAW_KEY, DIKS_INFO,
+ /* 0x10 */ DIKS_VOLUME_UP, DIKS_VOLUME_DOWN, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DIKS_CHANNEL_UP, DIKS_CHANNEL_DOWN,
+ /* 0x20 */ DIKS_CHANNEL_UP, DIKS_CHANNEL_DOWN, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* */ DIKS_FASTFORWARD, DFB_RAW_KEY, DFB_RAW_KEY, DIKS_REWIND, DIKS_PLAYPAUSE, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* 0x30 */ DIKS_PLAYPAUSE, DIKS_STOP, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DIKS_STOP, DIKS_RECORD,
+ /* */ DIKS_NEXT, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DIKS_TEXT, DIKS_POWER2, DFB_RAW_KEY, DIKS_TUNER,
+ /* 0x40 */ DIKS_OPTION, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DIKS_SUBTITLE, DFB_RAW_KEY,
+ /* */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DIKS_PAGE_DOWN, DIKS_PAGE_UP, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* 0x50 */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DIKS_MENU, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* */ DIKS_CURSOR_UP, DIKS_CURSOR_DOWN, DIKS_CURSOR_LEFT, DIKS_CURSOR_RIGHT, DIKS_OK, DIKS_MODE, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* 0x60 */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DIKS_RED, DIKS_GREEN, DIKS_YELLOW,
+ /* 0x70 */ DIKS_BLUE, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DIKS_SUBTITLE, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* 0x80 */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_AMBILIGHT,
+ /* 0x90 */ HK_EXPERIENCE, DFB_AMBILIGHT, DFB_AMBILIGHT, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DIKS_TUNER,
+ /* 0xA0 */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* 0xB0 */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_3D, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, HK_HTML, DFB_RAW_KEY,
+ /* 0xC0 */ DFB_RAW_KEY, DIKS_PLAYPAUSE, DFB_RAW_KEY, DFB_BATTERY_LOW, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DIKS_EPG, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* 0xD0 */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* */ DFB_RAW_KEY, DIKS_PERIOD, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* 0xE0 */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* 0xF0 */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DIKS_ZOOM, DFB_RAW_KEY, DFB_RAW_KEY,
+ /* */ DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY, DFB_RAW_KEY
+ /****************************************************************************************************************************************************************************/
+};
+
+
+
+static int TranslateKey( int *source, int *system, int *command, DFBInputDeviceKeySymbol *symbol )
+{
+ int translated = 0;
+
+ switch ( *source )
+ {
+ case keySourceRc5:
+ if (
+ ( *system == 0 ) &&
+ ( *command >= 0 ) &&
+ ( *command < ( MAX_NR_OF_ELEMENTS( Rc5Sys0TranslateTable, DFBInputDeviceKeySymbol ) ) )
+ )
+ {
+ *symbol = Rc5Sys0TranslateTable[*command];
+ translated = 1;
+ }
+ else if (
+ ( *system == 3 ) &&
+ ( *command >= 0 ) &&
+ ( *command < ( MAX_NR_OF_ELEMENTS( Rc5Sys3TranslateTable, DFBInputDeviceKeySymbol ) ) )
+ )
+ {
+ *symbol = Rc5Sys3TranslateTable[*command];
+ translated = 1;
+ }
+ break;
+
+ case keySourceRc6:
+ if (
+ ( *system < 2 ) &&
+ ( *command >= 0 ) &&
+ ( *command < ( MAX_NR_OF_ELEMENTS( Rc6TranslateTable, DFBInputDeviceKeySymbol ) ) )
+ )
+ {
+ *symbol = Rc6TranslateTable[*command];
+ translated = 1;
+ }
+ break;
+
+ default:
+ /* unrecognized source: no translation */
+ break;
+ }
+
+ if( !translated )
+ {
+ printf( ( "Key could not be translated, passing DFB_RAW_KEY instead!\n" ) );
+
+ *symbol = DFB_RAW_KEY;
+ translated = 1;
+ }
+
+ return( translated );
+}
+
+static int SendKeyDown(int keyname,int src,int sys,int cmd, int modifier )
+{
+ DFBInputEvent event;
+ unsigned long key_code;
+ if (divine)
+ {
+ key_code = (((unsigned int)src & 0xff) << 24) | (((unsigned int)sys & 0xff) << 16) | ((unsigned int)cmd & 0xffff);
+
+ event.clazz = DFEC_INPUT;
+ event.type = DIET_KEYPRESS;
+ event.key_code = key_code;
+ event.key_symbol = keyname;
+ event.flags = DIEF_KEYCODE | DIEF_KEYSYMBOL;
+ if (modifier)
+ {
+ event.flags |= DIEF_MODIFIERS;
+ event.modifiers = modifier;
+ }
+ DFBCHECK(divine->SendEvent (divine, &event));
+ }
+
+ return 1;
+}
+
+static int SendKeyUp(int keyname,int src,int sys,int cmd, int modifier )
+{
+ DFBInputEvent event;
+ unsigned long key_code;
+ if (divine)
+ {
+ key_code = (((unsigned int)src & 0xff) << 24) | (((unsigned int)sys & 0xff) << 16) | ((unsigned int)cmd & 0xffff);
+
+ event.clazz = DFEC_INPUT;
+ event.type = DIET_KEYRELEASE;
+ event.key_code = key_code;
+ event.key_symbol = keyname;
+ event.flags = DIEF_KEYCODE | DIEF_KEYSYMBOL;
+ if (modifier)
+ {
+ event.flags |= DIEF_MODIFIERS;
+ event.modifiers = modifier;
+ }
+ DFBCHECK(divine->SendEvent (divine, &event));
+ }
+
+ return 1;
+}
+
+static int SendKeyHK(int keyname,int src,int sys,int cmd, int modifier )
+{
+ unsigned long key_code;
+ DFBInputEvent event;
+ int dfb_ret;
+ int ret = 0;
+ if (divine)
+ {
+ src |= NOTRCSOURCEMASK;
+ key_code = (((unsigned int)src & 0xff) << 24) | (((unsigned int)sys & 0xff) << 16) | ((unsigned int)cmd & 0xffff);
+
+ event.clazz = DFEC_INPUT;
+ event.type = DIET_KEYPRESS;
+ event.key_code = key_code;
+ event.key_symbol = keyname;
+ event.flags = DIEF_KEYCODE | DIEF_KEYSYMBOL;
+ if (modifier)
+ {
+ event.flags |= DIEF_MODIFIERS;
+ event.modifiers = modifier;
+ }
+ dfb_ret = divine->SendEvent (divine, &event);
+ printf("ReturnKey retval = %d\n", dfb_ret );
+ ret = 1;
+ }
+
+ return ret;
+}
+
+
+
+
+
+int
+jslibrc_Init( int *argc, char **argv[] )
+{
+ DFBResult ret;
+
+ ret = DiVineInit( argc, argv );
+ if (ret) {
+ return ret;
+ }
+
+ ret = DiVineCreate( &divine );
+ if (ret) {
+ return ret;
+ }
+
+ return 0;
+}
+
+void
+jslibrc_Exit( void )
+{
+ if (divine) {
+ divine->Release(divine);
+ divine = NULL;
+ }
+}
+
+void
+jslibrc_KeyDown( int src, int sys, int cmd )
+{
+ DFBInputDeviceKeySymbol symbol = 0;
+
+ if ( TranslateKey( &src, &sys, &cmd, &symbol ) )
+ {
+ SendKeyDown(symbol, src, sys, cmd, 0);
+ }
+}
+
+void
+jslibrc_KeyUp( int src, int sys, int cmd )
+{
+ DFBInputDeviceKeySymbol symbol = 0;
+
+ if ( TranslateKey( &src, &sys, &cmd, &symbol ) )
+ {
+ SendKeyUp(symbol, src, sys, cmd, 0);
+ }
+}
+
+
+
+int
+jslibrc_RequestActivity( amLib_EnumActivityId act, amLib_EnumActivation mode, int cookie )
+{
+ switch(act)
+ {
+ case amLib_ACT_HomeScreen:
+ SendKeyHK(HK_HOMESCREEN, 0, 0, mode, 0);
+ break;
+ case amLib_ACT_WatchTV:
+// key_KeyDown( source, system, command );
+ SendKeyHK(DIKS_TUNER, 3, 0, mode, 0);
+ break;
+ case amLib_ACT_BrowseUSB:
+ SendKeyHK(HK_MEDIA, MEDIA_USB,0,mode, 0);
+ break;
+ case amLib_ACT_BrowseDLNA:
+ SendKeyHK(HK_MEDIA, MEDIA_Network,0,mode, 0);
+ break;
+ case amLib_ACT_NetTV:
+ SendKeyHK(HK_HTML, 0, 0, mode, 0);
+ break;
+ case amLib_ACT_Dfu:
+ SendKeyHK(HK_DFU, 0, 0, mode, 0);
+ break;
+ case amLib_ACT_Teletext:
+ SendKeyHK(HK_TELETEXT, 0, 0, mode, 0);
+ break;
+ case amLib_ACT_RemoteApp:
+ SendKeyHK(HK_REMOTEAPP, 0, 0, mode, 0);
+ break;
+ default:
+ break;
+ }
+}
+
+
+
+void
+jslibrc_KeyDownEx( int src, int sys, int cmd )
+{
+ DFBInputDeviceKeySymbol symbol = 0;
+
+ if ( TranslateKey( &src, &sys, &cmd, &symbol ) )
+ {
+ SendKeyDown(symbol, src, sys, cmd, DIMM_HYPER);
+ }
+}
+
+void
+jslibrc_KeyUpEx( int src, int sys, int cmd )
+{
+ DFBInputDeviceKeySymbol symbol = 0;
+
+ if ( TranslateKey( &src, &sys, &cmd, &symbol ) )
+ {
+ SendKeyUp(symbol, src, sys, cmd, DIMM_HYPER);
+ }
+}
+
+int
+jslibrc_RequestActivityEx( amLib_EnumActivityId act, amLib_EnumActivation mode, int cookie )
+{
+ switch(act)
+ {
+ case amLib_ACT_HomeScreen:
+ SendKeyHK(HK_HOMESCREEN, 0, 0, mode, DIMM_HYPER);
+ break;
+ case amLib_ACT_WatchTV:
+// key_KeyDown( source, system, command );
+ SendKeyHK(DIKS_TUNER, 3, 0, mode, DIMM_HYPER);
+ break;
+ case amLib_ACT_BrowseUSB:
+ SendKeyHK(HK_MEDIA, MEDIA_USB,0,mode, DIMM_HYPER);
+ break;
+ case amLib_ACT_BrowseDLNA:
+ SendKeyHK(HK_MEDIA, MEDIA_Network,0,mode, DIMM_HYPER);
+ break;
+ case amLib_ACT_NetTV:
+ SendKeyHK(HK_HTML, 0, 0, mode, DIMM_HYPER);
+ break;
+ case amLib_ACT_Dfu:
+ SendKeyHK(HK_DFU, 0, 0, mode, DIMM_HYPER);
+ break;
+ case amLib_ACT_Teletext:
+ SendKeyHK(HK_TELETEXT, 0, 0, mode, DIMM_HYPER);
+ break;
+ case amLib_ACT_RemoteApp:
+ SendKeyHK(HK_REMOTEAPP, 0, 0, mode, DIMM_HYPER);
+ break;
+ default:
+ break;
+ }
+}
+
+void
+jslibrc_HIDKeyDown( int keycode )
+{
+ DFBInputEvent event;
+ int dfb_ret;
+
+ if (divine)
+ {
+ event.clazz = DFEC_INPUT;
+ event.type = DIET_KEYPRESS;
+ event.flags = DIEF_KEYID;
+ event.key_id = keycode;
+ dfb_ret = divine->SendEvent (divine, &event);
+ }
+}
+
+void
+jslibrc_HIDKeyUp( int keycode )
+{
+ DFBInputEvent event;
+ int dfb_ret;
+
+ if (divine)
+ {
+ event.clazz = DFEC_INPUT;
+ event.type = DIET_KEYRELEASE;
+ event.flags = DIEF_KEYID;
+ event.key_id = keycode;
+ dfb_ret = divine->SendEvent (divine, &event);
+ }
+}
+
+int
+jslibrc_HIDKeyDownEx( int keycode )
+{
+ DFBInputEvent event;
+ int dfb_ret = -1;
+
+ if (divine)
+ {
+ event.clazz = DFEC_INPUT;
+ event.type = DIET_KEYPRESS;
+ event.flags = DIEF_KEYSYMBOL;
+ event.key_symbol = keycode;
+ dfb_ret = divine->SendEvent(divine, &event);
+ }
+ return dfb_ret;
+}
+
+int
+jslibrc_HIDKeyUpEx( int keycode )
+{
+ DFBInputEvent event;
+ int dfb_ret = -1;
+
+ if (divine)
+ {
+ event.clazz = DFEC_INPUT;
+ event.type = DIET_KEYRELEASE;
+ event.flags = DIEF_KEYSYMBOL;
+ event.key_symbol = keycode;
+ dfb_ret = divine->SendEvent(divine, &event);
+ }
+ return dfb_ret;
+}
+
+void
+jslibrc_HidMouseMoveAbs ( int x, int y, int xmin, int xmax, int ymin, int ymax )
+{
+ DFBInputEvent event;
+ int dfb_ret;
+
+ if (divine)
+ {
+ event.clazz = DFEC_INPUT;
+ event.type = DIET_AXISMOTION;
+ event.flags = DIEF_TIMESTAMP;
+ gettimeofday( &event.timestamp, NULL );
+ event.flags |= DIEF_AXISABS | DIEF_MIN | DIEF_MAX;
+ event.axis = DIAI_X;
+ event.min = xmin;
+ event.max = xmax;
+ event.axisabs = x;
+ dfb_ret = divine->SendEvent (divine, &event);
+ event.axis = DIAI_Y;
+ event.min = ymin;
+ event.max = ymax;
+ event.axisabs = y;
+ dfb_ret = divine->SendEvent (divine, &event);
+ }
+}
+
+void
+jslibrc_HidMouseMoveRel ( int dx, int dy, int sensitivity )
+{
+ DFBInputEvent event;
+ int dfb_ret;
+
+ if (divine)
+ {
+ event.clazz = DFEC_INPUT;
+ event.type = DIET_AXISMOTION;
+ event.flags = DIEF_TIMESTAMP;
+ gettimeofday( &event.timestamp, NULL );
+ event.flags |= DIEF_AXISREL;
+ event.axis = DIAI_X;
+ event.axisrel = dx*sensitivity;
+ dfb_ret = divine->SendEvent (divine, &event);
+ event.axis = DIAI_Y;
+ event.axisrel = dy*sensitivity;
+ dfb_ret = divine->SendEvent (divine, &event);
+ }
+}
+
+void
+jslibrc_HidMouseMoveAbsEx ( int x, int y )
+{
+ DFBInputEvent event;
+ int dfb_ret;
+
+ if (divine)
+ {
+ event.clazz = DFEC_INPUT;
+ event.type = DIET_AXISMOTION;
+ event.flags = DIEF_AXISABS;
+ event.axis = DIAI_X;
+ event.axisabs = x;
+ dfb_ret = divine->SendEvent (divine, &event);
+ event.axis = DIAI_Y;
+ event.axisabs = y;
+ dfb_ret = divine->SendEvent (divine, &event);
+ }
+}
+
+void
+jslibrc_HidMouseMoveRelEx ( int dx, int dy)
+{
+ DFBInputEvent event;
+ int dfb_ret;
+
+ if (divine)
+ {
+ event.clazz = DFEC_INPUT;
+ event.type = DIET_AXISMOTION;
+ event.flags = DIEF_AXISREL;
+ event.axis = DIAI_X;
+ event.axisrel = dx;
+ dfb_ret = divine->SendEvent (divine, &event);
+ event.axis = DIAI_Y;
+ event.axisrel = dy;
+ dfb_ret = divine->SendEvent (divine, &event);
+ }
+}
+
+void
+jslibrc_HidMouseButtonDown ( int button )
+{
+ DFBInputEvent event;
+ int dfb_ret;
+
+ if (divine)
+ {
+ event.clazz = DFEC_INPUT;
+ event.type = DIET_BUTTONPRESS;
+ event.flags = DIEF_NONE;
+ event.button = DIBI_FIRST;
+ dfb_ret = divine->SendEvent (divine, &event);
+ }
+}
+
+void
+jslibrc_HidMouseButtonUp( int button )
+{
+ DFBInputEvent event;
+ int dfb_ret;
+
+ if (divine)
+ {
+ event.clazz = DFEC_INPUT;
+ event.type = DIET_BUTTONRELEASE;
+ event.flags = DIEF_NONE;;
+ event.button = DIBI_FIRST;
+ dfb_ret = divine->SendEvent (divine, &event);
+ }
+}
+
+void
+jslibrc_HidMouseButtonDownEx ( int button )
+{
+ DFBInputEvent event;
+ int dfb_ret;
+
+ if (divine)
+ {
+ event.clazz = DFEC_INPUT;
+ event.type = DIET_BUTTONPRESS;
+ event.flags = 0;
+ event.button = DIBI_FIRST;
+ dfb_ret = divine->SendEvent (divine, &event);
+ }
+}
+
+void
+jslibrc_HidMouseButtonUpEx( int button )
+{
+ DFBInputEvent event;
+ int dfb_ret;
+
+ if (divine)
+ {
+ event.clazz = DFEC_INPUT;
+ event.type = DIET_BUTTONRELEASE;
+ event.flags = 0;
+ event.button = DIBI_FIRST;
+ dfb_ret = divine->SendEvent (divine, &event);
+ }
+} \ No newline at end of file