1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
#!/usr/bin/python
#
# XBMC Media Center
# XBMC Send
# Copyright (c) 2009 team-xbmc
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
import sys, os
import getopt
from socket import *
from time import sleep
try:
from kodi.xbmcclient import *
except:
sys.path.append(os.path.join(os.path.realpath(os.path.dirname(__file__)), '../../lib/python'))
from xbmcclient import *
TYPE_ACTION = 'action'
TYPE_BUTTON = 'button'
TYPE_DELAY = 'delay'
def usage():
print("Usage")
print("\tkodi-send [OPTION] --action=ACTION")
print("\tkodi-send [OPTION] --button=BUTTON")
print('Example')
print('\tkodi-send --host=192.168.0.1 --port=9777 --action="Quit"')
print("Options")
print("\t-?, --help\t\t\tWill bring up this message")
print("\t--host=HOST\t\t\tChoose what HOST to connect to (default=localhost)")
print("\t--port=PORT\t\t\tChoose what PORT to connect to (default=9777)")
print("\t--keymap=KEYMAP\t\t\tChoose which KEYMAP to use for key presses (default=KB)")
print('\t--button=BUTTON\t\t\tSends a key press event to Kodi, this option can be added multiple times to create a macro')
print('\t--action=ACTION\t\t\tSends an action to XBMC, this option can be added multiple times to create a macro')
print('\t-d T, --delay=T\t\t\tWaits for T ms, this option can be added multiple times to create a macro')
pass
def main():
try:
opts, args = getopt.getopt(sys.argv[1:], "?pad:v", ["help", "host=", "port=", "keymap=", "button=", "action=", "delay="])
except getopt.GetoptError as err:
# print help information and exit:
print(str(err)) # will print something like "option -a not recognized"
usage()
sys.exit(2)
ip = "localhost"
port = 9777
keymap = "KB"
actions = []
verbose = False
for o, a in opts:
if o in ("-?", "--help"):
usage()
sys.exit()
elif o == "--host":
ip = a
elif o == "--port":
port = int(a)
elif o == "--keymap":
keymap = a
elif o == "--button":
actions.append({'type': TYPE_BUTTON, 'content': a})
elif o in ("-a", "--action"):
actions.append({'type': TYPE_ACTION, 'content': a})
elif o in ("-d", "--delay"):
actions.append({'type': TYPE_DELAY, 'content': int(a)})
else:
assert False, "unhandled option"
addr = (ip, port)
sock = socket(AF_INET,SOCK_DGRAM)
if len(actions) is 0:
usage()
sys.exit(0)
for action in actions:
print('Sending: %s' % action)
if action['type'] == TYPE_ACTION:
packet = PacketACTION(actionmessage=action['content'], actiontype=ACTION_BUTTON)
elif action['type'] == TYPE_BUTTON:
packet = PacketBUTTON(code=0, repeat=0, down=1, queue=1, map_name=keymap, button_name=action['content'], amount=0)
elif action['type'] == TYPE_DELAY:
time.sleep(action['content'] / 1000.0)
continue
packet.send(sock, addr, uid=0)
if __name__=="__main__":
main()
|