2023-09-11 14:10:06 +00:00
|
|
|
import socket
|
|
|
|
import time
|
|
|
|
|
|
|
|
from matelightfont import *
|
|
|
|
|
|
|
|
|
|
|
|
FLASZKI_UDP_IP = "10.8.0.196"
|
|
|
|
FLASZKI_UDP_PORT = 65506
|
|
|
|
|
|
|
|
HEADER_DRGB = 2
|
|
|
|
HEADER_TIME_INFINITE = 255
|
|
|
|
HEADER_TIME_WAIT = 0
|
|
|
|
|
|
|
|
DISPLAY_RES_X = 12
|
|
|
|
DISPLAY_RES_Y = 10
|
|
|
|
|
|
|
|
|
|
|
|
current_text_offset=0
|
|
|
|
|
|
|
|
def get_char_pixel_length(ch):
|
|
|
|
l = {
|
|
|
|
'k': letter_k[0],
|
|
|
|
'u': letter_u[0],
|
|
|
|
'p': letter_p[0],
|
|
|
|
'a': letter_a[0],
|
|
|
|
' ': letter_space[0]
|
|
|
|
}.get(ch, 0)
|
|
|
|
return l + 1
|
|
|
|
|
|
|
|
def get_char_pixel_bitmap(ch):
|
|
|
|
l = {
|
|
|
|
'k': letter_k[1],
|
|
|
|
'u': letter_u[1],
|
|
|
|
'p': letter_p[1],
|
|
|
|
'a': letter_a[1],
|
|
|
|
' ': letter_space[1]
|
|
|
|
}.get(ch, ["0000","0000","0000","0000","0000"])
|
|
|
|
return l
|
|
|
|
|
|
|
|
def get_string_pixel_length(st):
|
|
|
|
l=0
|
|
|
|
for c in st:
|
|
|
|
l += get_char_pixel_length(c)
|
|
|
|
|
|
|
|
return l
|
|
|
|
|
|
|
|
def print_letter(ch):
|
|
|
|
white=(255,255,255)
|
|
|
|
for x in range(0,ch[0]):
|
|
|
|
for y in range(0,5):
|
|
|
|
if ch[1][y][x]=='1':
|
2023-09-11 14:51:31 +00:00
|
|
|
pset(x,y,255,255,255)
|
2023-09-11 14:10:06 +00:00
|
|
|
|
|
|
|
def print_letter_debug(ch):
|
|
|
|
print("Debug letter print")
|
|
|
|
|
|
|
|
def render_thread_debug(name):
|
|
|
|
print("Debug render thread")
|
|
|
|
|
|
|
|
render_buffer = bytearray(0)
|
|
|
|
|
|
|
|
def prepare_render_buffer(r,g,b):
|
|
|
|
global render_buffer
|
|
|
|
render_buffer = bytearray([HEADER_DRGB,HEADER_TIME_INFINITE])
|
|
|
|
for y in range(DISPLAY_RES_Y):
|
|
|
|
for x in range(DISPLAY_RES_X):
|
|
|
|
render_buffer.append(r)
|
|
|
|
render_buffer.append(g)
|
|
|
|
render_buffer.append(b)
|
|
|
|
|
2023-09-11 14:34:49 +00:00
|
|
|
def clear_render_buffer(r,g,b):
|
2023-09-11 14:10:06 +00:00
|
|
|
global render_buffer
|
|
|
|
for y in range(DISPLAY_RES_Y):
|
|
|
|
for x in range(DISPLAY_RES_X):
|
2023-09-11 14:34:49 +00:00
|
|
|
x3 = x*3
|
|
|
|
res3 = DISPLAY_RES_X*3
|
|
|
|
render_buffer[2+x3+y*res3]=0
|
|
|
|
render_buffer[3+x3+y*res3]=0
|
|
|
|
render_buffer[4+x3+y*res3]=255
|
2023-09-11 14:10:06 +00:00
|
|
|
|
2023-09-11 14:51:31 +00:00
|
|
|
def pset(x,y,r,g,b):
|
|
|
|
global render_buffer
|
|
|
|
x3 = x*3
|
|
|
|
res3 = DISPLAY_RES_X*3
|
|
|
|
render_buffer[2+x3+y*res3]=r
|
|
|
|
render_buffer[3+x3+y*res3]=g
|
|
|
|
render_buffer[4+x3+y*res3]=b
|
|
|
|
|
|
|
|
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
|
|
|
|
|
|
def flush_render():
|
|
|
|
global sock
|
|
|
|
sock.sendto(render_buffer, (FLASZKI_UDP_IP, FLASZKI_UDP_PORT))
|
|
|
|
|
|
|
|
def close_sock():
|
|
|
|
global sock
|
|
|
|
sock.sendto(bytearray([HEADER_DRGB, HEADER_TIME_WAIT]), (FLASZKI_UDP_IP, FLASZKI_UDP_PORT))
|
|
|
|
|
2023-09-11 14:10:06 +00:00
|
|
|
|
|
|
|
def render_stub():
|
|
|
|
global render_buffer
|
|
|
|
prepare_render_buffer(255,0,0)
|
2023-09-11 14:34:49 +00:00
|
|
|
clear_render_buffer(0,0,255)
|
2023-09-11 14:51:31 +00:00
|
|
|
print_letter(letter_k)
|
|
|
|
flush_render()
|
2023-09-11 14:10:06 +00:00
|
|
|
time.sleep(3)
|
2023-09-11 14:51:31 +00:00
|
|
|
close_sock()
|
|
|
|
|
|
|
|
|
2023-09-11 14:10:06 +00:00
|
|
|
|
|
|
|
def get_text_vline(st, i):
|
|
|
|
done=False
|
|
|
|
letter=0
|
|
|
|
offset=0
|
|
|
|
previous_offset = 0
|
|
|
|
if i >= get_string_pixel_length(st):
|
|
|
|
return['0','0','0','0','0']
|
|
|
|
while not done:
|
|
|
|
offset +=get_char_pixel_length(st[letter])
|
|
|
|
if i < offset-1:
|
|
|
|
|
|
|
|
done=True
|
|
|
|
vline = [get_char_pixel_bitmap(st[letter])[0][i-previous_offset],get_char_pixel_bitmap(st[letter])[1][i-previous_offset],get_char_pixel_bitmap(st[letter])[2][i-previous_offset],get_char_pixel_bitmap(st[letter])[3][i-previous_offset], get_char_pixel_bitmap(st[letter])[4][i-previous_offset]]
|
|
|
|
return vline
|
|
|
|
elif i == offset-1:
|
|
|
|
|
|
|
|
vline = ['0','0','0','0','0']
|
|
|
|
done=True
|
|
|
|
else:
|
|
|
|
|
|
|
|
letter += 1
|
|
|
|
previous_offset = offset
|
|
|
|
return vline
|
|
|
|
|
|
|
|
def prepare_text_block(st):
|
|
|
|
l=get_string_pixel_length(st)
|
|
|
|
#l+=8 # add full clear screen for text rotation
|
|
|
|
block=[]
|
|
|
|
i=0
|
|
|
|
for vline in range(0,l):
|
|
|
|
block.append(get_text_vline(st, i))
|
|
|
|
i+=1
|
|
|
|
|
|
|
|
return block
|
|
|
|
|
|
|
|
|
|
|
|
def print_text(block):
|
|
|
|
for x in range(current_text_offset, current_text_offset+8):
|
|
|
|
for y in range(0, ft.height):
|
|
|
|
if block[x][y] == '1':
|
|
|
|
ft.set(x-current_text_offset, y, (255,255,255))
|
|
|
|
|
|
|
|
def render_thread(name):
|
|
|
|
global current_text_offset
|
|
|
|
text=" kupa "
|
|
|
|
print("we start sraning")
|
|
|
|
block = prepare_text_block(text)
|
|
|
|
while isKupa:
|
|
|
|
for y in range(0, ft.height):
|
|
|
|
for x in range(0, ft.width):
|
|
|
|
ft.set(x, y, (255, 0, 255))
|
|
|
|
#print_text(block)
|
|
|
|
print_letter(letter_k)
|
|
|
|
#ft.send()
|
|
|
|
time.sleep(0.125)
|
|
|
|
current_text_offset+=1
|
|
|
|
if (current_text_offset >= get_string_pixel_length(text)-8):
|
|
|
|
current_text_offset = 0
|