Fix erroneous fix in previous fix.

* A single lbcd is the same as a bbcd, they only actually differ when they're
  in sequences of bytes (duh - _byte_ order)
* There were actually two places in the bitwise code that were reversing
  each other (causing the confusion above), so unify/simplify those bits.
* The previous patch introduced an additional check to string setting,
  which the ict70 driver was violating

Fallout of the fallout from #547.

Sigh.
This commit is contained in:
Dan Smith 2013-03-28 16:34:23 -07:00
parent b71432fbe7
commit 926ecb1ad5
3 changed files with 16 additions and 33 deletions

View File

@ -194,18 +194,16 @@ class arrayDataElement(DataElement):
return str(self.__items)
def __int__(self):
if isinstance(self.__items[0], bbcdDataElement):
if isinstance(self.__items[0], bcdDataElement):
val = 0
for i in self.__items:
if isinstance(self.__items[0], bbcdDataElement):
items = self.__items
else:
items = reversed(self.__items)
for i in items:
tens, ones = i.get_value()
val = (val * 100) + (tens * 10) + ones
return val
elif isinstance(self.__items[0], lbcdDataElement):
val = 0
for i in reversed(self.__items):
ones, tens = i.get_value()
val = (val * 100) + (tens * 10) + ones
return val
else:
raise ValueError("Cannot coerce this to int")
@ -472,30 +470,19 @@ class bcdDataElement(DataElement):
raise TypeError("Unable to set bcdDataElement from type %s" %
type(data))
class lbcdDataElement(bcdDataElement):
_size = 1
def _get_value(self, data):
a = (ord(data) & 0xF0) >> 4
b = ord(data) & 0x0F
return (b, a)
def set_value(self, value):
value = int("%02i" % value, 16)
a = (value & 0xF0) >> 4
b = (value & 0x0F)
self._data[self._offset] = (b << 4) | a
class bbcdDataElement(bcdDataElement):
_size = 1
self._data[self._offset] = int("%02i" % value, 16)
def _get_value(self, data):
a = (ord(data) & 0xF0) >> 4
b = ord(data) & 0x0F
return (a, b)
def set_value(self, value):
self._data[self._offset] = int("%02i" % value, 16)
class lbcdDataElement(bcdDataElement):
_size = 1
class bbcdDataElement(bcdDataElement):
_size = 1
class bitDataElement(intDataElement):
_nbits = 0

View File

@ -77,7 +77,7 @@ class ICT70Bank(icf.IcomBank):
def set_name(self, name):
_bank = self._model._radio._memobj.bank_names[self.index]
_bank.name = name.ljust(8)[:8]
_bank.name = name.ljust(6)[:6]
@directory.register
class ICT70Radio(icf.IcomCloneModeRadio):

View File

@ -147,21 +147,17 @@ class TestBitwiseBCDTypes(BaseTest):
self.assertEqual(data.get_packed(), ("\x00" * len(_data)))
setattr(obj, name, 42)
if definition.startswith("b"):
expected = "\x00\x42"
expected = (len(_data) == 2 and "\x00" or "") + "\x42"
else:
expected = "\x00\x24"
expected = "\x42" + (len(_data) == 2 and "\x00" or "")
raw = data.get_packed()
if len(_data) == 1:
raw = "\x00" + raw
elif definition.startswith("l"):
expected = "".join(reversed(expected))
self.assertEqual(raw, expected)
def test_bbcd(self):
self._test_def("bbcd foo;", "foo", "\x12", 12)
def test_lbcd(self):
self._test_def("lbcd foo;", "foo", "\x12", 21)
self._test_def("lbcd foo;", "foo", "\x12", 12)
def test_bbcd_array(self):
self._test_def("bbcd foo[2];", "foo", "\x12\x34", 1234)