Skip to content

Commit d43b7bd

Browse files
author
Thomas Preston
committed
Fixed bytes bug and finished analogue
1 parent eb956c1 commit d43b7bd

File tree

4 files changed

+48
-38
lines changed

4 files changed

+48
-38
lines changed

CHANGELOG

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
Change Log
22
==========
33

4+
v0.7.0
5+
------
6+
- Fixed bytes error in serial_channel_device -- and/or/bulk commands
7+
work again.
8+
- Added support for analogue inputs, PWM and added music helper methods.
9+
410
v0.6.1
511
------
612
- Fixed error with `set_pullup`. Fixes issue #14.

codebug_tether/__init__.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,5 @@
1-
from codebug_tether.core import CodeBug
1+
from codebug_tether.core import (CodeBug,
2+
IO_DIGITAL_OUTPUT,
3+
IO_DIGITAL_INPUT,
4+
IO_ANALOGUE_INPUT,
5+
IO_PWM_OUTPUT)

codebug_tether/core.py

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
IO_DIGITAL_OUTPUT = 0
1212
IO_DIGITAL_INPUT = 1
13-
IO_ANALOG_INPUT = 2
13+
IO_ANALOGUE_INPUT = 2
1414
IO_PWM_OUTPUT = 3
1515

1616
# CHANNEL_INDEX_ROW_0 = 0
@@ -19,31 +19,30 @@
1919
# CHANNEL_INDEX_ROW_3 = 3
2020
# CHANNEL_INDEX_ROW_4 = 4
2121
(CHANNEL_INDEX_OUTPUT,
22-
CHANNEL_INDEX_LEG_INPUT,
23-
CHANNEL_INDEX_BUTTON_INPUT,
24-
CHANNEL_INDEX_ANALOGUE_INPUT_0,
25-
CHANNEL_INDEX_ANALOGUE_INPUT_1,
26-
CHANNEL_INDEX_ANALOGUE_INPUT_2,
27-
CHANNEL_INDEX_IO_DIRECTION_LEGS,
28-
CHANNEL_INDEX_IO_DIRECTION_EXT,
29-
CHANNEL_INDEX_PULLUPS,
30-
CHANNEL_INDEX_EXT_CONF,
31-
CHANNEL_INDEX_SPI_RATE,
32-
CHANNEL_INDEX_SPI_LENGTH,
33-
CHANNEL_INDEX_SPI_CONTROL,
34-
CHANNEL_INDEX_I2C_ADDR,
35-
CHANNEL_INDEX_I2C_LENGTH,
36-
CHANNEL_INDEX_I2C_CONTROL,
37-
CHANNEL_INDEX_UART_RX_OFFSET,
38-
CHANNEL_INDEX_UART_RX_LENGTH,
39-
CHANNEL_INDEX_UART_TX_OFFSET,
40-
CHANNEL_INDEX_UART_TX_LENGTH,
41-
CHANNEL_INDEX_UART_CONTROL,
42-
CHANNEL_INDEX_COLOURTAIL_LENGTH,
43-
CHANNEL_INDEX_COLOURTAIL_CONTROL,
44-
CHANNEL_INDEX_PWM_CONF_0,
45-
CHANNEL_INDEX_PWM_CONF_1,
46-
CHANNEL_INDEX_PWM_CONF_2) = range(5, 31)
22+
CHANNEL_INDEX_LEG_INPUT,
23+
CHANNEL_INDEX_BUTTON_INPUT,
24+
CHANNEL_INDEX_ANALOGUE_CONF,
25+
CHANNEL_INDEX_ANALOGUE_INPUT,
26+
CHANNEL_INDEX_IO_DIRECTION_LEGS,
27+
CHANNEL_INDEX_IO_DIRECTION_EXT,
28+
CHANNEL_INDEX_PULLUPS,
29+
CHANNEL_INDEX_EXT_CONF,
30+
CHANNEL_INDEX_SPI_RATE,
31+
CHANNEL_INDEX_SPI_LENGTH,
32+
CHANNEL_INDEX_SPI_CONTROL,
33+
CHANNEL_INDEX_I2C_ADDR,
34+
CHANNEL_INDEX_I2C_LENGTH,
35+
CHANNEL_INDEX_I2C_CONTROL,
36+
CHANNEL_INDEX_UART_RX_OFFSET,
37+
CHANNEL_INDEX_UART_RX_LENGTH,
38+
CHANNEL_INDEX_UART_TX_OFFSET,
39+
CHANNEL_INDEX_UART_TX_LENGTH,
40+
CHANNEL_INDEX_UART_CONTROL,
41+
CHANNEL_INDEX_COLOURTAIL_LENGTH,
42+
CHANNEL_INDEX_COLOURTAIL_CONTROL,
43+
CHANNEL_INDEX_PWM_CONF_0,
44+
CHANNEL_INDEX_PWM_CONF_1,
45+
CHANNEL_INDEX_PWM_CONF_2) = range(5, 30)
4746

4847
EXTENSION_CONF_IO = 0x01
4948
EXTENSION_CONF_SPI = 0x02
@@ -115,12 +114,11 @@ def read_analogue(self, leg_index):
115114
128
116115
117116
"""
118-
if leg_index == 0:
119-
return self.get(CHANNEL_INDEX_ANALOGUE_INPUT_0)
120-
elif leg_index == 1:
121-
return self.get(CHANNEL_INDEX_ANALOGUE_INPUT_1)
122-
elif leg_index == 2:
123-
return self.get(CHANNEL_INDEX_ANALOGUE_INPUT_2)
117+
# set which leg to read (and do the read)
118+
self.set(CHANNEL_INDEX_ANALOGUE_CONF, leg_index)
119+
# return the value
120+
analogue_value = self.get(CHANNEL_INDEX_ANALOGUE_INPUT)
121+
return struct.unpack('B', analogue_value)[0]
124122

125123
def set_pullup(self, input_index, state):
126124
"""Sets the state of the input pullups. Turn off to enable touch
@@ -153,9 +151,11 @@ def set_leg_io(self, leg_index, direction):
153151
154152
"""
155153
if leg_index < 4:
156-
clear_mask = 0b11 << leg_index * 2
154+
clear_mask = 0xff ^ (0b11 << leg_index * 2)
157155
direction_mask = (0b11 & direction) << leg_index * 2
156+
print("and_mask: {}".format(bin(clear_mask)))
158157
self.and_mask(CHANNEL_INDEX_IO_DIRECTION_LEGS, clear_mask)
158+
print("or_mask: {}".format(bin(direction_mask)))
159159
self.or_mask(CHANNEL_INDEX_IO_DIRECTION_LEGS, direction_mask)
160160
else:
161161
ext_index = leg_index - 4

codebug_tether/serial_channel_device.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ def set_bulk(self, channel_index, values):
111111
self.transaction(
112112
struct.pack('BB',
113113
(CMD_SET_BULK << 5 | channel_index & 0x1f),
114-
len(values)) + bytes(values))
114+
len(values)) + bytes((values,)))
115115

116116
def and_mask(self, channel_index, mask):
117117
"""Returns AndPacket as bytes.
@@ -127,7 +127,7 @@ def and_mask(self, channel_index, mask):
127127
"""
128128
self.transaction(
129129
struct.pack('B', (CMD_AND << 5 | channel_index & 0x1f)) + \
130-
bytes(mask))
130+
bytes((mask,)))
131131

132132
def or_mask(self, channel_index, mask):
133133
"""Returns OrPacket as bytes.
@@ -143,7 +143,7 @@ def or_mask(self, channel_index, mask):
143143
"""
144144
self.transaction(
145145
struct.pack('B', (CMD_OR << 5 | channel_index & 0x1f)) + \
146-
bytes(mask))
146+
bytes((mask,)))
147147

148148
def set_bit(self, channel_index, bit_index, state):
149149
"""Sets a bit in a channel to state."""
@@ -189,7 +189,7 @@ def set_buffer(self, buffer_index, values, offset=0):
189189
struct.pack('BBB',
190190
(CMD_SET_BUFFER << 5 | buffer_index & 0x1f),
191191
offset,
192-
len(values)) + bytes(values))
192+
len(values)) + bytes((values,)))
193193

194194
def transaction(self, tx_bytes):
195195
"""Sends a packet and waits for a ACK response."""

0 commit comments

Comments
 (0)