## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
##
-#
-# Nintendo Wii Nunchuk decoder
-#
-
-#
-# TODO: Description
-#
-# http://wiibrew.org/wiki/Wiimote/Extension_Controllers/Nunchuck
-# http://todbot.com/blog/2008/02/18/wiichuck-wii-nunchuck-adapter-available/
-# https://www.sparkfun.com/products/9281
-#
+# Nintendo Wii Nunchuk protocol decoder
import sigrokdecode as srd
-# States
-IDLE = 0
-START = 1
-NUNCHUK_SLAVE = 2
-INIT = 3
-INITIALIZED = 4
-
class Decoder(srd.Decoder):
+ api_version = 1
id = 'nunchuk'
name = 'Nunchuk'
longname = 'Nintendo Wii Nunchuk'
- desc = 'Decodes the Nintendo Wii Nunchuk I2C-based protocol.'
- longdesc = '...'
+ desc = 'Nintendo Wii Nunchuk controller protocol.'
license = 'gplv2+'
inputs = ['i2c']
outputs = ['nunchuck']
- probes = [] # TODO
+ probes = []
+ optional_probes = [] # TODO
options = {}
annotations = [
- ['TODO', 'TODO'],
+ ['Text', 'Human-readable text'],
]
def __init__(self, **kwargs):
- self.state = IDLE # TODO: Can we assume a certain initial state?
+ self.state = 'IDLE' # TODO: Can we assume a certain initial state?
self.sx = self.sy = self.ax = self.ay = self.az = self.bz = self.bc = 0
self.databytecount = 0
def decode(self, ss, es, data):
- cmd, databyte, ack_bit = data
+ cmd, databyte = data
if cmd == 'START': # TODO: Handle 'Sr' here, too?
- self.state = START
+ self.state = 'START'
elif cmd == 'START REPEAT':
pass # FIXME
else:
pass # TODO: What to do here? Ignore? Error?
- elif cmd == 'DATA READ' and self.state == INITIALIZED:
+ elif cmd == 'DATA READ' and self.state == 'INITIALIZED':
if self.databytecount == 0:
self.sx = databyte
elif self.databytecount == 1:
# TODO: If 6 bytes read -> save and reset
# TODO
- elif cmd == 'DATA READ' and self.state != INITIALIZED:
+ elif cmd == 'DATA READ' and self.state != 'INITIALIZED':
pass
elif cmd == 'DATA WRITE':
- if self.state == IDLE:
- self.state = INITIALIZED
+ if self.state == 'IDLE':
+ self.state = 'INITIALIZED'
return
-
- if databyte == 0x40 and self.state == START:
- self.state = INIT
- elif databyte == 0x00 and self.state == INIT:
+
+ if databyte == 0x40 and self.state == 'START':
+ self.state = 'INIT'
+ elif databyte == 0x00 and self.state == 'INIT':
self.put(ss, es, self.out_ann, [0, ['Initialize nunchuk']])
- self.state = INITIALIZED
+ self.state = 'INITIALIZED'
else:
pass # TODO
elif cmd == 'STOP':
- self.state = INITIALIZED
+ self.state = 'INITIALIZED'
self.databytecount = 0