aboutsummaryrefslogtreecommitdiffstats
path: root/Software
diff options
context:
space:
mode:
authorShlomo Hecht <shlomo@twine-s.com>2020-07-22 12:30:23 +0300
committerShlomo Hecht <shlomo@twine-s.com>2020-07-22 12:30:23 +0300
commit93bf6344f8cc37a662c19db81c4f341e5b9ed0f0 (patch)
tree97bdd9c49faa069110ccb1cd32635fcaabd29725 /Software
parent66f8cf884fbd7f85976e96028c8047c0985a9d8f (diff)
parent9aa38289b089d2518c5b0ef68e78f262fe4a31ee (diff)
downloadTango-93bf6344f8cc37a662c19db81c4f341e5b9ed0f0.tar.gz
Tango-93bf6344f8cc37a662c19db81c4f341e5b9ed0f0.zip
Merge branch 'master' of https://twinetfs.visualstudio.com/Tango/_git/Tango
Diffstat (limited to 'Software')
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c55
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c21
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h1
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.c28
-rw-r--r--Software/PMR/Messages/ColorLab/LinearizationInput.proto16
-rw-r--r--Software/PMR/Messages/ColorLab/LinearizationMeasurement.proto12
-rw-r--r--Software/PMR/Messages/ColorLab/LinearizationOutput.proto13
-rw-r--r--Software/Visual_Studio/Advanced Installer Projects/FSE Installer.aip64
-rw-r--r--Software/Visual_Studio/Advanced Installer Projects/Machine Studio Installer.aip6
-rw-r--r--Software/Visual_Studio/Advanced Installer Projects/PPC Installer-cache/cacheIndex.txtbin52 -> 52 bytes
-rw-r--r--Software/Visual_Studio/Advanced Installer Projects/PPC Installer.aip24
-rw-r--r--Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorCalibrator.cpp324
-rw-r--r--Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorCalibrator.h31
-rw-r--r--Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/Exports.cpp6
-rw-r--r--Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationInput.pb-c.c144
-rw-r--r--Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationInput.pb-c.h82
-rw-r--r--Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationMeasurement.pb-c.c131
-rw-r--r--Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationMeasurement.pb-c.h78
-rw-r--r--Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationOutput.pb-c.c119
-rw-r--r--Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationOutput.pb-c.h75
-rw-r--r--Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/Tango.ColorLib_v4.vcxproj6
-rw-r--r--Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/Tango.ColorLib_v4.vcxproj.filters18
-rw-r--r--Software/Visual_Studio/FSE/Tango.FSE.UI/App.config2
-rw-r--r--Software/Visual_Studio/FSE/Tango.FSE.UI/Properties/AssemblyInfo.cs47
-rw-r--r--Software/Visual_Studio/FSE/Tango.FSE.UI/Tango.FSE.UI.csproj3
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Models/ColorLinearizationModel.cs10
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorCalibrationViewVM.cs156
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorConversionViewVM.cs4
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorCalibrationView.xaml278
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/RmlView.xaml2
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Properties/AssemblyInfo.cs2
-rw-r--r--Software/Visual_Studio/Notes/Tango.Notes/Azure/New Environment.txt4
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/Properties/AssemblyInfo.cs2
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs11
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest2
-rw-r--r--Software/Visual_Studio/Tango.BL/Entities/BrushStop.cs17
-rw-r--r--Software/Visual_Studio/Tango.ColorCalibration/DefaultColorCalibrator.cs30
-rw-r--r--Software/Visual_Studio/Tango.ColorCalibration/ILinearizationMeasurements.cs14
-rw-r--r--Software/Visual_Studio/Tango.ColorCalibration/Tango.ColorCalibration.csproj1
-rw-r--r--Software/Visual_Studio/Tango.PMR/ColorLab/LinearizationInput.cs268
-rw-r--r--Software/Visual_Studio/Tango.PMR/ColorLab/LinearizationMeasurement.cs244
-rw-r--r--Software/Visual_Studio/Tango.PMR/ColorLab/LinearizationOutput.cs209
-rw-r--r--Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj5
43 files changed, 2238 insertions, 327 deletions
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c
index 05423b8d8..691f1c455 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c
@@ -414,7 +414,7 @@ uint32_t HeadCard_Valve_Control(bool Direction)
return status;
}
*/
-uint32_t ActControlId = 0xFF;
+uint32_t ActControlId = 0xFF, ActControlId1 = 0xFF;
char Global_Act_Cmd_flag = 0; //Sync - prevent reset from previous command
@@ -468,14 +468,47 @@ uint32_t HeadCard_Actuators_Disable(void)
//RST
Head_I2C_EXP2_0x42.bits.OUTPUT_ACTLOW_ACT_RST = 0x00;//Disable movement
status |= Head_Write_IO_Reg(0x42,HIGH);
+ //Trigger_OutputsWriting();
Task_sleep(5);
Head_I2C_EXP2_0x42.bits.OUTPUT_ACTLOW_ACT_RST = 0x01;//Enable movement
status |= Head_Write_IO_Reg(0x42,HIGH);
+ //Trigger_OutputsWriting();
return status;
}
+
+uint32_t HeadCard_ActControlCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) // use IfIndex for Act_ID
+{
+ uint32_t status = OK;
+
+ ACTUATORS Act_ID = (ACTUATORS)(IfIndex);
+
+ if (SafeRemoveControlCallback(ActControlId1, HeadCard_ActControlCallBackFunction )==OK)
+ ActControlId1 = 0xFF;
+ else
+ Report("Remove control callback failed",__FILE__,__LINE__,(int)ActControlId1,RpWarning,(int)HeadCard_ActControlCallBackFunction,0);
+
+ if(Act_ID == ACTIN)//0
+ {
+ Head_I2C_EXP4_0x46.bits.OUTPUT_ACTLOW_ACTIN_ON = HIGH;
+ }
+ else//if(Act_ID == ACTOUT) 1
+ {
+ Head_I2C_EXP4_0x46.bits.OUTPUT_ACTLOW_ACTOT_ON = HIGH;
+ }
+
+ Trigger_ActOnWriting();//status |= Head_Write_IO_Reg(0x46,HIGH);
+
+ Global_Act_Cmd_flag++;//Sync the callback to the command
+
+ //3sec delay - Timeout
+ ActControlId = AddControlCallback("ActuatorControl", HeadCard_ActuatorsCallBackFunction, (3* eOneSecond), TemplateDataReadCBFunction,Act_ID,0, 0 );
+
+ return status;
+}
+
uint32_t HeadCard_Actuators_Control(ACTUATORS Act_ID, bool Direction)
{
uint32_t status = OK;
@@ -499,22 +532,10 @@ uint32_t HeadCard_Actuators_Control(ACTUATORS Act_ID, bool Direction)
status |= Head_Write_IO_Reg(0x46,LOW_AND_HIGH);
- Task_sleep(500);
+ //Task_sleep(500);
- if(Act_ID == ACTIN)//0
- {
- Head_I2C_EXP4_0x46.bits.OUTPUT_ACTLOW_ACTIN_ON = HIGH;
- }
- else//if(Act_ID == ACTOUT) 1
- {
- Head_I2C_EXP4_0x46.bits.OUTPUT_ACTLOW_ACTOT_ON = HIGH;
- }
- status |= Head_Write_IO_Reg(0x46,HIGH);
-
- Global_Act_Cmd_flag++;//Sync the callback to the command
-
- //3sec delay - Timeout
- ActControlId = AddControlCallback("ActuatorControl", HeadCard_ActuatorsCallBackFunction, (3* eOneSecond), TemplateDataReadCBFunction,Act_ID,0, 0 );
+ //100msec delay - (need short command - Active LOW )
+ ActControlId1 = AddControlCallback("ctuatorControl", HeadCard_ActControlCallBackFunction, (/* 5 * */ eHundredMillisecond), TemplateDataReadCBFunction,Act_ID,0, 0 );
return status;
}
@@ -534,7 +555,7 @@ uint32_t HeadCard_ActStubCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) /
{
Head_I2C_EXP4_0x46.bits.OUTPUT_ACTLOW_ACTOT_ON = HIGH;
}
- Trigger_OutputsWriting();//status |= Head_Write_IO_Reg(0x46,HIGH);
+ Trigger_ActOnWriting();//status |= Head_Write_IO_Reg(0x46,HIGH);
return status;
}
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c
index f126c254b..90f197587 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c
@@ -42,6 +42,7 @@ typedef enum
HeaterWriting,
Head_Inputs_Reading,// I/O
Head_Outputs_Writing,
+ Head_ACT_ON_Writing,
Head_Init_PT100,
Actuators_Control,
Actuators_Control_Stub,
@@ -287,6 +288,18 @@ void Trigger_OutputsWriting(void)
}
+void Trigger_ActOnWriting(void)
+{
+ I2C_ReadingMessageStruc I2C_ReadingMessage;
+ //uint8_t Midtank_i;
+
+ I2C_ReadingMessage.messageId = Head_ACT_ON_Writing;
+ if (I2C_ReadingMsgQ != NULL)
+ Mailbox_post(I2C_ReadingMsgQ , &I2C_ReadingMessage, BIOS_NO_WAIT);
+ return;
+
+}
+
void Trigger_WHS_init_IO(void)
{
@@ -665,8 +678,12 @@ void I2C_ReadingTask(UArg arg0, UArg arg1)
Head_Read_IO_Reg(0x44, LOW_AND_HIGH);//BREAK__ZN1-12 + BREAK_HTIN
Head_Read_IO_Reg(0x46, LOW_AND_HIGH);//READ HEAD CARD LS + ACT status + BREAK_HTOT
break;
- case Head_Outputs_Writing:
- Head_Write_IO_Reg(0x46,HIGH);//ACT
+ case Head_Outputs_Writing: //Currently not in use
+ Head_Read_IO_Reg(0x42, LOW_AND_HIGH);//
+ Head_Read_IO_Reg(0x46, LOW_AND_HIGH);//
+ break;
+ case Head_ACT_ON_Writing:
+ Head_Write_IO_Reg(0x46,HIGH);//ACT ON
break;
case DispenserReadData:
Dispenser_EEPROM_Read_Data(I2C_ReadingMessage.parameter);
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h
index 16f86f9ed..4b12a7151 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h
@@ -52,6 +52,7 @@ void Trigger_Head_Actuators_Disable(void);
void Trigger_Head_Fan_Control(uint32_t Fan_ID, uint16_t PWM);
void Trigger_InputsReading(void);
void Trigger_OutputsWriting(void);
+void Trigger_ActOnWriting(void);
void Trigger_Head_Magnet(int direction);
void Trigger_Head_MixerValve(int direction);
void Trigger_Head_PressureArc(bool Enable_Disable);
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.c
index 1e23508ef..601e2e18a 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.c
@@ -94,21 +94,30 @@ uint32_t Reset_and_Check_IFS_Availability(PANEL_BUTTON_OR_CRAT_ID Cart_ID)
delayUs(5);
IFS_i2c_status = I2C_Write(I2C_ID_IFS_MUX, I2C_NFC_Slave_Add, CORE_RESET_CMD, sizeof(CORE_RESET_CMD));
status |= IFS_i2c_status;
- delayms(2);
+ delayms(3);
}
status |= I2C_Read(I2C_ID_IFS_MUX, I2C_NFC_Slave_Add + 1, Read_Buf, sizeof(Read_Buf));
#ifndef EVALUATION_BOARD
- if((IFS_i2c_status == I2C_MASTER_ERR_ADDR_ACK)||(status == 0xFF))
- {
- IFS_Availability[Cart_ID-1] = IFS_NOT_RECOGNIZED;
- }
- else
- {
- IFS_Availability[Cart_ID-1] = IFS_RECOGNIZED;
- }
+ if((Read_Buf[0] == 0x40) && (Read_Buf[1] == 0x00) && (Read_Buf[2] == 0x03) && (Read_Buf[3] == 0x00) && (Read_Buf[4] == 0x11) && (Read_Buf[5] == 0x01))//PN7150 RESET RESPONSE
+ {
+ IFS_Availability[Cart_ID-1] = IFS_RECOGNIZED;
+ }
+ else
+ {
+ IFS_Availability[Cart_ID-1] = IFS_NOT_RECOGNIZED;
+ }
+
+// if((IFS_i2c_status == I2C_MASTER_ERR_ADDR_ACK)||(status == 0xFF))
+// {
+// IFS_Availability[Cart_ID-1] = IFS_NOT_RECOGNIZED;
+// }
+// else
+// {
+// IFS_Availability[Cart_ID-1] = IFS_RECOGNIZED;
+// }
#else
IFS_Availability[Cart_ID-1] = WITHOUT_IFS;
#endif
@@ -125,6 +134,7 @@ uint32_t Check_IFS_Availability()
for(Cart_i = CART_1; Cart_i <= CART_3; Cart_i++)
{
status |= Reset_and_Check_IFS_Availability(Cart_i);
+ delayms(1);
}
return status;
}
diff --git a/Software/PMR/Messages/ColorLab/LinearizationInput.proto b/Software/PMR/Messages/ColorLab/LinearizationInput.proto
new file mode 100644
index 000000000..ff6ba489e
--- /dev/null
+++ b/Software/PMR/Messages/ColorLab/LinearizationInput.proto
@@ -0,0 +1,16 @@
+syntax = "proto3";
+
+import "LinearizationMeasurement.proto";
+import "LiquidType.proto";
+
+package Tango.PMR.ColorLab;
+option java_package = "com.twine.tango.pmr.colorlab";
+
+message LinearizationInput
+{
+ LiquidType LiquidType = 1;
+ double TargetL = 2;
+ double TargetA = 3;
+ double TargetB = 4;
+ repeated LinearizationMeasurement Measurements = 5;
+} \ No newline at end of file
diff --git a/Software/PMR/Messages/ColorLab/LinearizationMeasurement.proto b/Software/PMR/Messages/ColorLab/LinearizationMeasurement.proto
new file mode 100644
index 000000000..57f5eb2f5
--- /dev/null
+++ b/Software/PMR/Messages/ColorLab/LinearizationMeasurement.proto
@@ -0,0 +1,12 @@
+syntax = "proto3";
+
+package Tango.PMR.ColorLab;
+option java_package = "com.twine.tango.pmr.colorlab";
+
+message LinearizationMeasurement
+{
+ double InkPercentage = 1;
+ double L = 2;
+ double A = 3;
+ double B = 4;
+} \ No newline at end of file
diff --git a/Software/PMR/Messages/ColorLab/LinearizationOutput.proto b/Software/PMR/Messages/ColorLab/LinearizationOutput.proto
new file mode 100644
index 000000000..ee043f6b4
--- /dev/null
+++ b/Software/PMR/Messages/ColorLab/LinearizationOutput.proto
@@ -0,0 +1,13 @@
+syntax = "proto3";
+
+package Tango.PMR.ColorLab;
+option java_package = "com.twine.tango.pmr.colorlab";
+
+message LinearizationOutput
+{
+ repeated double InkPercentage = 1;
+
+
+ bool HasError = 20;
+ string ErrorMessage = 21;
+} \ No newline at end of file
diff --git a/Software/Visual_Studio/Advanced Installer Projects/FSE Installer.aip b/Software/Visual_Studio/Advanced Installer Projects/FSE Installer.aip
index d8c669460..2b6473d3a 100644
--- a/Software/Visual_Studio/Advanced Installer Projects/FSE Installer.aip
+++ b/Software/Visual_Studio/Advanced Installer Projects/FSE Installer.aip
@@ -24,10 +24,10 @@
<ROW Property="CompanyLogo" Value="blue.jpg" MultiBuildValue="DefaultBuild:twine_logo_installer_.png_1" Type="1" MsiKey="CompanyLogo"/>
<ROW Property="LogoIcon" Value="externalui.ico" MultiBuildValue="DefaultBuild:machine_full_0UZ_icon.ico_1" Type="1" MsiKey="LogoIcon"/>
<ROW Property="Manufacturer" Value="Twine Solutions LTD"/>
- <ROW Property="ProductCode" Value="1033:{4CBDABE7-727D-4858-AAC9-8E1D8D9B231D} " Type="16"/>
+ <ROW Property="ProductCode" Value="1033:{F29F3244-DFC0-46A6-9EA1-1FE5421704E4} " Type="16"/>
<ROW Property="ProductLanguage" Value="1033"/>
<ROW Property="ProductName" Value="Tango FSE"/>
- <ROW Property="ProductVersion" Value="1.0.0.0" Type="32"/>
+ <ROW Property="ProductVersion" Value="1.0.1.0" Type="32"/>
<ROW Property="RUNAPPLICATION" Value="1" Type="4"/>
<ROW Property="SecureCustomProperties" Value="OLDPRODUCTS;AI_NEWERPRODUCTFOUND;AI_SETUPEXEPATH;SETUPEXEDIR"/>
<ROW Property="UpgradeCode" Value="{0E13CB0D-89F7-465E-9F56-F1CBD6773E6E}"/>
@@ -84,14 +84,10 @@
<ROW Component="Microsoft.AspNet.SignalR.Client.dll" ComponentId="{A6A1BE43-A965-4718-8B9B-E8BB2D2B6FA9}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.AspNet.SignalR.Client.dll"/>
<ROW Component="Microsoft.Azure.ActiveDirectory.GraphClient.dll" ComponentId="{623FE6DD-F44D-4E99-8FD5-E54A608BE511}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.Azure.ActiveDirectory.GraphClient.dll"/>
<ROW Component="Microsoft.CodeAnalysis.CSharp.Scripting.dll_1" ComponentId="{2D21153E-2576-4B08-8FFD-966EA9074B3E}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.CodeAnalysis.CSharp.Scripting.dll_1"/>
- <ROW Component="Microsoft.CodeAnalysis.CSharp.Workspaces.dll" ComponentId="{F0178A23-0543-4AF6-B472-DE562F83FAFD}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.CodeAnalysis.CSharp.Workspaces.dll"/>
<ROW Component="Microsoft.CodeAnalysis.CSharp.dll_1" ComponentId="{19BBB256-0863-41A0-A93F-B98CE50E55F0}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.CodeAnalysis.CSharp.dll_1"/>
<ROW Component="Microsoft.CodeAnalysis.Scripting.dll_1" ComponentId="{D262D06F-31E7-4CAE-9B99-6E0A8D0389EF}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.CodeAnalysis.Scripting.dll_1"/>
<ROW Component="Microsoft.CodeAnalysis.Workspaces.dll" ComponentId="{49A621D3-E54C-46A2-8A72-BD89E56DE547}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.CodeAnalysis.Workspaces.dll"/>
<ROW Component="Microsoft.CodeAnalysis.dll_1" ComponentId="{D74916F9-4E71-47FC-99FC-4535D7D867CE}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.CodeAnalysis.dll_1"/>
- <ROW Component="Microsoft.Data.Edm.dll" ComponentId="{8A3FA04E-E290-419F-B80B-C075192A1C7C}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.Data.Edm.dll"/>
- <ROW Component="Microsoft.Data.OData.dll" ComponentId="{8A3474C1-9738-41E3-8F47-A069AB1A3BDD}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.Data.OData.dll"/>
- <ROW Component="Microsoft.Data.Services.Client.dll" ComponentId="{7BEA4383-B526-4182-B26C-EC9821B764B5}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.Data.Services.Client.dll"/>
<ROW Component="Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll" ComponentId="{9639E91B-464A-4C60-9703-1AAF4503B269}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll"/>
<ROW Component="Microsoft.IdentityModel.Clients.ActiveDirectory.dll" ComponentId="{C8FF51E6-B8BB-401D-BD03-58FD08E4C389}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.IdentityModel.Clients.ActiveDirectory.dll"/>
<ROW Component="Microsoft.ServiceBus.dll" ComponentId="{B19BCB1E-6C52-4BF7-A128-DDA1DC047D0E}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.ServiceBus.dll"/>
@@ -236,7 +232,6 @@
<ROW Component="System.Security.Cryptography.X509Certificates.dll" ComponentId="{00F4F6C1-6B4D-4DFD-BD59-72EE690FC246}" Directory_="APPDIR" Attributes="0" KeyPath="System.Security.Cryptography.X509Certificates.dll"/>
<ROW Component="System.Security.Principal.dll" ComponentId="{127424E0-24F8-456F-BBEC-F23E331E1669}" Directory_="APPDIR" Attributes="0" KeyPath="System.Security.Principal.dll"/>
<ROW Component="System.Security.SecureString.dll" ComponentId="{C40FA779-F72E-4CF2-9A42-368ADB1D05E4}" Directory_="APPDIR" Attributes="0" KeyPath="System.Security.SecureString.dll"/>
- <ROW Component="System.Spatial.dll" ComponentId="{4B39B3C6-CDCD-4624-83F0-A95F766A8F79}" Directory_="APPDIR" Attributes="0" KeyPath="System.Spatial.dll"/>
<ROW Component="System.Text.Encoding.CodePages.dll_1" ComponentId="{9E367053-E910-4CE6-BE25-3065F9E18374}" Directory_="APPDIR" Attributes="0" KeyPath="System.Text.Encoding.CodePages.dll_1"/>
<ROW Component="System.Text.Encoding.Extensions.dll" ComponentId="{C177E423-71AE-4FB7-BDC1-1FFF650EFEBC}" Directory_="APPDIR" Attributes="0" KeyPath="System.Text.Encoding.Extensions.dll"/>
<ROW Component="System.Text.Encoding.dll" ComponentId="{903DBCE1-0C97-4F99-BF85-41B54EF26B33}" Directory_="APPDIR" Attributes="0" KeyPath="System.Text.Encoding.dll"/>
@@ -262,6 +257,7 @@
<ROW Component="Tango.AnimatedGif.dll" ComponentId="{4E1F5301-EA6D-45D5-9C99-23E59875096A}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.AnimatedGif.dll"/>
<ROW Component="Tango.AutoComplete.dll" ComponentId="{A39273A4-F15E-4183-B998-065EC4B7F1AD}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.AutoComplete.dll"/>
<ROW Component="Tango.BL.dll" ComponentId="{7D5B238B-DD1F-4E60-A1F0-2A6E718E4E7E}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.BL.dll"/>
+ <ROW Component="Tango.CSV.dll" ComponentId="{0D0A9A81-758D-43A8-86F6-75CE5D087314}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.CSV.dll"/>
<ROW Component="Tango.CodeGeneration.dll" ComponentId="{E40950D1-CDD8-4F4E-B721-350D71AE2FDF}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.CodeGeneration.dll"/>
<ROW Component="Tango.ColorConversion.dll" ComponentId="{037BA0C3-825A-4F36-8838-58E09596E690}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.ColorConversion.dll"/>
<ROW Component="Tango.ColorPicker.dll" ComponentId="{4DC739B9-5960-4CF4-9911-BF25E7CC7308}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.ColorPicker.dll"/>
@@ -275,7 +271,7 @@
<ROW Component="Tango.FSE.Diagnostics.dll" ComponentId="{A5BF99C4-208D-4D2E-9312-A8FC004A8B55}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.FSE.Diagnostics.dll"/>
<ROW Component="Tango.FSE.Firmware.dll" ComponentId="{39C1ACAC-0329-4779-BBD7-59921B537853}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.FSE.Firmware.dll"/>
<ROW Component="Tango.FSE.PPCConsole.dll" ComponentId="{439D6114-54E3-4FCB-A01E-148ECB966139}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.FSE.PPCConsole.dll"/>
- <ROW Component="Tango.FSE.Stubs.dll" ComponentId="{FAE45ED6-874E-48D3-A3D1-32A402087826}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.FSE.Stubs.dll"/>
+ <ROW Component="Tango.FSE.Procedures.dll" ComponentId="{FDA82EB3-2A9B-4A57-AB30-970433B497BE}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.FSE.Procedures.dll"/>
<ROW Component="Tango.FSE.UI.exe" ComponentId="{79C3B470-6540-474A-90AE-F0E7C34AEA43}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.FSE.UI.exe"/>
<ROW Component="Tango.FSE.Upgrade.dll" ComponentId="{883D8D60-CC3C-4F25-B8EC-8CA100F83DD0}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.FSE.Upgrade.dll"/>
<ROW Component="Tango.FSE.UsersAndRoles.dll" ComponentId="{61296AF0-2382-4A54-BEBD-C798C0F00B02}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.FSE.UsersAndRoles.dll"/>
@@ -309,6 +305,7 @@
<ROW Component="Z.EntityFramework.Plus.EF6.dll" ComponentId="{9813A841-45DE-422F-8CD5-41A2D4750803}" Directory_="APPDIR" Attributes="0" KeyPath="Z.EntityFramework.Plus.EF6.dll"/>
<ROW Component="Z.Expressions.Eval.dll" ComponentId="{FD15C66D-61BF-4E9D-AE0F-240D0EA1D78C}" Directory_="APPDIR" Attributes="0" KeyPath="Z.Expressions.Eval.dll"/>
<ROW Component="ZSpitz.Util.dll" ComponentId="{3476B9F6-18D9-41B1-89D8-9774E8DB91A6}" Directory_="APPDIR" Attributes="0" KeyPath="ZSpitz.Util.dll"/>
+ <ROW Component="ffmpeg.exe" ComponentId="{D6862E01-A64B-40FD-847E-A35B561EFD1D}" Directory_="APPDIR" Attributes="0" KeyPath="ffmpeg.exe"/>
<ROW Component="mscoree.dll" ComponentId="{B7304190-8E59-45C3-B972-4611DEB9DE60}" Directory_="APPDIR" Attributes="0" KeyPath="mscoree.dll"/>
<ROW Component="msvcp140d.dll" ComponentId="{6B725C2A-71DF-44D3-A761-EB3D28379956}" Directory_="APPDIR" Attributes="0" KeyPath="msvcp140d.dll"/>
<ROW Component="netstandard.dll" ComponentId="{27E9F013-8E50-4251-9C63-C53A5AA66DD1}" Directory_="APPDIR" Attributes="0" KeyPath="netstandard.dll"/>
@@ -558,14 +555,12 @@
<ROW File="vcruntime140d.dll" Component_="vcruntime140d.dll" FileName="VCRUNT~2.DLL|vcruntime140d.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\vcruntime140d.dll" SelfReg="false"/>
<ROW File="Microsoft.AspNet.SignalR.Client.dll" Component_="Microsoft.AspNet.SignalR.Client.dll" FileName="MICRO~38.DLL|Microsoft.AspNet.SignalR.Client.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Microsoft.AspNet.SignalR.Client.dll" SelfReg="false"/>
<ROW File="ControlzEx.dll" Component_="ControlzEx.dll" FileName="CONTRO~1.DLL|ControlzEx.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\ControlzEx.dll" SelfReg="false"/>
- <ROW File="diagnostics.json" Component_="Dragablz.xml" FileName="DIAGNO~1.JSO|diagnostics.json" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\diagnostics.json" SelfReg="false"/>
<ROW File="ExpressionTreeToString.dll" Component_="ExpressionTreeToString.dll" FileName="EXPRES~1.DLL|ExpressionTreeToString.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\ExpressionTreeToString.dll" SelfReg="false"/>
<ROW File="GridExtra.Wpf.dll" Component_="GridExtra.Wpf.dll" FileName="GRIDEX~1.DLL|GridExtra.Wpf.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\GridExtra.Wpf.dll" SelfReg="false"/>
<ROW File="Humanizer.dll" Component_="Humanizer.dll" FileName="HUMANI~1.DLL|Humanizer.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Humanizer.dll" SelfReg="false"/>
<ROW File="LiteDB.dll" Component_="LiteDB.dll" FileName="LiteDB.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\LiteDB.dll" SelfReg="false"/>
<ROW File="Microsoft.CodeAnalysis.CSharp.dll_1" Component_="Microsoft.CodeAnalysis.CSharp.dll_1" FileName="MICRO~39.DLL|Microsoft.CodeAnalysis.CSharp.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Microsoft.CodeAnalysis.CSharp.dll" SelfReg="false"/>
<ROW File="Microsoft.CodeAnalysis.CSharp.Scripting.dll_1" Component_="Microsoft.CodeAnalysis.CSharp.Scripting.dll_1" FileName="MICRO~40.DLL|Microsoft.CodeAnalysis.CSharp.Scripting.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Microsoft.CodeAnalysis.CSharp.Scripting.dll" SelfReg="false"/>
- <ROW File="Microsoft.CodeAnalysis.CSharp.Workspaces.dll" Component_="Microsoft.CodeAnalysis.CSharp.Workspaces.dll" FileName="MICRO~41.DLL|Microsoft.CodeAnalysis.CSharp.Workspaces.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Microsoft.CodeAnalysis.CSharp.Workspaces.dll" SelfReg="false"/>
<ROW File="Microsoft.CodeAnalysis.dll_1" Component_="Microsoft.CodeAnalysis.dll_1" FileName="MICRO~42.DLL|Microsoft.CodeAnalysis.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Microsoft.CodeAnalysis.dll" SelfReg="false"/>
<ROW File="Microsoft.CodeAnalysis.Scripting.dll_1" Component_="Microsoft.CodeAnalysis.Scripting.dll_1" FileName="MICRO~43.DLL|Microsoft.CodeAnalysis.Scripting.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Microsoft.CodeAnalysis.Scripting.dll" SelfReg="false"/>
<ROW File="Microsoft.CodeAnalysis.Workspaces.dll" Component_="Microsoft.CodeAnalysis.Workspaces.dll" FileName="MICRO~44.DLL|Microsoft.CodeAnalysis.Workspaces.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Microsoft.CodeAnalysis.Workspaces.dll" SelfReg="false"/>
@@ -601,9 +596,6 @@
<ROW File="Tango.FSE.PPCConsole.dll" Component_="Tango.FSE.PPCConsole.dll" FileName="TANGOF~8.DLL|Tango.FSE.PPCConsole.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.PPCConsole.dll" SelfReg="false"/>
<ROW File="Tango.FSE.PPCConsole.dll.config" Component_="Dragablz.xml" FileName="TANGOF~4.CON|Tango.FSE.PPCConsole.dll.config" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.PPCConsole.dll.config" SelfReg="false"/>
<ROW File="Tango.FSE.PPCConsole.pdb" Component_="Tango.FSE.PPCConsole.dll" FileName="TANGOF~8.PDB|Tango.FSE.PPCConsole.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.PPCConsole.pdb" SelfReg="false"/>
- <ROW File="Tango.FSE.Stubs.dll" Component_="Tango.FSE.Stubs.dll" FileName="TANGOF~9.DLL|Tango.FSE.Stubs.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.Stubs.dll" SelfReg="false"/>
- <ROW File="Tango.FSE.Stubs.dll.config" Component_="Dragablz.xml" FileName="TANGOF~5.CON|Tango.FSE.Stubs.dll.config" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.Stubs.dll.config" SelfReg="false"/>
- <ROW File="Tango.FSE.Stubs.pdb" Component_="Tango.FSE.Stubs.dll" FileName="TANGOF~9.PDB|Tango.FSE.Stubs.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.Stubs.pdb" SelfReg="false"/>
<ROW File="Tango.FSE.UI.exe" Component_="Tango.FSE.UI.exe" FileName="TANGOF~1.EXE|Tango.FSE.UI.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.UI.exe" SelfReg="false" DigSign="true"/>
<ROW File="Tango.FSE.UI.exe.config" Component_="Dragablz.xml" FileName="TANGOF~6.CON|Tango.FSE.UI.exe.config" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.UI.exe.config" SelfReg="false"/>
<ROW File="Tango.FSE.UI.pdb" Component_="Tango.FSE.UI.exe" FileName="TANGO~22.PDB|Tango.FSE.UI.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.UI.pdb" SelfReg="false"/>
@@ -642,19 +634,44 @@
<ROW File="Z.Expressions.Eval.dll" Component_="Z.Expressions.Eval.dll" FileName="ZEXPRE~1.DLL|Z.Expressions.Eval.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Z.Expressions.Eval.dll" SelfReg="false"/>
<ROW File="ZSpitz.Util.dll" Component_="ZSpitz.Util.dll" FileName="ZSPITZ~1.DLL|ZSpitz.Util.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\ZSpitz.Util.dll" SelfReg="false"/>
<ROW File="Google.Protobuf.xml" Component_="Dragablz.xml" FileName="GOOGLE~1.XML|Google.Protobuf.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Google.Protobuf.xml" SelfReg="false"/>
- <ROW File="Microsoft.Data.Edm.dll" Component_="Microsoft.Data.Edm.dll" FileName="MICROS~2.DLL|Microsoft.Data.Edm.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Microsoft.Data.Edm.dll" SelfReg="false"/>
- <ROW File="Microsoft.Data.OData.dll" Component_="Microsoft.Data.OData.dll" FileName="MICRO~21.DLL|Microsoft.Data.OData.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Microsoft.Data.OData.dll" SelfReg="false"/>
- <ROW File="Microsoft.Data.Services.Client.dll" Component_="Microsoft.Data.Services.Client.dll" FileName="MICRO~24.DLL|Microsoft.Data.Services.Client.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Microsoft.Data.Services.Client.dll" SelfReg="false"/>
<ROW File="Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll" Component_="Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll" FileName="MICRO~25.DLL|Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll" SelfReg="false"/>
- <ROW File="System.Spatial.dll" Component_="System.Spatial.dll" FileName="SYSTEM~2.DLL|System.Spatial.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\System.Spatial.dll" SelfReg="false"/>
<ROW File="Tango.ColorPicker.dll" Component_="Tango.ColorPicker.dll" FileName="TANGOC~1.DLL|Tango.ColorPicker.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.ColorPicker.dll" SelfReg="false"/>
<ROW File="Tango.ColorPicker.pdb" Component_="Tango.ColorPicker.dll" FileName="TANGOC~1.PDB|Tango.ColorPicker.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.ColorPicker.pdb" SelfReg="false"/>
- <ROW File="Tango.FSE.Stubs.xml" Component_="Dragablz.xml" FileName="TANGOF~1.XML|Tango.FSE.Stubs.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.Stubs.xml" SelfReg="false"/>
<ROW File="Tango.FSE.UsersAndRoles.dll" Component_="Tango.FSE.UsersAndRoles.dll" FileName="TANGO~10.DLL|Tango.FSE.UsersAndRoles.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.UsersAndRoles.dll" SelfReg="false"/>
<ROW File="Tango.FSE.UsersAndRoles.dll.config" Component_="Dragablz.xml" FileName="TANGOF~8.CON|Tango.FSE.UsersAndRoles.dll.config" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.UsersAndRoles.dll.config" SelfReg="false"/>
<ROW File="Tango.FSE.UsersAndRoles.pdb" Component_="Tango.FSE.UsersAndRoles.dll" FileName="TANGO~10.PDB|Tango.FSE.UsersAndRoles.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.UsersAndRoles.pdb" SelfReg="false"/>
<ROW File="Tango.Visuals.dll" Component_="Tango.Visuals.dll" FileName="TANGOV~1.DLL|Tango.Visuals.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.Visuals.dll" SelfReg="false"/>
<ROW File="Tango.Visuals.pdb" Component_="Tango.Visuals.dll" FileName="TANGOV~1.PDB|Tango.Visuals.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.Visuals.pdb" SelfReg="false"/>
+ <ROW File="ColorMine.pdb" Component_="ColorMine.dll" FileName="COLORM~1.PDB|ColorMine.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\ColorMine.pdb" SelfReg="false"/>
+ <ROW File="ControlzEx.pdb" Component_="ControlzEx.dll" FileName="CONTRO~1.PDB|ControlzEx.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\ControlzEx.pdb" SelfReg="false"/>
+ <ROW File="diagnostics.tdp" Component_="Dragablz.xml" FileName="DIAGNO~1.TDP|diagnostics.tdp" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\diagnostics.tdp" SelfReg="false"/>
+ <ROW File="DocumentFormat.OpenXml.xml" Component_="Dragablz.xml" FileName="DOCUME~1.XML|DocumentFormat.OpenXml.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\DocumentFormat.OpenXml.xml" SelfReg="false"/>
+ <ROW File="EntityFramework.SqlServer.xml" Component_="Dragablz.xml" FileName="ENTITY~1.XML|EntityFramework.SqlServer.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\EntityFramework.SqlServer.xml" SelfReg="false"/>
+ <ROW File="EntityFramework.xml" Component_="Dragablz.xml" FileName="ENTITY~2.XML|EntityFramework.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\EntityFramework.xml" SelfReg="false"/>
+ <ROW File="ffmpeg.exe" Component_="ffmpeg.exe" FileName="ffmpeg.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\ffmpeg.exe" SelfReg="false" DigSign="true"/>
+ <ROW File="LiteDB.xml" Component_="Dragablz.xml" FileName="LiteDB.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\LiteDB.xml" SelfReg="false"/>
+ <ROW File="MahApps.Metro.pdb" Component_="MahApps.Metro.dll" FileName="MAHAPP~1.PDB|MahApps.Metro.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\MahApps.Metro.pdb" SelfReg="false"/>
+ <ROW File="MahApps.Metro.xml" Component_="Dragablz.xml" FileName="MAHAPP~1.XML|MahApps.Metro.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\MahApps.Metro.xml" SelfReg="false"/>
+ <ROW File="MaterialDesignColors.pdb" Component_="MaterialDesignColors.dll" FileName="MATERI~1.PDB|MaterialDesignColors.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\MaterialDesignColors.pdb" SelfReg="false"/>
+ <ROW File="MaterialDesignThemes.Wpf.pdb" Component_="MaterialDesignThemes.Wpf.dll" FileName="MATERI~2.PDB|MaterialDesignThemes.Wpf.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\MaterialDesignThemes.Wpf.pdb" SelfReg="false"/>
+ <ROW File="MaterialDesignThemes.Wpf.xml" Component_="Dragablz.xml" FileName="MATERI~1.XML|MaterialDesignThemes.Wpf.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\MaterialDesignThemes.Wpf.xml" SelfReg="false"/>
+ <ROW File="Microsoft.AspNet.SignalR.Client.pdb" Component_="Microsoft.AspNet.SignalR.Client.dll" FileName="MICROS~1.PDB|Microsoft.AspNet.SignalR.Client.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Microsoft.AspNet.SignalR.Client.pdb" SelfReg="false"/>
+ <ROW File="Microsoft.AspNet.SignalR.Client.xml" Component_="Dragablz.xml" FileName="MICROS~1.XML|Microsoft.AspNet.SignalR.Client.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Microsoft.AspNet.SignalR.Client.xml" SelfReg="false"/>
+ <ROW File="Newtonsoft.Json.xml" Component_="Dragablz.xml" FileName="NEWTON~1.XML|Newtonsoft.Json.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Newtonsoft.Json.xml" SelfReg="false"/>
+ <ROW File="protobufnet.xml" Component_="Dragablz.xml" FileName="PROTOB~1.XML|protobuf-net.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\protobuf-net.xml" SelfReg="false"/>
+ <ROW File="RealTimeGraphX.pdb" Component_="RealTimeGraphX.dll" FileName="REALTI~1.PDB|RealTimeGraphX.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\RealTimeGraphX.pdb" SelfReg="false"/>
+ <ROW File="RealTimeGraphX.WPF.pdb" Component_="RealTimeGraphX.WPF.dll" FileName="REALTI~2.PDB|RealTimeGraphX.WPF.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\RealTimeGraphX.WPF.pdb" SelfReg="false"/>
+ <ROW File="System.Data.SQLite.xml" Component_="Dragablz.xml" FileName="SYSTEM~1.XML|System.Data.SQLite.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\System.Data.SQLite.xml" SelfReg="false"/>
+ <ROW File="System.Reactive.Core.xml" Component_="Dragablz.xml" FileName="SYSTEM~2.XML|System.Reactive.Core.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\System.Reactive.Core.xml" SelfReg="false"/>
+ <ROW File="System.Reactive.Interfaces.xml" Component_="Dragablz.xml" FileName="SYSTEM~3.XML|System.Reactive.Interfaces.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\System.Reactive.Interfaces.xml" SelfReg="false"/>
+ <ROW File="System.Reactive.Linq.xml" Component_="Dragablz.xml" FileName="SYSTEM~4.XML|System.Reactive.Linq.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\System.Reactive.Linq.xml" SelfReg="false"/>
+ <ROW File="System.Reactive.PlatformServices.xml" Component_="Dragablz.xml" FileName="SYSTEM~5.XML|System.Reactive.PlatformServices.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\System.Reactive.PlatformServices.xml" SelfReg="false"/>
+ <ROW File="Tango.CSV.dll" Component_="Tango.CSV.dll" FileName="TANGOC~4.DLL|Tango.CSV.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.CSV.dll" SelfReg="false"/>
+ <ROW File="Tango.CSV.pdb" Component_="Tango.CSV.dll" FileName="TANGOC~3.PDB|Tango.CSV.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.CSV.pdb" SelfReg="false"/>
+ <ROW File="Tango.FSE.Procedures.dll" Component_="Tango.FSE.Procedures.dll" FileName="TANGO~11.DLL|Tango.FSE.Procedures.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.Procedures.dll" SelfReg="false"/>
+ <ROW File="Tango.FSE.Procedures.dll.config" Component_="Dragablz.xml" FileName="TANGOF~9.CON|Tango.FSE.Procedures.dll.config" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.Procedures.dll.config" SelfReg="false"/>
+ <ROW File="Tango.FSE.Procedures.pdb" Component_="Tango.FSE.Procedures.dll" FileName="TANGO~11.PDB|Tango.FSE.Procedures.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.Procedures.pdb" SelfReg="false"/>
+ <ROW File="Tango.FSE.Procedures.xml" Component_="Dragablz.xml" FileName="TANGOF~2.XML|Tango.FSE.Procedures.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\FSE\Release\Tango.FSE.Procedures.xml" SelfReg="false"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.AiRemoveFileComponent">
<ROW RemoveFile="_" Options="3"/>
@@ -666,7 +683,7 @@
<ROW Action="AI_DetectSoftware" Sequence="101"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.BuildComponent">
- <ROW BuildKey="DefaultBuild" BuildName="DefaultBuild" BuildOrder="1" BuildType="0" PackageFolder="..\Build\Installers\FSE\Release" PackageFileName="Tango FSE v1.0.0" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" ExtUI="true" UseLargeSchema="true" ExeName="Tango FSE v1.0.0"/>
+ <ROW BuildKey="DefaultBuild" BuildName="DefaultBuild" BuildOrder="1" BuildType="0" PackageFolder="..\Build\Installers\FSE\Release" PackageFileName="Tango FSE v1.0.1" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" ExtUI="true" UseLargeSchema="true" ExeName="Tango FSE v1.0.1"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.DictionaryComponent">
<ROW Path="&lt;AI_DICTS&gt;ui.ail"/>
@@ -1008,7 +1025,6 @@
<ROW Feature_="TangoFSE" Component_="LiteDB.dll"/>
<ROW Feature_="TangoFSE" Component_="Microsoft.CodeAnalysis.CSharp.dll_1"/>
<ROW Feature_="TangoFSE" Component_="Microsoft.CodeAnalysis.CSharp.Scripting.dll_1"/>
- <ROW Feature_="TangoFSE" Component_="Microsoft.CodeAnalysis.CSharp.Workspaces.dll"/>
<ROW Feature_="TangoFSE" Component_="Microsoft.CodeAnalysis.dll_1"/>
<ROW Feature_="TangoFSE" Component_="Microsoft.CodeAnalysis.Scripting.dll_1"/>
<ROW Feature_="TangoFSE" Component_="Microsoft.CodeAnalysis.Workspaces.dll"/>
@@ -1033,7 +1049,6 @@
<ROW Feature_="TangoFSE" Component_="Tango.FSE.Diagnostics.dll"/>
<ROW Feature_="TangoFSE" Component_="Tango.FSE.Firmware.dll"/>
<ROW Feature_="TangoFSE" Component_="Tango.FSE.PPCConsole.dll"/>
- <ROW Feature_="TangoFSE" Component_="Tango.FSE.Stubs.dll"/>
<ROW Feature_="TangoFSE" Component_="Tango.FSE.UI.exe"/>
<ROW Feature_="TangoFSE" Component_="Tango.FSE.Upgrade.dll"/>
<ROW Feature_="TangoFSE" Component_="Tango.FSE.Web.dll"/>
@@ -1055,14 +1070,13 @@
<ROW Feature_="TangoFSE" Component_="Z.EntityFramework.Plus.EF6.dll"/>
<ROW Feature_="TangoFSE" Component_="Z.Expressions.Eval.dll"/>
<ROW Feature_="TangoFSE" Component_="ZSpitz.Util.dll"/>
- <ROW Feature_="TangoFSE" Component_="Microsoft.Data.Edm.dll"/>
- <ROW Feature_="TangoFSE" Component_="Microsoft.Data.OData.dll"/>
- <ROW Feature_="TangoFSE" Component_="Microsoft.Data.Services.Client.dll"/>
<ROW Feature_="TangoFSE" Component_="Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll"/>
- <ROW Feature_="TangoFSE" Component_="System.Spatial.dll"/>
<ROW Feature_="TangoFSE" Component_="Tango.ColorPicker.dll"/>
<ROW Feature_="TangoFSE" Component_="Tango.FSE.UsersAndRoles.dll"/>
<ROW Feature_="TangoFSE" Component_="Tango.Visuals.dll"/>
+ <ROW Feature_="TangoFSE" Component_="ffmpeg.exe"/>
+ <ROW Feature_="TangoFSE" Component_="Tango.CSV.dll"/>
+ <ROW Feature_="TangoFSE" Component_="Tango.FSE.Procedures.dll"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiIconsComponent">
<ROW Name="machine_full.exe" SourcePath="..\..\Graphics\FSE\Installer\machine_full.ico" Index="0"/>
diff --git a/Software/Visual_Studio/Advanced Installer Projects/Machine Studio Installer.aip b/Software/Visual_Studio/Advanced Installer Projects/Machine Studio Installer.aip
index c410b3310..baa95c867 100644
--- a/Software/Visual_Studio/Advanced Installer Projects/Machine Studio Installer.aip
+++ b/Software/Visual_Studio/Advanced Installer Projects/Machine Studio Installer.aip
@@ -16,10 +16,10 @@
<ROW Property="ARPCOMMENTS" Value="This installer database contains the logic and data required to install [|ProductName]." ValueLocId="*"/>
<ROW Property="ARPNOREPAIR" MultiBuildValue="DefaultBuild:1"/>
<ROW Property="Manufacturer" Value="Twine"/>
- <ROW Property="ProductCode" Value="1033:{9E37B9B1-348D-4A0F-BD20-CD7CB78DFB73} " Type="16"/>
+ <ROW Property="ProductCode" Value="1033:{1F83DF30-80C0-43BB-B199-AB1485E6AA4F} " Type="16"/>
<ROW Property="ProductLanguage" Value="1033"/>
<ROW Property="ProductName" Value="Machine Studio"/>
- <ROW Property="ProductVersion" Value="4.1.14.0" Type="32"/>
+ <ROW Property="ProductVersion" Value="4.1.15.0" Type="32"/>
<ROW Property="SecureCustomProperties" Value="OLDPRODUCTS;AI_NEWERPRODUCTFOUND;AI_SETUPEXEPATH;SETUPEXEDIR"/>
<ROW Property="UpgradeCode" Value="{CBEE5CAE-7C5A-4280-98DE-AA98113764E4}"/>
<ROW Property="WindowsType9X" MultiBuildValue="DefaultBuild:Windows 9x/ME" ValueLocId="-"/>
@@ -826,7 +826,7 @@
<ROW Action="AI_DetectSoftware" Sequence="101"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.BuildComponent">
- <ROW BuildKey="DefaultBuild" BuildName="DefaultBuild" BuildOrder="1" BuildType="0" PackageFolder="..\Build\Installers\Machine Studio\Release" PackageFileName="Machine Studio Installer_v4.0.9" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" ExtUI="true" UseLargeSchema="true" ExeName="Machine Studio Installer_v4.1.14"/>
+ <ROW BuildKey="DefaultBuild" BuildName="DefaultBuild" BuildOrder="1" BuildType="0" PackageFolder="..\Build\Installers\Machine Studio\Release" PackageFileName="Machine Studio Installer_v4.0.9" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" ExtUI="true" UseLargeSchema="true" ExeName="Machine Studio Installer_v4.1.15"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.DictionaryComponent">
<ROW Path="&lt;AI_DICTS&gt;ui.ail"/>
diff --git a/Software/Visual_Studio/Advanced Installer Projects/PPC Installer-cache/cacheIndex.txt b/Software/Visual_Studio/Advanced Installer Projects/PPC Installer-cache/cacheIndex.txt
index a603ff06b..9453b5c13 100644
--- a/Software/Visual_Studio/Advanced Installer Projects/PPC Installer-cache/cacheIndex.txt
+++ b/Software/Visual_Studio/Advanced Installer Projects/PPC Installer-cache/cacheIndex.txt
Binary files differ
diff --git a/Software/Visual_Studio/Advanced Installer Projects/PPC Installer.aip b/Software/Visual_Studio/Advanced Installer Projects/PPC Installer.aip
index de47739b9..d2297b670 100644
--- a/Software/Visual_Studio/Advanced Installer Projects/PPC Installer.aip
+++ b/Software/Visual_Studio/Advanced Installer Projects/PPC Installer.aip
@@ -18,10 +18,10 @@
<ROW Property="ARPNOREPAIR" Value="1" MultiBuildValue="DefaultBuild:1"/>
<ROW Property="ARPSYSTEMCOMPONENT" Value="1"/>
<ROW Property="Manufacturer" Value="Twine"/>
- <ROW Property="ProductCode" Value="1033:{2337828E-2432-405A-B8F4-960A367F8CD1} " Type="16"/>
+ <ROW Property="ProductCode" Value="1033:{77BAA4A9-039B-4440-B1D1-E38AB5C9111E} " Type="16"/>
<ROW Property="ProductLanguage" Value="1033"/>
<ROW Property="ProductName" Value="Tango"/>
- <ROW Property="ProductVersion" Value="1.1.20.0" Type="32"/>
+ <ROW Property="ProductVersion" Value="1.1.21.0" Type="32"/>
<ROW Property="SecureCustomProperties" Value="OLDPRODUCTS;AI_NEWERPRODUCTFOUND;AI_SETUPEXEPATH;SETUPEXEDIR"/>
<ROW Property="UpgradeCode" Value="{F8EAB8B4-FD57-45B7-8307-D52DF760273D}"/>
<ROW Property="WindowsType9X" MultiBuildValue="DefaultBuild:Windows 9x/ME" ValueLocId="-"/>
@@ -203,13 +203,11 @@
<ROW Component="mscoree.dll" ComponentId="{85F439D0-8FD0-4B99-888D-336C7A125E3D}" Directory_="APPDIR" Attributes="0" KeyPath="mscoree.dll"/>
<ROW Component="msvcp140d.dll" ComponentId="{69E32675-9ACF-4C23-A495-300B78913B66}" Directory_="APPDIR" Attributes="0" KeyPath="msvcp140d.dll"/>
<ROW Component="protobufnet.dll" ComponentId="{163F1E17-6462-4ABE-BC86-E055F7690139}" Directory_="APPDIR" Attributes="0" KeyPath="protobufnet.dll"/>
- <ROW Component="turbojpeg.dll" ComponentId="{27A0FCF0-5142-4098-919F-1F41DBD4E96C}" Directory_="win7x64_Dir" Attributes="256" KeyPath="turbojpeg.dll"/>
- <ROW Component="turbojpeg.dll.meta" ComponentId="{2277C165-C973-4631-B796-6072626F94FD}" Directory_="win7x64_Dir" Attributes="0" KeyPath="turbojpeg.dll.meta" Type="0"/>
- <ROW Component="turbojpeg.dll.meta_1" ComponentId="{6CE58AB5-8A03-45B4-B1F2-C32484FFF26D}" Directory_="win7x86_Dir" Attributes="0" KeyPath="turbojpeg.dll.meta_1" Type="0"/>
- <ROW Component="turbojpeg.dll_1" ComponentId="{0F3812A4-9F26-4D7C-92A5-A1A0DB6276D8}" Directory_="win7x86_Dir" Attributes="0" KeyPath="turbojpeg.dll_1"/>
<ROW Component="ucrtbased.dll" ComponentId="{B8D025EA-CD16-4EE7-A3E7-713E2BE82BF3}" Directory_="APPDIR" Attributes="0" KeyPath="ucrtbased.dll"/>
<ROW Component="vcruntime140.dll" ComponentId="{144594CC-D19B-45E4-A420-7A1BBB122EE3}" Directory_="APPDIR" Attributes="0" KeyPath="vcruntime140.dll"/>
<ROW Component="vcruntime140d.dll" ComponentId="{7653420C-C6C3-4F31-97E8-D6DE417D3DF2}" Directory_="APPDIR" Attributes="0" KeyPath="vcruntime140d.dll"/>
+ <ROW Component="win7x64" ComponentId="{C2D7FABE-338A-4E52-A6BC-FAC6E0AB80D6}" Directory_="win7x64_Dir" Attributes="0"/>
+ <ROW Component="win7x86" ComponentId="{D8FD9856-D091-474A-A42F-4030E372472D}" Directory_="win7x86_Dir" Attributes="0"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiFeatsComponent">
<ROW Feature="MainFeature" Title="MainFeature" Description="Description" Display="1" Level="1" Directory_="APPDIR" Attributes="0"/>
@@ -458,10 +456,6 @@
<ROW File="Tango.PPC.Shared.pdb" Component_="Tango.PPC.Shared.dll" FileName="TANGO~17.PDB|Tango.PPC.Shared.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\Tango.PPC.Shared.pdb" SelfReg="false"/>
<ROW File="Tango.CSV.dll" Component_="Tango.CSV.dll" FileName="TANGOC~8.DLL|Tango.CSV.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\Tango.CSV.dll" SelfReg="false"/>
<ROW File="Tango.CSV.pdb" Component_="Tango.CSV.dll" FileName="TANGOC~5.PDB|Tango.CSV.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\Tango.CSV.pdb" SelfReg="false"/>
- <ROW File="turbojpeg.dll" Component_="turbojpeg.dll" FileName="TURBOJ~1.DLL|turbojpeg.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\win7-x64\turbojpeg.dll" SelfReg="false"/>
- <ROW File="turbojpeg.dll.meta" Component_="turbojpeg.dll.meta" FileName="TURBOJ~1.MET|turbojpeg.dll.meta" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\win7-x64\turbojpeg.dll.meta" SelfReg="false"/>
- <ROW File="turbojpeg.dll_1" Component_="turbojpeg.dll_1" FileName="TURBOJ~1.DLL|turbojpeg.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\win7-x86\turbojpeg.dll" SelfReg="false"/>
- <ROW File="turbojpeg.dll.meta_1" Component_="turbojpeg.dll.meta_1" FileName="TURBOJ~1.MET|turbojpeg.dll.meta" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\win7-x86\turbojpeg.dll.meta" SelfReg="false"/>
<ATTRIBUTE name="DontAddFileAttributes" value="true"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.BootstrOptComponent">
@@ -471,7 +465,7 @@
<ROW Action="AI_DetectSoftware" Sequence="101"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.BuildComponent">
- <ROW BuildKey="DefaultBuild" BuildName="DefaultBuild" BuildOrder="1" BuildType="0" PackageFolder="..\Build\Installers\PPC" PackageFileName="PPC Installer v1.0.3" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" ExtUI="true" UseLargeSchema="true" ExeName="PPC Installer_v1.1.20"/>
+ <ROW BuildKey="DefaultBuild" BuildName="DefaultBuild" BuildOrder="1" BuildType="0" PackageFolder="..\Build\Installers\PPC" PackageFileName="PPC Installer v1.0.3" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" ExtUI="true" UseLargeSchema="true" ExeName="PPC Installer_v1.1.21"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.DictionaryComponent">
<ROW Path="&lt;AI_DICTS&gt;ui.ail"/>
@@ -539,6 +533,8 @@
<COMPONENT cid="caphyon.advinst.msicomp.MsiCreateFolderComponent">
<ROW Directory_="SHORTCUTDIR" Component_="SHORTCUTDIR" ManualDelete="false"/>
<ROW Directory_="APPDIR" Component_="APPDIR" ManualDelete="true"/>
+ <ROW Directory_="win7x64_Dir" Component_="win7x64" ManualDelete="false"/>
+ <ROW Directory_="win7x86_Dir" Component_="win7x86" ManualDelete="false"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiCustActComponent">
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Type="51" Source="AI_SETUPEXEPATH_ORIGINAL" Target="[AI_SETUPEXEPATH]"/>
@@ -730,10 +726,8 @@
<ROW Feature_="MainFeature" Component_="LiteDB.dll"/>
<ROW Feature_="MainFeature" Component_="Tango.PPC.Shared.dll"/>
<ROW Feature_="MainFeature" Component_="Tango.CSV.dll"/>
- <ROW Feature_="MainFeature" Component_="turbojpeg.dll"/>
- <ROW Feature_="MainFeature" Component_="turbojpeg.dll.meta"/>
- <ROW Feature_="MainFeature" Component_="turbojpeg.dll_1"/>
- <ROW Feature_="MainFeature" Component_="turbojpeg.dll.meta_1"/>
+ <ROW Feature_="MainFeature" Component_="win7x86"/>
+ <ROW Feature_="MainFeature" Component_="win7x64"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiInstExSeqComponent">
<ROW Action="AI_STORE_LOCATION" Condition="(Not Installed) OR REINSTALL" Sequence="1502"/>
diff --git a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorCalibrator.cpp b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorCalibrator.cpp
index a0e44c95c..82fb60ac4 100644
--- a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorCalibrator.cpp
+++ b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorCalibrator.cpp
@@ -2,9 +2,14 @@
#include "CalibrationInput.pb-c.h"
#include "CalibrationOutput.pb-c.h"
#include "CalibrationMeasurement.pb-c.h"
+#include "LinearizationInput.pb-c.h"
+#include "LinearizationOutput.pb-c.h"
+#include "LinearizationMeasurement.pb-c.h"
+
#include <math.h>
#include <algorithm>
#include <exception>
+#include <vector>
using namespace std;
#define MDRThr 1.0
@@ -13,7 +18,7 @@ using namespace std;
#define dEThr 1.0
-Tango::ColorLib::ColorCalibrator::ColorCalibrator(): m_nsize(0), m_nlcm(NULL), m_LabData(NULL), m_inkChannel(0), m_targetVal(NULL), m_CalIndex(0)
+Tango::ColorLib::ColorCalibrator::ColorCalibrator(): m_nsize(0), m_nlcm(NULL), m_LabData(NULL), m_inkChannel(0), m_targetVal(NULL), m_CalIndex(0), m_inkpercentage(NULL)
{
}
@@ -42,14 +47,17 @@ void Tango::ColorLib::ColorCalibrator::ClearData()
delete[] m_targetVal;
m_targetVal = NULL;
}
+ if (m_inkpercentage != NULL)
+ {
+ delete[] m_inkpercentage;
+ m_inkpercentage = NULL;
+ }
}
size_t Tango::ColorLib::ColorCalibrator::GetLiquidFactor(uint8_t * input_buffer, size_t input_buffer_size, uint8_t *& output_buffer)
{
//Get Input
- CalibrationInput* calibrationInput = NULL;
- calibrationInput = (CalibrationInput*)malloc(sizeof(CalibrationInput));
- calibrationInput = calibration_input__unpack(NULL, input_buffer_size, input_buffer);
+ CalibrationInput* calibrationInput = calibration_input__unpack(NULL, input_buffer_size, input_buffer);
//Investigate Input
InitData((const CalibrationMeasurement**)calibrationInput->measurements, calibrationInput->n_measurements, calibrationInput->liquidtype, calibrationInput->targetl, calibrationInput->targeta, calibrationInput->targetb);
@@ -79,13 +87,9 @@ size_t Tango::ColorLib::ColorCalibrator::GetLiquidFactor(uint8_t * input_buffer,
std:string error_message;
MaximalDispensingRate(calibrationOutput->liquidfactor, error_message);
const char* c_error = error_message.c_str();
- int nErrorLength = strlen(c_error);
- if (nErrorLength > 0)
+ if (strlen(c_error) > 0)
{
- calibrationOutput->errormessage = (char*)malloc(nErrorLength);
- for (int i = 0; i < nErrorLength; ++i)
- calibrationOutput->errormessage[i] = c_error[i];
-
+ calibrationOutput->errormessage = strdup(c_error);
}
//Pack Output
@@ -99,6 +103,62 @@ size_t Tango::ColorLib::ColorCalibrator::GetLiquidFactor(uint8_t * input_buffer,
return size;
}
+size_t Tango::ColorLib::ColorCalibrator::GetLinearizationMeasurements(uint8_t * input_buffer, size_t input_buffer_size, uint8_t *& output_buffer)
+{
+ //Get Input
+ LinearizationInput* linearizationInput = linearization_input__unpack(NULL, input_buffer_size, input_buffer);
+ try
+ {
+ //Investigate Input
+ LinearizationInitData((const LinearizationMeasurement**)linearizationInput->measurements, linearizationInput->n_measurements, linearizationInput->liquidtype, linearizationInput->targetl, linearizationInput->targeta, linearizationInput->targetb);
+
+ //Init Output
+ LinearizationOutput *linearizationOutput = (LinearizationOutput*)malloc(sizeof(LinearizationOutput));
+ linearization_output__init(linearizationOutput);
+
+ std:string error_message;
+ linearizationOutput->n_inkpercentage = m_nsize;
+ linearizationOutput->inkpercentage = new double[m_nsize];
+ Linearizaton(m_inkpercentage, linearizationOutput->inkpercentage, error_message);
+ const char* c_error = error_message.c_str();
+ if (strlen(c_error) > 0)
+ {
+ linearizationOutput->has_haserror = true;
+ linearizationOutput->haserror = true;
+ linearizationOutput->errormessage = strdup(c_error);
+ }
+ //Pack Output
+ output_buffer = (uint8_t*)malloc(linearization_output__get_packed_size(linearizationOutput));
+ int size = linearization_output__pack(linearizationOutput, output_buffer);
+
+ //Free Resources
+ linearization_input__free_unpacked(linearizationInput, NULL);
+ linearization_output__free_unpacked(linearizationOutput, NULL);
+
+ return size;
+ }
+ catch (const std::exception& e)
+ {
+ //Notify Error...
+ LinearizationOutput *linearizationOutput = (LinearizationOutput*)malloc(sizeof(LinearizationOutput));
+ linearization_output__init(linearizationOutput);
+
+ linearizationOutput->has_haserror = true;
+ linearizationOutput->haserror = true;
+
+ const char* what = e.what();
+ linearizationOutput->errormessage = strdup(what);
+
+ output_buffer = (uint8_t*)malloc(linearization_output__get_packed_size(linearizationOutput));
+ int size = linearization_output__pack(linearizationOutput, output_buffer);
+ //Free Resources
+ linearization_input__free_unpacked(linearizationInput, NULL);
+ linearization_output__free_unpacked(linearizationOutput, NULL);
+
+ return (size);
+ }
+}
+
void Tango::ColorLib::ColorCalibrator::InitData(const CalibrationMeasurement** m, const size_t &nsize, const int &inkChannel, const double& targetl, const double& targeta, const double& targetb)
{
ClearData();
@@ -312,3 +372,247 @@ void Tango::ColorLib::ColorCalibrator::dEcmc(double *refX, double *samX, double
dECMC = sqrt(pow(dL / (2 * refX_SL), 2) + pow(dC / refX_SC, 2) + pow(dH / refX_SH, 2));
}
+
+void Tango::ColorLib::ColorCalibrator::LinearizationInitData(const LinearizationMeasurement** m, const size_t &nsize, const int &inkChannel, const double& targetl, const double& targeta, const double& targetb)
+{
+ ClearData();
+ m_nsize = nsize;
+ m_LabData = new double*[m_nsize];
+ m_inkpercentage = new double[m_nsize];
+
+ for (int i = 0; i < m_nsize; ++i)
+ {
+ m_LabData[i] = new double[3];
+ m_LabData[i][0] = m[i]->l;
+ m_LabData[i][1] = m[i]->a;
+ m_LabData[i][2] = m[i]->b;
+ m_inkpercentage[i] = m[i]->inkpercentage;
+
+ }
+ m_inkChannel = inkChannel;
+ m_targetVal = new double[3];
+ m_targetVal[0] = targetl;
+ m_targetVal[1] = targeta;
+ m_targetVal[2] = targetb;
+
+ int m_CalIndex = 0;
+ if (m_inkChannel == 2)
+ m_CalIndex = 2;
+}
+void Tango::ColorLib::ColorCalibrator::Linearizaton(double *InkVals, double *&LinearInkVal, std::string &error)
+{
+ double maxVal = -1000;
+ double minVal = 1000;
+ double * yVal = new double[m_nsize];
+
+ for (int i = 0; i < m_nsize; ++i)
+ {
+ yVal[i] = m_LabData[i][m_CalIndex];
+ }
+ bool res = SortValues(InkVals, yVal);
+
+ if (CheckDuplicates(InkVals, error))
+ return;
+ if (CheckLimits(InkVals, error))
+ return;
+
+ //Values are sorted and unique
+ SmoothCurveData(yVal, 3);
+ if (CheckMonotonicity(yVal, error))
+ return;
+ //Values are monotonic, therefore can be inverted
+ int Kconst = 1;
+ if (yVal[0] > yVal[m_nsize - 1])
+ Kconst = -1;
+ for (int i = 0; i < m_nsize; ++i)
+ {
+ yVal[i] *= Kconst;
+ }
+
+ if (false == Linearize(yVal, LinearInkVal, error))
+ {
+ return;
+ }
+}
+bool Tango::ColorLib::ColorCalibrator::SortValues(double *InkVals, double *yVal)
+{
+ //prepare data
+ std::vector<VectorPair> IndVal;
+
+ //fill up first vector pair
+
+ double *tmpLab = new double[m_nsize];
+ double *tmpInk = new double[m_nsize];
+ int *tmpSort = new int[m_nsize];
+ int *SortIndex = new int[m_nsize];
+ //init index
+ IndVal.resize(m_nsize);
+ for (int i = 0; i < m_nsize; ++i)
+ {
+ IndVal[i].m_ID = i;
+ SortIndex[i] = i;
+ IndVal[i].m_val = m_inkpercentage[i];
+ yVal[i] = m_LabData[i][m_CalIndex];
+ }
+
+ std::stable_sort(IndVal.begin(), IndVal.end(), ByDouble());
+ //arrange all sorted values
+ for (int i = 0; i < m_nsize; ++i)
+ {
+ tmpLab[i] = yVal[IndVal[i].m_ID];
+ tmpInk[i] = InkVals[IndVal[i].m_ID];
+ tmpSort[i] = SortIndex[IndVal[i].m_ID];
+ }
+ for (int i = 0; i < m_nsize; ++i)
+ {
+ yVal[i] = tmpLab[i];
+ m_inkpercentage[i] = tmpInk[i];
+ InkVals[i] = tmpInk[i];
+ SortIndex[i] = tmpSort[i];
+ }
+ if (tmpSort != NULL)
+ {
+ delete[] tmpSort;
+ tmpSort = NULL;
+ }
+ if (tmpLab != NULL)
+ {
+ delete[] tmpLab;
+ tmpLab = NULL;
+ }
+ if (tmpInk != NULL)
+ {
+ delete[] tmpInk;
+ tmpInk = NULL;
+ }
+ IndVal.resize(0);
+ return(true);
+}
+bool Tango::ColorLib::ColorCalibrator::CheckDuplicates(double *InkVals, std::string &error)
+{
+ double diff;
+ for (int i = 0; i < m_nsize - 1; ++i)
+ {
+ diff = InkVals[i + 1] - InkVals[i];
+ if (diff == 0.0)
+ {
+ error = "Ink Percentages have to be unique";
+ return true;
+ //throw std::exception("Ink Percentages have to be unique");
+ }
+
+ }
+ return false;
+}
+
+bool Tango::ColorLib::ColorCalibrator::CheckLimits(double *InkVals, std::string &error)
+{
+ double maxVal = -1000.0;
+ double minVal = 1000.0;
+ for (int i = 0; i < m_nsize; ++i)
+ {
+ maxVal = fmax(maxVal, InkVals[i]);
+ minVal = fmin(minVal, InkVals[i]);
+ }
+ if (maxVal != 100.0)
+ {
+ error ="Maximal value has to be 100%";
+ return true;
+ }
+
+ if (minVal != 0.0)
+ {
+ error = "Minimal value has to be 0";
+ return true;
+ }
+ return false;
+}
+
+void Tango::ColorLib::ColorCalibrator::SmoothCurveData(double *YVal, int FilterWidth)
+{
+ int NumIter = max(FilterWidth, 3) - 2;
+ //Smooth the data with repeated applications of a[1 1 1] filter
+ double *tmpyVal = new double[m_nsize];
+ for (int i = 0; i < NumIter; ++i)
+ {
+ for (int j = 0; j < m_nsize; ++j)
+ tmpyVal[j] = YVal[j];
+ for (int j = 1; j < m_nsize - 1; ++j)
+ YVal[j] = (tmpyVal[j - 1] + tmpyVal[j] + tmpyVal[j + 1]) / 3;
+ }
+ delete[] tmpyVal;
+ tmpyVal = NULL;
+}
+
+bool Tango::ColorLib::ColorCalibrator::CheckMonotonicity(double *yVal, std::string &error)
+{
+ //Check Monotonicity of Smooth Lab Channel
+
+ double diff;
+ diff = yVal[m_nsize - 1] - yVal[0];
+ int CF = 1;
+ if (diff < 0)
+ CF = -1;
+
+ for (int i = 0; i < m_nsize - 1; ++i)
+ {
+ diff = CF * (yVal[i + 1] - yVal[i]);
+ if (diff <= 0.0)
+ {
+ error = "Non monotonic behavior, please remeasure";
+ return true;
+ }
+ }
+ return false;
+}
+bool Tango::ColorLib::ColorCalibrator::Linearize(double *yVal, double*LinearInkVal, std::string &error)
+{
+ double Gain = (yVal[m_nsize - 1] - yVal[0]) / (m_inkpercentage[m_nsize - 1] - m_inkpercentage[0]);
+ double Offset = yVal[0] - Gain * m_inkpercentage[0];
+ double *LabLinear = new double[m_nsize];
+ for (int i = 0; i < m_nsize; i++)
+ LabLinear[i] = Gain * m_inkpercentage[i] + Offset;
+ double outVal = 0.0;
+ for (int i = 0; i < m_nsize; i++)
+ {
+ if (false == Interp1D(LabLinear, m_inkpercentage, yVal[i], outVal, error))
+ return false;
+ LinearInkVal[i] = outVal;
+ }
+ return true;
+}
+bool Tango::ColorLib::ColorCalibrator::Interp1D(double* xx, double *yy, double InValue, double &OutValue, std::string &error)
+{
+ int m, ind;
+ int errType = 0;
+
+ ind = -1;
+
+ //Check Bounds
+ if ((InValue < xx[0] - epsTol) || (InValue > xx[m_nsize - 1] + epsTol))
+ {
+ error = "Interp1D: In Value out of Bounds";
+ return false;
+ }
+
+ if ((InValue > xx[0] - epsTol) && (InValue < xx[0]))
+ InValue = xx[0];
+
+ if ((InValue > xx[m_nsize - 1]) && (InValue < xx[m_nsize - 1] + epsTol))
+ InValue = xx[m_nsize - 1];
+
+ for (m = 0; m < m_nsize - 1; ++m)
+ {
+ if (xx[m] <= InValue && xx[m + 1] >= InValue)
+ {
+ ind = m;
+ break;
+ }
+ }
+ if (ind == -1)
+ {
+ error = "Could not find interpolation interval";
+ return false;
+ }
+ OutValue = ((InValue - xx[m])*yy[m + 1] + (xx[m + 1] - InValue)*yy[m]) / (xx[m + 1] - xx[m]);
+}
diff --git a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorCalibrator.h b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorCalibrator.h
index 131241ccb..8d2ff664b 100644
--- a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorCalibrator.h
+++ b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorCalibrator.h
@@ -4,6 +4,7 @@
#include "CalibrationInput.pb-c.h"
#include "CalibrationOutput.pb-c.h"
#include "CalibrationMeasurement.pb-c.h"
+#include "LinearizationMeasurement.pb-c.h"
#pragma once
@@ -17,11 +18,37 @@ namespace Tango
ColorCalibrator();
~ColorCalibrator();
size_t Tango::ColorLib::ColorCalibrator::GetLiquidFactor(uint8_t * input_buffer, size_t input_buffer_size, uint8_t *& output_buffer);
+ size_t Tango::ColorLib::ColorCalibrator::GetLinearizationMeasurements(uint8_t * input_buffer, size_t input_buffer_size, uint8_t *& output_buffer);
protected:
- void InitData(const CalibrationMeasurement** m, const size_t &nsize, const int &inkChannel, const double& targetl, const double& targeta, const double& targetb);
+ void InitData(const CalibrationMeasurement** m,
+ const size_t &nsize, const int &inkChannel, const double& targetl, const double& targeta, const double& targetb);
void MaximalDispensingRate(double &MDispRate, std::string &outputmessage);
void dEcmc(double *refX, double *samX, double &dECMC);
+ void LinearizationInitData(const LinearizationMeasurement** m,
+ const size_t &nsize, const int &inkChannel, const double& targetl, const double& targeta, const double& targetb);
+ void Linearizaton(double *InkVals, double*& LinearInkVal, std::string &error);
+ bool SortValues(double *InkVals, double *yVal);
+ bool CheckLimits(double *InkVals, std::string &error);
+ void SmoothCurveData(double *YVal, int FilterWidth);
+ bool CheckMonotonicity(double *yVal, std::string &error);
+ bool CheckDuplicates(double *InkVals, std::string &error);
+ bool Linearize(double *yVal, double*LinearInkVal, std::string &error);
+ bool Interp1D(double* xx, double *yy, double InValue, double &OutValue, std::string &error);
+
+ protected:
+ struct VectorPair
+ {
+ int m_ID;
+ double m_val;
+ };
+ struct ByDouble : public std::binary_function<VectorPair, VectorPair, bool>
+ {
+ bool operator()(const VectorPair& lhs, const VectorPair& rhs) const
+ {
+ return lhs.m_val < rhs.m_val;
+ }
+ };
private:
void ClearData();
@@ -32,6 +59,8 @@ namespace Tango
int m_inkChannel;
double *m_targetVal;
int m_CalIndex;
+
+ double *m_inkpercentage;
};
}
}
diff --git a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/Exports.cpp b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/Exports.cpp
index ed32be0b3..24e156640 100644
--- a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/Exports.cpp
+++ b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/Exports.cpp
@@ -47,3 +47,9 @@ extern "C" EXPORT_API size_t __cdecl GenerateGradient(uint8_t* input_buffer, siz
return converter.GenerateGradient(input_buffer, input_buffer_size, output_buffer);
}
+extern "C" EXPORT_API size_t __cdecl GetLinearizationMeasurements(uint8_t* input_buffer, size_t input_buffer_size, uint8_t*& output_buffer)
+{
+ ColorCalibrator calibrator;
+ return calibrator.GetLinearizationMeasurements(input_buffer, input_buffer_size, output_buffer);
+}
+
diff --git a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationInput.pb-c.c b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationInput.pb-c.c
new file mode 100644
index 000000000..5d30f6cd5
--- /dev/null
+++ b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationInput.pb-c.c
@@ -0,0 +1,144 @@
+/* Generated by the protocol buffer compiler. DO NOT EDIT! */
+/* Generated from: LinearizationInput.proto */
+
+/* Do not generate deprecated warnings for self */
+#ifndef PROTOBUF_C__NO_DEPRECATED
+#define PROTOBUF_C__NO_DEPRECATED
+#endif
+
+#include "LinearizationInput.pb-c.h"
+void linearization_input__init
+ (LinearizationInput *message)
+{
+ static const LinearizationInput init_value = LINEARIZATION_INPUT__INIT;
+ *message = init_value;
+}
+size_t linearization_input__get_packed_size
+ (const LinearizationInput *message)
+{
+ assert(message->base.descriptor == &linearization_input__descriptor);
+ return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
+}
+size_t linearization_input__pack
+ (const LinearizationInput *message,
+ uint8_t *out)
+{
+ assert(message->base.descriptor == &linearization_input__descriptor);
+ return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
+}
+size_t linearization_input__pack_to_buffer
+ (const LinearizationInput *message,
+ ProtobufCBuffer *buffer)
+{
+ assert(message->base.descriptor == &linearization_input__descriptor);
+ return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
+}
+LinearizationInput *
+ linearization_input__unpack
+ (ProtobufCAllocator *allocator,
+ size_t len,
+ const uint8_t *data)
+{
+ return (LinearizationInput *)
+ protobuf_c_message_unpack (&linearization_input__descriptor,
+ allocator, len, data);
+}
+void linearization_input__free_unpacked
+ (LinearizationInput *message,
+ ProtobufCAllocator *allocator)
+{
+ if(!message)
+ return;
+ assert(message->base.descriptor == &linearization_input__descriptor);
+ protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
+}
+static const ProtobufCFieldDescriptor linearization_input__field_descriptors[5] =
+{
+ {
+ "LiquidType",
+ 1,
+ PROTOBUF_C_LABEL_OPTIONAL,
+ PROTOBUF_C_TYPE_ENUM,
+ offsetof(LinearizationInput, has_liquidtype),
+ offsetof(LinearizationInput, liquidtype),
+ &liquid_type__descriptor,
+ NULL,
+ 0, /* flags */
+ 0,NULL,NULL /* reserved1,reserved2, etc */
+ },
+ {
+ "TargetL",
+ 2,
+ PROTOBUF_C_LABEL_OPTIONAL,
+ PROTOBUF_C_TYPE_DOUBLE,
+ offsetof(LinearizationInput, has_targetl),
+ offsetof(LinearizationInput, targetl),
+ NULL,
+ NULL,
+ 0, /* flags */
+ 0,NULL,NULL /* reserved1,reserved2, etc */
+ },
+ {
+ "TargetA",
+ 3,
+ PROTOBUF_C_LABEL_OPTIONAL,
+ PROTOBUF_C_TYPE_DOUBLE,
+ offsetof(LinearizationInput, has_targeta),
+ offsetof(LinearizationInput, targeta),
+ NULL,
+ NULL,
+ 0, /* flags */
+ 0,NULL,NULL /* reserved1,reserved2, etc */
+ },
+ {
+ "TargetB",
+ 4,
+ PROTOBUF_C_LABEL_OPTIONAL,
+ PROTOBUF_C_TYPE_DOUBLE,
+ offsetof(LinearizationInput, has_targetb),
+ offsetof(LinearizationInput, targetb),
+ NULL,
+ NULL,
+ 0, /* flags */
+ 0,NULL,NULL /* reserved1,reserved2, etc */
+ },
+ {
+ "Measurements",
+ 5,
+ PROTOBUF_C_LABEL_REPEATED,
+ PROTOBUF_C_TYPE_MESSAGE,
+ offsetof(LinearizationInput, n_measurements),
+ offsetof(LinearizationInput, measurements),
+ &linearization_measurement__descriptor,
+ NULL,
+ 0, /* flags */
+ 0,NULL,NULL /* reserved1,reserved2, etc */
+ },
+};
+static const unsigned linearization_input__field_indices_by_name[] = {
+ 0, /* field[0] = LiquidType */
+ 4, /* field[4] = Measurements */
+ 2, /* field[2] = TargetA */
+ 3, /* field[3] = TargetB */
+ 1, /* field[1] = TargetL */
+};
+static const ProtobufCIntRange linearization_input__number_ranges[1 + 1] =
+{
+ { 1, 0 },
+ { 0, 5 }
+};
+const ProtobufCMessageDescriptor linearization_input__descriptor =
+{
+ PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
+ "LinearizationInput",
+ "LinearizationInput",
+ "LinearizationInput",
+ "",
+ sizeof(LinearizationInput),
+ 5,
+ linearization_input__field_descriptors,
+ linearization_input__field_indices_by_name,
+ 1, linearization_input__number_ranges,
+ (ProtobufCMessageInit) linearization_input__init,
+ NULL,NULL,NULL /* reserved[123] */
+};
diff --git a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationInput.pb-c.h b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationInput.pb-c.h
new file mode 100644
index 000000000..9cab974c5
--- /dev/null
+++ b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationInput.pb-c.h
@@ -0,0 +1,82 @@
+/* Generated by the protocol buffer compiler. DO NOT EDIT! */
+/* Generated from: LinearizationInput.proto */
+
+#ifndef PROTOBUF_C_LinearizationInput_2eproto__INCLUDED
+#define PROTOBUF_C_LinearizationInput_2eproto__INCLUDED
+
+#include <protobuf-c/protobuf-c.h>
+
+PROTOBUF_C__BEGIN_DECLS
+
+#if PROTOBUF_C_VERSION_NUMBER < 1003000
+# error This file was generated by a newer version of protoc-c which is incompatible with your libprotobuf-c headers. Please update your headers.
+#elif 1003000 < PROTOBUF_C_MIN_COMPILER_VERSION
+# error This file was generated by an older version of protoc-c which is incompatible with your libprotobuf-c headers. Please regenerate this file with a newer version of protoc-c.
+#endif
+
+#include "LinearizationMeasurement.pb-c.h"
+#include "LiquidType.pb-c.h"
+
+typedef struct _LinearizationInput LinearizationInput;
+
+
+/* --- enums --- */
+
+
+/* --- messages --- */
+
+struct _LinearizationInput
+{
+ ProtobufCMessage base;
+ protobuf_c_boolean has_liquidtype;
+ LiquidType liquidtype;
+ protobuf_c_boolean has_targetl;
+ double targetl;
+ protobuf_c_boolean has_targeta;
+ double targeta;
+ protobuf_c_boolean has_targetb;
+ double targetb;
+ size_t n_measurements;
+ LinearizationMeasurement **measurements;
+};
+#define LINEARIZATION_INPUT__INIT \
+ { PROTOBUF_C_MESSAGE_INIT (&linearization_input__descriptor) \
+ , 0, LIQUID_TYPE__Cyan, 0, 0, 0, 0, 0, 0, 0,NULL }
+
+
+/* LinearizationInput methods */
+void linearization_input__init
+ (LinearizationInput *message);
+size_t linearization_input__get_packed_size
+ (const LinearizationInput *message);
+size_t linearization_input__pack
+ (const LinearizationInput *message,
+ uint8_t *out);
+size_t linearization_input__pack_to_buffer
+ (const LinearizationInput *message,
+ ProtobufCBuffer *buffer);
+LinearizationInput *
+ linearization_input__unpack
+ (ProtobufCAllocator *allocator,
+ size_t len,
+ const uint8_t *data);
+void linearization_input__free_unpacked
+ (LinearizationInput *message,
+ ProtobufCAllocator *allocator);
+/* --- per-message closures --- */
+
+typedef void (*LinearizationInput_Closure)
+ (const LinearizationInput *message,
+ void *closure_data);
+
+/* --- services --- */
+
+
+/* --- descriptors --- */
+
+extern const ProtobufCMessageDescriptor linearization_input__descriptor;
+
+PROTOBUF_C__END_DECLS
+
+
+#endif /* PROTOBUF_C_LinearizationInput_2eproto__INCLUDED */
diff --git a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationMeasurement.pb-c.c b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationMeasurement.pb-c.c
new file mode 100644
index 000000000..0a242ee0f
--- /dev/null
+++ b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationMeasurement.pb-c.c
@@ -0,0 +1,131 @@
+/* Generated by the protocol buffer compiler. DO NOT EDIT! */
+/* Generated from: LinearizationMeasurement.proto */
+
+/* Do not generate deprecated warnings for self */
+#ifndef PROTOBUF_C__NO_DEPRECATED
+#define PROTOBUF_C__NO_DEPRECATED
+#endif
+
+#include "LinearizationMeasurement.pb-c.h"
+void linearization_measurement__init
+ (LinearizationMeasurement *message)
+{
+ static const LinearizationMeasurement init_value = LINEARIZATION_MEASUREMENT__INIT;
+ *message = init_value;
+}
+size_t linearization_measurement__get_packed_size
+ (const LinearizationMeasurement *message)
+{
+ assert(message->base.descriptor == &linearization_measurement__descriptor);
+ return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
+}
+size_t linearization_measurement__pack
+ (const LinearizationMeasurement *message,
+ uint8_t *out)
+{
+ assert(message->base.descriptor == &linearization_measurement__descriptor);
+ return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
+}
+size_t linearization_measurement__pack_to_buffer
+ (const LinearizationMeasurement *message,
+ ProtobufCBuffer *buffer)
+{
+ assert(message->base.descriptor == &linearization_measurement__descriptor);
+ return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
+}
+LinearizationMeasurement *
+ linearization_measurement__unpack
+ (ProtobufCAllocator *allocator,
+ size_t len,
+ const uint8_t *data)
+{
+ return (LinearizationMeasurement *)
+ protobuf_c_message_unpack (&linearization_measurement__descriptor,
+ allocator, len, data);
+}
+void linearization_measurement__free_unpacked
+ (LinearizationMeasurement *message,
+ ProtobufCAllocator *allocator)
+{
+ if(!message)
+ return;
+ assert(message->base.descriptor == &linearization_measurement__descriptor);
+ protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
+}
+static const ProtobufCFieldDescriptor linearization_measurement__field_descriptors[4] =
+{
+ {
+ "InkPercentage",
+ 1,
+ PROTOBUF_C_LABEL_OPTIONAL,
+ PROTOBUF_C_TYPE_DOUBLE,
+ offsetof(LinearizationMeasurement, has_inkpercentage),
+ offsetof(LinearizationMeasurement, inkpercentage),
+ NULL,
+ NULL,
+ 0, /* flags */
+ 0,NULL,NULL /* reserved1,reserved2, etc */
+ },
+ {
+ "L",
+ 2,
+ PROTOBUF_C_LABEL_OPTIONAL,
+ PROTOBUF_C_TYPE_DOUBLE,
+ offsetof(LinearizationMeasurement, has_l),
+ offsetof(LinearizationMeasurement, l),
+ NULL,
+ NULL,
+ 0, /* flags */
+ 0,NULL,NULL /* reserved1,reserved2, etc */
+ },
+ {
+ "A",
+ 3,
+ PROTOBUF_C_LABEL_OPTIONAL,
+ PROTOBUF_C_TYPE_DOUBLE,
+ offsetof(LinearizationMeasurement, has_a),
+ offsetof(LinearizationMeasurement, a),
+ NULL,
+ NULL,
+ 0, /* flags */
+ 0,NULL,NULL /* reserved1,reserved2, etc */
+ },
+ {
+ "B",
+ 4,
+ PROTOBUF_C_LABEL_OPTIONAL,
+ PROTOBUF_C_TYPE_DOUBLE,
+ offsetof(LinearizationMeasurement, has_b),
+ offsetof(LinearizationMeasurement, b),
+ NULL,
+ NULL,
+ 0, /* flags */
+ 0,NULL,NULL /* reserved1,reserved2, etc */
+ },
+};
+static const unsigned linearization_measurement__field_indices_by_name[] = {
+ 2, /* field[2] = A */
+ 3, /* field[3] = B */
+ 0, /* field[0] = InkPercentage */
+ 1, /* field[1] = L */
+};
+static const ProtobufCIntRange linearization_measurement__number_ranges[1 + 1] =
+{
+ { 1, 0 },
+ { 0, 4 }
+};
+const ProtobufCMessageDescriptor linearization_measurement__descriptor =
+{
+ PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
+ "LinearizationMeasurement",
+ "LinearizationMeasurement",
+ "LinearizationMeasurement",
+ "",
+ sizeof(LinearizationMeasurement),
+ 4,
+ linearization_measurement__field_descriptors,
+ linearization_measurement__field_indices_by_name,
+ 1, linearization_measurement__number_ranges,
+ (ProtobufCMessageInit) linearization_measurement__init,
+ NULL,NULL,NULL /* reserved[123] */
+};
diff --git a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationMeasurement.pb-c.h b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationMeasurement.pb-c.h
new file mode 100644
index 000000000..b4f17f87e
--- /dev/null
+++ b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationMeasurement.pb-c.h
@@ -0,0 +1,78 @@
+/* Generated by the protocol buffer compiler. DO NOT EDIT! */
+/* Generated from: LinearizationMeasurement.proto */
+
+#ifndef PROTOBUF_C_LinearizationMeasurement_2eproto__INCLUDED
+#define PROTOBUF_C_LinearizationMeasurement_2eproto__INCLUDED
+
+#include <protobuf-c/protobuf-c.h>
+
+PROTOBUF_C__BEGIN_DECLS
+
+#if PROTOBUF_C_VERSION_NUMBER < 1003000
+# error This file was generated by a newer version of protoc-c which is incompatible with your libprotobuf-c headers. Please update your headers.
+#elif 1003000 < PROTOBUF_C_MIN_COMPILER_VERSION
+# error This file was generated by an older version of protoc-c which is incompatible with your libprotobuf-c headers. Please regenerate this file with a newer version of protoc-c.
+#endif
+
+
+typedef struct _LinearizationMeasurement LinearizationMeasurement;
+
+
+/* --- enums --- */
+
+
+/* --- messages --- */
+
+struct _LinearizationMeasurement
+{
+ ProtobufCMessage base;
+ protobuf_c_boolean has_inkpercentage;
+ double inkpercentage;
+ protobuf_c_boolean has_l;
+ double l;
+ protobuf_c_boolean has_a;
+ double a;
+ protobuf_c_boolean has_b;
+ double b;
+};
+#define LINEARIZATION_MEASUREMENT__INIT \
+ { PROTOBUF_C_MESSAGE_INIT (&linearization_measurement__descriptor) \
+ , 0, 0, 0, 0, 0, 0, 0, 0 }
+
+
+/* LinearizationMeasurement methods */
+void linearization_measurement__init
+ (LinearizationMeasurement *message);
+size_t linearization_measurement__get_packed_size
+ (const LinearizationMeasurement *message);
+size_t linearization_measurement__pack
+ (const LinearizationMeasurement *message,
+ uint8_t *out);
+size_t linearization_measurement__pack_to_buffer
+ (const LinearizationMeasurement *message,
+ ProtobufCBuffer *buffer);
+LinearizationMeasurement *
+ linearization_measurement__unpack
+ (ProtobufCAllocator *allocator,
+ size_t len,
+ const uint8_t *data);
+void linearization_measurement__free_unpacked
+ (LinearizationMeasurement *message,
+ ProtobufCAllocator *allocator);
+/* --- per-message closures --- */
+
+typedef void (*LinearizationMeasurement_Closure)
+ (const LinearizationMeasurement *message,
+ void *closure_data);
+
+/* --- services --- */
+
+
+/* --- descriptors --- */
+
+extern const ProtobufCMessageDescriptor linearization_measurement__descriptor;
+
+PROTOBUF_C__END_DECLS
+
+
+#endif /* PROTOBUF_C_LinearizationMeasurement_2eproto__INCLUDED */
diff --git a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationOutput.pb-c.c b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationOutput.pb-c.c
new file mode 100644
index 000000000..5bd04b218
--- /dev/null
+++ b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationOutput.pb-c.c
@@ -0,0 +1,119 @@
+/* Generated by the protocol buffer compiler. DO NOT EDIT! */
+/* Generated from: LinearizationOutput.proto */
+
+/* Do not generate deprecated warnings for self */
+#ifndef PROTOBUF_C__NO_DEPRECATED
+#define PROTOBUF_C__NO_DEPRECATED
+#endif
+
+#include "LinearizationOutput.pb-c.h"
+void linearization_output__init
+ (LinearizationOutput *message)
+{
+ static const LinearizationOutput init_value = LINEARIZATION_OUTPUT__INIT;
+ *message = init_value;
+}
+size_t linearization_output__get_packed_size
+ (const LinearizationOutput *message)
+{
+ assert(message->base.descriptor == &linearization_output__descriptor);
+ return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
+}
+size_t linearization_output__pack
+ (const LinearizationOutput *message,
+ uint8_t *out)
+{
+ assert(message->base.descriptor == &linearization_output__descriptor);
+ return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
+}
+size_t linearization_output__pack_to_buffer
+ (const LinearizationOutput *message,
+ ProtobufCBuffer *buffer)
+{
+ assert(message->base.descriptor == &linearization_output__descriptor);
+ return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
+}
+LinearizationOutput *
+ linearization_output__unpack
+ (ProtobufCAllocator *allocator,
+ size_t len,
+ const uint8_t *data)
+{
+ return (LinearizationOutput *)
+ protobuf_c_message_unpack (&linearization_output__descriptor,
+ allocator, len, data);
+}
+void linearization_output__free_unpacked
+ (LinearizationOutput *message,
+ ProtobufCAllocator *allocator)
+{
+ if(!message)
+ return;
+ assert(message->base.descriptor == &linearization_output__descriptor);
+ protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
+}
+static const ProtobufCFieldDescriptor linearization_output__field_descriptors[3] =
+{
+ {
+ "InkPercentage",
+ 1,
+ PROTOBUF_C_LABEL_REPEATED,
+ PROTOBUF_C_TYPE_DOUBLE,
+ offsetof(LinearizationOutput, n_inkpercentage),
+ offsetof(LinearizationOutput, inkpercentage),
+ NULL,
+ NULL,
+ 0, /* flags */
+ 0,NULL,NULL /* reserved1,reserved2, etc */
+ },
+ {
+ "HasError",
+ 20,
+ PROTOBUF_C_LABEL_OPTIONAL,
+ PROTOBUF_C_TYPE_BOOL,
+ offsetof(LinearizationOutput, has_haserror),
+ offsetof(LinearizationOutput, haserror),
+ NULL,
+ NULL,
+ 0, /* flags */
+ 0,NULL,NULL /* reserved1,reserved2, etc */
+ },
+ {
+ "ErrorMessage",
+ 21,
+ PROTOBUF_C_LABEL_OPTIONAL,
+ PROTOBUF_C_TYPE_STRING,
+ 0, /* quantifier_offset */
+ offsetof(LinearizationOutput, errormessage),
+ NULL,
+ NULL,
+ 0, /* flags */
+ 0,NULL,NULL /* reserved1,reserved2, etc */
+ },
+};
+static const unsigned linearization_output__field_indices_by_name[] = {
+ 2, /* field[2] = ErrorMessage */
+ 1, /* field[1] = HasError */
+ 0, /* field[0] = InkPercentage */
+};
+static const ProtobufCIntRange linearization_output__number_ranges[2 + 1] =
+{
+ { 1, 0 },
+ { 20, 1 },
+ { 0, 3 }
+};
+const ProtobufCMessageDescriptor linearization_output__descriptor =
+{
+ PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
+ "LinearizationOutput",
+ "LinearizationOutput",
+ "LinearizationOutput",
+ "",
+ sizeof(LinearizationOutput),
+ 3,
+ linearization_output__field_descriptors,
+ linearization_output__field_indices_by_name,
+ 2, linearization_output__number_ranges,
+ (ProtobufCMessageInit) linearization_output__init,
+ NULL,NULL,NULL /* reserved[123] */
+};
diff --git a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationOutput.pb-c.h b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationOutput.pb-c.h
new file mode 100644
index 000000000..b0ab54e12
--- /dev/null
+++ b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/PMR/ColorLab/LinearizationOutput.pb-c.h
@@ -0,0 +1,75 @@
+/* Generated by the protocol buffer compiler. DO NOT EDIT! */
+/* Generated from: LinearizationOutput.proto */
+
+#ifndef PROTOBUF_C_LinearizationOutput_2eproto__INCLUDED
+#define PROTOBUF_C_LinearizationOutput_2eproto__INCLUDED
+
+#include <protobuf-c/protobuf-c.h>
+
+PROTOBUF_C__BEGIN_DECLS
+
+#if PROTOBUF_C_VERSION_NUMBER < 1003000
+# error This file was generated by a newer version of protoc-c which is incompatible with your libprotobuf-c headers. Please update your headers.
+#elif 1003000 < PROTOBUF_C_MIN_COMPILER_VERSION
+# error This file was generated by an older version of protoc-c which is incompatible with your libprotobuf-c headers. Please regenerate this file with a newer version of protoc-c.
+#endif
+
+
+typedef struct _LinearizationOutput LinearizationOutput;
+
+
+/* --- enums --- */
+
+
+/* --- messages --- */
+
+struct _LinearizationOutput
+{
+ ProtobufCMessage base;
+ size_t n_inkpercentage;
+ double *inkpercentage;
+ protobuf_c_boolean has_haserror;
+ protobuf_c_boolean haserror;
+ char *errormessage;
+};
+#define LINEARIZATION_OUTPUT__INIT \
+ { PROTOBUF_C_MESSAGE_INIT (&linearization_output__descriptor) \
+ , 0,NULL, 0, 0, NULL }
+
+
+/* LinearizationOutput methods */
+void linearization_output__init
+ (LinearizationOutput *message);
+size_t linearization_output__get_packed_size
+ (const LinearizationOutput *message);
+size_t linearization_output__pack
+ (const LinearizationOutput *message,
+ uint8_t *out);
+size_t linearization_output__pack_to_buffer
+ (const LinearizationOutput *message,
+ ProtobufCBuffer *buffer);
+LinearizationOutput *
+ linearization_output__unpack
+ (ProtobufCAllocator *allocator,
+ size_t len,
+ const uint8_t *data);
+void linearization_output__free_unpacked
+ (LinearizationOutput *message,
+ ProtobufCAllocator *allocator);
+/* --- per-message closures --- */
+
+typedef void (*LinearizationOutput_Closure)
+ (const LinearizationOutput *message,
+ void *closure_data);
+
+/* --- services --- */
+
+
+/* --- descriptors --- */
+
+extern const ProtobufCMessageDescriptor linearization_output__descriptor;
+
+PROTOBUF_C__END_DECLS
+
+
+#endif /* PROTOBUF_C_LinearizationOutput_2eproto__INCLUDED */
diff --git a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/Tango.ColorLib_v4.vcxproj b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/Tango.ColorLib_v4.vcxproj
index a0dc368bf..5c9365f84 100644
--- a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/Tango.ColorLib_v4.vcxproj
+++ b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/Tango.ColorLib_v4.vcxproj
@@ -178,6 +178,9 @@
<ClInclude Include="PMR\ColorLab\GradientOutputStop.pb-c.h" />
<ClInclude Include="PMR\ColorLab\InputCoordinates.pb-c.h" />
<ClInclude Include="PMR\ColorLab\InputLiquid.pb-c.h" />
+ <ClInclude Include="PMR\ColorLab\LinearizationInput.pb-c.h" />
+ <ClInclude Include="PMR\ColorLab\LinearizationMeasurement.pb-c.h" />
+ <ClInclude Include="PMR\ColorLab\LinearizationOutput.pb-c.h" />
<ClInclude Include="PMR\ColorLab\LiquidType.pb-c.h" />
<ClInclude Include="PMR\ColorLab\LiquidVolume.pb-c.h" />
<ClInclude Include="PMR\ColorLab\OutputCoordinates.pb-c.h" />
@@ -215,6 +218,9 @@
<ClCompile Include="PMR\ColorLab\GradientOutputStop.pb-c.c" />
<ClCompile Include="PMR\ColorLab\InputCoordinates.pb-c.c" />
<ClCompile Include="PMR\ColorLab\InputLiquid.pb-c.c" />
+ <ClCompile Include="PMR\ColorLab\LinearizationInput.pb-c.c" />
+ <ClCompile Include="PMR\ColorLab\LinearizationMeasurement.pb-c.c" />
+ <ClCompile Include="PMR\ColorLab\LinearizationOutput.pb-c.c" />
<ClCompile Include="PMR\ColorLab\LiquidType.pb-c.c" />
<ClCompile Include="PMR\ColorLab\LiquidVolume.pb-c.c" />
<ClCompile Include="PMR\ColorLab\OutputCoordinates.pb-c.c" />
diff --git a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/Tango.ColorLib_v4.vcxproj.filters b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/Tango.ColorLib_v4.vcxproj.filters
index f78b6daee..3c6c1330d 100644
--- a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/Tango.ColorLib_v4.vcxproj.filters
+++ b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/Tango.ColorLib_v4.vcxproj.filters
@@ -132,6 +132,15 @@
<ClInclude Include="PMR\ColorLab\LiquidVolume.pb-c.h">
<Filter>PMR</Filter>
</ClInclude>
+ <ClInclude Include="PMR\ColorLab\LinearizationInput.pb-c.h">
+ <Filter>PMR</Filter>
+ </ClInclude>
+ <ClInclude Include="PMR\ColorLab\LinearizationMeasurement.pb-c.h">
+ <Filter>PMR</Filter>
+ </ClInclude>
+ <ClInclude Include="PMR\ColorLab\LinearizationOutput.pb-c.h">
+ <Filter>PMR</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Exports.cpp">
@@ -230,5 +239,14 @@
<ClCompile Include="PMR\ColorLab\LiquidVolume.pb-c.c">
<Filter>PMR</Filter>
</ClCompile>
+ <ClCompile Include="PMR\ColorLab\LinearizationInput.pb-c.c">
+ <Filter>PMR</Filter>
+ </ClCompile>
+ <ClCompile Include="PMR\ColorLab\LinearizationMeasurement.pb-c.c">
+ <Filter>PMR</Filter>
+ </ClCompile>
+ <ClCompile Include="PMR\ColorLab\LinearizationOutput.pb-c.c">
+ <Filter>PMR</Filter>
+ </ClCompile>
</ItemGroup>
</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/App.config b/Software/Visual_Studio/FSE/Tango.FSE.UI/App.config
index 291f23910..638e8276d 100644
--- a/Software/Visual_Studio/FSE/Tango.FSE.UI/App.config
+++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/App.config
@@ -5,7 +5,7 @@
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --></configSections>
<appSettings>
- <add key="GatewayUrl" value="http://localhost:2222" />
+ <add key="GatewayUrl" value="https://machineservice-gateway.azurewebsites.net" />
</appSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/Properties/AssemblyInfo.cs b/Software/Visual_Studio/FSE/Tango.FSE.UI/Properties/AssemblyInfo.cs
index e59b9f292..ef63cf517 100644
--- a/Software/Visual_Studio/FSE/Tango.FSE.UI/Properties/AssemblyInfo.cs
+++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/Properties/AssemblyInfo.cs
@@ -7,49 +7,6 @@ using System.Windows;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
-[assembly: AssemblyTitle("Tango.FSE.UI")]
-[assembly: AssemblyDescription("Tango FSE")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("Twine")]
-[assembly: AssemblyProduct("Tango.FSE.UI")]
-[assembly: AssemblyCopyright("Copyright © Twine Solutions LTD 2020")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
+[assembly: AssemblyTitle("Tango FSE")]
+[assembly: AssemblyVersion("1.0.1.0")]
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-//In order to begin building localizable applications, set
-//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file
-//inside a <PropertyGroup>. For example, if you are using US english
-//in your source files, set the <UICulture> to en-US. Then uncomment
-//the NeutralResourceLanguage attribute below. Update the "en-US" in
-//the line below to match the UICulture setting in the project file.
-
-//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
-
-
-[assembly: ThemeInfo(
- ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
- //(used if a resource is not found in the page,
- // or application resource dictionaries)
- ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
- //(used if a resource is not found in the page,
- // app, or any theme specific resource dictionaries)
-)]
-
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/Tango.FSE.UI.csproj b/Software/Visual_Studio/FSE/Tango.FSE.UI/Tango.FSE.UI.csproj
index dce2cbb9e..12d6bd8cf 100644
--- a/Software/Visual_Studio/FSE/Tango.FSE.UI/Tango.FSE.UI.csproj
+++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/Tango.FSE.UI.csproj
@@ -209,6 +209,9 @@
<Compile Include="..\..\PPC\Tango.PPC.Common\Publish\PublishInfo.cs">
<Link>RemoteUpgrade\PublishInfo.cs</Link>
</Compile>
+ <Compile Include="..\..\Versioning\GlobalVersionInfo.cs">
+ <Link>GlobalVersionInfo.cs</Link>
+ </Compile>
<Compile Include="Authentication\DefaultAuthenticationProvider.cs" />
<Compile Include="BugReporting\DefaultBugReporter.cs" />
<Compile Include="BugReporting\SystemInformationModel.cs" />
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Models/ColorLinearizationModel.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Models/ColorLinearizationModel.cs
index fe9ec7e37..8a24a9702 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Models/ColorLinearizationModel.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Models/ColorLinearizationModel.cs
@@ -9,7 +9,7 @@ namespace Tango.MachineStudio.RML.Models
{
public class ColorLinearizationModel
{
- private class LinearizationDataItem
+ public class LinearizationDataItem
{
public double L { get; set; }
public double A { get; set; }
@@ -22,14 +22,10 @@ namespace Tango.MachineStudio.RML.Models
}
- public void GetDataFromFile(string fileName)
+ public void GetDataFromFile(string fileName, out List<LinearizationDataItem> items)
{
-
ExcelReader reader = new ExcelReader(fileName);
- var items = reader.GetDataByIndex<LinearizationDataItem>("Sheet1", 2);
- foreach (var item in items)
- {
- }
+ items = reader.GetDataByIndex<LinearizationDataItem>("Sheet1", 2);
reader.Dispose();
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorCalibrationViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorCalibrationViewVM.cs
index f118ce77a..7d05897d5 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorCalibrationViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorCalibrationViewVM.cs
@@ -17,12 +17,14 @@ using Tango.PMR.ColorLab;
using Tango.Logging;
using Tango.MachineStudio.Common.Notifications;
using System.Text.RegularExpressions;
+using Microsoft.Win32;
namespace Tango.MachineStudio.RML.ViewModels
{
public class ColorCalibrationViewVM : ExtendedObject
{
private IColorCalibrator _calibrator;
+ private ILinearizationMeasurements _linearizationMeasurementscalibrator;
private INotificationProvider _notification;
#region Properties
@@ -41,15 +43,7 @@ namespace Tango.MachineStudio.RML.ViewModels
get { return _liquidType; }
set { _liquidType = value; RaisePropertyChangedAuto(); }
}
-
- private BL.Entities.LiquidType _selectedLinearizationliquidType;
-
- public BL.Entities.LiquidType SelectedLinearizationLiquidType
- {
- get { return _selectedLinearizationliquidType; }
- set { _selectedLinearizationliquidType = value; RaisePropertyChangedAuto(); }
- }
-
+
private List<BL.Entities.LiquidType> _liquidTypes;
public List<BL.Entities.LiquidType> LiquidTypes
@@ -98,18 +92,14 @@ namespace Tango.MachineStudio.RML.ViewModels
public RelayCommand CreateGraphCommand { get; set; }
public RelayCommand CreateLinearizationGraphCommand { get; set; }
+ public RelayCommand ExportGraphCommand { get; set; }
- public string CalibrationLiquidTypeName
+ public string LiquidTypeName
{
get { return LiquidType == null ?"" : LiquidType.Name; }
}
-
- public string LinearizationLiquidTypeName
- {
- get { return SelectedLinearizationLiquidType == null ? "" : SelectedLinearizationLiquidType.Name; }
- }
-
+
public Plot PlotControl { get; set; }
private IList<DataPoint> _points;
/// <summary>
@@ -201,14 +191,17 @@ namespace Tango.MachineStudio.RML.ViewModels
HasError = false;
CreateGraphCommand = new RelayCommand(CreateGraph);
CreateLinearizationGraphCommand = new RelayCommand(CreateLinearizationGraph);
+ ExportGraphCommand = new RelayCommand(ExportGraph);
this.Points = new List<DataPoint>();
TargetPoints = new List<DataPoint>();
+ LinearizationPoints = new List<DataPoint>();
}
public void Loading()
{
LiquidType = LiquidTypes.Count > 0 ? LiquidTypes[0] : null;
_calibrator = new DefaultColorCalibrator();
+ _linearizationMeasurementscalibrator = new DefaultColorCalibrator();
}
@@ -229,10 +222,10 @@ namespace Tango.MachineStudio.RML.ViewModels
conversionInput.TargetB = lab.B;
}
CalibrationOutput result = _calibrator.GetLiquidFactor(conversionInput);
-
- ErrorMessage = Regex.Replace(result.ErrorMessage, "[^A-Za-z0-9_., ]+", "");
-
+
+ ErrorMessage = result.ErrorMessage;
HasError = false == String.IsNullOrEmpty(ErrorMessage);
+
return result.LiquidFactor;
}
catch (Exception ex )
@@ -281,33 +274,124 @@ namespace Tango.MachineStudio.RML.ViewModels
#endregion
#region CreateLinearizationGraph
- private void CreateLinearizationGraph(object obj)
+ private async void CreateLinearizationGraph(object obj)
{
- if (_selectedLinearizationliquidType == null)
+ if (_liquidType == null )
return;
- string labType = ColorCalibrationExt.DisplayLiquidTypeToLABType[_selectedLinearizationliquidType.Type];
+ string labType = ColorCalibrationExt.DisplayLiquidTypeToLABType[_liquidType.Type];
ColorLinearizationModel model = new ColorLinearizationModel();
- string fileName = @"C:\Test\Test Input Lineration.xlsx";
- model.GetDataFromFile(fileName);
- //await Task.Factory.StartNew(() =>
- //{
- // Factor = GetLiquidFactor();
- //});
+ string fileName = GetInkDataFileOpen();// @"C:\Test\Test Input Lineration.xlsx";//dialog to open file
+ if (fileName == null)
+ return;
- LinearizationPoints.Clear();
-
- Measurements.ToList().ForEach(x => {
- LinearizationPoints.Add(new DataPoint(x.Ink, x.L));
+ List<ColorLinearizationModel.LinearizationDataItem> items;
+ model.GetDataFromFile(fileName, out items);
+ if (items.Count == 0)
+ return;
+
+ List<double> outputPoints = new List<double>();
+ await Task.Factory.StartNew(() =>
+ {
+ outputPoints = GetLinearizationMeasurements(items);
});
- RaisePropertyChanged("To");
- RaisePropertyChanged("From");
- XStep = (int)(Points.Count / 6);
+ LinearizationPoints.Clear();
+
+ if (outputPoints == null || outputPoints.Count != items.Count)
+ return;
+
+ foreach (var nw in items.Zip(outputPoints, Tuple.Create))
+ {
+ LinearizationPoints.Add(new DataPoint(nw.Item1.InkPercentage, nw.Item2));
+ }
+
LinearizationPlotControl.InvalidatePlot(true);
}
+
+ /// <summary>
+ /// Open file dialog and get name of file
+ /// </summary>
+ /// <returns></returns>
+ private String GetInkDataFileOpen()
+ {
+ OpenFileDialog dlg = new OpenFileDialog();
+ dlg.Title = "Select Ink data file";
+ dlg.Filter = "Excel |*.xlsx";
+ if (dlg.ShowDialogCenter())
+ {
+ return dlg.FileName;
+ }
+
+ return null;
+ }
+
+ private List<double> GetLinearizationMeasurements(List<ColorLinearizationModel.LinearizationDataItem> items)
+ {
+ try
+ {
+ LinearizationInput linearizationInput = new LinearizationInput();
+ items.ForEach(x => linearizationInput.Measurements.Add(new LinearizationMeasurement { L = x.L, A = x.A, B = x.B, InkPercentage = x.InkPercentage }));
+ linearizationInput.LiquidType = PMR.ColorLab.LiquidType.TryParse(_liquidType.Type.ToString(), out PMR.ColorLab.LiquidType outValue) ? outValue : PMR.ColorLab.LiquidType.Black;
+
+ LAB lab;
+ if (ColorCalibrationExt.TargetLiquidTypeToLAB.TryGetValue(_liquidType.Type, out lab))
+ {
+ linearizationInput.TargetL = lab.L;
+ linearizationInput.TargetA = lab.A;
+ linearizationInput.TargetB = lab.B;
+ }
+ LinearizationOutput result = _linearizationMeasurementscalibrator.GetLinearizationMeasurements(linearizationInput);
+
+ if(!String.IsNullOrEmpty(result.ErrorMessage))
+ {
+ LogManager.Log(result.ErrorMessage, "Error occurred while trying to call GetLinearizationMeasurements.");
+ }
+ return result.InkPercentage.ToList();
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, "Error occurred while trying to call GetLinearizationMeasurements.");
+ }
+ return null;
+ }
+ #endregion
+
+ #region Export graph
+ /// <summary>
+ /// Exports the graph point to Excel file.
+ /// </summary>
+ protected void ExportGraph()
+ {
+ SaveFileDialog dlg = new SaveFileDialog();
+ try
+ {
+ dlg.Title = $"Export excel calibration file for {LiquidType.Name}";
+ dlg.Filter = "Excel Files|*.xlsx";
+ dlg.DefaultExt = ".xlsx";
+ dlg.FileName = $"CData_{LiquidType.Name}_v{LiquidType.Version}.xlsx";
+ if (dlg.ShowDialog().Value)
+ {
+ List<CalibrationPoint> points = new List<CalibrationPoint>();
+ LinearizationPoints.ToList().ForEach(x=> points.Add(ToCalibrationPoint(x)));
+ BL.Calibration.CalibrationHelper.ExportCalibrationDataToExcel(points, dlg.FileName);
+ }
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, "Error exporting excel file " + dlg.FileName);
+ _notification.ShowError("An error occurred while trying to export the calibration data.");
+ }
+ }
+ public CalibrationPoint ToCalibrationPoint(DataPoint point)
+ {
+ return new CalibrationPoint()
+ {
+ X = point.X,
+ Y = point.Y,
+ };
+ }
#endregion
-
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorConversionViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorConversionViewVM.cs
index f583fa15e..d9ba419e0 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorConversionViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorConversionViewVM.cs
@@ -314,11 +314,11 @@ namespace Tango.MachineStudio.RML.ViewModels
try
{
var tables = RML.GetActiveProcessGroup().ProcessParametersTables.OrderBy(x => x.TableIndex).ToList();
- return (tables[1].MaxInkUptake / tables[0].MaxInkUptake) * 100;
+ return tables.Max(x => x.MaxInkUptake);
}
catch
{
- return BrushStop.MAX_TOTAL_LIQUID_VOLUME;
+ return BrushStop.MAX_INK_UPTAKE;
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorCalibrationView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorCalibrationView.xaml
index 32d467cba..291d335de 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorCalibrationView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorCalibrationView.xaml
@@ -20,160 +20,166 @@
</UserControl.Resources>
<Grid>
- <DockPanel>
- <Border DockPanel.Dock="Top" Background="{StaticResource TransparentBackgroundBrush200}" Margin="20 0" Padding="5" CornerRadius="5">
- <Border.Effect>
- <DropShadowEffect Opacity="0.4" />
- </Border.Effect>
- <Grid>
- <TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" Margin="20 0 0 0" FontSize="16" Padding="2">Color Calibrations</TextBlock>
- </Grid>
- </Border>
-
- <Grid Margin="25">
+ <DockPanel>
+ <StackPanel Orientation="Horizontal" DockPanel.Dock="Top" Margin="20 10">
+ <TextBlock FontSize="16" HorizontalAlignment="Left" VerticalAlignment="Center">Liquid Type:</TextBlock>
+ <ComboBox Margin="40 0 0 0" MinWidth="180" HorizontalAlignment="Left" ItemsSource="{Binding LiquidTypes}"
+ SelectedItem="{Binding LiquidType}" DisplayMemberPath="Name"
+ Style="{StaticResource TransparentComboBoxStyle}" FontSize="16"></ComboBox>
+ </StackPanel>
+ <Grid>
<Grid.ColumnDefinitions>
- <ColumnDefinition Width="1*"/>
- <ColumnDefinition Width="1*"/>
+ <ColumnDefinition Width="2*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
- <Grid Grid.Column="0" Margin="20 0 20 0">
- <Grid.RowDefinitions>
- <RowDefinition Height="1*"/>
- <RowDefinition Height="3*"/>
- </Grid.RowDefinitions>
- <Grid Grid.Row="0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="Auto" Height="80" Margin="0 0 0 20" >
+ <DockPanel Grid.Column="0">
+ <Border DockPanel.Dock="Top" Background="{StaticResource TransparentBackgroundBrush200}" Margin="20 0 0 0 " Padding="5" CornerRadius="5" Height="40" VerticalAlignment="Top">
+ <Border.Effect>
+ <DropShadowEffect Opacity="0.4" />
+ </Border.Effect>
+ <Grid>
+ <TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" Margin="20 4 0 0" FontSize="16" Padding="0">LIQUID FACTOR</TextBlock>
+ </Grid>
+ </Border>
+ <Grid Margin="10 20 0 10">
<Grid.ColumnDefinitions>
- <ColumnDefinition Width="1*"></ColumnDefinition>
- <ColumnDefinition Width="Auto"></ColumnDefinition>
+ <ColumnDefinition Width="1*"/>
+ <ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
- <StackPanel Orientation="Vertical" Grid.Column="0">
- <TextBlock FontSize="20" HorizontalAlignment="Left" >Liquid Type</TextBlock>
- <ComboBox Margin="0 20 0 0" MinWidth="140" HorizontalAlignment="Left" ItemsSource="{Binding LiquidTypes}"
- SelectedItem="{Binding LiquidType}" DisplayMemberPath="Name"
- Style="{StaticResource TransparentComboBoxStyle}" FontSize="16"></ComboBox>
- </StackPanel>
- <Button Grid.Column="1" VerticalAlignment="Top" Background="{StaticResource TransparentBackgroundBrush200}" MinWidth="160" Height="50" BorderBrush="{StaticResource TransparentBackgroundBrush200}" Command="{Binding CreateGraphCommand}" >
- <TextBlock FontSize="16" Foreground="{StaticResource MainWindow.Foreground}">GET MAX DISPENSING RATE</TextBlock>
- </Button>
- </Grid>
- <Grid Grid.Row="1" HorizontalAlignment="Left" VerticalAlignment="Stretch">
- <DataGrid HorizontalAlignment="Left" VerticalScrollBarVisibility ="Auto" SelectionUnit="FullRow" BorderBrush="{StaticResource DarkGrayBrush }" BorderThickness="1" Background="{StaticResource TransparentBackgroundBrush}" AlternatingRowBackground="{StaticResource Transparent200}" AutoGenerateColumns="False" CanUserAddRows="True" CanUserDeleteRows="False" ItemsSource="{Binding Measurements}" Margin="0 30 0 50">
- <DataGrid.CellStyle>
- <Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}">
- <Setter Property="BorderThickness" Value="0"/>
- <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
- <Setter Property="VerticalContentAlignment" Value="Center"></Setter>
- </Style>
- </DataGrid.CellStyle>
- <DataGrid.Resources>
- <Style x:Key="CellNumericUpDown" TargetType="{x:Type mahapps:NumericUpDown}" BasedOn="{StaticResource {x:Type mahapps:NumericUpDown}}">
- <Setter Property="FrameworkElement.HorizontalAlignment" Value="Stretch"/>
- <Setter Property="HorizontalContentAlignment" Value="Left"/>
- <Setter Property="Background" Value="Transparent"/>
- <Setter Property="BorderThickness" Value="0"/>
- <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/>
- <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Disabled"/>
- <Setter Property="Focusable" Value="false"/>
- <Setter Property="IsHitTestVisible" Value="false"/>
- <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Disabled"/>
- <Setter Property="FrameworkElement.VerticalAlignment" Value="Top"/>
- <Setter Property="VerticalContentAlignment" Value="Center"/>
- <Setter Property="FrameworkElement.MinHeight" Value="0"/>
- <Setter Property="HideUpDownButtons" Value="true"/>
- </Style>
- <Style x:Key="EditableCellNumericUpDown" TargetType="{x:Type mahapps:NumericUpDown}" BasedOn="{StaticResource {x:Type mahapps:NumericUpDown}}">
- <Setter Property="FrameworkElement.HorizontalAlignment" Value="Stretch"/>
- <Setter Property="HorizontalContentAlignment" Value="Left"/>
- <Setter Property="BorderThickness" Value="0"/>
- <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/>
- <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Disabled"/>
- <Setter Property="FrameworkElement.VerticalAlignment" Value="Top"/>
- <Setter Property="VerticalContentAlignment" Value="Center"/>
- <Setter Property="FrameworkElement.MinHeight" Value="0"/>
- </Style>
- </DataGrid.Resources>
- <DataGrid.Columns>
- <mahapps:DataGridNumericUpDownColumn Header="Ink nl/cm" Minimum="0" Maximum="100000" Binding="{Binding Ink}" HideUpDownButtons="True" Width="1*" ElementStyle="{StaticResource CellNumericUpDown}" EditingElementStyle="{StaticResource EditableCellNumericUpDown}" />
- <mahapps:DataGridNumericUpDownColumn Header="L" Minimum="0" Maximum="100" Binding="{Binding L}" HideUpDownButtons="True" Width="1*" ElementStyle="{StaticResource CellNumericUpDown}" EditingElementStyle="{StaticResource EditableCellNumericUpDown}"/>
- <mahapps:DataGridNumericUpDownColumn Header="A" Minimum="-128" Maximum="127" Binding="{Binding A}" HideUpDownButtons="True" Width="1*" ElementStyle="{StaticResource CellNumericUpDown}" EditingElementStyle="{StaticResource EditableCellNumericUpDown}" />
- <mahapps:DataGridNumericUpDownColumn Header="B" Minimum="-128" Maximum="127" Binding="{Binding B}" HideUpDownButtons="True" Width="1*" ElementStyle="{StaticResource CellNumericUpDown}" EditingElementStyle="{StaticResource EditableCellNumericUpDown}" />
- </DataGrid.Columns>
- </DataGrid>
-
- </Grid>
- </Grid>
- <Grid Grid.Column="1" Margin="20 0 20 0">
- <Grid>
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
- <RowDefinition Height="3*"/>
+ <RowDefinition Height="Auto"/>
+ <RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
- <Border Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0 20 0 0" BorderThickness="0" BorderBrush="{StaticResource DarkGrayBrush}" CornerRadius="5">
- <oxy:Plot Title="{Binding CalibrationLiquidTypeName}" x:Name="CalibrationPlot" Margin="0 0 10 0" Background="Transparent">
- <oxy:Plot.Series >
- <oxy:LineSeries ItemsSource="{Binding Points}" Color="#73B6EC" MarkerFill="SteelBlue" MarkerType="Circle" />
- <oxy:LineSeries ItemsSource="{Binding TargetPoints}" Color="#E14141" MarkerFill="#E14141" MarkerType="Circle" />
- </oxy:Plot.Series>
- <oxy:Plot.Axes>
- <oxy:LinearAxis Position="Bottom" Title = "nl/cm" MajorGridlineStyle="Solid" MinorGridlineStyle="Dot" IsZoomEnabled="True"/>
- <oxy:LinearAxis Position="Left" Title = "Lab" MajorGridlineStyle="Solid" MinorGridlineStyle="Dot" IsZoomEnabled="True" Minimum="{Binding From}" Maximum="{Binding To}"/>
- </oxy:Plot.Axes>
- </oxy:Plot>
- </Border>
- <Border BorderBrush="{StaticResource BlueBrush100}" BorderThickness="0" CornerRadius="5" Margin="55 0 20 0">
- <StackPanel Orientation="Vertical" Grid.Row="0" Margin="10 10 0 0">
- <TextBlock FontSize="16" HorizontalAlignment="Left" Foreground="{StaticResource MainWindow.Foreground}" Height="50" Visibility="{Binding HasError, Converter={StaticResource BooleanToVisibilityInverseConverter}}">
- <Run FontSize="20"> Factor: </Run>
- <Run Text="{Binding Factor}" Foreground="{StaticResource BlueBrush100}"></Run>
- <LineBreak />
- </TextBlock>
- <TextBlock FontSize="16" Foreground="{StaticResource MainWindow.Foreground}" FontWeight="SemiBold" Visibility="{Binding HasError, Converter={StaticResource BooleanToVisibilityConverter}}" Margin="0 20 10 10" >Warning:</TextBlock>
+ <Grid HorizontalAlignment="Left" VerticalAlignment="Stretch" Grid.Column="0" Grid.Row="0" Margin="20 0 20 0">
+ <DataGrid HorizontalAlignment="Left" VerticalScrollBarVisibility ="Auto" SelectionUnit="FullRow" BorderBrush="{StaticResource DarkGrayBrush }" BorderThickness="1" Background="{StaticResource TransparentBackgroundBrush}" AlternatingRowBackground="{StaticResource Transparent200}" AutoGenerateColumns="False" CanUserAddRows="True" CanUserDeleteRows="False" ItemsSource="{Binding Measurements}" Margin="0 30 0 50">
+ <DataGrid.CellStyle>
+ <Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}">
+ <Setter Property="BorderThickness" Value="0"/>
+ <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
+ <Setter Property="VerticalContentAlignment" Value="Center"></Setter>
+ </Style>
+ </DataGrid.CellStyle>
+ <DataGrid.Resources>
+ <Style x:Key="CellNumericUpDown" TargetType="{x:Type mahapps:NumericUpDown}" BasedOn="{StaticResource {x:Type mahapps:NumericUpDown}}">
+ <Setter Property="FrameworkElement.HorizontalAlignment" Value="Stretch"/>
+ <Setter Property="HorizontalContentAlignment" Value="Left"/>
+ <Setter Property="Background" Value="Transparent"/>
+ <Setter Property="BorderThickness" Value="0"/>
+ <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/>
+ <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Disabled"/>
+ <Setter Property="Focusable" Value="false"/>
+ <Setter Property="IsHitTestVisible" Value="false"/>
+ <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Disabled"/>
+ <Setter Property="FrameworkElement.VerticalAlignment" Value="Top"/>
+ <Setter Property="VerticalContentAlignment" Value="Center"/>
+ <Setter Property="FrameworkElement.MinHeight" Value="0"/>
+ <Setter Property="HideUpDownButtons" Value="true"/>
+ </Style>
+ <Style x:Key="EditableCellNumericUpDown" TargetType="{x:Type mahapps:NumericUpDown}" BasedOn="{StaticResource {x:Type mahapps:NumericUpDown}}">
+ <Setter Property="FrameworkElement.HorizontalAlignment" Value="Stretch"/>
+ <Setter Property="HorizontalContentAlignment" Value="Left"/>
+ <Setter Property="BorderThickness" Value="0"/>
+ <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/>
+ <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Disabled"/>
+ <Setter Property="FrameworkElement.VerticalAlignment" Value="Top"/>
+ <Setter Property="VerticalContentAlignment" Value="Center"/>
+ <Setter Property="FrameworkElement.MinHeight" Value="0"/>
+ </Style>
+ </DataGrid.Resources>
+ <DataGrid.Columns>
+ <mahapps:DataGridNumericUpDownColumn Header="Ink nl/cm" Minimum="0" Maximum="100000" Binding="{Binding Ink}" HideUpDownButtons="True" Width="1*" ElementStyle="{StaticResource CellNumericUpDown}" EditingElementStyle="{StaticResource EditableCellNumericUpDown}" />
+ <mahapps:DataGridNumericUpDownColumn Header="L" Minimum="0" Maximum="100" Binding="{Binding L}" HideUpDownButtons="True" Width="1*" ElementStyle="{StaticResource CellNumericUpDown}" EditingElementStyle="{StaticResource EditableCellNumericUpDown}"/>
+ <mahapps:DataGridNumericUpDownColumn Header="A" Minimum="-128" Maximum="127" Binding="{Binding A}" HideUpDownButtons="True" Width="1*" ElementStyle="{StaticResource CellNumericUpDown}" EditingElementStyle="{StaticResource EditableCellNumericUpDown}" />
+ <mahapps:DataGridNumericUpDownColumn Header="B" Minimum="-128" Maximum="127" Binding="{Binding B}" HideUpDownButtons="True" Width="1*" ElementStyle="{StaticResource CellNumericUpDown}" EditingElementStyle="{StaticResource EditableCellNumericUpDown}" />
+ </DataGrid.Columns>
+ </DataGrid>
- <Border BorderThickness="1" CornerRadius="4" BorderBrush="{StaticResource DarkGrayBrush}" Visibility="{Binding HasError, Converter={StaticResource BooleanToVisibilityConverter}}" Height="Auto">
- <TextBlock Margin="5" Foreground="{StaticResource RedBrush300}" Text="{Binding ErrorMessage}" TextWrapping="Wrap" Padding="5" FontSize="14"/>
+ </Grid>
+
+ <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Column="1" Grid.Row="0" Margin="20 0 0 0">
+ <Border HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0 20 0 0" BorderThickness="0" BorderBrush="{StaticResource DarkGrayBrush}" CornerRadius="5">
+ <oxy:Plot Title="{Binding LiquidTypeName}" x:Name="CalibrationPlot" Margin="0 0 10 0" Background="Transparent">
+ <oxy:Plot.Series >
+ <oxy:LineSeries ItemsSource="{Binding Points}" Color="#73B6EC" MarkerFill="SteelBlue" MarkerType="Circle" />
+ <oxy:LineSeries ItemsSource="{Binding TargetPoints}" Color="#E14141" MarkerFill="#E14141" MarkerType="Circle" />
+ </oxy:Plot.Series>
+ <oxy:Plot.Axes>
+ <oxy:LinearAxis Position="Bottom" Title = "nl/cm" MajorGridlineStyle="Solid" MinorGridlineStyle="Dot" IsZoomEnabled="True"/>
+ <oxy:LinearAxis Position="Left" Title = "Lab" MajorGridlineStyle="Solid" MinorGridlineStyle="Dot" IsZoomEnabled="True" Minimum="{Binding From}" Maximum="{Binding To}"/>
+ </oxy:Plot.Axes>
+ </oxy:Plot>
+ </Border>
+ </Grid>
+
+ <Border Grid.Row="1" Grid.ColumnSpan="2" BorderBrush="{StaticResource BlueBrush100}" BorderThickness="0" CornerRadius="5" Margin="20 0 20 0">
+ <StackPanel Orientation="Vertical" Grid.Row="0" Margin="2 5 0 0">
+ <Border BorderThickness="0.5" CornerRadius="4" BorderBrush="{StaticResource DarkGrayBrush}" Visibility="{Binding HasError, Converter={StaticResource BooleanToVisibilityInverseConverter}}" Height="Auto" Margin="0 6 0 0">
+ <TextBlock FontSize="16" Foreground="{StaticResource MainWindow.Foreground}" FontWeight="SemiBold" Visibility="{Binding HasError, Converter={StaticResource BooleanToVisibilityInverseConverter}}" Margin="10" >
+ <Run FontSize="16"> Factor: </Run>
+ <Run Text="{Binding Factor,StringFormat='#.0000'}" Foreground="{StaticResource BlueBrush100}"></Run>
+ </TextBlock>
+ </Border>
+
+ <Border BorderThickness="0.5" CornerRadius="4" BorderBrush="{StaticResource DarkGrayBrush}" Visibility="{Binding HasError, Converter={StaticResource BooleanToVisibilityConverter}}" Height="Auto" Margin="0 6 0 0">
+ <TextBlock FontSize="16" Foreground="{StaticResource MainWindow.Foreground}" FontWeight="SemiBold" Visibility="{Binding HasError, Converter={StaticResource BooleanToVisibilityConverter}}" Margin="10" >
+ <Run FontSize="14"> Warning: </Run>
+ <Run Foreground="{StaticResource RedBrush300}" Text="{Binding ErrorMessage}" ></Run>
+ </TextBlock>
</Border>
</StackPanel>
</Border>
+ <Button Grid.Row="2" Grid.Column="1" Margin="0 20 20 0" VerticalAlignment="Bottom" HorizontalAlignment="Right" Background="{StaticResource TransparentBackgroundBrush200}" MinWidth="160" BorderBrush="{StaticResource TransparentBackgroundBrush200}" Command="{Binding CreateGraphCommand}" >
+ <TextBlock FontSize="14" Foreground="{StaticResource MainWindow.Foreground}">GET LIQUID FACTOR</TextBlock>
+ </Button>
</Grid>
- </Grid>
- <Grid Grid.Column="2" Margin="10 0 0 0">
- <Grid>
+ </DockPanel>
+ <DockPanel Grid.Column="1">
+ <Border DockPanel.Dock="Top" Background="{StaticResource TransparentBackgroundBrush200}" Margin="20 0 0 0 " Padding="5" CornerRadius="5" Height="40" VerticalAlignment="Top">
+ <Border.Effect>
+ <DropShadowEffect Opacity="0.4" />
+ </Border.Effect>
+ <Grid>
+ <TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" Margin="20 4 0 0" FontSize="16" Padding="0">LINEARIZATION</TextBlock>
+ </Grid>
+ </Border>
+ <Grid Margin="10 20 20 10">
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
- <RowDefinition Height="3*"/>
+ <RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
- <Grid Grid.Row="0" Margin="55 0 0 0">
- <Grid.ColumnDefinitions>
- <ColumnDefinition/>
- <ColumnDefinition Width="Auto"/>
- </Grid.ColumnDefinitions>
- <StackPanel Orientation="Vertical" Grid.Column="0">
- <TextBlock HorizontalAlignment="Left" FontSize="20" >Liquid Type</TextBlock>
- <ComboBox Margin="0 20 0 0" MinWidth="140" HorizontalAlignment="Left" ItemsSource="{Binding LiquidTypes}"
- SelectedItem="{Binding SelectedLinearizationLiquidType}" DisplayMemberPath="Name"
- Style="{StaticResource TransparentComboBoxStyle}" FontSize="16"></ComboBox>
+ <Grid Grid.Column="0" Margin="10 0 0 0">
+ <Grid.RowDefinitions>
+ <RowDefinition Height="1*"/>
+ <RowDefinition Height="Auto"/>
+ </Grid.RowDefinitions>
+ <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Row="0" Margin="0 0 0 0">
+ <Border HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0" BorderThickness="0" BorderBrush="{StaticResource DarkGrayBrush}" CornerRadius="5">
+ <oxy:Plot Title="{Binding LiquidTypeName}" x:Name="LinearizationPlot" Margin="0 0 0 0" Background="Transparent">
+ <oxy:Plot.Series >
+ <oxy:LineSeries ItemsSource="{Binding LinearizationPoints}" Color="#73B6EC" MarkerFill="SteelBlue" MarkerType="Circle"/>
+ </oxy:Plot.Series>
+ <oxy:Plot.Axes>
+ <oxy:LinearAxis Position="Bottom" Title = "In Ink" MajorGridlineStyle="Solid" MinorGridlineStyle="Dot" IsZoomEnabled="True" Minimum="0"/>
+ <oxy:LinearAxis Position="Left" Title = "Out Ink" MajorGridlineStyle="Solid" MinorGridlineStyle="Dot" IsZoomEnabled="True" Minimum="0" />
+ </oxy:Plot.Axes>
+ </oxy:Plot>
+ </Border>
+ </Grid>
+ <StackPanel Orientation="Horizontal" Grid.Row="1" Margin="0 20 10 0" HorizontalAlignment="Right">
+ <Button VerticalAlignment="Bottom" HorizontalAlignment="Right" Background="{StaticResource TransparentBackgroundBrush200}" MinWidth="100" BorderBrush="{StaticResource TransparentBackgroundBrush200}" Command="{Binding ExportGraphCommand}" >
+ <TextBlock FontSize="14" Foreground="{StaticResource MainWindow.Foreground}">Export</TextBlock>
+ </Button>
+ <Button Margin="20 0 0 0" VerticalAlignment="Bottom" HorizontalAlignment="Right" Background="{StaticResource TransparentBackgroundBrush200}" MinWidth="180" BorderBrush="{StaticResource TransparentBackgroundBrush200}" Command="{Binding CreateLinearizationGraphCommand}" >
+ <TextBlock FontSize="14" Foreground="{StaticResource MainWindow.Foreground}">CREATE LINEARIZATION GRAPH</TextBlock>
+ </Button>
</StackPanel>
- <Button Grid.Column="1" IsEnabled="False" VerticalAlignment="Top" Background="{StaticResource TransparentBackgroundBrush200}" MinWidth="160" Height="50" BorderBrush="{StaticResource TransparentBackgroundBrush200}" Command="{Binding CreateLinearizationGraphCommand}" >
- <TextBlock FontSize="16" Foreground="{StaticResource MainWindow.Foreground}">CREATE LINEARIZATION GRAPH</TextBlock>
- </Button>
-
</Grid>
- <Border Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0 20 0 0" BorderThickness="0" BorderBrush="{StaticResource DarkGrayBrush}" CornerRadius="5">
- <oxy:Plot Title="{Binding LinearizationLiquidTypeName}" x:Name="LinearizationPlot" Margin="0 0 10 0" Background="Transparent">
- <oxy:Plot.Series >
- <oxy:LineSeries ItemsSource="{Binding LinearizationPoints}" Color="#73B6EC" MarkerFill="SteelBlue" />
- </oxy:Plot.Series>
- <oxy:Plot.Axes>
- <oxy:LinearAxis Position="Bottom" Title = "In Ink" MajorGridlineStyle="Solid" MinorGridlineStyle="Dot" IsZoomEnabled="True" Minimum="0"/>
- <oxy:LinearAxis Position="Left" Title = "Out Ink" MajorGridlineStyle="Solid" MinorGridlineStyle="Dot" IsZoomEnabled="True" Minimum="0" />
- </oxy:Plot.Axes>
- </oxy:Plot>
- </Border>
+
</Grid>
-
- </Grid>
+ </DockPanel>
</Grid>
- </DockPanel>
- </Grid>
- </UserControl>
+ </DockPanel>
+ </Grid>
+</UserControl>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/RmlView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/RmlView.xaml
index 7d050a29a..152797bec 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/RmlView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/RmlView.xaml
@@ -226,7 +226,7 @@
<TabItem Header="SPOOLS" Margin="-100 0 0 0" mahapps:ControlsHelper.HeaderFontSize="20">
<local:SpoolsView/>
</TabItem>
- <TabItem Header="Color Calibration" Margin="-100 0 0 0" mahapps:ControlsHelper.HeaderFontSize="20">
+ <TabItem Header="COLOR CALIBRATION" Margin="-100 0 0 0" mahapps:ControlsHelper.HeaderFontSize="20">
<local:ColorCalibrationView DataContext="{Binding ColorCalibrationVM}" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"/>
</TabItem>
</TabControl>
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Properties/AssemblyInfo.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Properties/AssemblyInfo.cs
index e72f62f17..aef5ef4af 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Properties/AssemblyInfo.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Properties/AssemblyInfo.cs
@@ -4,5 +4,5 @@ using System.Runtime.InteropServices;
[assembly: System.Windows.ThemeInfo(System.Windows.ResourceDictionaryLocation.None, System.Windows.ResourceDictionaryLocation.SourceAssembly)]
[assembly: AssemblyTitle("Tango - Machine Studio")]
-[assembly: AssemblyVersion("4.1.14.0")]
+[assembly: AssemblyVersion("4.1.15.0")]
[assembly: ComVisible(false)] \ No newline at end of file
diff --git a/Software/Visual_Studio/Notes/Tango.Notes/Azure/New Environment.txt b/Software/Visual_Studio/Notes/Tango.Notes/Azure/New Environment.txt
index 710cdcb2d..212da09a2 100644
--- a/Software/Visual_Studio/Notes/Tango.Notes/Azure/New Environment.txt
+++ b/Software/Visual_Studio/Notes/Tango.Notes/Azure/New Environment.txt
@@ -41,8 +41,8 @@ EXEC sp_addrolemember N'db_datawriter', N'BackupUser'
CREATE USER [Tango] FROM EXTERNAL PROVIDER WITH DEFAULT_SCHEMA=[dbo]
GO
-EXEC sp_addrolemember N'db_datareader', N'BackupUser'
-EXEC sp_addrolemember N'db_datawriter', N'BackupUser'
+EXEC sp_addrolemember N'db_datareader', N'Tango'
+EXEC sp_addrolemember N'db_datawriter', N'Tango'
9. Create a new storage blob container for the machine studio versions.
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Properties/AssemblyInfo.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/Properties/AssemblyInfo.cs
index c2a48aec9..98480ebb9 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Properties/AssemblyInfo.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Properties/AssemblyInfo.cs
@@ -8,4 +8,4 @@ using System.Windows;
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Tango PPC Application")]
-[assembly: AssemblyVersion("1.1.20.0")]
+[assembly: AssemblyVersion("1.1.21.0")]
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs
index e84fd81a1..3b45a0c2b 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MainViewVM.cs
@@ -35,6 +35,7 @@ namespace Tango.PPC.UI.ViewModels
private bool _isPowerUpDialogShown;
private bool _isThreadLoadingShown;
private PowerUpAppBarItem _powerUpAppBar;
+ private bool _started;
private DateTime _currentDateTime;
/// <summary>
@@ -79,6 +80,7 @@ namespace Tango.PPC.UI.ViewModels
private void MachineOperator_PowerUpEnded(object sender, EventArgs e)
{
+ _started = false;
_powerUpAppBar?.Close();
_powerUpAppBar = null;
}
@@ -93,6 +95,8 @@ namespace Tango.PPC.UI.ViewModels
private void MachineOperator_PowerUpStarted(object sender, PMR.Power.StartPowerUpResponse e)
{
+ _started = true;
+
InvokeUI(() =>
{
if (_powerUpAppBar != null)
@@ -100,8 +104,11 @@ namespace Tango.PPC.UI.ViewModels
_powerUpAppBar.Close();
}
- _powerUpAppBar = NotificationProvider.PushAppBarItem<PowerUpAppBarItem>();
- _powerUpAppBar.Priority = AppBarPriority.Low;
+ if (_started)
+ {
+ _powerUpAppBar = NotificationProvider.PushAppBarItem<PowerUpAppBarItem>();
+ _powerUpAppBar.Priority = AppBarPriority.Low;
+ }
});
}
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest b/Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest
index efc5f8179..d72e75011 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest
@@ -16,7 +16,7 @@
Remove this element if your application requires this virtualization for backwards
compatibility.
-->
- <!--<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />-->
+ <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
diff --git a/Software/Visual_Studio/Tango.BL/Entities/BrushStop.cs b/Software/Visual_Studio/Tango.BL/Entities/BrushStop.cs
index 6633d9eed..4ad21d4cd 100644
--- a/Software/Visual_Studio/Tango.BL/Entities/BrushStop.cs
+++ b/Software/Visual_Studio/Tango.BL/Entities/BrushStop.cs
@@ -28,7 +28,7 @@ namespace Tango.BL.Entities
private bool _ignorePropChanged;
private ActionTimer _syncTimer;
private static List<String> _colorPropertyNames;
- public const double MAX_TOTAL_LIQUID_VOLUME = 200;
+ public const double MAX_INK_UPTAKE = 400;
#region Enums
@@ -104,7 +104,7 @@ namespace Tango.BL.Entities
#region Properties
/// <summary>
- /// Gets or sets a value indicating whether the total value of liquid volumes has exceeded the maximum range of <see cref="MAX_TOTAL_LIQUID_VOLUME"/>.
+ /// Gets or sets a value indicating whether the total value of liquid volumes has exceeded the maximum range of <see cref="MAX_INK_UPTAKE"/>.
/// </summary>
[NotMapped]
[JsonIgnore]
@@ -112,7 +112,7 @@ namespace Tango.BL.Entities
{
get
{
- return LiquidVolumes != null ? LiquidVolumes.Where(x => x.IdsPack.IdsPackFormula.Code == IdsPackFormulas.StandardColor.ToInt32()).Sum(x => x.Volume) > GetTotalMaximumLiquidVolumeLimit() : false;
+ return LiquidVolumes != null ? LiquidVolumes.Where(x => x.IdsPack.IdsPackFormula.Code == IdsPackFormulas.StandardColor.ToInt32()).Sum(x => x.NanoliterPerCentimeter) > GetTotalMaximumLiquidNlPerCMLimit() : false;
}
}
@@ -780,23 +780,24 @@ namespace Tango.BL.Entities
#region Private Methods
- private double GetTotalMaximumLiquidVolumeLimit()
+ private double GetTotalMaximumLiquidNlPerCMLimit()
{
try
{
var tables = Segment.Job.Rml.GetActiveProcessGroup().ProcessParametersTables.OrderBy(x => x.TableIndex).ToList();
- if (tables.Count > 1)
+
+ if (tables.Count > 0)
{
- return (tables[1].MaxInkUptake / tables[0].MaxInkUptake) * 100;
+ return tables.Max(x => x.MaxInkUptake);
}
else
{
- return MAX_TOTAL_LIQUID_VOLUME;
+ return MAX_INK_UPTAKE;
}
}
catch
{
- return MAX_TOTAL_LIQUID_VOLUME;
+ return MAX_INK_UPTAKE;
}
}
diff --git a/Software/Visual_Studio/Tango.ColorCalibration/DefaultColorCalibrator.cs b/Software/Visual_Studio/Tango.ColorCalibration/DefaultColorCalibrator.cs
index 98a558f8e..98162dc78 100644
--- a/Software/Visual_Studio/Tango.ColorCalibration/DefaultColorCalibrator.cs
+++ b/Software/Visual_Studio/Tango.ColorCalibration/DefaultColorCalibrator.cs
@@ -11,7 +11,7 @@ using Tango.PMR.ColorLab;
namespace Tango.ColorCalibration
{
- public class DefaultColorCalibrator : IColorCalibrator
+ public class DefaultColorCalibrator : IColorCalibrator, ILinearizationMeasurements
{
static class NativeMethods
{
@@ -52,5 +52,33 @@ namespace Tango.ColorCalibration
return output;
}
+
+ public LinearizationOutput GetLinearizationMeasurements(LinearizationInput input)
+ {
+ String fileName = $"{AssemblyHelper.GetCurrentAssemblyFolder()}\\Tango.ColorLib_v4.dll";
+
+ if (!File.Exists(fileName))
+ {
+ throw new FileNotFoundException($"Could not find color calibration library '{fileName}'.");
+ }
+
+ IntPtr pDll = NativeMethods.LoadLibrary(fileName);
+ IntPtr pAddressOfFunctionToCall = NativeMethods.GetProcAddress(pDll, "GetLinearizationMeasurements");
+ NativeMethodDelegate getLinearizationMeasurements = (NativeMethodDelegate)Marshal.GetDelegateForFunctionPointer(
+ pAddressOfFunctionToCall,
+ typeof(NativeMethodDelegate));
+
+ NativePMR<LinearizationInput, LinearizationOutput> nativePMR = new NativePMR<LinearizationInput, LinearizationOutput>(getLinearizationMeasurements);
+ LinearizationOutput output = nativePMR.Invoke(input);
+
+ bool result = NativeMethods.FreeLibrary(pDll);
+
+ if (output.HasError)
+ {
+ throw new ExternalException($"Linearization Measurements Error: {output.ErrorMessage}!");
+ }
+
+ return output;
+ }
}
}
diff --git a/Software/Visual_Studio/Tango.ColorCalibration/ILinearizationMeasurements.cs b/Software/Visual_Studio/Tango.ColorCalibration/ILinearizationMeasurements.cs
new file mode 100644
index 000000000..2966b104b
--- /dev/null
+++ b/Software/Visual_Studio/Tango.ColorCalibration/ILinearizationMeasurements.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.PMR.ColorLab;
+
+namespace Tango.ColorCalibration
+{
+ public interface ILinearizationMeasurements
+ {
+ LinearizationOutput GetLinearizationMeasurements( LinearizationInput input);
+ }
+}
diff --git a/Software/Visual_Studio/Tango.ColorCalibration/Tango.ColorCalibration.csproj b/Software/Visual_Studio/Tango.ColorCalibration/Tango.ColorCalibration.csproj
index fe90c9bc2..9e0e438af 100644
--- a/Software/Visual_Studio/Tango.ColorCalibration/Tango.ColorCalibration.csproj
+++ b/Software/Visual_Studio/Tango.ColorCalibration/Tango.ColorCalibration.csproj
@@ -43,6 +43,7 @@
<ItemGroup>
<Compile Include="DefaultColorCalibrator.cs" />
<Compile Include="IColorCalibrator.cs" />
+ <Compile Include="ILinearizationMeasurements.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
diff --git a/Software/Visual_Studio/Tango.PMR/ColorLab/LinearizationInput.cs b/Software/Visual_Studio/Tango.PMR/ColorLab/LinearizationInput.cs
new file mode 100644
index 000000000..a127a8546
--- /dev/null
+++ b/Software/Visual_Studio/Tango.PMR/ColorLab/LinearizationInput.cs
@@ -0,0 +1,268 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: LinearizationInput.proto
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbr = global::Google.Protobuf.Reflection;
+using scg = global::System.Collections.Generic;
+namespace Tango.PMR.ColorLab {
+
+ /// <summary>Holder for reflection information generated from LinearizationInput.proto</summary>
+ public static partial class LinearizationInputReflection {
+
+ #region Descriptor
+ /// <summary>File descriptor for LinearizationInput.proto</summary>
+ public static pbr::FileDescriptor Descriptor {
+ get { return descriptor; }
+ }
+ private static pbr::FileDescriptor descriptor;
+
+ static LinearizationInputReflection() {
+ byte[] descriptorData = global::System.Convert.FromBase64String(
+ string.Concat(
+ "ChhMaW5lYXJpemF0aW9uSW5wdXQucHJvdG8SElRhbmdvLlBNUi5Db2xvckxh",
+ "YhoeTGluZWFyaXphdGlvbk1lYXN1cmVtZW50LnByb3RvGhBMaXF1aWRUeXBl",
+ "LnByb3RvIr8BChJMaW5lYXJpemF0aW9uSW5wdXQSMgoKTGlxdWlkVHlwZRgB",
+ "IAEoDjIeLlRhbmdvLlBNUi5Db2xvckxhYi5MaXF1aWRUeXBlEg8KB1Rhcmdl",
+ "dEwYAiABKAESDwoHVGFyZ2V0QRgDIAEoARIPCgdUYXJnZXRCGAQgASgBEkIK",
+ "DE1lYXN1cmVtZW50cxgFIAMoCzIsLlRhbmdvLlBNUi5Db2xvckxhYi5MaW5l",
+ "YXJpemF0aW9uTWVhc3VyZW1lbnRCHgocY29tLnR3aW5lLnRhbmdvLnBtci5j",
+ "b2xvcmxhYmIGcHJvdG8z"));
+ descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
+ new pbr::FileDescriptor[] { global::Tango.PMR.ColorLab.LinearizationMeasurementReflection.Descriptor, global::Tango.PMR.ColorLab.LiquidTypeReflection.Descriptor, },
+ new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.ColorLab.LinearizationInput), global::Tango.PMR.ColorLab.LinearizationInput.Parser, new[]{ "LiquidType", "TargetL", "TargetA", "TargetB", "Measurements" }, null, null, null)
+ }));
+ }
+ #endregion
+
+ }
+ #region Messages
+ public sealed partial class LinearizationInput : pb::IMessage<LinearizationInput> {
+ private static readonly pb::MessageParser<LinearizationInput> _parser = new pb::MessageParser<LinearizationInput>(() => new LinearizationInput());
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser<LinearizationInput> Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tango.PMR.ColorLab.LinearizationInputReflection.Descriptor.MessageTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public LinearizationInput() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public LinearizationInput(LinearizationInput other) : this() {
+ liquidType_ = other.liquidType_;
+ targetL_ = other.targetL_;
+ targetA_ = other.targetA_;
+ targetB_ = other.targetB_;
+ measurements_ = other.measurements_.Clone();
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public LinearizationInput Clone() {
+ return new LinearizationInput(this);
+ }
+
+ /// <summary>Field number for the "LiquidType" field.</summary>
+ public const int LiquidTypeFieldNumber = 1;
+ private global::Tango.PMR.ColorLab.LiquidType liquidType_ = 0;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public global::Tango.PMR.ColorLab.LiquidType LiquidType {
+ get { return liquidType_; }
+ set {
+ liquidType_ = value;
+ }
+ }
+
+ /// <summary>Field number for the "TargetL" field.</summary>
+ public const int TargetLFieldNumber = 2;
+ private double targetL_;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public double TargetL {
+ get { return targetL_; }
+ set {
+ targetL_ = value;
+ }
+ }
+
+ /// <summary>Field number for the "TargetA" field.</summary>
+ public const int TargetAFieldNumber = 3;
+ private double targetA_;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public double TargetA {
+ get { return targetA_; }
+ set {
+ targetA_ = value;
+ }
+ }
+
+ /// <summary>Field number for the "TargetB" field.</summary>
+ public const int TargetBFieldNumber = 4;
+ private double targetB_;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public double TargetB {
+ get { return targetB_; }
+ set {
+ targetB_ = value;
+ }
+ }
+
+ /// <summary>Field number for the "Measurements" field.</summary>
+ public const int MeasurementsFieldNumber = 5;
+ private static readonly pb::FieldCodec<global::Tango.PMR.ColorLab.LinearizationMeasurement> _repeated_measurements_codec
+ = pb::FieldCodec.ForMessage(42, global::Tango.PMR.ColorLab.LinearizationMeasurement.Parser);
+ private readonly pbc::RepeatedField<global::Tango.PMR.ColorLab.LinearizationMeasurement> measurements_ = new pbc::RepeatedField<global::Tango.PMR.ColorLab.LinearizationMeasurement>();
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<global::Tango.PMR.ColorLab.LinearizationMeasurement> Measurements {
+ get { return measurements_; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as LinearizationInput);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(LinearizationInput other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (LiquidType != other.LiquidType) return false;
+ if (TargetL != other.TargetL) return false;
+ if (TargetA != other.TargetA) return false;
+ if (TargetB != other.TargetB) return false;
+ if(!measurements_.Equals(other.measurements_)) return false;
+ return true;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (LiquidType != 0) hash ^= LiquidType.GetHashCode();
+ if (TargetL != 0D) hash ^= TargetL.GetHashCode();
+ if (TargetA != 0D) hash ^= TargetA.GetHashCode();
+ if (TargetB != 0D) hash ^= TargetB.GetHashCode();
+ hash ^= measurements_.GetHashCode();
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (LiquidType != 0) {
+ output.WriteRawTag(8);
+ output.WriteEnum((int) LiquidType);
+ }
+ if (TargetL != 0D) {
+ output.WriteRawTag(17);
+ output.WriteDouble(TargetL);
+ }
+ if (TargetA != 0D) {
+ output.WriteRawTag(25);
+ output.WriteDouble(TargetA);
+ }
+ if (TargetB != 0D) {
+ output.WriteRawTag(33);
+ output.WriteDouble(TargetB);
+ }
+ measurements_.WriteTo(output, _repeated_measurements_codec);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (LiquidType != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) LiquidType);
+ }
+ if (TargetL != 0D) {
+ size += 1 + 8;
+ }
+ if (TargetA != 0D) {
+ size += 1 + 8;
+ }
+ if (TargetB != 0D) {
+ size += 1 + 8;
+ }
+ size += measurements_.CalculateSize(_repeated_measurements_codec);
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(LinearizationInput other) {
+ if (other == null) {
+ return;
+ }
+ if (other.LiquidType != 0) {
+ LiquidType = other.LiquidType;
+ }
+ if (other.TargetL != 0D) {
+ TargetL = other.TargetL;
+ }
+ if (other.TargetA != 0D) {
+ TargetA = other.TargetA;
+ }
+ if (other.TargetB != 0D) {
+ TargetB = other.TargetB;
+ }
+ measurements_.Add(other.measurements_);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ input.SkipLastField();
+ break;
+ case 8: {
+ liquidType_ = (global::Tango.PMR.ColorLab.LiquidType) input.ReadEnum();
+ break;
+ }
+ case 17: {
+ TargetL = input.ReadDouble();
+ break;
+ }
+ case 25: {
+ TargetA = input.ReadDouble();
+ break;
+ }
+ case 33: {
+ TargetB = input.ReadDouble();
+ break;
+ }
+ case 42: {
+ measurements_.AddEntriesFrom(input, _repeated_measurements_codec);
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ #endregion
+
+}
+
+#endregion Designer generated code
diff --git a/Software/Visual_Studio/Tango.PMR/ColorLab/LinearizationMeasurement.cs b/Software/Visual_Studio/Tango.PMR/ColorLab/LinearizationMeasurement.cs
new file mode 100644
index 000000000..fb83ca1c2
--- /dev/null
+++ b/Software/Visual_Studio/Tango.PMR/ColorLab/LinearizationMeasurement.cs
@@ -0,0 +1,244 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: LinearizationMeasurement.proto
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbr = global::Google.Protobuf.Reflection;
+using scg = global::System.Collections.Generic;
+namespace Tango.PMR.ColorLab {
+
+ /// <summary>Holder for reflection information generated from LinearizationMeasurement.proto</summary>
+ public static partial class LinearizationMeasurementReflection {
+
+ #region Descriptor
+ /// <summary>File descriptor for LinearizationMeasurement.proto</summary>
+ public static pbr::FileDescriptor Descriptor {
+ get { return descriptor; }
+ }
+ private static pbr::FileDescriptor descriptor;
+
+ static LinearizationMeasurementReflection() {
+ byte[] descriptorData = global::System.Convert.FromBase64String(
+ string.Concat(
+ "Ch5MaW5lYXJpemF0aW9uTWVhc3VyZW1lbnQucHJvdG8SElRhbmdvLlBNUi5D",
+ "b2xvckxhYiJSChhMaW5lYXJpemF0aW9uTWVhc3VyZW1lbnQSFQoNSW5rUGVy",
+ "Y2VudGFnZRgBIAEoARIJCgFMGAIgASgBEgkKAUEYAyABKAESCQoBQhgEIAEo",
+ "AUIeChxjb20udHdpbmUudGFuZ28ucG1yLmNvbG9ybGFiYgZwcm90bzM="));
+ descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
+ new pbr::FileDescriptor[] { },
+ new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.ColorLab.LinearizationMeasurement), global::Tango.PMR.ColorLab.LinearizationMeasurement.Parser, new[]{ "InkPercentage", "L", "A", "B" }, null, null, null)
+ }));
+ }
+ #endregion
+
+ }
+ #region Messages
+ public sealed partial class LinearizationMeasurement : pb::IMessage<LinearizationMeasurement> {
+ private static readonly pb::MessageParser<LinearizationMeasurement> _parser = new pb::MessageParser<LinearizationMeasurement>(() => new LinearizationMeasurement());
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser<LinearizationMeasurement> Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tango.PMR.ColorLab.LinearizationMeasurementReflection.Descriptor.MessageTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public LinearizationMeasurement() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public LinearizationMeasurement(LinearizationMeasurement other) : this() {
+ inkPercentage_ = other.inkPercentage_;
+ l_ = other.l_;
+ a_ = other.a_;
+ b_ = other.b_;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public LinearizationMeasurement Clone() {
+ return new LinearizationMeasurement(this);
+ }
+
+ /// <summary>Field number for the "InkPercentage" field.</summary>
+ public const int InkPercentageFieldNumber = 1;
+ private double inkPercentage_;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public double InkPercentage {
+ get { return inkPercentage_; }
+ set {
+ inkPercentage_ = value;
+ }
+ }
+
+ /// <summary>Field number for the "L" field.</summary>
+ public const int LFieldNumber = 2;
+ private double l_;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public double L {
+ get { return l_; }
+ set {
+ l_ = value;
+ }
+ }
+
+ /// <summary>Field number for the "A" field.</summary>
+ public const int AFieldNumber = 3;
+ private double a_;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public double A {
+ get { return a_; }
+ set {
+ a_ = value;
+ }
+ }
+
+ /// <summary>Field number for the "B" field.</summary>
+ public const int BFieldNumber = 4;
+ private double b_;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public double B {
+ get { return b_; }
+ set {
+ b_ = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as LinearizationMeasurement);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(LinearizationMeasurement other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (InkPercentage != other.InkPercentage) return false;
+ if (L != other.L) return false;
+ if (A != other.A) return false;
+ if (B != other.B) return false;
+ return true;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (InkPercentage != 0D) hash ^= InkPercentage.GetHashCode();
+ if (L != 0D) hash ^= L.GetHashCode();
+ if (A != 0D) hash ^= A.GetHashCode();
+ if (B != 0D) hash ^= B.GetHashCode();
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (InkPercentage != 0D) {
+ output.WriteRawTag(9);
+ output.WriteDouble(InkPercentage);
+ }
+ if (L != 0D) {
+ output.WriteRawTag(17);
+ output.WriteDouble(L);
+ }
+ if (A != 0D) {
+ output.WriteRawTag(25);
+ output.WriteDouble(A);
+ }
+ if (B != 0D) {
+ output.WriteRawTag(33);
+ output.WriteDouble(B);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (InkPercentage != 0D) {
+ size += 1 + 8;
+ }
+ if (L != 0D) {
+ size += 1 + 8;
+ }
+ if (A != 0D) {
+ size += 1 + 8;
+ }
+ if (B != 0D) {
+ size += 1 + 8;
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(LinearizationMeasurement other) {
+ if (other == null) {
+ return;
+ }
+ if (other.InkPercentage != 0D) {
+ InkPercentage = other.InkPercentage;
+ }
+ if (other.L != 0D) {
+ L = other.L;
+ }
+ if (other.A != 0D) {
+ A = other.A;
+ }
+ if (other.B != 0D) {
+ B = other.B;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ input.SkipLastField();
+ break;
+ case 9: {
+ InkPercentage = input.ReadDouble();
+ break;
+ }
+ case 17: {
+ L = input.ReadDouble();
+ break;
+ }
+ case 25: {
+ A = input.ReadDouble();
+ break;
+ }
+ case 33: {
+ B = input.ReadDouble();
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ #endregion
+
+}
+
+#endregion Designer generated code
diff --git a/Software/Visual_Studio/Tango.PMR/ColorLab/LinearizationOutput.cs b/Software/Visual_Studio/Tango.PMR/ColorLab/LinearizationOutput.cs
new file mode 100644
index 000000000..3c402aa10
--- /dev/null
+++ b/Software/Visual_Studio/Tango.PMR/ColorLab/LinearizationOutput.cs
@@ -0,0 +1,209 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: LinearizationOutput.proto
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbr = global::Google.Protobuf.Reflection;
+using scg = global::System.Collections.Generic;
+namespace Tango.PMR.ColorLab {
+
+ /// <summary>Holder for reflection information generated from LinearizationOutput.proto</summary>
+ public static partial class LinearizationOutputReflection {
+
+ #region Descriptor
+ /// <summary>File descriptor for LinearizationOutput.proto</summary>
+ public static pbr::FileDescriptor Descriptor {
+ get { return descriptor; }
+ }
+ private static pbr::FileDescriptor descriptor;
+
+ static LinearizationOutputReflection() {
+ byte[] descriptorData = global::System.Convert.FromBase64String(
+ string.Concat(
+ "ChlMaW5lYXJpemF0aW9uT3V0cHV0LnByb3RvEhJUYW5nby5QTVIuQ29sb3JM",
+ "YWIiVAoTTGluZWFyaXphdGlvbk91dHB1dBIVCg1JbmtQZXJjZW50YWdlGAEg",
+ "AygBEhAKCEhhc0Vycm9yGBQgASgIEhQKDEVycm9yTWVzc2FnZRgVIAEoCUIe",
+ "Chxjb20udHdpbmUudGFuZ28ucG1yLmNvbG9ybGFiYgZwcm90bzM="));
+ descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
+ new pbr::FileDescriptor[] { },
+ new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.ColorLab.LinearizationOutput), global::Tango.PMR.ColorLab.LinearizationOutput.Parser, new[]{ "InkPercentage", "HasError", "ErrorMessage" }, null, null, null)
+ }));
+ }
+ #endregion
+
+ }
+ #region Messages
+ public sealed partial class LinearizationOutput : pb::IMessage<LinearizationOutput> {
+ private static readonly pb::MessageParser<LinearizationOutput> _parser = new pb::MessageParser<LinearizationOutput>(() => new LinearizationOutput());
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser<LinearizationOutput> Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tango.PMR.ColorLab.LinearizationOutputReflection.Descriptor.MessageTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public LinearizationOutput() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public LinearizationOutput(LinearizationOutput other) : this() {
+ inkPercentage_ = other.inkPercentage_.Clone();
+ hasError_ = other.hasError_;
+ errorMessage_ = other.errorMessage_;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public LinearizationOutput Clone() {
+ return new LinearizationOutput(this);
+ }
+
+ /// <summary>Field number for the "InkPercentage" field.</summary>
+ public const int InkPercentageFieldNumber = 1;
+ private static readonly pb::FieldCodec<double> _repeated_inkPercentage_codec
+ = pb::FieldCodec.ForDouble(10);
+ private readonly pbc::RepeatedField<double> inkPercentage_ = new pbc::RepeatedField<double>();
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<double> InkPercentage {
+ get { return inkPercentage_; }
+ }
+
+ /// <summary>Field number for the "HasError" field.</summary>
+ public const int HasErrorFieldNumber = 20;
+ private bool hasError_;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool HasError {
+ get { return hasError_; }
+ set {
+ hasError_ = value;
+ }
+ }
+
+ /// <summary>Field number for the "ErrorMessage" field.</summary>
+ public const int ErrorMessageFieldNumber = 21;
+ private string errorMessage_ = "";
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string ErrorMessage {
+ get { return errorMessage_; }
+ set {
+ errorMessage_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as LinearizationOutput);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(LinearizationOutput other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if(!inkPercentage_.Equals(other.inkPercentage_)) return false;
+ if (HasError != other.HasError) return false;
+ if (ErrorMessage != other.ErrorMessage) return false;
+ return true;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ hash ^= inkPercentage_.GetHashCode();
+ if (HasError != false) hash ^= HasError.GetHashCode();
+ if (ErrorMessage.Length != 0) hash ^= ErrorMessage.GetHashCode();
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ inkPercentage_.WriteTo(output, _repeated_inkPercentage_codec);
+ if (HasError != false) {
+ output.WriteRawTag(160, 1);
+ output.WriteBool(HasError);
+ }
+ if (ErrorMessage.Length != 0) {
+ output.WriteRawTag(170, 1);
+ output.WriteString(ErrorMessage);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ size += inkPercentage_.CalculateSize(_repeated_inkPercentage_codec);
+ if (HasError != false) {
+ size += 2 + 1;
+ }
+ if (ErrorMessage.Length != 0) {
+ size += 2 + pb::CodedOutputStream.ComputeStringSize(ErrorMessage);
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(LinearizationOutput other) {
+ if (other == null) {
+ return;
+ }
+ inkPercentage_.Add(other.inkPercentage_);
+ if (other.HasError != false) {
+ HasError = other.HasError;
+ }
+ if (other.ErrorMessage.Length != 0) {
+ ErrorMessage = other.ErrorMessage;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ input.SkipLastField();
+ break;
+ case 10:
+ case 9: {
+ inkPercentage_.AddEntriesFrom(input, _repeated_inkPercentage_codec);
+ break;
+ }
+ case 160: {
+ HasError = input.ReadBool();
+ break;
+ }
+ case 170: {
+ ErrorMessage = input.ReadString();
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ #endregion
+
+}
+
+#endregion Designer generated code
diff --git a/Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj b/Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj
index 048e92900..66c84cb0d 100644
--- a/Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj
+++ b/Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj
@@ -62,6 +62,9 @@
<Compile Include="ColorLab\GradientOutputStop.cs" />
<Compile Include="ColorLab\InputCoordinates.cs" />
<Compile Include="ColorLab\InputLiquid.cs" />
+ <Compile Include="ColorLab\LinearizationInput.cs" />
+ <Compile Include="ColorLab\LinearizationMeasurement.cs" />
+ <Compile Include="ColorLab\LinearizationOutput.cs" />
<Compile Include="ColorLab\LiquidType.cs" />
<Compile Include="ColorLab\LiquidVolume.cs" />
<Compile Include="ColorLab\OutputCoordinates.cs" />
@@ -461,7 +464,7 @@
</PropertyGroup>
<ProjectExtensions>
<VisualStudio>
- <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" />
+ <UserProperties BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UseGlobalSettings="False" BuildVersion_StartDate="2000/1/1" />
</VisualStudio>
</ProjectExtensions>
</Project> \ No newline at end of file