projects
/
minwii.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Ajout de « Ne me quitte pas » de Jacques Brel.
[minwii.git]
/
src
/
pywiiuse
/
PyWiiUse.py
diff --git
a/src/pywiiuse/PyWiiUse.py
b/src/pywiiuse/PyWiiUse.py
index
55a1c98
..
c86d69b
100755
(executable)
--- a/
src/pywiiuse/PyWiiUse.py
+++ b/
src/pywiiuse/PyWiiUse.py
@@
-12,8
+12,9
@@
hacked for new API and data June 2009
import os
import ctypes
import os
import ctypes
-from ctypes import c_char_p, c_int, c_byte, c_uint, c_uint16, c_float, c_short, c_void_p, c_char
+from ctypes import c_char_p, c_int, c_byte, c_uint, c_uint16, c_float, c_short, c_void_p, c_char
, c_ubyte, c_ushort
from ctypes import CFUNCTYPE, Structure, POINTER, Union, byref, cdll
from ctypes import CFUNCTYPE, Structure, POINTER, Union, byref, cdll
+from ctypes.util import find_library
import sys
# duplicate the wiiuse data structures
import sys
# duplicate the wiiuse data structures
@@
-37,6
+38,12
@@
class vec3b(_Structure):
('z', c_byte),
]
('z', c_byte),
]
+class vec3w(_Structure):
+ _fields_ = [('x', c_ushort),
+ ('y', c_ushort),
+ ('z', c_ushort),
+ ]
+
class vec3f(_Structure):
_fields_ = [('x', c_float),
('y', c_float),
class vec3f(_Structure):
_fields_ = [('x', c_float),
('y', c_float),
@@
-56,8
+63,8
@@
class orient(_Structure):
self.roll, self.pitch, self.yaw, self.a_roll, self.a_pitch)
class accel(_Structure):
self.roll, self.pitch, self.yaw, self.a_roll, self.a_pitch)
class accel(_Structure):
- _fields_ = [('cal_zero', vec3
b
),
- ('cal_g', vec3
b
),
+ _fields_ = [('cal_zero', vec3
w
),
+ ('cal_g', vec3
w
),
('st_roll', c_float),
('st_pitch', c_float),
('st_alpha', c_float),
('st_roll', c_float),
('st_pitch', c_float),
('st_alpha', c_float),
@@
-89,6
+96,16
@@
class ir(_Structure):
('z', c_float),
]
('z', c_float),
]
+ def __str__(self) :
+ l = []
+ pr = l.append
+ for name, typ in self._fields_ :
+ try :
+ pr('(%s, %s)' % (name, getattr(self, name)))
+ except :
+ pass
+ return '\n'.join(l)
+
class joystick(_Structure):
_fields_ = [('max', vec2b),
('min', vec2b),
class joystick(_Structure):
_fields_ = [('max', vec2b),
('min', vec2b),
@@
-102,17
+119,19
@@
class nunchuk(_Structure):
('js', joystick),
('flags', POINTER(c_int)),
('btns', c_byte),
('js', joystick),
('flags', POINTER(c_int)),
('btns', c_byte),
+ ('btns_last', c_byte),
('btns_held', c_byte),
('btns_released', c_byte),
('orient_threshold', c_float),
('btns_held', c_byte),
('btns_released', c_byte),
('orient_threshold', c_float),
- ('accel_threshold', c_
in
t),
- ('accel', vec3
b
),
+ ('accel_threshold', c_
floa
t),
+ ('accel', vec3
w
),
('orient', orient),
('gforce', vec3f),
]
class classic_ctrl(_Structure):
_fields_ = [('btns', c_short),
('orient', orient),
('gforce', vec3f),
]
class classic_ctrl(_Structure):
_fields_ = [('btns', c_short),
+ ('btns_last', c_short),
('btns_held', c_short),
('btns_released', c_short),
('r_shoulder', c_float),
('btns_held', c_short),
('btns_released', c_short),
('r_shoulder', c_float),
@@
-123,16
+142,26
@@
class classic_ctrl(_Structure):
class guitar_hero_3(_Structure):
_fields_ = [('btns', c_short),
class guitar_hero_3(_Structure):
_fields_ = [('btns', c_short),
+ ('btns_last', c_short),
('btns_held', c_short),
('btns_released', c_short),
('whammy_bar', c_float),
('js', joystick),
]
('btns_held', c_short),
('btns_released', c_short),
('whammy_bar', c_float),
('js', joystick),
]
+class motion_plus(_Structure):
+ _fields_ = [('rx', c_short),
+ ('ry', c_short),
+ ('rz', c_short),
+ ('status', c_ubyte),
+ ('ext', c_ubyte)
+ ]
+
class expansion_union(Union):
_fields_ = [('nunchuk', nunchuk),
('classic', classic_ctrl),
('gh3', guitar_hero_3),
class expansion_union(Union):
_fields_ = [('nunchuk', nunchuk),
('classic', classic_ctrl),
('gh3', guitar_hero_3),
+ ('mp', motion_plus)
]
class expansion(_Structure):
]
class expansion(_Structure):
@@
-145,17
+174,21
@@
class wiimote_state(_Structure):
('exp_rjs_ang', c_float),
('exp_ljs_mag', c_float),
('exp_rjs_mag', c_float),
('exp_rjs_ang', c_float),
('exp_ljs_mag', c_float),
('exp_rjs_mag', c_float),
- ('exp_btns', c_u
int16
),
+ ('exp_btns', c_u
short
),
('exp_orient', orient),
('exp_orient', orient),
- ('exp_accel', vec3
b
),
+ ('exp_accel', vec3
w
),
('exp_r_shoulder', c_float),
('exp_l_shoulder', c_float),
('exp_r_shoulder', c_float),
('exp_l_shoulder', c_float),
+ ('drx', c_short),
+ ('dry', c_short),
+ ('drz', c_short),
('ir_ax', c_int),
('ir_ay', c_int),
('ir_distance', c_float),
('orient', orient),
('ir_ax', c_int),
('ir_ay', c_int),
('ir_distance', c_float),
('orient', orient),
- ('btns', c_u
int16
),
+ ('btns', c_u
short
),
('accel', vec3b),
('accel', vec3b),
+ ('exp', expansion)
]
if os.name == 'nt':
]
if os.name == 'nt':
@@
-166,6
+199,12
@@
if os.name == 'nt':
('normal_timeout', c_byte),
('exp_timeout', c_byte),
]
('normal_timeout', c_byte),
('exp_timeout', c_byte),
]
+
+elif sys.platform == 'darwin' :
+ JunkSkip = [('device', c_void_p),
+ ('bdaddr_str', c_char*18)
+ ]
+
else:
JunkSkip = [('bdaddr', c_void_p),
('bdaddr_str', c_char*18),
else:
JunkSkip = [('bdaddr', c_void_p),
('bdaddr_str', c_char*18),
@@
-192,23
+231,37
@@
class wiimote(_Structure):
('state', c_int),
('leds', c_byte),
('battery_level', c_float),
('state', c_int),
('leds', c_byte),
('battery_level', c_float),
+
('flags', c_int),
('flags', c_int),
+
('handshake_state', c_byte),
('handshake_state', c_byte),
+ ('expansion_state', c_ubyte),
('read_req', c_void_p),
('read_req', c_void_p),
+ ('data_req', c_void_p),
+
+ ('cmd_head', c_void_p),
+ ('cmd_tail', c_void_p),
('accel_calib', accel),
('exp', expansion),
('accel_calib', accel),
('exp', expansion),
- ('accel', vec3b),
+
+ ('accel', vec3w),
('orient', orient),
('gforce', vec3f),
('orient', orient),
('gforce', vec3f),
+
('ir', ir),
('ir', ir),
- ('btns', c_uint16),
- ('btns_held', c_uint16),
- ('btns_released', c_uint16),
+
+ ('btns', c_ushort),
+ ('btns_last', c_ushort),
+ ('btns_held', c_ushort),
+ ('btns_released', c_ushort),
('orient_threshold', c_float),
('accel_threshold', c_int),
('orient_threshold', c_float),
('accel_threshold', c_int),
+
('lstate', wiimote_state),
('lstate', wiimote_state),
+
('event', c_int),
('event_buf', c_byte*32),
('event', c_int),
('event_buf', c_byte*32),
+ ('motion_plus_id', c_ubyte*6)
]
wiimote_p = POINTER(wiimote)
]
wiimote_p = POINTER(wiimote)
@@
-239,10
+292,13
@@
min_val,max_val,min_loc,max_loc = cvMinMaxLoc(img)
return CFUNCTYPE(result, *atypes)((name, dll), tuple(aflags))
# get the shared library
return CFUNCTYPE(result, *atypes)((name, dll), tuple(aflags))
# get the shared library
-if os.name == 'nt':
- dll = cdll.LoadLibrary('wiiuse.dll')
-else:
- dll = cdll.LoadLibrary('libwiiuse.so')
+lib = find_library('wiiuse') or find_library('libwiiuse')
+dll = cdll.LoadLibrary(lib)
+
+#if os.name == 'nt':
+# dll = cdll.LoadLibrary('wiiuse.dll')
+#else:
+# dll = cdll.LoadLibrary('libwiiuse.so')
# access the functions
init = cfunc('wiiuse_init', dll, wiimote_pp,
# access the functions
init = cfunc('wiiuse_init', dll, wiimote_pp,
@@
-266,6
+322,9
@@
set_accel_threshold = dll.wiiuse_set_accel_threshold
set_orient_threshold = dll.wiiuse_set_orient_threshold
set_orient_threshold.argtypes = [wiimote_p, c_float]
set_timeout = dll.wiiuse_set_timeout
set_orient_threshold = dll.wiiuse_set_orient_threshold
set_orient_threshold.argtypes = [wiimote_p, c_float]
set_timeout = dll.wiiuse_set_timeout
+set_ir = dll.wiiuse_set_ir
+set_ir_position = dll.wiiuse_set_ir_position
+set_ir_vres = dll.wiiuse_set_ir_vres
def is_pressed(dev, button):
return dev.btns & button
def is_pressed(dev, button):
return dev.btns & button
@@
-332,7
+391,8
@@
nunchuk_button = { 'Z':0x01,
if __name__ == '__main__':
def handle_event(wm):
print 'EVENT', wm.unid, wm.btns
if __name__ == '__main__':
def handle_event(wm):
print 'EVENT', wm.unid, wm.btns
- print wm.gforce.x, wm.gforce.y, wm.gforce.z
+ #print wm.gforce.x, wm.gforce.y, wm.gforce.z
+ print wm.ir
nmotes = 1
wiimotes = init(nmotes)
nmotes = 1
wiimotes = init(nmotes)
@@
-349,13
+409,18
@@
if __name__ == '__main__':
print 'failed to connect to any wiimote.'
sys.exit(1)
print 'failed to connect to any wiimote.'
sys.exit(1)
- set_leds(wiimotes[0], 0x
5
0)
+ set_leds(wiimotes[0], 0x
2
0)
motion_sensing(wiimotes[0], 1)
motion_sensing(wiimotes[0], 1)
+ set_ir(wiimotes[0], 1)
while True:
while True:
- if poll(wiimotes, nmotes):
- for i in range(nmotes):
- m = wiimotes[i][0]
- if wiimotes[i][0].event == EVENT:
- handle_event(wiimotes[i][0])
+ try :
+ if poll(wiimotes, nmotes):
+ print '.'
+ for i in range(nmotes):
+ m = wiimotes[i][0]
+ if wiimotes[i][0].event == EVENT:
+ handle_event(wiimotes[i][0])
+ except KeyboardInterrupt :
+ break