colorlight-blaster/colorlight.py

100 lines
27 KiB
Python

import socket
import time
import codecs
import struct
import random
import sys
import os
interface = os.getenv("COLORLIGHT_IFACE", "enp0s31f6")
ETH_P_ALL = 3
ETH_FRAME_LEN = 1540
s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(ETH_P_ALL))
s.bind((interface, 0))
# These frames are sent when LEDVision is set up to feed PC-local config instead
# of using the one stored on the card
preamble_pc_config = [
"1122334455662222334455660104000000000000000000000000000000000000000000ff0500ffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"1122334455662222334455660affffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"11223344556622223344556605000000a8ffffff104002100c00060040008000c6000000000305ef0001800000000000000002000002000000000000000300062b2b2b2b000000010000800080000000000010100000010000970343017e0097101112131415161718191a1b1c1d1e1f000102030405060708090a0b0c0d0e0f800f0000000000000000000000000000000000000000000000800080010001000000000000000000000000000000000000000000000000000000000000000000202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f0000000020000000004000400040000000000000000000000000000001000100000000000000000000000000c3f7e019",
"1122334455662222334455661000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"1122334455662222334455660300000000000000000100000200000300000400000500000600000700000800000900000a00000b00000c00000d00000e00000f00001000001100001200001300001400001500001600001700001800001900001a00001b00001c00001d00001e00001f00002000002100002200002300002400002500002600002700002800002900002a00002b00002c00002d00002e00002f00003000003100003200003300003400003500003600003700003800003900003a00003b00003c00003d00003e00003f01000001000101000201000301000401000501000601000701000801000901000a01000b01000c01000d01000e01000f01001001001101001201001301001401001501001601001701001801001901001a01001b01001c01001d01001e01001f01002001002101002201002301002401002501002601002701002801002901002a01002b01002c01002d01002e01002f01003001003101003201003301003401003501003601003701003801003901003a01003b01003c01003d01003e01003f02000002000102000202000302000402000502000602000702000802000902000a02000b02000c02000d02000e02000f02001002001102001202001302001402001502001602001702001802001902001a02001b02001c02001d02001e02001f02002002002102002202002302002402002502002602002702002802002902002a02002b02002c02002d02002e02002f02003002003102003202003302003402003502003602003702003802003902003a02003b02003c02003d02003e02003f03000003000103000203000303000403000503000603000703000803000903000a03000b03000c03000d03000e03000f03001003001103001203001303001403001503001603001703001803001903001a03001b03001c03001d03001e03001f03002003002103002203002303002403002503002603002703002803002903002a03002b03002c03002d03002e03002f03003003003103003203003303003403003503003603003703003803003903003a03003b03003c03003d03003e03003f",
"1122334455662222334455660300000104000004000104000204000304000404000504000604000704000804000904000a04000b04000c04000d04000e04000f04001004001104001204001304001404001504001604001704001804001904001a04001b04001c04001d04001e04001f04002004002104002204002304002404002504002604002704002804002904002a04002b04002c04002d04002e04002f04003004003104003204003304003404003504003604003704003804003904003a04003b04003c04003d04003e04003f05000005000105000205000305000405000505000605000705000805000905000a05000b05000c05000d05000e05000f05001005001105001205001305001405001505001605001705001805001905001a05001b05001c05001d05001e05001f05002005002105002205002305002405002505002605002705002805002905002a05002b05002c05002d05002e05002f05003005003105003205003305003405003505003605003705003805003905003a05003b05003c05003d05003e05003f06000006000106000206000306000406000506000606000706000806000906000a06000b06000c06000d06000e06000f06001006001106001206001306001406001506001606001706001806001906001a06001b06001c06001d06001e06001f06002006002106002206002306002406002506002606002706002806002906002a06002b06002c06002d06002e06002f06003006003106003206003306003406003506003606003706003806003906003a06003b06003c06003d06003e06003f07000007000107000207000307000407000507000607000707000807000907000a07000b07000c07000d07000e07000f07001007001107001207001307001407001507001607001707001807001907001a07001b07001c07001d07001e07001f07002007002107002207002307002407002507002607002707002807002907002a07002b07002c07002d07002e07002f07003007003107003207003307003407003507003607003707003807003907003a07003b07003c07003d07003e07003f",
"1122334455662222334455660300000208000008000108000208000308000408000508000608000708000808000908000a08000b08000c08000d08000e08000f08001008001108001208001308001408001508001608001708001808001908001a08001b08001c08001d08001e08001f08002008002108002208002308002408002508002608002708002808002908002a08002b08002c08002d08002e08002f08003008003108003208003308003408003508003608003708003808003908003a08003b08003c08003d08003e08003f09000009000109000209000309000409000509000609000709000809000909000a09000b09000c09000d09000e09000f09001009001109001209001309001409001509001609001709001809001909001a09001b09001c09001d09001e09001f09002009002109002209002309002409002509002609002709002809002909002a09002b09002c09002d09002e09002f09003009003109003209003309003409003509003609003709003809003909003a09003b09003c09003d09003e09003f0a00000a00010a00020a00030a00040a00050a00060a00070a00080a00090a000a0a000b0a000c0a000d0a000e0a000f0a00100a00110a00120a00130a00140a00150a00160a00170a00180a00190a001a0a001b0a001c0a001d0a001e0a001f0a00200a00210a00220a00230a00240a00250a00260a00270a00280a00290a002a0a002b0a002c0a002d0a002e0a002f0a00300a00310a00320a00330a00340a00350a00360a00370a00380a00390a003a0a003b0a003c0a003d0a003e0a003f0b00000b00010b00020b00030b00040b00050b00060b00070b00080b00090b000a0b000b0b000c0b000d0b000e0b000f0b00100b00110b00120b00130b00140b00150b00160b00170b00180b00190b001a0b001b0b001c0b001d0b001e0b001f0b00200b00210b00220b00230b00240b00250b00260b00270b00280b00290b002a0b002b0b002c0b002d0b002e0b002f0b00300b00310b00320b00330b00340b00350b00360b00370b00380b00390b003a0b003b0b003c0b003d0b003e0b003f",
"112233445566222233445566030000030c00000c00010c00020c00030c00040c00050c00060c00070c00080c00090c000a0c000b0c000c0c000d0c000e0c000f0c00100c00110c00120c00130c00140c00150c00160c00170c00180c00190c001a0c001b0c001c0c001d0c001e0c001f0c00200c00210c00220c00230c00240c00250c00260c00270c00280c00290c002a0c002b0c002c0c002d0c002e0c002f0c00300c00310c00320c00330c00340c00350c00360c00370c00380c00390c003a0c003b0c003c0c003d0c003e0c003f0d00000d00010d00020d00030d00040d00050d00060d00070d00080d00090d000a0d000b0d000c0d000d0d000e0d000f0d00100d00110d00120d00130d00140d00150d00160d00170d00180d00190d001a0d001b0d001c0d001d0d001e0d001f0d00200d00210d00220d00230d00240d00250d00260d00270d00280d00290d002a0d002b0d002c0d002d0d002e0d002f0d00300d00310d00320d00330d00340d00350d00360d00370d00380d00390d003a0d003b0d003c0d003d0d003e0d003f0e00000e00010e00020e00030e00040e00050e00060e00070e00080e00090e000a0e000b0e000c0e000d0e000e0e000f0e00100e00110e00120e00130e00140e00150e00160e00170e00180e00190e001a0e001b0e001c0e001d0e001e0e001f0e00200e00210e00220e00230e00240e00250e00260e00270e00280e00290e002a0e002b0e002c0e002d0e002e0e002f0e00300e00310e00320e00330e00340e00350e00360e00370e00380e00390e003a0e003b0e003c0e003d0e003e0e003f0f00000f00010f00020f00030f00040f00050f00060f00070f00080f00090f000a0f000b0f000c0f000d0f000e0f000f0f00100f00110f00120f00130f00140f00150f00160f00170f00180f00190f001a0f001b0f001c0f001d0f001e0f001f0f00200f00210f00220f00230f00240f00250f00260f00270f00280f00290f002a0f002b0f002c0f002d0f002e0f002f0f00300f00310f00320f00330f00340f00350f00360f00370f00380f00390f003a0f003b0f003c0f003d0f003e0f003f",
"1122334455662222334455661f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"1122334455662222334455661f000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"1122334455662222334455667600000000000000000000100100200200300300400400500500600600700700800800900900a00a00b00b00c00c00d00d00e00e00f00f01001001101101201201301301401401501501601601701701801801901901a01a01b01b01c01c01d01d01e01e01f0200200bb02124b0224d8023867024cfe0262a302795c02913002aa2402c43d02df8302fbfa0319a90338950358c5037a3d039d0303c11e03e693040d670435a0045f44048a5804b6e204e4e705146d05457a05781205ac3b05e1fc061958065256068cfa06c94b07074d07470707887c07cbb30810b108577b08a01608ea870936d509850309d5180a27180a7b080ad0ee0b28cf0b82b00bde950c3c850c9c840cfe980d62c50dc9100e317e0e9c150f08da0f77d10fe900105c6b10d217114a0a11c4481240d712bfbb1340f913c496144a9714d301155dd815eb23167ae4170d2217a1e118392718d2f7196f561a0e4b1aafd81b54031bfad21ca4471d506a1dff3d1eb0c61f650a201c0d20d5d42192642251c22313f123d8f824a0da256b9d2639442709d527dd5428b3c6298d302a69952b48fc2c2b682d10de2df9622ee4fa2fd3aa30c57631ba6332b27633adb234ac1e35adbc36b29337baa638c5fa39d4933ae6763bfba73d142c3e30083f4f404071d84197d542c13c43ee11451e5846521647894f48c4084a02454b440b4c895d4dd2424f1ebc506ed151c2845319db5474d955d3845735de589bee5a05b75b733c5ce4855e59935fd26c614f1462cf8f6453e265dc1267682168f8156a8bf36c23bd6dbf7a6f5f2c7102d972aa857456337605e977b9ab79717c7b2d617ced5f7eb1798079b482461484169e85eb5687c44089a1608b82bc8d68548f52309140549332c49529829724949924009b27c89d2ff09f3c7ca14d72a362d4a57ca8a79af2a9bdb4abe4f6ae10b8b04102b275d6b4af38b6ed2eb92fbabb76e2bdc2a8c01312c26824c4c1e2c7204ec9836ecbeb48ce57ded0c934d33f4ed5ba30d839e0dabe60dd47b4dfd5e4e268f0e500dce79daeea3f6aece612ef91acf2423cf4f7c6f7b24efa71d8fd3666fffffe00000000100100200200300300400400500500600600700700800800900900a00a00b00b00c00c00d00d00e00e00f00f01001001101101201201301301401401501501601601701701801801901901a01a01b01b01c01c01d01d01e01e01f0200200bb02124b0224d8023867024cfe0262a302795c02913002aa2402c43d02df8302fbfa0319a90338950358c5037a3d039d0303c11e03e693040d670435a0045f44048a5804b6e204e4e705146d05457a05781205ac3b05e1fc06195806525600000000100100200200300300400400500500600600700700800800900900a00a00b00b00c00c00d00d00e00e00f00f01001001101101201201301301401401501501601601701701801801901901a01a01b01b01c01c01d01d01e01e01f0200200bb02124b0224d8023867024cfe0262a302795c02913002aa2402c43d02df8302fbfa0319a90338950358c5037a3d039d0303c11e03e693040d670435a0045f44048a5804b6e204e4e705146d05457a05781205ac3b05e1fc061958065256",
"112233445566222233445566180000000b00034c0a00034c000000030b00034d080001a6010000070b00034c0a00034d0200000d0b00034d0900034c0300001a0b00034c0a00034c040000350b00034c080001a60500006a0b00034d0a00034d060000d30b00034c0900034d070001a600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001008000102030405060708090a0b0c0d0e0f00000000000000000000000000000000000203050608090b0c0e0f1112141517000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"1122334455662222334455661700000000000000000040000000000000000000000000000000000007000000000010001000060010000000100010000500200000001000100004003000000010001000030040000000100010000200500000001000100001006000000010001000000070000000100010010700000010001000100106001000100010001001050020001000100010010400300010001000100103004000100010001001020050001000100010010100600010001000100100007000100010001002070000002000100010020600100020001000100205002000200010001002040030002000100010020300400020001000100202005000200010001002010060002000100010020000700020001000100307000000300010001003060010003000100010030500200030001000100304003000300010001003030040003000100010030200500030001000100301006000300010001003000070003000100010040700000040001000100406001000400010001004050020004000100010040400300040001000100403004000400010001004020050004000100010040100600040001000100400007000400010001005070000005000100010050600100050001000100505002000500010001005040030005000100010050300400050001000100502005000500010001005010060005000100010050000700050001000100607000000600010001006060010006000100010060500200060001000100604003000600010001006030040006000100010060200500060001000100601006000600010001006000070006000100010070700000070001000100706001000700010001007050020007000100010070400300070001000100703004000700010001007020050007000100010070100600070001000100700007000700010001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"1122334455662222334455661b0000ffff0000000041000000050100ffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"1122334455662222334455661b0000ffff000000004b0000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"1122334455662222334455661b0000ffff000000004d0000000428000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"1122334455662222334455661b0000ffff00000000510000000400800080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"1122334455662222334455661b0000ffff00000000550000000500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"1122334455662222334455661b0000ffff00000000b20000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"1122334455662222334455661b0000ffff00000000e20000001a000000000000ffffff00000000000080808032001f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
]
brightness_set_frame = bytearray(
codecs.decode(
"1122334455662222334455660affffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"hex",
)
)
buffer_swap_frame = codecs.decode(
"1122334455662222334455660107000000000000000000000000000000000000000000ff0500ffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"hex",
)
data = [
"112233445566222233445566550000000001000888000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
]
data_preamble = codecs.decode("11223344556622223344556655", "hex")
f = 0
while True:
s.sendall(brightness_set_frame)
# NOTE: our matrix is in fact set up in 256x256 manner and 128x128 pixels
# are in bottom right corner (128x128 offset)
# Thanks to some flexibility in colorlight software we can seemingly skip
# top 128 rows just fine
for y in range(128):
row_length = 256
# This kinda sounds like X offset but is in fact fucked so we need to
# feed full 256 pixels :/
pixel_offset = 0
row_data = bytearray(
data_preamble
+ struct.pack(
">HHHH",
128 + y, # framebuffer y offset
pixel_offset,
row_length,
0x0888, # magic number
)
)
row_data_input = sys.stdin.buffer.read(128 * 3)
if not row_data_input:
exit(1)
row_data.extend(row_data_input)
row_data.extend(row_data_input)
s.sendall(row_data)
# sleep here between frames - if data frames are fed too fast buffer last row might be fucked
# row might be fucked on swap
time.sleep(0.001)
s.sendall(buffer_swap_frame)
f += 1