Mise à jour du wrapper python pour gérer la version modifiée par nos soins de wiiuse.
authorpin <pin@fe552daf-6dbe-4428-90eb-1537e0879342>
Tue, 21 Jun 2011 08:36:53 +0000 (08:36 +0000)
committerpin <pin@fe552daf-6dbe-4428-90eb-1537e0879342>
Tue, 21 Jun 2011 08:36:53 +0000 (08:36 +0000)
git-svn-id: https://svn.cri.ensmp.fr/svn/minwii/trunk@346 fe552daf-6dbe-4428-90eb-1537e0879342

src/pywiiuse/PyWiiUse.py
src/pywiiuse/example.py

index 248055c..c86d69b 100755 (executable)
@@ -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)
index 27721b4..a37bf56 100755 (executable)
@@ -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'