Some fixes to the host software geom stuff, added a small demo script

This commit is contained in:
jaseg 2013-12-27 03:02:26 +01:00
parent f2731bac95
commit a95e0305ae
9 changed files with 58 additions and 23 deletions

View file

@ -272,11 +272,10 @@ int main(void) {
MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI2);
MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI3);
/* 200kBd */
MAP_SSIConfigSetExpClk(SSI0_BASE, MAP_SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 1000000, 8);
MAP_SSIConfigSetExpClk(SSI1_BASE, MAP_SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 1000000, 8);
MAP_SSIConfigSetExpClk(SSI2_BASE, MAP_SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 1000000, 8);
MAP_SSIConfigSetExpClk(SSI3_BASE, MAP_SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 1000000, 8);
MAP_SSIConfigSetExpClk(SSI0_BASE, MAP_SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 2000000, 8);
MAP_SSIConfigSetExpClk(SSI1_BASE, MAP_SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 2000000, 8);
MAP_SSIConfigSetExpClk(SSI2_BASE, MAP_SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 2000000, 8);
MAP_SSIConfigSetExpClk(SSI3_BASE, MAP_SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 2000000, 8);
/* Configure the µDMA controller for use by the SPI interface */
MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA);

View file

@ -9,23 +9,27 @@ DEFAULT_SCROLL_SPEED = 4
# Pixels to leave blank between two letters
LETTER_SPACING = 1
FONT = bdflib.reader.read_bdf(open('fonts/5x8.bdf').readlines())
FONT_WIDTH = 5
#FONT = bdflib.reader.read_bdf(open('fonts/5x8.bdf').readlines())
#FONT_WIDTH = 5
# Computed value
FONT_PADDED_BINARY = ('{:0'+str(FONT_WIDTH+'b}').format
#FONT_PADDED_BINARY = ('{:0'+str(FONT_WIDTH+'b}').format
# Display geometry
# ┌─────────┐ ┌───┬───┬ ⋯ ┬───┬───┐
# │1 o o o 5│ │ 1 │ │ │ │16
# │1 o o o 5│ │ 1 │ │ │ │ 8
# │6 o o o o│ ├───┼───┼ ⋯ ┼───┼───┤
# │o o o o o│ │17 │ │ │ │32 │
# │o o o o20│ └───┴───┴ ⋯ ┴───┴───┘
# └─────────┘
# │o o o o o│ │ 9 │ │ │ │16 │
# │o o o o20│ ├───┼───┼ ⋯ ┼───┼───┤
# └─────────┘ │17 │ │ │ │24 │
# ├───┼───┼ ⋯ ┼───┼───┤
# │25 │ │ │ │32 │
# └───┴───┴ ⋯ ┴───┴───┘
CRATE_WIDTH = 5
CRATE_HEIGHT = 4
CRATES_X = 16
CRATES_Y = 2
CRATES_X = 8
CRATES_Y = 4
# Computed values
DISPLAY_WIDTH = CRATES_X * CRATE_WIDTH

View file

@ -1,16 +1,19 @@
from pyusb import usb
import usb
import colorsys
import numpy as np
from config import *
import itertools
dev = usb.core.find(idVendor=0x1cbe, idProduct=0x0003)
def sendframe(framedata):
if not isinstance(framedata, np.array) or framedata.shape != (DISPLAY_WIDTH, DISPLAY_HEIGHT, 3) or framedata.dtype != np.int8:
raise ValueError('framedata must be a ({}, {}, 3)-numpy array of int8s'.format(DISPLAY_WIDTH, DISPLAY_HEIGHT))
# not isinstance(framedata, np.array) or
if framedata.shape != (DISPLAY_HEIGHT, DISPLAY_WIDTH, 3) or framedata.dtype != np.uint8:
raise ValueError('framedata must be a ({}, {}, 3)-numpy array of int8s. Got a {}-numpy array of {}'.format(DISPLAY_WIDTH, DISPLAY_HEIGHT, framedata.shape, framedata.dtype))
for cx, cy in itertools.product(range(16), range(2)):
cratedata = framedata[cx*CRATE_WIDTH:(cx+1)*CRATE_WIDTH, cy*CRATE_HEIGHT:(cy+1)*CRATE_HEIGHT]
# Send framebuffer data
dev.write(0x01, bytes([0, x, y])+bytes(list(cratedata.flatten())))
# Send latch command
dev.write(0x01, b'\x01')
for cy, cx in itertools.product(range(CRATES_Y), range(CRATES_X)):
cratedata = framedata[cy*CRATE_HEIGHT:(cy+1)*CRATE_HEIGHT, cx*CRATE_WIDTH:(cx+1)*CRATE_WIDTH]
# Send framebuffer data
dev.write(0x01, bytes([0, cx, cy])+bytes(list(cratedata.flatten())))
# Send latch command
dev.write(0x01, b'\x01')

29
host/matelight/nyancat-test.py Executable file
View file

@ -0,0 +1,29 @@
#!/usr/bin/env python3
import host
import numpy as np
from config import *
from PIL import Image, ImageSequence
import time
img1 = Image.open(open('../nyancat.png', 'rb'))
img2 = Image.open(open('../nyancat2.png', 'rb'))
scroller = Image.open(open('../scroller.png', 'rb'))
datas = []
for img in [img1, img2]:
im = img.convert("RGB")
im.thumbnail((DISPLAY_WIDTH, DISPLAY_HEIGHT), Image.NEAREST)
data = np.array(im.getdata(), dtype=np.uint8)
datas += [data.reshape((DISPLAY_HEIGHT, DISPLAY_WIDTH, 3))]
im = scroller.convert("RGB")
bar = np.array(im.getdata(), dtype=np.uint8)
foo = bar.reshape((DISPLAY_HEIGHT, 300, 3))
while True:
for i in range(20):
for data in datas:
host.sendframe(data)
time.sleep(0.1)
for i in range(260):
host.sendframe(foo[:, i:i+40, :])

BIN
host/nyancat.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 483 B

BIN
host/nyancat.xcf Normal file

Binary file not shown.

BIN
host/nyancat2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 477 B

BIN
host/nyancat2.xcf Normal file

Binary file not shown.

BIN
host/scroller.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB