From 9b75512984021067c9b39866df2be3d2389d172c Mon Sep 17 00:00:00 2001 From: pin Date: Tue, 21 Jun 2011 08:36:53 +0000 Subject: [PATCH] =?utf8?q?Mise=20=C3=A0=20jour=20du=20wrapper=20python=20p?= =?utf8?q?our=20g=C3=A9rer=20la=20version=20modifi=C3=A9e=20par=20nos=20so?= =?utf8?q?ins=20de=20wiiuse.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit git-svn-id: https://svn.cri.ensmp.fr/svn/minwii/trunk@346 fe552daf-6dbe-4428-90eb-1537e0879342 --- src/pywiiuse/PyWiiUse.py | 66 ++++++++++++++++++++++++++++++++-------- src/pywiiuse/example.py | 14 +++------ 2 files changed, 59 insertions(+), 21 deletions(-) diff --git a/src/pywiiuse/PyWiiUse.py b/src/pywiiuse/PyWiiUse.py index 248055c..c86d69b 100755 --- a/src/pywiiuse/PyWiiUse.py +++ b/src/pywiiuse/PyWiiUse.py @@ -12,7 +12,7 @@ hacked for new API and data June 2009 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.util import find_library import sys @@ -38,6 +38,12 @@ class vec3b(_Structure): ('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), @@ -57,8 +63,8 @@ class orient(_Structure): self.roll, self.pitch, self.yaw, self.a_roll, self.a_pitch) class accel(_Structure): - _fields_ = [('cal_zero', vec3b), - ('cal_g', vec3b), + _fields_ = [('cal_zero', vec3w), + ('cal_g', vec3w), ('st_roll', c_float), ('st_pitch', c_float), ('st_alpha', c_float), @@ -113,17 +119,19 @@ class nunchuk(_Structure): ('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), - ('accel_threshold', c_int), - ('accel', vec3b), + ('accel_threshold', c_float), + ('accel', vec3w), ('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), @@ -134,16 +142,26 @@ class classic_ctrl(_Structure): 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), ] +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), + ('mp', motion_plus) ] class expansion(_Structure): @@ -156,17 +174,21 @@ class wiimote_state(_Structure): ('exp_rjs_ang', c_float), ('exp_ljs_mag', c_float), ('exp_rjs_mag', c_float), - ('exp_btns', c_uint16), + ('exp_btns', c_ushort), ('exp_orient', orient), - ('exp_accel', vec3b), + ('exp_accel', vec3w), ('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), - ('btns', c_uint16), + ('btns', c_ushort), ('accel', vec3b), + ('exp', expansion) ] if os.name == 'nt': @@ -177,6 +199,12 @@ if os.name == 'nt': ('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), @@ -203,23 +231,37 @@ class wiimote(_Structure): ('state', c_int), ('leds', c_byte), ('battery_level', c_float), + ('flags', c_int), + ('handshake_state', c_byte), + ('expansion_state', c_ubyte), ('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', vec3b), + + ('accel', vec3w), ('orient', orient), ('gforce', vec3f), + ('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), + ('lstate', wiimote_state), + ('event', c_int), ('event_buf', c_byte*32), + ('motion_plus_id', c_ubyte*6) ] wiimote_p = POINTER(wiimote) diff --git a/src/pywiiuse/example.py b/src/pywiiuse/example.py index 27721b4..a37bf56 100755 --- a/src/pywiiuse/example.py +++ b/src/pywiiuse/example.py @@ -10,8 +10,9 @@ import os nmotes = 2 -def handle_event(wm): - print '--- EVENT [wiimote id %i] ---' % wm.unid, wm.btns, wm.btns_held, wm.btns_released +def handle_event(wmp): + wm = wmp[0] + print '--- EVENT [wiimote id %i] ---' % wm.unid if wm.btns: for name,b in wiiuse.button.items(): if wiiuse.is_pressed(wm, b): @@ -84,6 +85,7 @@ else: for i in range(nmotes): wiiuse.set_leds(wiimotes[i], wiiuse.LED[i]) + print 'adr:', wiimotes[i][0].bdaddr_str #wiiuse.rumble(wiimotes[i], 1) # for i in range(nmotes): @@ -93,22 +95,16 @@ for i in range(nmotes): wiiuse.motion_sensing(wiimotes[0], 1) -fp = file('mydata.txt', 'w') -t0 = time.time() try: while True: if wiiuse.poll(wiimotes, nmotes): for i in range(nmotes): m = wiimotes[i][0] if wiimotes[i][0].event == wiiuse.EVENT: - #handle_event(wiimotes[i][0]) - wm = wiimotes[i][0] - t = time.time() - t0 - print >>fp, i, t, wm.gforce.x, wm.gforce.y, wm.gforce.z + handle_event(wiimotes[i]) except KeyboardInterrupt: for i in range(nmotes): wiiuse.set_leds(wiimotes[i], 0) #wiiuse.disconnect(wiimotes[i]) -fp.close() print 'done' -- 2.20.1