[pyglet] push by evil.phillip@gmail.com - Issue 625: check length of IOHIDValue before trying to get integer val... on 2013-01-08 03:11 GMT

10 views
Skip to first unread message

pyg...@googlecode.com

unread,
Jan 7, 2013, 10:11:55 PM1/7/13
to pyglet-...@googlegroups.com
Revision: a1644a430e75
Branch: default
Author: Phillip Nguyen <evil.p...@gmail.com>
Date: Mon Jan 7 19:10:41 2013
Log: Issue 625: check length of IOHIDValue before trying to get
integer value.
http://code.google.com/p/pyglet/source/detail?r=a1644a430e75

Modified:
/pyglet/input/darwin_hid.py

=======================================
--- /pyglet/input/darwin_hid.py Mon Jun 18 01:35:07 2012
+++ /pyglet/input/darwin_hid.py Mon Jan 7 19:10:41 2013
@@ -178,6 +178,9 @@
iokit.IOHIDValueGetIntegerValue.restype = CFIndex
iokit.IOHIDValueGetIntegerValue.argtypes = [c_void_p]

+iokit.IOHIDValueGetLength.restype = CFIndex
+iokit.IOHIDValueGetLength.argtypes = [c_void_p]
+
iokit.IOHIDValueGetTimeStamp.restype = c_uint64
iokit.IOHIDValueGetTimeStamp.argtypes = [c_void_p]

@@ -204,7 +207,14 @@
assert(cf.CFGetTypeID(valueRef) == iokit.IOHIDValueGetTypeID())
self.valueRef = valueRef
self.timestamp = iokit.IOHIDValueGetTimeStamp(valueRef)
- self.intvalue = iokit.IOHIDValueGetIntegerValue(valueRef)
+ self.length = iokit.IOHIDValueGetLength(valueRef)
+ if self.length <= 4:
+ self.intvalue = iokit.IOHIDValueGetIntegerValue(valueRef)
+ else:
+ # Values may be byte data rather than integers.
+ # e.g. the PS3 controller has a 39-byte HIDValue element.
+ # We currently do not try to handle these cases.
+ self.intvalue = None
elementRef = c_void_p(iokit.IOHIDValueGetElement(valueRef))
self.element = HIDDeviceElement.get_element(elementRef)

Reply all
Reply to author
Forward
0 new messages