#!/usr/bin/env python3 # This is a simple example showing how you can send a key press event # to XBMC in a non-queued fashion to achieve a button pressed down # event i.e. a key press that repeats. # The repeat interval is currently hard coded in XBMC but that might # change in the future. # NOTE: Read the comments in 'example_button1.py' for a more detailed # explanation. import os from socket import * import sys if os.path.exists("../../lib/python"): # try loading modules from source directory sys.path.append("../../lib/python") from xbmcclient import * ICON_PATH = "../../icons/" else: # fallback to system wide modules from kodi.xbmcclient import * from kodi.defs import * def main(): import time import sys host = "localhost" port = 9777 addr = (host, port) sock = socket(AF_INET,SOCK_DGRAM) # First packet must be HELO and can contain an icon packet = PacketHELO("Example Remote", ICON_PNG, ICON_PATH + "/bluetooth.png") packet.send(sock, addr) # wait for notification window to close (in XBMC) time.sleep(5) # send a up key press using the xbox gamepad map "XG" and button # name "dpadup" ( see PacketBUTTON doc for more details) packet = PacketBUTTON(map_name="XG", button_name="dpadup") packet.send(sock, addr) # wait for a few seconds to see its effect time.sleep(5) # send a down key press using the raw keyboard code packet = PacketBUTTON(code=0x28) packet.send(sock, addr) # wait for a few seconds to see its effect time.sleep(5) # send a right key press using the keyboard map "KB" and button # name "right" packet = PacketBUTTON(map_name="KB", button_name="right") packet.send(sock, addr) # wait for a few seconds to see its effect time.sleep(5) # that's enough, release the button. During release, button code # doesn't matter. packet = PacketBUTTON(code=0x28, down=0) packet.send(sock, addr) # ok we're done, close the connection # Note that closing the connection clears any repeat key that is # active. So in this example, the actual release button event above # need not have been sent. packet = PacketBYE() packet.send(sock, addr) if __name__=="__main__": main()