def parse_cach(self, cach): self.out(1, 'CACH', squash_bits(cach)) deinterleave(cach, CACH_INTERLEAVING) with self.out.context('CACH HEADER') as out: if not hamming(cach[:7], HAMMING_7_4_3_H, out): return lcss = LCSS[tuple(cach[2:4])] self.out(0, 'ACCESS TYPE:', cach[0]) self.out(0, 'TDMA CHANNEL:', cach[1]) self.out(0, 'LCSS:', get_value(cach[2:4]), lcss) cach_lc = self.caches.setdefault(self.ctx_key(), []) if lcss == 'FIRST': cach_lc[:] = cach[7:] elif lcss == 'CONTINUATION': cach_lc.extend(cach[7:]) elif lcss == 'LAST': cach_lc.extend(cach[7:]) if len(cach_lc) == 68: self.parse_cach_lc(cach_lc) else: self.out(0, 'INCORRECT CACH LC LEN') else: self.out(0, 'CACH UNKNOWN********************')
def parse_bptc_196_96(data, out): deinterleave(data, BPTC_INTERLEAVING) out(2) for i in range(13): out(2, squash_bits((data[1 + i * 15 + j] for j in range(15)), False)) out(2) error_count = 0 for i in range(15): temp = [data[1 + i + 15 * j] for j in range(13)] with out.context('BPTC C {}'.format(i)) as out: if not hamming(temp, HAMMING_13_9_3_H, out): error_count += 1 for j in range(13): data[1 + i + 15 * j] = temp[j] for i in range(13): temp = [data[1 + i * 15 + j] for j in range(15)] with out.context('BPTC R {}'.format(i)) as out: if not hamming(temp, HAMMING_15_11_3_H, out): error_count += 1 for j in range(15): data[1 + i * 15 + j] = temp[j] out(0 if error_count > 0 else 1, 'BPTC ERRORS:', error_count) result = data[4:12] for i in range(1, 9): result.extend(data[i * 15 + 1:i * 15 + 12]) out(1, 'DATA', len(result), squash_bits(result)) out(2) for i in range(9): out(2, squash_bits((result[1 + i * 8 + j] for j in range(8)), False)) out(2) return result
def parse_bptc_68_38(data, out): deinterleave(data, CACH_BPTC_INTERLEAVING) out(2) for i in range(4): out(2, squash_bits((data[i * 17 + j] for j in range(17)), False)) out(2) error_count = 0 for i in range(4): temp = [data[i * 17 + j] for j in range(17)] with out.context('BPTC R {}'.format(i)) as out: if not hamming(temp, HAMMING_17_12_3_H, out): error_count += 1 for j in range(17): data[i * 17 + j] = temp[j] for i in range(17): result = 0 for j in range(4): result ^= data[i + 17 * j] if result != 0: out(0, 'BPTC C {}: crc failed'.format(i)) error_count += 1 out(0 if error_count > 0 else 1, 'BPTC ERRORS:', error_count) result = [] for i in range(3): result.extend(data[i * 17:i * 17 + 12]) out(1, 'DATA', len(result), squash_bits(result)) out(2) for i in range(3): out(2, squash_bits((result[i * 12 + j] for j in range(12)), False)) out(2) return result
def parse_bptc_128_72(data, level): deinterleave(data, EMB_LC_BPTC_INTERLEAVING) out(2) for i in range(8): out(2, ''.join(data[i * 16 + j] for j in range(16))) out(2) error_count = 0 for i in range(4): temp = [data[i * 16 + j] for j in range(16)] with out.context('BPTC R {}'.format(i)) as out: if not hamming(temp, HAMMING_16_11_4_H, out): error_count += 1 for j in range(16): data[i * 16 + j] = temp[j] for i in range(16): result = 0 for j in range(8): result ^= data[i + 16 * j] if result != 0: out(0, 'BPTC C {}: crc failed'.format(i)) error_count += 1 out(0 if error_count > 0 else 1, 'BPTC ERRORS:', error_count) result = [] for i in range(2): result.extend(data[i * 16:i * 16 + 11]) for i in range(2, 7): result.extend(data[i * 16:i * 16 + 10]) for i in range(2, 7): result.append(data[i * 16 + 10]) out(1, 'DATA', len(result), squash_bits(result)) return result
def parse_bptc_32_11(data, out): deinterleave(data, EMB_RC_BPTC_INTERLEAVING) out(2) for i in range(2): out(2, ''.join(data[i * 16 + j] for j in range(16))) out(2) error_count = 0 for i in range(1): temp = [data[i * 16 + j] for j in range(16)] with out.context('BPTC R {}'.format(i)) as out: if not hamming(temp, HAMMING_16_11_4_H, out): error_count += 1 for j in range(16): data[i * 16 + j] = temp[j] for i in range(16): result = 0 for j in range(2): result ^= data[i + 16 * j] if result != 0: out(0, 'BPTC C {}: crc failed'.format(i)) error_count += 1 out(0 if error_count > 0 else 1, 'BPTC ERRORS:', error_count) result = data[0:12] out(1, 'DATA', len(result), squash_bits(result)) out(2) for i in range(1): out(2, squash_bits((result[i * 12 + j] for j in range(12)), False)) out(2) return result
def setUp(self): self.temp = hamming() try: self.assertRaisesRegex except AttributeError: self.assertRaisesRegex = self.assertRaisesRegexp