Files

58 lines
1.5 KiB
Python

from PIL import Image
import sys
from lib import *
IMAGE_COUNT = 8
IMAGE_FILENAME = 'img/xmsx_%i.png'
IPV6_SRC = sys.argv[1]
OFFSET_LEFT = 0
OFFSET_TOP = 128
INTERVAL_FRAMES = 1
INTERVAL_PIXELS_US = 10
########################################
def get_targets(left: int, top: int, image_id: int):
image = Image.open(IMAGE_FILENAME % image_id)
for x in range(image.size[0]):
for y in range(image.size[1]):
pixel = image.getpixel((x, y))
if len(pixel) == 1:
r = g = b = pixel[0]
elif len(pixel) == 3:
r, g, b = pixel
elif len(pixel) == 4:
r, g, b = pixel[0:3]
target_ip = f'fdcf:8538:9ad5:3333:{x+left:04x}:{y+top:04x}:11{r:02x}:{g:02x}{b:02x}'
yield target_ip
TARGETS = []
for i in range(IMAGE_COUNT):
new_targets = set(get_targets(OFFSET_LEFT, OFFSET_TOP, i))
if len(TARGETS):
new_targets = new_targets - TARGETS[-1]
TARGETS.append(new_targets)
if __name__ == '__main__':
sock = ICMPv6Socket(IPV6_SRC)
# Animation
while True:
for i in range(IMAGE_COUNT):
wait_until_time_unit(INTERVAL_FRAMES)
print(f'Sending {len(TARGETS[i])} packets for image {i+1}...')
sock.ping_batch(TARGETS[i], INTERVAL_PIXELS_US)
# # Still frame
# while True:
# i = 0
# print(f'Sending {len(TARGETS[i])} packets for image {i+1}...')
# sock.ping_batch(TARGETS[i])
# t = datetime.utcnow()
# sleep(60 - t.second)