118 lines
2.3 KiB
Lua
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
|