From d9919607d69665f8047361b6419352ddfafeed5a Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Tue, 2 Nov 2021 14:02:17 -0500 Subject: [PATCH] Add VX4S_N model and Test patterns --- content/novastar.qplug | 312 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 288 insertions(+), 24 deletions(-) diff --git a/content/novastar.qplug b/content/novastar.qplug index db9c2bf..75f7144 100644 --- a/content/novastar.qplug +++ b/content/novastar.qplug @@ -41,7 +41,7 @@ function GetProperties() { Name = 'Model', Type = 'enum', - Choices = { 'VX4S', 'VX6S', 'PROHD', 'PROUHDJR', 'MCTRL4K' }, + Choices = { 'VX4S', 'VX4S_N', 'VX6S', 'PROHD', 'PROUHDJR', 'MCTRL4K' }, Value = 'VX4S' } } @@ -119,6 +119,55 @@ function GetControls(props) PinStyle = "Both", UserPin = true }, + + -- Test Pattern Buttons + { + Name = "TEST1", + ControlType = "Button", + ButtonType = "Trigger" + }, + + { + Name = "TEST2", + ControlType = "Button", + ButtonType = "Trigger" + }, + { + Name = "TEST3", + ControlType = "Button", + ButtonType = "Trigger" + }, + { + Name = "TEST4", + ControlType = "Button", + ButtonType = "Trigger" + }, + { + Name = "TEST5", + ControlType = "Button", + ButtonType = "Trigger" + }, + { + Name = "TEST6", + ControlType = "Button", + ButtonType = "Trigger" + }, + { + Name = "TEST7", + ControlType = "Button", + ButtonType = "Trigger" + }, + { + Name = "TEST8", + ControlType = "Button", + ButtonType = "Trigger" + }, + { + Name = "TEST9", + ControlType = "Button", + ButtonType = "Trigger" + }, + { Name = "Status", ControlType = "Indicator", @@ -142,9 +191,10 @@ end function GetControlLayout(props) local controls = {} - local rackSize = {800, 120} + local rackSize = {1000, 120} - local inputPosition = {rackSize[1]*1/2,5} + local inputPosition = {rackSize[1]*3/8,5} + local testPosition = {rackSize[1]*11/16,5} local graphics = { @@ -170,6 +220,20 @@ function GetControlLayout(props) Size = {250, rackSize[2] - 10}, Position = inputPosition }, + + -- Test box + { + Type = "GroupBox", + Text = "TEST", + Color = Colors.White, + HTextAlign = "CENTER", + CornerRadius = 3, + Fill = Colors.Black, + StrokeColor = Colors.White, + StrokeWidth = 1, + Size = {250, rackSize[2] - 10}, + Position = testPosition + }, -- NovaStar Text { Type = "Label", @@ -196,8 +260,20 @@ function GetControlLayout(props) yStart = inputPosition[2] + 20, Padding = 5 } + + local TestButton = { + yStart = testPosition[2] + 20, + Padding = 5 + } + SourceButton.Size = {(rackSize[2] - 30 - (SourceButton.Padding * 2))/2, (rackSize[2] - 30 - (SourceButton.Padding * 2))/2} + TestButton.Size = {(rackSize[2] - 30 - (TestButton.Padding * 2))/2, (rackSize[2] - 30 - (TestButton.Padding * 2))/2} SourceButton.xStart = inputPosition[1] + ((250 - (((SourceButton.Size[1] * 5) + (SourceButton.Padding * 4))))/2) + TestButton.xStart = testPosition[1] + ((250 - (((TestButton.Size[1] * 5) + (TestButton.Padding * 4))))/2) + + local TestLabels = { + "Red","Green","Blue","White","Horiz","Vert","Diag","Gray","Aging" + } local InputLabels = { VX4S = { @@ -210,6 +286,18 @@ function GetControlLayout(props) "SDI", "DP", }, + VX4S_N = { + "HDMI", + "DVI", + "VGA", + "", + "", + "CVBS", + "DP", + "SDI", + "", + "", + }, VX6S = { "HDMI1", "HDMI2", @@ -298,8 +386,66 @@ function GetControlLayout(props) Size = SourceButton.Size } + --First row of test buttons + controls['TEST1'] = { + Style = "Button", + ButtonType = "Trigger", + Legend = TestLabels[1] ~= nil and TestLabels[1] or "1" , + UnlinkOffColor = true, + OffColor = Colors.White, + Color = Colors.Red, + Position = {TestButton.xStart, TestButton.yStart}, + Size = TestButton.Size + } + + controls['TEST2'] = { + Style = "Button", + ButtonType = "Trigger", + Legend = TestLabels[2] ~= nil and TestLabels[2] or "2" , + UnlinkOffColor = true, + OffColor = Colors.White, + Color = Colors.Red, + Position = {TestButton.xStart + ((TestButton.Size[1]+TestButton.Padding)*1), TestButton.yStart}, + Size = TestButton.Size + } + + controls['TEST3'] = { + Style = "Button", + ButtonType = "Trigger", + Legend = TestLabels[3] ~= nil and TestLabels[3] or "3" , + UnlinkOffColor = true, + OffColor = Colors.White, + Color = Colors.Red, + Position = {TestButton.xStart + ((TestButton.Size[1]+TestButton.Padding)*2),TestButton.yStart}, + Size = TestButton.Size + } + + controls['TEST4'] = { + Style = "Button", + ButtonType = "Trigger", + Legend = TestLabels[4] ~= nil and TestLabels[4] or "4", + UnlinkOffColor = true, + OffColor = Colors.White, + Color = Colors.Red, + Position = {TestButton.xStart + ((TestButton.Size[1]+TestButton.Padding)*3),TestButton.yStart}, + Size = TestButton.Size + } + + + controls['TEST5'] = { + Style = "Button", + ButtonType = "Trigger", + Legend = TestLabels[5] ~= nil and TestLabels[5] or "5", + UnlinkOffColor = true, + OffColor = Colors.White, + Color = Colors.Red, + Position = {TestButton.xStart + ((TestButton.Size[1]+TestButton.Padding)*4),TestButton.yStart}, + Size = TestButton.Size + } + --bump down second row of buttons SourceButton.yStart = SourceButton.yStart + SourceButton.Size[1] + (SourceButton.Padding/2) + TestButton.yStart = TestButton.yStart + TestButton.Size[1] + (TestButton.Padding/2) --Second row of input buttons controls['IN6'] = { @@ -359,6 +505,52 @@ function GetControlLayout(props) Size = SourceButton.Size } + --Second row of test buttons + controls['TEST6'] = { + Style = "Button", + ButtonType = "Trigger", + Legend = TestLabels[6] ~= nil and TestLabels[6] or "6", + UnlinkOffColor = true, + OffColor = Colors.White, + Color = Colors.Red, + Position = {TestButton.xStart,TestButton.yStart}, + Size = TestButton.Size + } + + controls['TEST7'] = { + Style = "Button", + ButtonType = "Trigger", + Legend = TestLabels[7] ~= nil and TestLabels[7] or "7", + UnlinkOffColor = true, + OffColor = Colors.White, + Color = Colors.Red, + Position = {TestButton.xStart + ((TestButton.Size[1]+TestButton.Padding)*1), TestButton.yStart}, + Size = TestButton.Size + } + + + controls['TEST8'] = { + Style = "Button", + ButtonType = "Trigger", + Legend = TestLabels[8] ~= nil and TestLabels[8] or "8", + UnlinkOffColor = true, + OffColor = Colors.White, + Color = Colors.Red, + Position = {TestButton.xStart + ((TestButton.Size[1]+TestButton.Padding)*2),TestButton.yStart}, + Size = TestButton.Size + } + + controls['TEST9'] = { + Style = "Button", + ButtonType = "Trigger", + Legend = TestLabels[9] ~= nil and TestLabels[9] or "9", + UnlinkOffColor = true, + OffColor = Colors.White, + Color = Colors.Red, + Position = {TestButton.xStart + ((TestButton.Size[1]+TestButton.Padding)*3),TestButton.yStart}, + Size = TestButton.Size + } + controls['Status'] = { Style = "Text", Color = Colors.LCD, @@ -390,6 +582,17 @@ if (Controls) then Preamble = {0x55, 0xAA}, Connect = {0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x57,0x56}, Brightness = {0x00,0x00,0xFE,0xFF,0x01,0xFF,0xFF,0xFF,0x01,0x00,0x01,0x00,0x00,0x02,0x01,0x00}, + TestPatterns = { + {0x00,0x80,0xFE,0x00,0x01,0x00,0xFF,0xFF,0x01,0x00,0x01,0x01,0x00,0x02,0x01,0x00,0x02,0xDA,0x58}, --Red + {0x00,0x80,0xFE,0x00,0x01,0x00,0xFF,0xFF,0x01,0x00,0x01,0x01,0x00,0x02,0x01,0x00,0x04,0xDC,0x58}, --Green + {0x00,0x80,0xFE,0x00,0x01,0x00,0xFF,0xFF,0x01,0x00,0x01,0x01,0x00,0x02,0x01,0x00,0x03,0xDB,0x58}, --Blue + {0x00,0x80,0xFE,0x00,0x01,0x00,0xFF,0xFF,0x01,0x00,0x01,0x01,0x00,0x02,0x01,0x00,0x05,0xDD,0x58}, --White + {0x00,0x80,0xFE,0x00,0x01,0x00,0xFF,0xFF,0x01,0x00,0x01,0x01,0x00,0x02,0x01,0x00,0x06,0xDE,0x58}, --Horizontal + {0x00,0x80,0xFE,0x00,0x01,0x00,0xFF,0xFF,0x01,0x00,0x01,0x01,0x00,0x02,0x01,0x00,0x07,0xDF,0x58}, --Vertical + {0x00,0x80,0xFE,0x00,0x01,0x00,0xFF,0xFF,0x01,0x00,0x01,0x01,0x00,0x02,0x01,0x00,0x08,0xE0,0x58}, --Diagaonal + {0x00,0x80,0xFE,0x00,0x01,0x00,0xFF,0xFF,0x01,0x00,0x01,0x01,0x00,0x02,0x01,0x00,0x09,0xE1,0x58}, --Grayscale + {0x00,0x80,0xFE,0x00,0x01,0x00,0xFF,0xFF,0x01,0x00,0x01,0x01,0x00,0x02,0x01,0x00,0x0A,0xE2,0x58} --Aging-All + }, Inputs = { VX4S = { {0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x2D,0x00,0x20,0x02,0x01,0x00,0x10,0xB4,0x56}, --DVI @@ -400,34 +603,68 @@ if (Controls) then {0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x2D,0x00,0x20,0x02,0x01,0x00,0x72,0x16,0x57}, --CVBS2 {0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x2D,0x00,0x20,0x02,0x01,0x00,0x40,0xE4,0x56}, --SDI {0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x2D,0x00,0x20,0x02,0x01,0x00,0x90,0x34,0x57}, --DP + {}, + {}, + }, + VX4S_N = { + {0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x2D,0x00,0x20,0x02,0x01,0x00,0xA0,0x44,0x57}, --HDMI + {0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x2D,0x00,0x20,0x02,0x01,0x00,0x10,0xB4,0x56}, --DVI + {0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x2D,0x00,0x20,0x02,0x01,0x00,0x01,0xA5,0x56}, --VGA + {}, + {}, + {0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x2D,0x00,0x20,0x02,0x01,0x00,0x71,0x15,0x57}, --CVBS + {0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x2D,0x00,0x20,0x02,0x01,0x00,0x90,0x34,0x57}, --DP + {0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x2D,0x00,0x20,0x02,0x01,0x00,0x40,0xE4,0x56}, --SDI + {}, + {}, }, VX6S = { - {0x55,0xAA,0x00,0x88,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x12,0x00,0x02,0x13,0x03,0x00,0x00,0x00,0x11,0x17,0x57}, --HDMI1 - {0x55,0xAA,0x00,0xA8,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x12,0x00,0x02,0x13,0x03,0x00,0x01,0x00,0x12,0x39,0x57}, --HDMI2 - {0x55,0xAA,0x00,0xC4,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x12,0x00,0x02,0x13,0x03,0x00,0x02,0x00,0x31,0x75,0x57}, --SDI1 - {0x55,0xAA,0x00,0xD4,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x12,0x00,0x02,0x13,0x03,0x00,0x03,0x00,0x32,0x87,0x57}, --SDI2 - {0x55,0xAA,0x00,0xD6,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x12,0x00,0x02,0x13,0x03,0x00,0x04,0x00,0x01,0x59,0x57}, --DVI1 - {0x55,0xAA,0x00,0xD7,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x12,0x00,0x02,0x13,0x03,0x00,0x06,0x00,0x02,0x5D,0x57}, --DVI2 - {0x55,0xAA,0x00,0xD9,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x12,0x00,0x02,0x13,0x03,0x00,0x07,0x00,0xA0,0xFE,0x57}, --USB + {0x00,0x88,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x12,0x00,0x02,0x13,0x03,0x00,0x00,0x00,0x11,0x17,0x57}, --HDMI1 + {0x00,0xA8,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x12,0x00,0x02,0x13,0x03,0x00,0x01,0x00,0x12,0x39,0x57}, --HDMI2 + {0x00,0xC4,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x12,0x00,0x02,0x13,0x03,0x00,0x02,0x00,0x31,0x75,0x57}, --SDI1 + {0x00,0xD4,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x12,0x00,0x02,0x13,0x03,0x00,0x03,0x00,0x32,0x87,0x57}, --SDI2 + {0x00,0xD6,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x12,0x00,0x02,0x13,0x03,0x00,0x04,0x00,0x01,0x59,0x57}, --DVI1 + {0x00,0xD7,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x12,0x00,0x02,0x13,0x03,0x00,0x06,0x00,0x02,0x5D,0x57}, --DVI2 + {0x00,0xD9,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x12,0x00,0x02,0x13,0x03,0x00,0x07,0x00,0xA0,0xFE,0x57}, --USB + {}, + {}, + {}, }, PROHD = { - {0x55,0xAA,0x00,0x2B,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x22,0x00,0x20,0x02,0x01,0x00,0x1A,0xDE,0x56}, --SDI - {0x55,0xAA,0x00,0x34,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x22,0x00,0x20,0x02,0x01,0x00,0x1C,0xE9,0x56}, --DVI - {0x55,0xAA,0x00,0x3F,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x22,0x00,0x20,0x02,0x01,0x00,0x1B,0xF3,0x56}, --HDMI - {0x55,0xAA,0x00,0x51,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x22,0x00,0x20,0x02,0x01,0x00,0x1E,0x08,0x57}, --DP - {0x55,0xAA,0x00,0x48,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x22,0x00,0x20,0x02,0x01,0x00,0x17,0xF8,0x56}, --VGA - {0x55,0xAA,0x00,0x5A,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x22,0x00,0x20,0x02,0x01,0x00,0x02,0xF5,0x56}, --CVBS + {0x00,0x2B,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x22,0x00,0x20,0x02,0x01,0x00,0x1A,0xDE,0x56}, --SDI + {0x00,0x34,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x22,0x00,0x20,0x02,0x01,0x00,0x1C,0xE9,0x56}, --DVI + {0x00,0x3F,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x22,0x00,0x20,0x02,0x01,0x00,0x1B,0xF3,0x56}, --HDMI + {0x00,0x51,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x22,0x00,0x20,0x02,0x01,0x00,0x1E,0x08,0x57}, --DP + {0x00,0x48,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x22,0x00,0x20,0x02,0x01,0x00,0x17,0xF8,0x56}, --VGA + {0x00,0x5A,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x22,0x00,0x20,0x02,0x01,0x00,0x02,0xF5,0x56}, --CVBS + {}, + {}, + {}, + {}, }, PROUHDJR = { - {0x55,0xAA,0x00,0x2B,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x22,0x00,0x20,0x02,0x01,0x00,0x1A,0xDE,0x56}, --SDI - {0x55,0xAA,0x00,0x34,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x22,0x00,0x20,0x02,0x01,0x00,0x1C,0xE9,0x56}, --DVI - {0x55,0xAA,0x00,0x3F,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x22,0x00,0x20,0x02,0x01,0x00,0x1B,0xF3,0x56}, --HDMI - {0x55,0xAA,0x00,0x51,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x22,0x00,0x20,0x02,0x01,0x00,0x1E,0x08,0x57}, --DP + {0x00,0x2B,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x22,0x00,0x20,0x02,0x01,0x00,0x1A,0xDE,0x56}, --SDI + {0x00,0x34,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x22,0x00,0x20,0x02,0x01,0x00,0x1C,0xE9,0x56}, --DVI + {0x00,0x3F,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x22,0x00,0x20,0x02,0x01,0x00,0x1B,0xF3,0x56}, --HDMI + {0x00,0x51,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x22,0x00,0x20,0x02,0x01,0x00,0x1E,0x08,0x57}, --DP + {}, + {}, + {}, + {}, + {}, + {}, }, MCTRL4K = { - {0x55,0xAA,0x00,0x3E,0xFE,0xFF,0x00,0x00,0x00,0x00,0x01,0x00,0x23,0x00,0x00,0x02,0x01,0x00,0x61,0x18,0x58}, --DVI - {0x55,0xAA,0x00,0x8A,0xFE,0xFF,0x00,0x00,0x00,0x00,0x01,0x00,0x23,0x00,0x00,0x02,0x01,0x00,0x05,0x08,0x58}, --HDMI - {0x55,0xAA,0x00,0x9D,0xFE,0xFF,0x00,0x00,0x00,0x00,0x01,0x00,0x23,0x00,0x00,0x02,0x01,0x00,0x5F,0x75,0x58}, --DP + {0x00,0x3E,0xFE,0xFF,0x00,0x00,0x00,0x00,0x01,0x00,0x23,0x00,0x00,0x02,0x01,0x00,0x61,0x18,0x58}, --DVI + {0x00,0x8A,0xFE,0xFF,0x00,0x00,0x00,0x00,0x01,0x00,0x23,0x00,0x00,0x02,0x01,0x00,0x05,0x08,0x58}, --HDMI + {0x00,0x9D,0xFE,0xFF,0x00,0x00,0x00,0x00,0x01,0x00,0x23,0x00,0x00,0x02,0x01,0x00,0x5F,0x75,0x58}, --DP + {}, + {}, + {}, + {}, + {}, + {}, + {}, } } @@ -464,6 +701,8 @@ if (Controls) then function sendCommand(cmd) if NovaStar.socket.IsConnected then + print("Sending Packet") + print(hex_dump(getCmdString(cmd))) NovaStar.socket:Write(getCmdString(NovaStar.Commands.Preamble) .. getCmdString(cmd)) end end @@ -501,6 +740,13 @@ if (Controls) then end function processResponse(data) + local response = "" + for k,v in pairs(bytes) do + response = response .. string.pack("B", v) + end + print("Received Packet") + print(hex_dump(response)) + if data == getCmdString(NovaStar.Response.Connected) then print("Successful Connection Response Received") NovaStar.setStatus(0,"Connected - " .. Properties['IP Address'].Value) @@ -543,7 +789,25 @@ if (Controls) then if Properties['Model'].Value ~= '' then for k,v in pairs(NovaStar.Commands.Inputs[Properties['Model'].Value]) do - Controls['IN'..k].EventHandler = function() + if (v ~= nil and #v > 1) then + print("value is not nill and length greater than 1") + Controls['IN'..k].EventHandler = function() + sendCommand(v) + end + else + print("value is nill or value doesn't have a length") + if(k == 10) then + Controls['IN0'].IsDisabled = true; + Controls['IN0'].IsInvisible = true; + else + Controls['IN'..k].IsDisabled = true; + Controls['IN'..k].IsInvisible = true; + end; + end; + end + + for k,v in pairs(NovaStar.Commands.TestPatterns) do + Controls['TEST'..k].EventHandler = function() sendCommand(v) end end