Files
2022-01-18 16:59:44 -06:00

165 lines
4.2 KiB
Plaintext

-- Plugin for Kramer Protocol 2000
-- Built in Lua
-- Layout inspired by VideoHub plugin @ https://github.com/locimation/qsys-plugins
PluginInfo = {
Name = "Kramer~Protocol 2000", -- The tilde here indicates folder structure in the Shematic Elements pane
Version = "0.1.0-master",
Id = "kramer-2000.plugin.0.1.0-master",
Description = "Plugin implementing Kramer Protocol 2000",
ShowDebug = true,
Author = "Joel Wetzell"
}
function GetPrettyName()
return "Kramer Protocol 2000"
end
-- Once you've drawn your plugin in Designer, you can determine what colors you use a lot. Save yourself some time by putting them in a table, and then simply calling them later.
local Colors = {
White = {255, 255, 255},
Black = {0, 0, 0},
Red = {255, 0, 0},
Green = {0, 255, 0},
Blue = {0, 0, 255},
DarkGrey = {0x56,0x56,0x56},
LCD = { 0x02, 0x33, 0xb2 }
}
-- We can let users determine some of the plugin properties by exposing them here
-- While this function can be very useful, it is completely optional and not always needed.
-- If no Properties are set here, only the position and fill properties of your plugin will show in the Properties pane
function GetProperties()
props = {
{
Name = "IP Address",
Type = "string",
Value = "10.0.0.5"
}
}
return props
end
-- The below function is optional (like GetProperties() is), but it can allow further customization of what users can and can't do with your plugin.
-- In this example, when Model 1 is selected in the properties pane, the ability to modify some of the properties will be hidden, only allowing customization with Model 2
-- Another application of this is if you have different input/output types for different models, and want those properties to be dynamic in the Properties pane
function RectifyProperties(props)
return props
end
-- The below function is where you will populate the controls for your plugin.
function GetControls(props)
local controls = {
}
return controls
end
-- Variable holding Page Names for ease
local pagenames = {"System"}
function GetPages(props) -- This function allows you to populate pages in your plugin.
local pages = {}
table.insert(pages, {name = pagenames[1]})
return pages
end
function GetControlLayout(props)
local controls = {
}
local graphics = {
}
return controls, graphics
end
if (Controls) then
local Kramer = {
socket = TcpSocket.New(),
setStatus = function (value, msg)
-- 0 = OK
-- 1 = Compromised
-- 2 = Fault
-- 3 = Not Present
-- 4 = Missing
-- 5 = Initializing
-- >5 = Fault
Controls['Status'].Value = value;
Controls['Status'].String = msg;
end
}
function getCmdString(bytes)
local cmd = ""
for k,v in pairs(bytes) do
cmd = cmd .. string.pack("B", v)
end
return cmd
end
function sendCommand(cmd)
if Kramer.socket.IsConnected then
print("Sending packet to connected Kramer")
else
print("Following would have been sent if Kramer was connected")
end;
print(hex_dump(getCmdString(cmd)))
if Kramer.socket.IsConnected then
Kramer.socket:Write(getCmdString(cmd))
end
end
function hex_dump (str)
local len = string.len( str )
local dump = ""
local hex = ""
local asc = ""
for i = 1, len do
if 1 == i % 8 then
dump = dump .. hex .. asc .. "\n"
hex = string.format( "%04x: ", i - 1 )
asc = ""
end
local ord = string.byte( str, i )
hex = hex .. string.format( "%02x ", ord )
if ord >= 32 and ord <= 126 then
asc = asc .. string.char( ord )
else
asc = asc .. "."
end
end
return dump .. hex .. string.rep( " ", 8 - len % 8 ) .. asc
end
Kramer.socket.Reconnect = function()
Kramer.setStatus(5,"Attempting to reconnect")
end
Kramer.socket.Data = function ()
print("Reading " .. Kramer.socket.BufferLength .. " Bytes")
local data = Kramer.socket:Read(Kramer.socket.BufferLength);
print(hex_dump(data))
end
Kramer.socket.Closed = function()
Kramer.setStatus(2,"Connection closed by Kramer")
end
Kramer.socket.Error = function(sock, err)
print("TCP Socket Error: ", err)
Kramer.setStatus(2,"Communication error with Kramer")
end
Kramer.socket.Timeout = function(sock, err)
Kramer.setStatus(2,"Timeout in connection to Kramer")
keepAliveTimer:Stop()
end
end