2016-11-10 12:55:24 +08:00
|
|
|
#!/usr/bin/env python
|
|
|
|
|
# coding = utf-8
|
2016-11-11 16:20:31 +08:00
|
|
|
#
|
|
|
|
|
# created by strawmanbobi 2016-11-10
|
2016-11-10 12:55:24 +08:00
|
|
|
|
|
|
|
|
import sys
|
|
|
|
|
import xml.dom.minidom
|
|
|
|
|
import struct
|
|
|
|
|
|
2016-11-27 21:33:07 +08:00
|
|
|
keymap_dict_empty = ()
|
|
|
|
|
|
2016-11-10 13:08:43 +08:00
|
|
|
keymap_dict_ac = ()
|
|
|
|
|
|
2016-11-10 12:55:24 +08:00
|
|
|
keymap_dict_tv = ("POWER", "MUTE", "UP", "DOWN", "LEFT", "RIGHT", "OK", "VOL+", "VOL-", "BACK", "INPUT", "MENU", "HOME",
|
|
|
|
|
"SET", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9")
|
|
|
|
|
|
|
|
|
|
keymap_dict_stb = ("POWER", "MUTE", "UP", "DOWN", "LEFT", "RIGHT", "OK", "VOL+", "VOL-", "BACK", "INPUT", "MENU",
|
|
|
|
|
"UP_PAGE", "DOWN_PAGE", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9")
|
|
|
|
|
|
|
|
|
|
keymap_dict_nw = ("POWER", "UP", "DOWN", "LEFT", "RIGHT", "OK", "VOL+", "VOL-", "BACK", "MENU", "HOME", "0", "1", "2",
|
|
|
|
|
"3", "4", "5", "6", "7", "8", "9")
|
|
|
|
|
|
|
|
|
|
keymap_dict_iptv = ("POWER", "MUTE", "UP", "DOWN", "LEFT", "RIGHT", "OK", "VOL+", "VOL-", "BACK", "INPUT", "MENU",
|
|
|
|
|
"UP_PAGE", "DOWN_PAGE", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9")
|
|
|
|
|
|
|
|
|
|
keymap_dict_dvd = ("POWER", "UP", "DOWN", "LEFT", "RIGHT", "OK", "VOL+", "VOL-", "PLAY", "PAUSE", "EJECT", "BACK",
|
|
|
|
|
"FOR", "MENU", "SWITCH")
|
|
|
|
|
|
|
|
|
|
keymap_dict_fan = ("POWER", "UP", "DOWN", "LEFT", "RIGHT", "OK", "SPEED+", "SPEED-", "SWING", "SPEED", "MODE", "BACK",
|
|
|
|
|
"HOME", "MENU", "SWITCH")
|
|
|
|
|
|
|
|
|
|
keymap_dict_projector = ("POWER", "UP", "DOWN", "LEFT", "RIGHT", "OK", "VOL+", "VOL-", "ZOOM+", "MENU1", "ZOOM-",
|
|
|
|
|
"BACK", "HOME", "MENU2", "SWITCH")
|
|
|
|
|
|
2019-10-04 14:37:41 +08:00
|
|
|
keymap_dict_stereo = ("POWER1", "UP", "DOWN", "LEFT", "RIGHT", "OK", "VOL+", "VOL-", "MUTE", "MENU1", "POWER2", "BACK",
|
|
|
|
|
"HOME", "MENU2", "SWITCH")
|
|
|
|
|
|
2016-11-10 12:55:24 +08:00
|
|
|
keymap_dict_light = ("POWER", "COLOR_1", "COLOR_2", "COLOR_3", "COLOR_4", "COLOR_0", "BRIGHT", "DARK", "POWER_ON",
|
|
|
|
|
"RAINBOW", "POWER_OFF", "BACK", "HOME", "MENU", "SWITCH")
|
|
|
|
|
|
2016-11-27 21:33:07 +08:00
|
|
|
keymap_dict_bstb = ("POWER", "MUTE", "UP", "DOWN", "LEFT", "RIGHT", "OK", "VOL+", "VOL-", "BACK", "INPUT", "MENU",
|
|
|
|
|
"UP_PAGE", "DOWN_PAGE", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9")
|
|
|
|
|
|
2016-11-10 12:55:24 +08:00
|
|
|
keymap_dict_clean_robot = ("POWER", "UP", "DOWN", "LEFT", "RIGHT", "START", "PLUS", "MINUS", "AUTO", "SPOT", "SPEED",
|
|
|
|
|
"TIMING", "CHARGE", "PLAN", "SWITCH")
|
|
|
|
|
|
2016-11-10 13:08:43 +08:00
|
|
|
keymap_dict_air_cleaner = ("POWER", "UP", "DOWN", "LEFT", "RIGHT", "ION", "PLUS", "MINUS", "AUTO", "SPEED", "MODE",
|
|
|
|
|
"TIMING", "LIGHT", "FORCE", "SWITCH")
|
|
|
|
|
|
2019-05-12 10:54:15 +08:00
|
|
|
keymap_dict_dyson = ("POWER", "WIND_SPEED_PLUS", "WIND_SPEED_MINUS", "TIMER_MINUS", "TIMER_PLUS", "AUTO",
|
|
|
|
|
"TEMP_PLUS", "TEMP_MINUS", "SWING", "DIFFUSION", "FAV", "TIMING", "SLEEP", "COOL", "SWITCH")
|
|
|
|
|
|
2016-11-27 21:33:07 +08:00
|
|
|
keymap_dicts = [keymap_dict_empty,
|
|
|
|
|
keymap_dict_ac, keymap_dict_tv, keymap_dict_stb, keymap_dict_nw, keymap_dict_iptv, keymap_dict_dvd,
|
|
|
|
|
keymap_dict_fan, keymap_dict_stereo, keymap_dict_projector, keymap_dict_light, keymap_dict_bstb,
|
2019-05-12 10:54:15 +08:00
|
|
|
keymap_dict_clean_robot, keymap_dict_ac, keymap_dict_dyson]
|
2016-11-10 12:55:24 +08:00
|
|
|
|
|
|
|
|
class CKeyMap:
|
|
|
|
|
def __init__(self, name, value):
|
|
|
|
|
self.name = name
|
|
|
|
|
self.value = value
|
|
|
|
|
|
|
|
|
|
def print_info(self):
|
|
|
|
|
print self.name, self.value
|
|
|
|
|
|
|
|
|
|
def pack_key(self, output_file):
|
|
|
|
|
for i in range(len(self.value)):
|
|
|
|
|
output_file.write(struct.pack('B', self.value[i]))
|
|
|
|
|
|
|
|
|
|
def pack_null(self, output_file):
|
|
|
|
|
for i in range(len(self.value)):
|
|
|
|
|
output_file.write(struct.pack('B', 0))
|
|
|
|
|
|
|
|
|
|
def pack_length(self, output_file):
|
|
|
|
|
output_file.write(struct.pack('B', len(self.value)))
|
|
|
|
|
print len(self.value)
|
|
|
|
|
|
|
|
|
|
|
2016-11-10 13:08:43 +08:00
|
|
|
def print_remote(input_file, real_path, real_name, category):
|
2016-11-10 12:55:24 +08:00
|
|
|
print input_file
|
|
|
|
|
dom = xml.dom.minidom.parse(input_file)
|
|
|
|
|
root = dom.documentElement
|
|
|
|
|
protocol_node = root.getElementsByTagName('protocol')
|
|
|
|
|
protocol = protocol_node[0].firstChild.data
|
|
|
|
|
|
|
|
|
|
filename = real_name.split('.')
|
|
|
|
|
|
|
|
|
|
binary = open(real_path + "/" + protocol + "#" + filename[0] + ".bin", 'wb')
|
|
|
|
|
tag = struct.pack('4s', 'irda')
|
|
|
|
|
binary.write(tag)
|
|
|
|
|
|
|
|
|
|
print protocol
|
|
|
|
|
keymap = root.getElementsByTagName('key-map')
|
|
|
|
|
key = []
|
|
|
|
|
empty_value = []
|
|
|
|
|
for i in keymap[0].childNodes:
|
|
|
|
|
if i.nodeType == i.ELEMENT_NODE:
|
|
|
|
|
key_map_str = i.firstChild.data.encode('ascii').split(' ')
|
|
|
|
|
value = []
|
|
|
|
|
empty_value = []
|
|
|
|
|
for m in range(len(key_map_str)):
|
|
|
|
|
value.append(int(key_map_str[m], 16))
|
|
|
|
|
empty_value.append(int('0', 16))
|
|
|
|
|
name = i.getAttribute('name').encode('ascii')
|
|
|
|
|
data = CKeyMap(name, value)
|
|
|
|
|
key.append(data)
|
|
|
|
|
|
|
|
|
|
key[0].pack_length(binary)
|
2016-11-10 19:44:47 +08:00
|
|
|
for j in range(len(keymap_dicts[int(category)])):
|
|
|
|
|
empty_key = CKeyMap(keymap_dicts[int(category)][j], empty_value)
|
2016-11-10 12:55:24 +08:00
|
|
|
find = 0
|
|
|
|
|
for n in range(len(key)):
|
2016-11-10 19:44:47 +08:00
|
|
|
if cmp(keymap_dicts[int(category)][j], key[n].name) == 0:
|
2016-11-10 12:55:24 +08:00
|
|
|
key[n].print_info()
|
|
|
|
|
key[n].pack_key(binary)
|
|
|
|
|
find = 1
|
|
|
|
|
break
|
|
|
|
|
if find == 0:
|
2016-11-10 19:44:47 +08:00
|
|
|
print "Don't file this key %s" % (keymap_dicts[int(category)][j])
|
2016-11-10 12:55:24 +08:00
|
|
|
empty_key.pack_key(binary)
|
|
|
|
|
|
|
|
|
|
fileName = sys.argv[1]
|
|
|
|
|
realName = sys.argv[2]
|
|
|
|
|
realPath = sys.argv[3]
|
2016-11-10 13:08:43 +08:00
|
|
|
inCategory = sys.argv[4]
|
2016-11-10 12:55:24 +08:00
|
|
|
fileType = fileName.split('.')
|
|
|
|
|
if cmp(fileType[1], "xml") == 0:
|
2016-11-10 13:08:43 +08:00
|
|
|
print_remote(fileName, realPath, realName, inCategory)
|