Skip to content

Commit 6016ace

Browse files
authored
Fixing bitfile's pickle-able-ness (#22)
Our ATS passes some Bitfile objects across multiprocess boundaries and hit: PicklingError: Can't pickle <function unpack_numeric_unsigned at 0x00000000050AFF98>: it's not found as nifpga.bitfile.unpack_numeric_unsigned This change restores Bitfile's ability to be pickled.
1 parent 3b71c1d commit 6016ace

File tree

1 file changed

+12
-13
lines changed

1 file changed

+12
-13
lines changed

nifpga/bitfile.py

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -141,27 +141,26 @@ def __init__(self, name, type_name):
141141
self._signed = type_name[0].lower() == 'i'
142142
self._size_in_bits = int(type_name[1:])
143143
self._data_mask = (1 << self._size_in_bits) - 1
144+
self._signed_bit_mask = 1 << (self._size_in_bits - 1)
144145
for datatype in DataType:
145146
if str(datatype).lower() in type_name.lower():
146147
self._datatype = datatype
147148
break
148149
else:
149150
raise UnsupportedTypeError("Unrecognized type encountered: %s. Consider opening an issue on github.com/ni/nifpga" % type_name)
151+
self._unpack = self._unpack_numeric_signed if self._signed else self._unpack_numeric_unsigned
150152

151-
def unpack_numeric_unsigned(bits_from_fpga):
152-
data = bits_from_fpga & self._data_mask
153-
return data
154-
155-
signed_bit_mask = 1 << (self._size_in_bits - 1)
153+
def _unpack_numeric_unsigned(self, bits_from_fpga):
154+
data = bits_from_fpga & self._data_mask
155+
return data
156156

157-
def unpack_numeric_signed(bits_from_fpga):
158-
data = bits_from_fpga & self._data_mask
159-
if data & signed_bit_mask:
160-
data = data ^ self._data_mask
161-
data += 1
162-
data *= -1
163-
return data
164-
self._unpack = unpack_numeric_signed if self._signed else unpack_numeric_unsigned
157+
def _unpack_numeric_signed(self, bits_from_fpga):
158+
data = bits_from_fpga & self._data_mask
159+
if data & self._signed_bit_mask:
160+
data = data ^ self._data_mask
161+
data += 1
162+
data *= -1
163+
return data
165164

166165
@property
167166
def datatype(self):

0 commit comments

Comments
 (0)