114 lines
2.3 KiB
Lua
114 lines
2.3 KiB
Lua
periphery = require('periphery')
|
|
Serial = periphery.Serial
|
|
|
|
serial = Serial("/dev/ttyAMA0",9600)
|
|
|
|
COMMAND_POSITION = 0x19
|
|
COMMAND_POSITION_X = 0x13
|
|
COMMAND_POSITION_Y = 0x11
|
|
|
|
COMMAND_01H = 0x01
|
|
COMMAND_03H = 0x03
|
|
|
|
COMMAND_CURSOR_OFF = 0x0E
|
|
|
|
COMMAND_BLINK = 0x0B
|
|
COMMAND_UNBLINK = 0x0C
|
|
|
|
COMMAND_CR = 0x0D
|
|
COMMAND_LF = 0x0A
|
|
|
|
blinkFlag = false
|
|
|
|
posX = 0
|
|
posY = 0
|
|
|
|
function checkY(y)
|
|
if y < 0 then
|
|
y = 0
|
|
end
|
|
if y > 5 then
|
|
y = 5
|
|
end
|
|
posY = y
|
|
return y
|
|
end
|
|
|
|
function checkX(x)
|
|
if x < 0 then
|
|
x = 39;
|
|
posY = posY - 1
|
|
checkY(posY)
|
|
end
|
|
if x > 39 then
|
|
if posY == 5 then
|
|
x = 39;
|
|
else
|
|
x = 0;
|
|
posY = posY + 1
|
|
checkY(posY);
|
|
end
|
|
end
|
|
posX = x
|
|
return x
|
|
end
|
|
|
|
function gotoXY(x,y)
|
|
checkX(x);
|
|
checkY(y);
|
|
end
|
|
|
|
function lineFeed(void)
|
|
posY = posY + 1
|
|
gotoXY(posX, checkY(posY));
|
|
end
|
|
|
|
function carriageReturn(void)
|
|
gotoXY(0, posY);
|
|
end
|
|
|
|
while (1) do
|
|
while serial:poll(100) do
|
|
local c = serial:read(1)
|
|
if c:byte() == COMMAND_POSITION then
|
|
local cmd = serial:read(1)
|
|
if cmd:byte() == COMMAND_POSITION_X then
|
|
local x = string.byte(serial:read(1))
|
|
gotoXY(x,posY)
|
|
elseif cmd:byte() == COMMAND_POSITION_Y then
|
|
local y = string.byte(serial:read(1))
|
|
gotoXY(posX,y)
|
|
end
|
|
elseif c:byte() == COMMAND_03H then
|
|
serial:read(1)
|
|
serial:read(1)
|
|
elseif c:byte() == COMMAND_BLINK then
|
|
blinkFlag = true
|
|
elseif c:byte() == COMMAND_UNBLINK then
|
|
blinkFlag = false
|
|
elseif c:byte() == COMMAND_CURSOR_OFF then
|
|
-- curs_set(0);
|
|
elseif c:byte() == COMMAND_CR then
|
|
carriageReturn()
|
|
elseif c:byte() == COMMAND_LF then
|
|
lineFeed()
|
|
else
|
|
if c:byte() >= 0x20 and c:byte() < 0x7F then
|
|
print(c.." at "..posX.." "..posY.."\n")
|
|
posX = posX + 1
|
|
checkX(posX)
|
|
--[[
|
|
if ( c >= 0x20 && c < 0x7F ) {
|
|
(c==buf_char[y_now][x_now])?(buf_chng[y_now][x_now]='n'):(buf_chng[y_now][x_now]='y');
|
|
(BLINK_FLAG?(buf_args[y_now][x_now] = 'b'):( buf_args[y_now][x_now] = 'n'));
|
|
buf_char[y_now][x_now] = c;
|
|
checkX(++x_now);
|
|
--]]
|
|
else
|
|
print("Unknown: "..c:byte().."\n");
|
|
end
|
|
end
|
|
--
|
|
-- io.stderr:write(string.format('%02X ',c:byte(1)));
|
|
end
|
|
end |