From 169536e195df324fd0108f97893d26782179a0ef Mon Sep 17 00:00:00 2001 From: jaseg Date: Wed, 14 Jul 2021 18:56:41 +0200 Subject: [PATCH] Data rx/decryption working --- demo/fw/integration_test.png | Bin 0 -> 811 bytes demo/fw/tools/tb_data_encoder.py | 54 +++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 demo/fw/integration_test.png create mode 100644 demo/fw/tools/tb_data_encoder.py diff --git a/demo/fw/integration_test.png b/demo/fw/integration_test.png new file mode 100644 index 0000000000000000000000000000000000000000..50101908b07372cd43f9abe40f368e6bb59a712f GIT binary patch literal 811 zcmeAS@N?(olHy`uVBq!ia0y~yV4T3fz^KE)#K6FibhT(I0|V11PZ!6KiaBo&9y~BZ zk%8etU9*4_hhhtuU?>Bztaub!&L`~VOE~`ho_~kt|JBpQ9_{^JtJoq?m&URG(ER&~ zM=oUXY^>XT+{S&+=P4o2ck3>#beDU4?y~cYg;Tax?fHD=cJw~$qhIc2e|$IhmyU8< z-RE7)uhrbQTzIYO+rJ>rzgvsH>FRzhbnp89?bqDUWV`&QHuvm4J_}D;wQ=6I^!-a~ z{%(nOs!ZKx>^}2#%T6b)-&3Z1zrFN|@cz0}x{vS8*tg~Ns+~tn{m%Vx>ifRf^4jDn1>eM@tt%X=7ZSR*% z&(HjLCL-wHyFSxrbHDSXE_pxq%Pr~WPhx{-Ri2G|Hhtf`ay{cG8&7NhK5Jc-ZQAmF zUU~A~mtSu^+nyDf*tRe1t@+;XPV*jWC%10hUvx-I_sT{0dd(xZ({vXext+gTe@}SP zPVJsO+1mNrzs|LL^dsqSQP=vV!bMeEzf3LHPk%D&d3NI5+NgK0t!<}le#Xl%3TPGr bALReChAA-$Dq5aO09oSc>gTe~DWM4fxl!-8 literal 0 HcmV?d00001 diff --git a/demo/fw/tools/tb_data_encoder.py b/demo/fw/tools/tb_data_encoder.py new file mode 100644 index 0000000..0390837 --- /dev/null +++ b/demo/fw/tools/tb_data_encoder.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 + +import sys + +import numpy as np +import click +import struct +from PIL import Image + +WINDOW_MAGIC = np.array([ + (0x00, 0x10, 0x20), + (0x30, 0x40, 0x50), + (0x60, 0x70, 0x80), + (0x90, 0xa0, 0xb0), + (0xc0, 0xd0, 0xe0), + (0xf0, 0x40, 0x20), + (0x50, 0x40, 0x30), + (0x20, 0x10, 0x00), +]) + +def tb_int_to_px(val): + return np.array([(val//0x10000)&0xff, (val//0x100)&0xff, val&0xff], dtype=np.uint8) + +@click.command() +@click.option('-w', '--width', type=int, default=400) +@click.option('-h', '--height', type=int, default=300) +@click.argument('input_file', type=click.File('rb')) +@click.argument('output_file', type=click.Path(dir_okay=False, writable=True)) +def tb_data_encode(width, height, input_file, output_file): + data = input_file.read() + data = struct.pack('>I', len(data)) + data + data = np.frombuffer(data, dtype=np.uint8) + + data_expanded = np.repeat(data, 2).reshape((-1, 2)) + data_expanded[:, 0] &= 0xf0 + data_expanded[:, 1] = (data_expanded[:, 1] & 0x0f) << 4 + data_expanded = data_expanded.flatten() + + win = np.zeros([height*width*3], dtype=np.uint8) + win[12*3:12*3+len(data_expanded)] = data_expanded + win = win.reshape((height, width, 3)) + + win[0, :8] = WINDOW_MAGIC + win[0, 8] = tb_int_to_px(0) + win[0, 9] = tb_int_to_px(0) + win[0, 10] = tb_int_to_px(width) + win[0, 11] = tb_int_to_px(height) + + print('out:', ' '.join(f'{x:02x}' for x in win.flatten()[:256])) + + Image.fromarray(win).save(output_file) + +if __name__ == '__main__': + tb_data_encode()