118 lines
2.3 KiB
Lua

-- plasma.lua
require "luacom"
do
local in1 = {
pack = function (data)
local i = 1
local sum = 0
local buffer = ""
while data[i] do
local v = data[i]
if type(v) == "string" then
v = tonumber(v,16)
end
sum = sum + v
buffer = buffer .. strchar(v)
i = i + 1
end
local aux = mod(sum,256)
buffer = buffer .. strchar(aux)
return buffer
end,
byte2str = function(buf)
if buf and type(buf) == "string" then
local n = strlen(buf)
local code = ""
local i = 1
while i <= n do
local hexa = format("%02x",strbyte(buf,i))
code = code .. hexa
i = i + 1
end
return code
else
return ""
end
end,
}
Plasma = {}
function Plasma:write(cmd1,cmd2,data)
if not data then
data = {}
end
tinsert(data,1,getn(data))
tinsert(data,1,cmd2)
tinsert(data,1,"60")
tinsert(data,1,"80")
tinsert(data,1,cmd1)
local msg = in1.pack(data)
print(in1.byte2str(msg))
print(strlen(msg))
if self.obj and self.obj.PortOpen ~= 0 then
print("Writing")
self.obj.Output = msg
print(self.obj.CommEvent)
end
end
function Plasma:read(n,dt)
if self.obj and self.obj.PortOpen ~= 0 then
local data = ""
local t0 = clock()
dt = dt or 5
while (strlen(data) < n) and (clock() - t0 < dt) do
data = data .. self.obj.Input
end
print(clock()- t0)
print(self.obj.CommEvent)
return data
else
print "Read Error: Comm port is not open"
end
end
function Plasma:open(port)
local obj
obj = luacom.CreateObject("MSCOMMLib.MSComm.1")
obj.CommPort = (port or 1)
obj.Settings = "9600,O,8,1"
obj.InputLen = 0
obj.InputMode = 1
obj.PortOpen = 1
self.obj = obj
end
function Plasma:close()
self.obj.PortOpen = 0
end
function Plasma:on()
self:write("9f","4e")
print(in1.byte2str(self:read(6,15)))
end
function Plasma:off()
self:write("9f","4f")
print(in1.byte2str(self:read(6,15)))
end
function acox()
local msg = in1.pack({98,121,101}) -- bye
print(msg)
print(in1.byte2str(msg))
if Plasma.obj and Plasma.obj.PortOpen ~= 0 then
print("Writing")
Plasma.obj.Output = msg
print(Plasma.obj.CommEvent)
end
end
end