aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.Core/DataSource.cs
blob: 4cb9a379b6862604fc88c2770d2fdcbcf47ee997 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Data.SqlClient;
using System.Data.SQLite;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Tango.Core
{
    /// <summary>
    /// Represents an SQL data source.
    /// </summary>
    public class DataSource
    {
        //private static bool _has_provider;

        /// <summary>
        /// Gets or sets the type of source.
        /// </summary>
        public DataSourceType Type { get; set; }

        /// <summary>
        /// Gets or sets the address.
        /// </summary>
        public String Address { get; set; }

        /// <summary>
        /// Gets or sets the catalog name.
        /// </summary>
        public String Catalog { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether to use integrated security.
        /// </summary>
        public bool IntegratedSecurity { get; set; }

        /// <summary>
        /// Gets or sets the user name to use if <see cref="IntegratedSecurity"/> is false.
        /// </summary>
        public String UserName { get; set; }

        /// <summary>
        /// Gets or sets the password to use if <see cref="IntegratedSecurity"/> is false.
        /// </summary>
        public String Password { get; set; }

        /// <summary>
        /// Gets or sets the access token Token.
        /// </summary>
        public String AccessToken { get; set; }

        /// <summary>
        /// Gets or sets the access token expiration.
        /// </summary>
        public DateTime AccessTokenExpiration { get; set; }

        /// <summary>
        /// Initializes a new instance of the <see cref="DataSource"/> class.
        /// </summary>
        public DataSource()
        {
            Type = DataSourceType.SQLServer;
            Address = "localhost\\SQLEXPRESS";
            Catalog = "Tango";
            IntegratedSecurity = true;
            UserName = String.Empty;
            Password = String.Empty;
        }

        /// <summary>
        /// Creates a DBConnection instance which represents this data source.
        /// </summary>
        /// <returns></returns>
        public DbConnection ToConnection()
        {

            switch (Type)
            {
                case DataSourceType.SQLite:

                    var connection = new SQLiteConnection()
                    {
                        ConnectionString = new SQLiteConnectionStringBuilder() { DataSource = Path.GetFullPath(Address), ForeignKeys = true }.ConnectionString
                    };
                    return connection;

                case DataSourceType.MDF:

                    if (IntegratedSecurity)
                    {
                        return new SqlConnection(String.Format("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFileName={0};Initial Catalog={1};Integrated Security=True;MultipleActiveResultSets=True;App=EntityFramework", Path.GetFullPath(Address), Catalog));
                    }
                    else
                    {
                        return new SqlConnection(String.Format("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFileName={0};Initial Catalog={1};Integrated Security=False;User Id={2};Password={3};MultipleActiveResultSets=True;App=EntityFramework", Path.GetFullPath(Address), Catalog, UserName, Password));
                    }

                case DataSourceType.SQLServer:

                    if (IntegratedSecurity)
                    {
                        return new SqlConnection(String.Format("Data Source={0};Initial Catalog={1};Integrated Security=True;MultipleActiveResultSets=True;App=EntityFramework", Address, Catalog));
                    }
                    else
                    {
                        return new SqlConnection(String.Format("Data Source={0};Initial Catalog={1};Integrated Security=False;User Id={2};Password={3};MultipleActiveResultSets=True;App=EntityFramework", Address, Catalog, UserName, Password));
                    }

                case DataSourceType.Azure:

                    SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
                    builder.DataSource = Address;
                    builder.InitialCatalog = Catalog;
                    builder.UserID = UserName;
                    builder.Password = Password;
                    builder.IntegratedSecurity = false;
                    builder.MultipleActiveResultSets = true;
                    builder.ApplicationName = "EntityFramework";
                    builder.Authentication = SqlAuthenticationMethod.ActiveDirectoryPassword;

                    SqlConnection sqlConnection = new SqlConnection(builder.ConnectionString);

                    return sqlConnection;

                case DataSourceType.AccessToken:

                    SqlConnectionStringBuilder b = new SqlConnectionStringBuilder();
                    b.DataSource = Address;
                    b.InitialCatalog = Catalog;
                    b.IntegratedSecurity = false;
                    b.MultipleActiveResultSets = true;
                    b.ApplicationName = "EntityFramework";
                    SqlConnection sqlCon = new SqlConnection(b.ConnectionString);
                    sqlCon.AccessToken = AccessToken;

                    return sqlCon;

                default:

                    return null;
            }
        }

        /// <summary>
        /// Returns a <see cref="System.String" /> that represents this instance.
        /// </summary>
        /// <returns>
        /// A <see cref="System.String" /> that represents this instance.
        /// </returns>
        public override string ToString()
        {
            return $"{Address}\\{Catalog}";
        }
    }
}
ckground-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Tango PMR Generator
// 
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated. Do not modify!
// </auto-generated>
//------------------------------------------------------------------------------

syntax = "proto3";

package Tango.PMR.Diagnostics;
option java_package = "com.twine.tango.pmr.diagnostics";

enum EventType
{

    //Must contain a 0 value
    None = 0;

    //Request sent to machine or external bridge service (Group = Transport, Category = Info)
    REQUEST_SENT = 1000;

    //Response has been received. (Group = Transport, Category = Info)
    RESPONSE_RECEIVED = 1001;

    //Request to machine has failed. (Group = Transport, Category = Error)
    REQUEST_FAILED = 1002;

    //Application has encountered an error. (Group = Application, Category = Error)
    APPLICATION_EXCEPTION = 1003;

    //General application event logs (Group = Application, Category = Info)
    APPLICATION_INFORMATION = 1004;

    //Application started. (Group = Application, Category = Info)
    APPLICATION_STARTED = 1005;

    //Application terminated. (Group = Application, Category = Info)
    APPLICATION_TERMINATED = 1006;

    //Diagnostics recording started. (Group = Application, Category = Info)
    RECORDING_STARTED = 1007;

    //Diagnostics recording stopped. (Group = Application, Category = Info)
    RECORDING_STOPPED = 1008;

    //Job status message has been received from embedded device. (Group = Application, Category = Info)
    JOB_STATUS = 1009;

    //A job has been started. (Group = Application, Category = Info)
    JOB_STARTED = 1010;

    //A job has been aborted. (Group = Application, Category = Info)
    JOB_ABORTED = 1011;

    //A job has failed. (Group = Application, Category = Error)
    JOB_FAILED = 1012;

    //Job completed successfully. (Group = Application, Category = Info)
    JOB_COMPLETED = 1013;

    //Could not complete power-up                            (Group = GeneralHardware, Category = Critical)
    POWER_UP_BIT_FAILURE = 2000;

    //The emergency button is pressed (Group = GeneralHardware, Category = Safety)
    EMERGENCY_PUSH_BUTTON_PRESSED = 2001;

    //Cover is open  (Group = GeneralHardware, Category = Error)
    FRONT_COVER_1_OPEN = 2002;

    //Cover is open   (Group = GeneralHardware, Category = Error)
    FRONT_COVER_2_OPEN = 2003;

    //Cover is open   (Group = GeneralHardware, Category = Error)
    FRONT_COVER_3_OPEN = 2004;

    //Cover is open  (Group = GeneralHardware, Category = Error)
    FRONT_COVER_4_OPEN = 2005;

    //Cartridges door is open   (Group = GeneralHardware, Category = Warning)
    CARTRIDGES_COVER_OPEN = 2006;

    //Cover is open   (Group = GeneralHardware, Category = Error)
    REAR_COVER_OPEN = 2007;

    //The machine temperature is too high (Group = GeneralHardware, Category = Critical)
    MACHINE_INTERNAL_OVERTEMPERATURE = 2008;

    //Internal fans RPM is too low (Group = GeneralHardware, Category = Warning)
    MACHINE_FANS_RPM_TOO_LOW = 2009;

    //Internal fans stopped (Group = GeneralHardware, Category = Critical)
    MACHINE_FANS_STOPPED = 2010;

    //Electrical cabinet fans RPM is too low (Group = GeneralHardware, Category = Warning)
    ELECTRICAL_CABINET_FANS_RPM_TOO_LOW = 2011;

    //Electrical cabinet fans stopped (Group = GeneralHardware, Category = Critical)
    ELECTRICAL_CABINET_FANS_STOPPED = 2012;

    //Configuration file does not exist (Group = GeneralHardware, Category = Error)
    MACHINE_STATE_NO_CFG_FILE = 2013;

    //Hardware configuration has failed (Group = GeneralHardware, Category = Error)
    MACHINE_STATE_HW_CONFIG_FAILED = 2014;

    // (Group = GeneralHardware, Category = Error)
    MACHINE_STATE_INITIAL_BLOWER_FAILED = 2015;

    //unspecified error (Group = GeneralHardware, Category = Error)
    UNSPECIFIED = 2016;

    //The machine temperature is too high (Group = GeneralHardware, Category = Critical)
    MACHINE_INTERNAL_OVERTEMPERATURE_2 = 2017;

    //The electrical cabinet temperature is too high (Group = GeneralHardware, Category = Critical)
    ELECTRICAL_CABINET_OVERTEMPERATURE = 2018;

    //Software error has occurred  (Group = GeneralHardware, Category = Error)
    FPGA_WATCHDOG_ACTIVATED = 2019;

    //Software error has occurred  (Group = GeneralHardware, Category = Error)
    UNINTENDED_RESET = 2020;

    //Thread break (Group = ThreadFeedingSystem, Category = Error)
    THREAD_BREAK = 3000;

    //Thread tension control faiure in feeder dancer (Group = ThreadFeedingSystem, Category = Error)
    THREAD_TENSION_CONTROL_FAILURE_FEEDER_DANCER = 3001;

    //No cone in the winder (Group = ThreadFeedingSystem, Category = Error)
    WINDER_CONE_DOES_NOT_EXIST = 3002;

    //The feeder motor current is too high (Group = ThreadFeedingSystem, Category = Critical)
    FEEDER_MOTOR_OVERCURRENT = 3003;

    //The current in the right loader motor is too high (Group = ThreadFeedingSystem, Category = Critical)
    RIGHT_LOADER_MOTOR_OVERCURRENT = 3004;

    //The puller motor current is too high  (Group = ThreadFeedingSystem, Category = Critical)
    PULLER_MOTOR_OVERCURRENT = 3005;

    //The left loader motor current is too high (Group = ThreadFeedingSystem, Category = Critical)
    LEFT_LOADER_MOTOR_OVERCURRENT = 3006;

    //The winder motor current is too high (Group = ThreadFeedingSystem, Category = Critical)
    WINDER_MOTOR_OVERCURRENT = 3007;

    //The screw motor current is too high (Group = ThreadFeedingSystem, Category = Critical)
    SCREW_MOTOR_OVERCURRENT = 3008;

    //The loading arm motor current is too high (Group = ThreadFeedingSystem, Category = Critical)
    LOADING_ARM_MOTOR_OVERCURRENT = 3009;

    //The feeder motor temperature is too high (Group = ThreadFeedingSystem, Category = Critical)
    FEEDER_MOTOR_OVERTEMPERATURE = 3010;

    //The right loader motor temperature is too high (Group = ThreadFeedingSystem, Category = Critical)
    RIGHT_LOADER_MOTOR_OVERTEMPERATURE = 3011;

    //The puller motor temperature is too high (Group = ThreadFeedingSystem, Category = Critical)
    PULLER_MOTOR_OVERTEMPERATURE = 3012;

    //The left loader motor temperature is too high (Group = ThreadFeedingSystem, Category = Critical)
    LEFT_LOADER_MOTOR_OVERTEMPERATURE = 3013;

    //The winder motor temperature is too high (Group = ThreadFeedingSystem, Category = Critical)
    WINDER_MOTOR_OVERTEMPERATURE = 3014;

    //The screw motor temperature is too high (Group = ThreadFeedingSystem, Category = Critical)
    SCREW_MOTOR_OVERTEMPERATURE = 3015;

    //The loading arm motor temperature is too high (Group = ThreadFeedingSystem, Category = Critical)
    LOADING_ARM_MOTOR_OVERTEMPERATURE = 3016;

    //Feeder motor stalled (Group = ThreadFeedingSystem, Category = Critical)
    FEEDER_MOTOR_STALL = 3017;

    //Right loader motor stalled (Group = ThreadFeedingSystem, Category = Critical)
    RIGHT_LOADER_MOTOR_STALL = 3018;

    //Puller motor stalled (Group = ThreadFeedingSystem, Category = Critical)
    PULLER_MOTOR_STALL = 3019;

    //Left loader motor stalled (Group = ThreadFeedingSystem, Category = Critical)
    LEFT_LOADER_MOTOR_STALL = 3020;

    //Winder motor stalled (Group = ThreadFeedingSystem, Category = Critical)
    WINDER_MOTOR_STALL = 3021;

    //Screw motor stalled (Group = ThreadFeedingSystem, Category = Critical)
    SCREW_MOTOR_STALL = 3022;

    //Loading arm motor stalled (Group = ThreadFeedingSystem, Category = Critical)
    LOADING_ARM_MOTOR_STALL = 3023;

    //The feeder motor voltage is too low (Group = ThreadFeedingSystem, Category = Critical)
    FEEDER_MOTOR_UNDERVOLTAGE = 3024;

    //The right loader motor voltage is too low (Group = ThreadFeedingSystem, Category = Critical)
    RIGHT_LOADER_MOTOR_UNDERVOLTAGE = 3025;

    //The puller motor voltage is too low (Group = ThreadFeedingSystem, Category = Critical)
    PULLER_MOTOR_UNDERVOLTAGE = 3026;

    //The left loader motor voltage is too low (Group = ThreadFeedingSystem, Category = Critical)
    LEFT_LOADER_MOTOR_UNDERVOLTAGE = 3027;

    //The winder motor voltage is too low (Group = ThreadFeedingSystem, Category = Critical)
    WINDER_MOTOR_UNDERVOLTAGE = 3028;

    //The screw motor voltage is too low (Group = ThreadFeedingSystem, Category = Critical)
    SCREW_MOTOR_UNDERVOLTAGE = 3029;

    //The loading arm motor voltage is too low (Group = ThreadFeedingSystem, Category = Critical)
    LOADING_ARM_MOTOR_UNDERVOLTAGE = 3030;

    //Cannot load thread (Group = ThreadFeedingSystem, Category = Error)
    LTFU_UP_TIMEOUT = 3031;

    //Cannot load thread (Group = ThreadFeedingSystem, Category = Error)
    LTFU_DOWN_TIMEOUT = 3032;

    //Cannot load thread (Group = ThreadFeedingSystem, Category = Error)
    RTFU_UP_TIMEOUT = 3033;

    //Cannot load thread (Group = ThreadFeedingSystem, Category = Error)
    RTFU_DOWN_TIMEOUT = 3034;

    //Screw travel failure (Group = ThreadFeedingSystem, Category = Error)
    SCREW_MOTOR_LIMIT_TIMEOUT = 3035;

    //The winder dancer motor current is too high (Group = ThreadFeedingSystem, Category = Critical)
    WINDER_DANCER_MOTOR_OVERCURRENT = 3036;

    //The puller dancer motor current is too high (Group = ThreadFeedingSystem, Category = Critical)
    PULLER_DANCER_MOTOR_OVERCURRENT = 3037;

    //The feeder dancer motor current is too high (Group = ThreadFeedingSystem, Category = Critical)
    FEEDER_DANCER_MOTOR_OVERCURRENT = 3038;

    //The winder dancer motor temperature is too high (Group = ThreadFeedingSystem, Category = Critical)
    WINDER_DANCER_MOTOR_OVERTEMPERATURE = 3039;

    //The puller dancer motor temperature is too high (Group = ThreadFeedingSystem, Category = Critical)
    PULLER_DANCER_MOTOR_OVERTEMPERATURE = 3040;

    //The feeder dancer motor temperature is too high (Group = ThreadFeedingSystem, Category = Critical)
    FEEDER_DANCER_MOTOR_OVERTEMPERATURE = 3041;

    //Winder dancer motor stalled (Group = ThreadFeedingSystem, Category = Critical)
    WINDER_DANCER_MOTOR_STALL = 3042;

    //Puller dancer motor stalled (Group = ThreadFeedingSystem, Category = Critical)
    PULLER_DANCER_MOTOR_STALL = 3043;

    //Feeder dancer motor stalled (Group = ThreadFeedingSystem, Category = Critical)
    FEEDER_DANCER_MOTOR_STALL = 3044;

    //The winder dancer motor voltage is too low (Group = ThreadFeedingSystem, Category = Critical)
    WINDER_DANCER_MOTOR_UNDERVOLTAGE = 3045;

    //The puller dancer motor voltage is too low (Group = ThreadFeedingSystem, Category = Critical)
    PULLER_DANCER_MOTOR_UNDERVOLTAGE = 3046;

    //The feeder dancer motor voltage is too low (Group = ThreadFeedingSystem, Category = Critical)
    FEEDER_DANCER_MOTOR_UNDERVOLTAGE = 3047;

    //Thread tension control failure in puller dancer (Group = ThreadFeedingSystem, Category = Error)
    THREAD_TENSION_CONTROL_FAILURE_PULLER_DANCER = 3048;

    //Thread tension control failure in winder dancer (Group = ThreadFeedingSystem, Category = Error)
    THREAD_TENSION_CONTROL_FAILURE_WINDER_DANCER = 3049;

    //No thread in machine (Group = ThreadFeedingSystem, Category = Error)
    MACHINE_STATE_NO_THREAD_DETECTED = 3050;

    //Thread loading error (Group = ThreadFeedingSystem, Category = Error)
    THREAD_LOADING_ERROR = 3051;

    //The dryer motor current is too high (Group = Dryer, Category = Critical)
    DRYER_MOTOR_OVERCURRENT = 4000;

    //The dryer motor temperature is too high (Group = Dryer, Category = Critical)
    DRYER_MOTOR_OVERTEMPERATURE = 4001;

    //Dryer motor stalled (Group = Dryer, Category = Critical)
    DRYER_MOTOR_STALL = 4002;

    //The dryer motor voltage is too low (Group = Dryer, Category = Critical)
    DRYER_MOTOR_UNDERVOLTAGE = 4003;

    //The dryer door is open (Group = Dryer, Category = Safety)
    DRYER_DOOR_OPEN = 4004;

    //The temperature in dryer zone 1 is too high (Group = Dryer, Category = Critical)
    DRYER_ZONE_1_OVERTEMPERATURE = 4005;

    //The temperature in dryer zone 2 is too high (Group = Dryer, Category = Critical)
    DRYER_ZONE_2_OVERTEMPERATURE = 4006;

    //The temperature in dryer zone 1 is too low (Group = Dryer, Category = Warning)
    DRYER_ZONE_1_UNDERTEMPERATURE_A = 4007;

    //The temperature in dryer zone 1 is too low (Group = Dryer, Category = Error)
    DRYER_ZONE_1_UNDERTEMPERATURE_B = 4008;

    //The temperature in dryer zone 2 is too low (Group = Dryer, Category = Error)
    DRYER_ZONE_2_UNDERTEMPERATURE_B = 4009;

    //Thermal cut-off (Group = Dryer, Category = Safety)
    DRYER_THERMAL_CUTOFF = 4010;

    //Dryer zone current is out of range (Group = Dryer, Category = Critical)
    DRYER_HEATERS_ZONE_1_CURRENT_OUT_OF_RANGE = 4011;

    //Dryer zone current is out of range (Group = Dryer, Category = Critical)
    DRYER_HEATERS_ZONE_2_CURRENT_OUT_OF_RANGE = 4012;

    //Dryer zone current loop break (Group = Dryer, Category = Critical)
    DRYER_HEATERS_ZONE_1_CURRENT_LOOP_BREAK = 4013;

    //Dryer zone current loop break (Group = Dryer, Category = Critical)
    DRYER_HEATERS_ZONE_2_CURRENT_LOOP_BREAK = 4014;

    //Dryer fan RPM is too low (Group = Dryer, Category = Warning)
    DRYER_FAN_RPM_TOO_LOW = 4015;

    //Dryer fan stopped (Group = Dryer, Category = Critical)
    DRYER_FAN_STOPPED = 4016;

    //The current in dryer lid motor is too high (Group = Dryer, Category = Critical)
    DRYER_LID_MOTOR_OVERCURRENT = 4017;

    //The temperature in the dryer lid motor is too high (Group = Dryer, Category = Critical)
    DRYER_LID_MOTOR_OVERTEMPERATURE = 4018;

    //Dryer lid motor stalled (Group = Dryer, Category = Critical)
    DRYER_LID_MOTOR_STALL = 4019;

    //The dryer lid motor voltage is too low (Group = Dryer, Category = Critical)
    DRYER_LID_MOTOR_UNDERVOLTAGE = 4020;

    //The temperature in dryer zone 2 is too low (Group = Dryer, Category = Warning)
    DRYER_ZONE_2_UNDERTEMPERATURE_A = 4021;

    //The temperature in dyeing head zone is too high (Group = DyeingHead, Category = Critical)
    DYEING_HEAD_ZONE_1_OVERTEMPERATURE = 5000;

    //The temperature in dyeing head zone is too high (Group = DyeingHead, Category = Critical)
    DYEING_HEAD_ZONE_2_OVERTEMPERATURE = 5001;

    //The temperature in dyeing head zone is too high (Group = DyeingHead, Category = Critical)
    DYEING_HEAD_ZONE_3_OVERTEMPERATURE = 5002;

    //The temperature in dyeing head zone is too high (Group = DyeingHead, Category = Critical)
    DYEING_HEAD_ZONE_4_OVERTEMPERATURE = 5003;

    //The temperature in dyeing head zone is too high (Group = DyeingHead, Category = Critical)
    DYEING_HEAD_ZONE_5_OVERTEMPERATURE = 5004;

    //The temperature in dyeing head zone is too high (Group = DyeingHead, Category = Critical)
    DYEING_HEAD_ZONE_6_OVERTEMPERATURE = 5005;

    //The temperature in dyeing head zone is too low (Group = DyeingHead, Category = Warning)
    DYEING_HEAD_ZONE_1_UNDERTEMPERATURE_A = 5006;

    //The temperature in dyeing head zone is too low (Group = DyeingHead, Category = Warning)
    DYEING_HEAD_ZONE_2_UNDERTEMPERATURE_A = 5007;

    //The temperature in dyeing head zone is too low (Group = DyeingHead, Category = Warning)
    DYEING_HEAD_ZONE_3_UNDERTEMPERATURE_A = 5008;

    //The temperature in dyeing head zone is too low (Group = DyeingHead, Category = Warning)
    DYEING_HEAD_ZONE_4_UNDERTEMPERATURE_A = 5009;

    //The temperature in dyeing head zone is too low (Group = DyeingHead, Category = Warning)
    DYEING_HEAD_ZONE_5_UNDERTEMPERATURE_A = 5010;

    //The temperature in dyeing head zone is too low (Group = DyeingHead, Category = Warning)
    DYEING_HEAD_ZONE_6_UNDERTEMPERATURE_A = 5011;

    //The temperature in dyeing head zone is too low (Group = DyeingHead, Category = Error)
    DYEING_HEAD_ZONE_1_UNDERTEMPERATURE_B = 5012;

    //The temperature in dyeing head zone is too low (Group = DyeingHead, Category = Error)
    DYEING_HEAD_ZONE_2_UNDERTEMPERATURE_B = 5013;

    //The temperature in dyeing head zone is too low (Group = DyeingHead, Category = Error)
    DYEING_HEAD_ZONE_3_UNDERTEMPERATURE_B = 5014;

    //The temperature in dyeing head zone is too low (Group = DyeingHead, Category = Error)
    DYEING_HEAD_ZONE_4_UNDERTEMPERATURE_B = 5015;

    //The temperature in dyeing head zone is too low (Group = DyeingHead, Category = Error)
    DYEING_HEAD_ZONE_5_UNDERTEMPERATURE_B = 5016;

    //The temperature in dyeing head zone is too low (Group = DyeingHead, Category = Error)
    DYEING_HEAD_ZONE_6_UNDERTEMPERATURE_B = 5017;

    //Dyeing head zone current is out of range (Group = DyeingHead, Category = Warning)
    DYEING_HEAD_ZONE_1_CURRENT_OUT_OF_RANGE = 5018;

    //Dyeing head zone current is out of range (Group = DyeingHead, Category = Warning)
    DYEING_HEAD_ZONE_2_CURRENT_OUT_OF_RANGE = 5019;

    //Dyeing head zone current is out of range (Group = DyeingHead, Category = Warning)
    DYEING_HEAD_ZONE_3_CURRENT_OUT_OF_RANGE = 5020;

    //Dyeing head zone current is out of range (Group = DyeingHead, Category = Warning)
    DYEING_HEAD_ZONE_4_CURRENT_OUT_OF_RANGE = 5021;

    //Dyeing head zone current is out of range (Group = DyeingHead, Category = Warning)
    DYEING_HEAD_ZONE_5_6_CURRENT_OUT_OF_RANGE = 5022;

    //Dyeing head zone current loop break (Group = DyeingHead, Category = Error)
    DYEING_HEAD_ZONE_1_CURRENT_LOOP_BREAK = 5023;

    //Dyeing head zone current loop break (Group = DyeingHead, Category = Error)
    DYEING_HEAD_ZONE_2_CURRENT_LOOP_BREAK = 5024;

    //Dyeing head zone current loop break (Group = DyeingHead, Category = Error)
    DYEING_HEAD_ZONE_3_CURRENT_LOOP_BREAK = 5025;

    //Dyeing head zone current loop break (Group = DyeingHead, Category = Error)
    DYEING_HEAD_ZONE_4_CURRENT_LOOP_BREAK = 5026;

    //Dyeing head zone  current loop break (Group = DyeingHead, Category = Error)
    DYEING_HEAD_ZONE_5_6_CURRENT_LOOP_BREAK = 5027;

    //Thermal cut-off (Group = DyeingHead, Category = Safety)
    DYEING_HEAD_THERMAL_CUTOFF = 5028;

    //Could not open the dyeing head cover (Group = DyeingHead, Category = Error)
    DYEING_HEAD_COVER_OPEN_TIMEOUT = 5029;

    //Could not close the dyeing head cover  (Group = DyeingHead, Category = Error)
    DYEING_HEAD_COVER_CLOSE_TIMEOUT = 5030;

    //The current in the dyeing head cover motor is too high (Group = DyeingHead, Category = Critical)
    DYEING_HEAD_COVER_MOTOR_OVERCURRENT = 5031;

    //The temperature in the dyeing head cover motor is too high (Group = DyeingHead, Category = Critical)
    DYEING_HEAD_COVER_MOTOR_OVERTEMPERATURE = 5032;

    //Dyeing head cover motor stalled (Group = DyeingHead, Category = Critical)
    DYEING_HEAD_COVER_MOTOR_STALL = 5033;

    //The voltage in the dyeing head cover motor is too low (Group = DyeingHead, Category = Critical)
    DYEING_HEAD_COVER_MOTOR_UNDERVOLTAGE = 5034;

    //The current in the dyeing head cleaning mechanism motor is too high (Group = DyeingHead, Category = Critical)
    DYEING_HEAD_CLEANING_MECHANISM_MOTOR_OVERCURRENT = 5035;

    //The temperature in the dyeing head cleaning mechanism motor is too high (Group = DyeingHead, Category = Critical)
    DYEING_HEAD_CLEANING_MECHANISM_MOTOR_OVERTEMPERATURE = 5036;

    //Dyeing head cleaning mechanism motor stalled (Group = DyeingHead, Category = Critical)
    DYEING_HEAD_CLEANING_MECHANISM_MOTOR_STALL = 5037;

    //The voltage in dyeing head cleaning mechanism motor is too low (Group = DyeingHead, Category = Critical)
    DYEING_HEAD_CLEANING_MECHANISM_MOTOR_UNDERVOLTAGE = 5038;

    //The current in the dyeing head cleaning head motor is too high (Group = DyeingHead, Category = Critical)
    DYEING_HEAD_CLEANING_HEAD_MOTOR_OVERCURRENT = 5039;

    //The temperature in the dyeing head cleaning head motor is too high (Group = DyeingHead, Category = Critical)
    DYEING_HEAD_CLEANING_HEAD_MOTOR_OVERTEMPERATURE = 5040;

    //Dyeing head cleaning mechanism motor stalled (Group = DyeingHead, Category = Critical)
    DYEING_HEAD_CLEANING_HEAD_MOTOR_STALL = 5041;

    //The voltage in dyeing head cleaning head motor is too low (Group = DyeingHead, Category = Critical)
    DYEING_HEAD_CLEANING_HEAD_MOTOR_UNDERVOLTAGE = 5042;

    //The temperature in the mixer is too high (Group = Mixer, Category = Critical)
    MIXER_OVERTEMPERATURE = 6000;

    //The temperature in the mixer is too low (Group = Mixer, Category = Warning)
    MIXER_UNDERTEMPERATURE_A = 6001;

    //The temperature in the mixer is too low (Group = Mixer, Category = Error)
    MIXER_UNDERTEMPERATURE_B = 6002;

    //Thermal cutoff (Group = Mixer, Category = Safety)
    MIXER_THERMAL_CUTOFF = 6003;

    //Mixer current is out of range (Group = Mixer, Category = Warning)
    MIXER_CURRENT_OUT_OF_RANGE = 6004;

    //Mixer current loop break (Group = Mixer, Category = Error)
    MIXER_CURRENT_LOOP_BREAK = 6005;

    //Overpressure in black dispenser  (Group = Dispensers, Category = Critical)
    DISPENSER_1_OVERPRESSURE = 7000;

    //Overpressure in cyan dispenser  (Group = Dispensers, Category = Critical)
    DISPENSER_2_OVERPRESSURE = 7001;

    //Overpressure in magenta dispenser  (Group = Dispensers, Category = Critical)
    DISPENSER_3_OVERPRESSURE = 7002;

    //Overpressure in yellow dispenser  (Group = Dispensers, Category = Critical)
    DISPENSER_4_OVERPRESSURE = 7003;

    //Overpressure in transparent ink dispenser  (Group = Dispensers, Category = Critical)
    DISPENSER_5_OVERPRESSURE = 7004;

    //Overpressure in spot color 1 dispenser  (Group = Dispensers, Category = Critical)
    DISPENSER_6_OVERPRESSURE = 7005;

    //Overpressure in cleaner dispenser  (Group = Dispensers, Category = Critical)
    DISPENSER_7_OVERPRESSURE = 7006;

    //Overpressure in lubricant  dispenser (Group = Dispensers, Category = Critical)
    DISPENSER_8_OVERPRESSURE = 7007;

    //The pressure in black dispenser is too low (Group = Dispensers, Category = Critical)
    DISPENSER_1_UNDERPRESSURE = 7008;

    //The pressure in cyan dispenser is too low (Group = Dispensers, Category = Critical)
    DISPENSER_2_UNDERPRESSURE = 7009;

    //The pressure in magenta dispenser is too low (Group = Dispensers, Category = Critical)
    DISPENSER_3_UNDERPRESSURE = 7010;

    //The pressure in yellow dispenser is too low (Group = Dispensers, Category = Critical)
    DISPENSER_4_UNDERPRESSURE = 7011;

    //The pressure in transparent ink dispenser is too low (Group = Dispensers, Category = Critical)
    DISPENSER_5_UNDERPRESSURE = 7012;

    //The pressure in spot color 1 dispenser is too low (Group = Dispensers, Category = Critical)
    DISPENSER_6_UNDERPRESSURE = 7013;

    //The pressure in cleaner dispenser is too low (Group = Dispensers, Category = Critical)
    DISPENSER_7_UNDERPRESSURE = 7014;

    //The pressure in lubricant dispenser is too low (Group = Dispensers, Category = Critical)
    DISPENSER_8_UNDERPRESSURE = 7015;

    //Black dispenser is empty (Group = Dispensers, Category = Error)
    DISPENSER_1_EMPTY = 7016;

    //Cyan dispenser is empty (Group = Dispensers, Category = Error)
    DISPENSER_2_EMPTY = 7017;

    //Magenta dispenser is empty (Group = Dispensers, Category = Error)
    DISPENSER_3_EMPTY = 7018;

    //Yellow dispenser is empty (Group = Dispensers, Category = Error)
    DISPENSER_4_EMPTY = 7019;

    //Transparent ink dispenser is empty (Group = Dispensers, Category = Error)
    DISPENSER_5_EMPTY = 7020;

    //Spot color 1 dispenser is empty (Group = Dispensers, Category = Error)
    DISPENSER_6_EMPTY = 7021;

    //Cleaner dispenser is empty (Group = Dispensers, Category = Error)
    DISPENSER_7_EMPTY = 7022;

    //Lubricant dispenser  is empty (Group = Dispensers, Category = Error)
    DISPENSER_8_EMPTY = 7023;

    //Dispenser problem (Group = Dispensers, Category = Error)
    DISPENSER_1_REFILL_FAILURE = 7024;

    //Dispenser problem (Group = Dispensers, Category = Error)
    DISPENSER_2_REFILL_FAILURE = 7025;

    //Dispenser problem (Group = Dispensers, Category = Error)
    DISPENSER_3_REFILL_FAILURE = 7026;

    //Dispenser problem (Group = Dispensers, Category = Error)
    DISPENSER_4_REFILL_FAILURE = 7027;

    //Dispenser problem (Group = Dispensers, Category = Error)
    DISPENSER_5_REFILL_FAILURE = 7028;

    //Dispenser problem (Group = Dispensers, Category = Error)
    DISPENSER_6_REFILL_FAILURE = 7029;

    //Dispenser problem (Group = Dispensers, Category = Error)
    DISPENSER_7_REFILL_FAILURE = 7030;

    //Dispenser problem (Group = Dispensers, Category = Error)
    DISPENSER_8_REFILL_FAILURE = 7031;

    //Black dispenser motor current is too high (Group = Dispensers, Category = Critical)
    DISPENSER_1_MOTOR_OVERCURRENT = 7032;

    //Cyan dispenser motor current is too high (Group = Dispensers, Category = Critical)
    DISPENSER_2_MOTOR_OVERCURRENT = 7033;

    //Magenta dispenser motor current is too high (Group = Dispensers, Category = Critical)
    DISPENSER_3_MOTOR_OVERCURRENT = 7034;

    //Yellow dispenser motor current is too high (Group = Dispensers, Category = Critical)
    DISPENSER_4_MOTOR_OVERCURRENT = 7035;

    //Transparent ink dispenser motor current is too high (Group = Dispensers, Category = Critical)
    DISPENSER_5_MOTOR_OVERCURRENT = 7036;

    //Spot color 1 dispenser motor current is too high (Group = Dispensers, Category = Critical)
    DISPENSER_6_MOTOR_OVERCURRENT = 7037;

    //Cleaner dispenser motor current is too high (Group = Dispensers, Category = Critical)
    DISPENSER_7_MOTOR_OVERCURRENT = 7038;

    //Lubricant dispenser motor current is too high (Group = Dispensers, Category = Critical)
    DISPENSER_8_MOTOR_OVERCURRENT = 7039;

    //Black dispenser motor temperature is too high (Group = Dispensers, Category = Critical)
    DISPENSER_1_MOTOR_OVERTEMPERATURE = 7040;

    //Cyan dispenser motor temperature is too high (Group = Dispensers, Category = Critical)
    DISPENSER_2_MOTOR_OVERTEMPERATURE = 7041;

    //Magenta dispenser motor temperature is too high (Group = Dispensers, Category = Critical)
    DISPENSER_3_MOTOR_OVERTEMPERATURE = 7042;

    //Yellow dispenser motor temperature is too high (Group = Dispensers, Category = Critical)
    DISPENSER_4_MOTOR_OVERTEMPERATURE = 7043;

    //Transparent ink dispenser motor temperature is too high (Group = Dispensers, Category = Critical)
    DISPENSER_5_MOTOR_OVERTEMPERATURE = 7044;

    //Spot color 1 dispenser motor temperature is too high (Group = Dispensers, Category = Critical)
    DISPENSER_6_MOTOR_OVERTEMPERATURE = 7045;

    //Cleaner dispenser motor temperature is too high (Group = Dispensers, Category = Critical)
    DISPENSER_7_MOTOR_OVERTEMPERATURE = 7046;

    //Lubricant dispenser motor temperature is too high (Group = Dispensers, Category = Critical)
    DISPENSER_8_MOTOR_OVERTEMPERATURE = 7047;

    //Black dispenser motor stalled (Group = Dispensers, Category = Critical)
    DISPENSER_1_MOTOR_STALL = 7048;

    //Cyan dispenser motor stalled (Group = Dispensers, Category = Critical)
    DISPENSER_2_MOTOR_STALL = 7049;

    //Magenta dispenser motor stalled (Group = Dispensers, Category = Critical)
    DISPENSER_3_MOTOR_STALL = 7050;

    //Yellow dispenser 4 motor stalled (Group = Dispensers, Category = Critical)
    DISPENSER_4_MOTOR_STALL = 7051;

    //Transparent ink dispenser motor stalled (Group = Dispensers, Category = Critical)
    DISPENSER_5_MOTOR_STALL = 7052;

    //Spot color 1 dispenser motor stalled (Group = Dispensers, Category = Critical)
    DISPENSER_6_MOTOR_STALL = 7053;

    //Cleaner dispenser motor stalled (Group = Dispensers, Category = Critical)
    DISPENSER_7_MOTOR_STALL = 7054;

    //Lubricant dispenser motor stalled (Group = Dispensers, Category = Critical)
    DISPENSER_8_MOTOR_STALL = 7055;

    //Black dispenser motor voltage is too low (Group = Dispensers, Category = Critical)
    DISPENSER_1_MOTOR_UNDERVOLTAGE = 7056;

    //Cyan dispenser motor voltage is too low (Group = Dispensers, Category = Critical)
    DISPENSER_2_MOTOR_UNDERVOLTAGE = 7057;

    //Magenta dispenser motor voltage is too low (Group = Dispensers, Category = Critical)
    DISPENSER_3_MOTOR_UNDERVOLTAGE = 7058;

    //Yellow dispenser motor voltage is too low (Group = Dispensers, Category = Critical)
    DISPENSER_4_MOTOR_UNDERVOLTAGE = 7059;

    //Transparent ink dispenser motor voltage is too low (Group = Dispensers, Category = Critical)
    DISPENSER_5_MOTOR_UNDERVOLTAGE = 7060;

    //Spot color 1 dispenser motor voltage is too low (Group = Dispensers, Category = Critical)
    DISPENSER_6_MOTOR_UNDERVOLTAGE = 7061;

    //Cleaner dispenser motor voltage is too low (Group = Dispensers, Category = Critical)
    DISPENSER_7_MOTOR_UNDERVOLTAGE = 7062;

    //Lubricant dispenser motor voltage is too low (Group = Dispensers, Category = Critical)
    DISPENSER_8_MOTOR_UNDERVOLTAGE = 7063;

    //Black dispenser is at the upper limit (Group = Dispensers, Category = Error)
    DISPENSER_1_UPPER_HARD_LIMIT = 7064;

    //Cyan dispenser is at the upper limit (Group = Dispensers, Category = Error)
    DISPENSER_2_UPPER_HARD_LIMIT = 7065;

    //Magenta dispenser is at the upper limit (Group = Dispensers, Category = Error)
    DISPENSER_3_UPPER_HARD_LIMIT = 7066;

    //Yellow dispenser is at the upper limit (Group = Dispensers, Category = Error)
    DISPENSER_4_UPPER_HARD_LIMIT = 7067;

    //Transparent ink dispenser is at the upper limit (Group = Dispensers, Category = Error)
    DISPENSER_5_UPPER_HARD_LIMIT = 7068;

    //Spot color 1 Dispenser is at the upper limit (Group = Dispensers, Category = Error)
    DISPENSER_6_UPPER_HARD_LIMIT = 7069;

    //Cleaner dispenser is at the upper limit (Group = Dispensers, Category = Error)
    DISPENSER_7_UPPER_HARD_LIMIT = 7070;

    //Lubricant dispenser is at the upper limit (Group = Dispensers, Category = Error)
    DISPENSER_8_UPPER_HARD_LIMIT = 7071;

    //Black dispenser is at the  lower limit (Group = Dispensers, Category = Error)
    DISPENSER_1_LOWER_HARD_LIMIT = 7072;

    //Cyan dispenser is at the  lower limit (Group = Dispensers, Category = Error)
    DISPENSER_2_LOWER_HARD_LIMIT = 7073;

    //Magenta dispenser is at the lower limit (Group = Dispensers, Category = Error)
    DISPENSER_3_LOWER_HARD_LIMIT = 7074;

    //Yellow dispenser is at the lower limit (Group = Dispensers, Category = Error)
    DISPENSER_4_LOWER_HARD_LIMIT = 7075;

    //Transparent ink dispenser is at the lower limit (Group = Dispensers, Category = Error)
    DISPENSER_5_LOWER_HARD_LIMIT = 7076;

    //Spot color 1 dispenser is at the lower limit (Group = Dispensers, Category = Error)
    DISPENSER_6_LOWER_HARD_LIMIT = 7077;

    //Cleaner dispenser is at the lower limit (Group = Dispensers, Category = Error)
    DISPENSER_7_LOWER_HARD_LIMIT = 7078;

    //Lubricant dispenser is at the lower limit (Group = Dispensers, Category = Error)
    DISPENSER_8_LOWER_HARD_LIMIT = 7079;

    //Pressure in black dispenser  is too high (Group = Dispensers, Category = Error)
    DISPENSER_1_HIGH_PRESSURE = 7080;

    //Pressure in cyan dispenser is too high (Group = Dispensers, Category = Error)
    DISPENSER_2_HIGH_PRESSURE = 7081;

    //Pressure in magenta dispenser is too high (Group = Dispensers, Category = Error)
    DISPENSER_3_HIGH_PRESSURE = 7082;

    //Pressure in yellow dispenser is too high (Group = Dispensers, Category = Error)
    DISPENSER_4_HIGH_PRESSURE = 7083;

    //Pressure in transparent ink dispenser is too high (Group = Dispensers, Category = Error)
    DISPENSER_5_HIGH_PRESSURE = 7084;

    //Pressure in spot color 1 dispenser is too high (Group = Dispensers, Category = Error)
    DISPENSER_6_HIGH_PRESSURE = 7085;

    //Pressure in cleaner dispenser 7 is too high (Group = Dispensers, Category = Error)
    DISPENSER_7_HIGH_PRESSURE = 7086;

    //Pressure in lubricant dispenser is too high (Group = Dispensers, Category = Error)
    DISPENSER_8_HIGH_PRESSURE = 7087;

    //Black ink level is low (Group = InkDeliverySystem, Category = Warning)
    MID_TANK_1_LOW_LEVEL = 8000;

    //Cyan ink level is low (Group = InkDeliverySystem, Category = Warning)
    MID_TANK_2_LOW_LEVEL = 8001;

    //Magenta ink level is low (Group = InkDeliverySystem, Category = Warning)
    MID_TANK_3_LOW_LEVEL = 8002;

    //Yellow ink level is low (Group = InkDeliverySystem, Category = Warning)
    MID_TANK_4_LOW_LEVEL = 8003;

    //Transparent ink level is low (Group = InkDeliverySystem, Category = Warning)
    MID_TANK_5_LOW_LEVEL = 8004;

    //Spot color I level is low (Group = InkDeliverySystem, Category = Warning)
    MID_TANK_6_LOW_LEVEL = 8005;

    //Cleaner level is low (Group = InkDeliverySystem, Category = Warning)
    MID_TANK_7_LOW_LEVEL = 8006;

    //Lubricant level is low (Group = InkDeliverySystem, Category = Warning)
    MID_TANK_8_LOW_LEVEL = 8007;

    //Black ink is empty (Group = InkDeliverySystem, Category = Error)
    MID_TANK_1_EMPTY = 8008;

    //Cyan ink is empty (Group = InkDeliverySystem, Category = Error)
    MID_TANK_2_EMPTY = 8009;

    //Magenta ink is empty (Group = InkDeliverySystem, Category = Error)
    MID_TANK_3_EMPTY = 8010;

    //Yellow ink  is empty (Group = InkDeliverySystem, Category = Error)
    MID_TANK_4_EMPTY = 8011;

    //Transparent ink is empty (Group = InkDeliverySystem, Category = Error)
    MID_TANK_5_EMPTY = 8012;

    //Spot color I  is empty (Group = InkDeliverySystem, Category = Error)
    MID_TANK_6_EMPTY = 8013;

    //Cleaner is empty (Group = InkDeliverySystem, Category = Error)
    MID_TANK_7_EMPTY = 8014;

    //Lubricant is empty (Group = InkDeliverySystem, Category = Error)
    MID_TANK_8_EMPTY = 8015;

    //Black ink overflow (Group = InkDeliverySystem, Category = Error)
    MID_TANK_1_OVERFLOW = 8016;

    //Cyan ink overflow (Group = InkDeliverySystem, Category = Error)
    MID_TANK_2_OVERFLOW = 8017;

    //Magenta ink overflow (Group = InkDeliverySystem, Category = Error)
    MID_TANK_3_OVERFLOW = 8018;

    //Yellow ink overflow (Group = InkDeliverySystem, Category = Error)
    MID_TANK_4_OVERFLOW = 8019;

    //Transparent ink overflow (Group = InkDeliverySystem, Category = Error)
    MID_TANK_5_OVERFLOW = 8020;

    //Spot color 1 overflow (Group = InkDeliverySystem, Category = Error)
    MID_TANK_6_OVERFLOW = 8021;

    //Cleaner overflow (Group = InkDeliverySystem, Category = Error)
    MID_TANK_7_OVERFLOW = 8022;

    //Lubricant overflow (Group = InkDeliverySystem, Category = Error)
    MID_TANK_8_OVERFLOW = 8023;

    //Failed to fill black ink (Group = InkDeliverySystem, Category = Error)
    MID_TANK_1_FILL_TIMEOUT = 8024;

    //Failed to fill cyan ink (Group = InkDeliverySystem, Category = Error)
    MID_TANK_2_FILL_TIMEOUT = 8025;

    //Failed to fill magenta ink (Group = InkDeliverySystem, Category = Error)
    MID_TANK_3_FILL_TIMEOUT = 8026;

    //Failed to fill yellow ink (Group = InkDeliverySystem, Category = Error)
    MID_TANK_4_FILL_TIMEOUT = 8027;

    //Failed to fill transparent ink (Group = InkDeliverySystem, Category = Error)
    MID_TANK_5_FILL_TIMEOUT = 8028;

    //Failed to fill spot color 1 ink (Group = InkDeliverySystem, Category = Error)
    MID_TANK_6_FILL_TIMEOUT = 8029;

    //Failed to fill cleaner (Group = InkDeliverySystem, Category = Error)
    MID_TANK_7_FILL_TIMEOUT = 8030;

    //Failed to fill lubricant (Group = InkDeliverySystem, Category = Error)
    MID_TANK_8_FILL_TIMEOUT = 8031;

    //Cannot detect air filter  (Group = WasteHandlingSystem, Category = Safety)
    AIR_FILTER_NOT_INSTALLED = 9000;

    //Air filter clogged (Group = WasteHandlingSystem, Category = Error)
    AIR_FILTER_CLOGGED = 9001;

    //Recycled ink emptying failure (Group = WasteHandlingSystem, Category = Error)
    WASTE_CONTAINER_EMPTYING_TIMEOUT = 9002;

    //No suction in the recycled ink handling system (Group = WasteHandlingSystem, Category = Safety)
    NO_AIR_PRESSURE = 9003;

    //Overflow in recycled ink container (Group = WasteHandlingSystem, Category = Critical)
    WASTE_CONTAINER_OVERFLOW = 9004;

    //Air quality alert (Group = WasteHandlingSystem, Category = Critical)
    VOC_SENSOR_ALARM_TIME = 9005;

    //Chiller malfunction (Group = WasteHandlingSystem, Category = Critical)
    CHILLER_DRY_CONTACT = 9006;

    //Insufficient air flow (Group = WasteHandlingSystem, Category = Critical)
    INSUFFICIENT_AIR_FLOW = 9007;

    //Air quality alert (Group = WasteHandlingSystem, Category = Critical)
    VOC_SENSOR_ALARM_SLOPE = 9008;

    //Cannot detect ink cartridge (Group = InkFillingSystem, Category = Error)
    INK_CARTRIDGE_PRESENCE_SENSOR_TIMEOUT = 10000;

    //Cannot identify ink cartridge  (Group = InkFillingSystem, Category = Error)
    INK_CARTRIDGE_RFID_TIMEOUT = 10001;

    //No Re-cartridge available (Group = InkFillingSystem, Category = Error)
    NO_WASTE_CARTRIDGE_AVAILABLE = 10002;

    //All Re-cartridges are full (Group = InkFillingSystem, Category = Error)
    ALL_WASTE_CARTRIDGES_FULL = 10003;

    //Cannot detect Re-cartridge  (Group = InkFillingSystem, Category = Error)
    WASTE_CARTRIDGE_PRESENCE_SENSOR_TIMEOUT = 10004;

    //Cannot identify Re-cartridge  (Group = InkFillingSystem, Category = Error)
    WASTE_CARTRIDGE_RFID_TIMEOUT = 10005;

}