# -*- coding: utf-8 -*- # Визуализация кадров и сдвигов битов (с синхробитами и подписями). # crc8 как в IR_config.cpp. Синхро (syncBits=3) логически = [~last, last, ~next] (addSync, send_HIGH=1). POLY1=0x31; POLY2=0x8C def crc8(data,poly): c=0xFF for b in data: c^=b for _ in range(8): c=((c<<1)^poly)&0xFF if c&0x80 else (c<<1)&0xFF return c def bits(b): return [(b>>(7-j))&1 for j in range(8)] def bstr(bl): return ''.join(str(x) for x in bl) def onair(frame_bytes, labels): """строка вида: dddddddd sss dddddddd sss ... + строка подписей под байтами""" rows=[] line=''; lab='' for i,by in enumerate(frame_bytes): db=bstr(bits(by)) # синхрогруппа ПОСЛЕ байта (между байтами), кроме последнего if i < len(frame_bytes)-1: last=bits(by)[7]; nxt=bits(frame_bytes[i+1])[0] sy=f"{1-last}{last}{1-nxt}" piece=db+' ['+sy+'] ' else: piece=db # подпись байта, центрируем под 8 бит L=labels[i] if i