This commit is contained in:
Cort Buffington 2016-09-25 20:39:10 -05:00
parent 8e87c4abbe
commit 62e791a958

View File

@ -43,7 +43,7 @@ def to_binary_19696(_data):
# Applies interleave indecies de-interleave 196 bit array # Applies interleave indecies de-interleave 196 bit array
def deinterleave_19696(_data): def deinterleave_19696(_data):
deint = bitarray(196) deint = bitarray(196, endian='big')
for index in xrange(196): for index in xrange(196):
deint[index] = _data[INDEX_181[index]] # the real math is slower: deint[index] = _data[(index * 181) % 196] deint[index] = _data[INDEX_181[index]] # the real math is slower: deint[index] = _data[(index * 181) % 196]
return deint return deint
@ -51,7 +51,7 @@ def deinterleave_19696(_data):
# Applies BTPC error detection/correction routines (INCOMPLETE) # Applies BTPC error detection/correction routines (INCOMPLETE)
def error_check_19696(_data): def error_check_19696(_data):
count = 0 count = 0
column = bitarray(13) column = bitarray(13, endian='big')
while True: while True:
errors = False errors = False
@ -81,7 +81,7 @@ def error_check_19696(_data):
count += 1 count += 1
print('pass count is {}'.format(count)) print('pass count is {}'.format(count))
if not errors or count > 4: break if not errors or count > 4: break
return (_data, (errors)) return (errors)
# Returns useable LC data - 9 bytes info + 3 bytes RS(12,9) ECC # Returns useable LC data - 9 bytes info + 3 bytes RS(12,9) ECC
def to_bytes_19696(_data): def to_bytes_19696(_data):
@ -105,16 +105,18 @@ if __name__ == '__main__':
from time import time from time import time
# Validation Example # Validation Example
# Good Data
data = '\x2b\x60\x04\x10\x1f\x84\x2d\xd0\x0d\xf0\x7d\x41\x04\x6d\xff\x57\xd7\x5d\xf5\xde\x30\x15\x2e\x20\x70\xb2\x0f\x80\x3f\x88\xc6\x95\xe2' data = '\x2b\x60\x04\x10\x1f\x84\x2d\xd0\x0d\xf0\x7d\x41\x04\x6d\xff\x57\xd7\x5d\xf5\xde\x30\x15\x2e\x20\x70\xb2\x0f\x80\x3f\x88\xc6\x95\xe2'
data = '\x2b\x60\x04\x10\x1f\x84\x2d\xd0\x0d\xf0\x7d\x41\x04\x6d\xff\x57\xd7\x5d\xf5\xde\x30\x15\x2e\x20\x70\xb2\x0f\x80\x3f\x88\xc6\x95\xe2' # Bad Data
data = '\xff\xff\x14\x10\x1f\x84\x2d\xd0\x0d\xf0\x7d\x41\x04\x6d\xff\x57\xd7\x5d\xf5\xde\x30\x15\x2e\x20\x70\xb2\x0f\x80\x3f\x88\xc6\x95\xe2'
t0 = time() t0 = time()
bin_data = to_binary_19696(data) bin_data = to_binary_19696(data)
deint_data = deinterleave_19696(bin_data) deint_data = deinterleave_19696(bin_data)
err_corrected = error_check_19696(deint_data) err_corrected = error_check_19696(deint_data) # This corrects deint_data in place -- it does not return a new array!!!
if err_corrected[1]: if err_corrected:
print('WARNING DATA COULD NOT BE CORRECTED') print('WARNING DATA COULD NOT BE CORRECTED')
ext_data = to_bytes_19696(err_corrected[0]) ext_data = to_bytes_19696(deint_data)
t1 = time() t1 = time()
print('TIME: ', t1-t0, '\n') print('TIME: ', t1-t0, '\n')