SageTV Input Plugins are intended to allow easier ways to control SageTV. It allows you to pass SageCommands, infrared commands and/or keystrokes directly to SageTV. As of SageTV 2.1.0 there's 2 interfaces defined in Sage.jar that are relevant, sage.SageTVInputPlugin and sage.SageTVInputCallback. I've included both of their .java definitions here. The property input_plugin_classes in the properties file defines a comma separated list of class names that implement the sage.SageTVInputPlugin interface below that SageTV should load as additional input control sources. The object(s) will be created by invoking its default constructor. The SageTV directory is part of the classpath. The file plugins.jar in the SageTV directory is also in the classpath. Both of the interface .class files are accessible through the Sage.jar file that came with the SageTV installation. Here's the .java definitions for the 2 interfaces: /* * Copyright 2001-2004 SageTV, LLC. All rights reserved. */ package sage; public interface SageTVInputPlugin { /* * Called to intialize the input plugin. * * callback - the SageTVInputCallback object that should be used to send events to SageTV */ public boolean openInputPlugin(SageTVInputCallback callback); /* * Called to close down the input plugin. * Any resource cleanup should be done here. */ public void closeInputPlugin(); } /* * Copyright 2001-2004 SageTV, LLC. All rights reserved. */ package sage; public interface SageTVInputCallback { /* * SageTV Command IDs LEFT = 2; RIGHT = 3; UP = 4; DOWN = 5; PAUSE = 6; PLAY = 7; FF = 8; REW = 9; TIME_SCROLL = 10; CHANNEL_UP = 11; CHANNEL_DOWN = 12; VOLUME_UP = 13; VOLUME_DOWN = 14; TV = 15; FASTER = 16; SLOWER = 17; GUIDE = 18; POWER = 19; SELECT = 20; WATCHED = 21; RATE_UP = 22; RATE_DOWN = 23; INFO = 24; RECORD = 25; MUTE = 26; FULL_SCREEN = 27; HOME = 28; OPTIONS = 29; NUM0 = 30; NUM1 = 31; NUM2 = 32; NUM3 = 33; NUM4 = 34; NUM5 = 35; NUM6 = 36; NUM7 = 37; NUM8 = 38; NUM9 = 39; SEARCH = 40; SETUP = 41; LIBRARY = 42; POWER_ON = 43; POWER_OFF = 44; MUTE_ON = 45; MUTE_OFF = 46; AR_FILL = 47; AR_4X3 = 48; AR_16X9 = 49; AR_SOURCE = 50; VOLUME_UP2 = 51; VOLUME_DOWN2 = 52; CHANNEL_UP2 = 53; CHANNEL_DOWN2 = 54; PAGE_UP = 55; PAGE_DOWN = 56; PAGE_RIGHT = 57; PAGE_LEFT = 58; PLAY_PAUSE = 59; PREV_CHANNEL = 60; FF_2 = 61; REW_2 = 62; LIVE_TV = 63; DVD_REVERSE_PLAY = 64; DVD_CHAPTER_NEXT = 65; DVD_CHAPTER_PREV = 66; DVD_MENU = 67; DVD_TITLE_MENU = 68; DVD_RETURN = 69; DVD_SUBTITLE_CHANGE = 70; DVD_SUBTITLE_TOGGLE = 71; DVD_AUDIO_CHANGE = 72; DVD_ANGLE_CHANGE = 73; DVD = 74; BACK = 75; FORWARD = 76; CUSTOMIZE = 77; CUSTOM1 = 78; CUSTOM2 = 79; CUSTOM3 = 80; CUSTOM4 = 81; CUSTOM5 = 82; DELETE = 83; MUSIC = 84; SCHEDULE = 85; RECORDINGS = 86; PICTURE_LIBRARY = 87; VIDEO_LIBRARY = 88; STOP = 89; */ /* * Call this method to send a SageTV Command to SageTV. * sageCommandID - ID code for the SageTV Command listed above. */ public void recvCommand(int sageCommandID); /* * Call this method to send a SageTV Command to SageTV with a payload. The payload will be * accessible through the context of any Listener Widget that gets fired as result of this * through the variable named "EventPaylaods". * * sageCommandID - ID code for the SageTV Command listed above. * payload - the payload to pass to SageTV */ public void recvCommand(int sageCommandID, String payload); /* * Call this method to send a SageTV Command to SageTV with a payload. The payloads will be * accessible through the context of any Listener Widget that gets fired as result of this * through the variable named "EventPaylaods". * * sageCommandID - ID code for the SageTV Command listed above. * payloads - the payload(s) to pass to SageTV */ public void recvCommand(int sageCommandID, String[] payloads); /* * Call this method to send SageTV an infrared signal. Used for direct IR control of SageTV. * * infraredCode - the raw data for the infrared signal that uniquely identifies it */ public void recvInfrared(byte[] infraredCode); /* * Call this method to send SageTV a keystroke. Used for sending keystrokes directly to SageTV regardless * of system focus. * * keyChar - the character for the representative keystroke, use zero if there's no corresponding character * keyCode - the keycode for the keystroke as defined in java.awt.event.KeyEvent. * keyModifiers - modifiers keys used such as Ctrl, Alt & Shift as defined in java.awt.event.InputEvent */ public void recvKeystroke(char keyChar, int keyCode, int keyModifiers); }