X-Git-Url: https://scm.cri.mines-paristech.fr/git/minwii.git/blobdiff_plain/d3c874a6ec682857cb29095cb83c679354306f05..6e5711305d3bf1b264625072db77d471c686be03:/src/pywiiuse/PyWiiUse.py?ds=sidebyside diff --git a/src/pywiiuse/PyWiiUse.py b/src/pywiiuse/PyWiiUse.py index baeeb9f..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) @@ -281,6 +323,8 @@ 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