aboutsummaryrefslogtreecommitdiffstats
path: root/usb_hid_usages2plist
diff options
context:
space:
mode:
authorDominik Pich2013-03-17 13:33:20 +0100
committerDominik Pich2013-03-17 13:33:20 +0100
commitd4ffd217288cfc0d2798b3df67ab20bc867a7f7e (patch)
treeab40c6fb784fbe578713381ea5cf1159934a9c34 /usb_hid_usages2plist
parent77d2a9f99a289d247c5a8561879489c8f8162055 (diff)
downloadDDHidLib-d4ffd217288cfc0d2798b3df67ab20bc867a7f7e.tar.bz2
DDHIDLib 1.1.1
Diffstat (limited to 'usb_hid_usages2plist')
-rwxr-xr-xusb_hid_usages2plist46
1 files changed, 46 insertions, 0 deletions
diff --git a/usb_hid_usages2plist b/usb_hid_usages2plist
new file mode 100755
index 0000000..f50c5b9
--- /dev/null
+++ b/usb_hid_usages2plist
@@ -0,0 +1,46 @@
+#!/usr/bin/env ruby
+
+$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "vendor"))
+$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "lib"))
+
+require 'pp'
+require 'plist'
+
+usb_hid_usages = ARGV[0]
+
+usage_tables = {}
+current_usage = 0;
+current_usage_table = nil
+
+File.open(usb_hid_usages).each_line do |line|
+ next if line =~ /^\s*#/
+ next if line =~ /^\s*$/
+
+ if (line =~ /^(\d+)\s+(.*)\s*$/)
+ current_usage = $1.to_i
+ usage_description = $2
+ current_usage_table = {'usages' => {}, 'ranges' => {}}
+ current_usage_table['description'] = usage_description
+ usage_tables[current_usage] = current_usage_table
+ elsif (line =~ /^\s+(\S+)\s+(.*)\s*$/)
+ usage_page = $1
+ usage_page_description = $2
+
+ if (usage_page =~ /^0x((?:\d|[a-fA-F])+)$/)
+ usage_page = $1.hex
+ current_usage_table['usages'][usage_page] = usage_page_description
+ elsif (usage_page =~ /^0x((?:\d|[a-fA-F])+)-((?:\d|[a-fA-F])+)$/)
+ range_start = $1.hex
+ range_end = $2.hex
+ range = "{#{range_start}, #{range_end}}";
+ current_usage_table['ranges'][range] = usage_page_description
+ elsif (usage_page == '*')
+ current_usage_table['default'] = usage_page_description
+ else
+ puts "Uknown page: #{usage_page}"
+ end
+
+ end
+end
+
+puts Plist.dump(usage_tables) \ No newline at end of file