using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Runtime.InteropServices;


namespace FcMirrorVCS
{
	//*****************************************************************************
	//   t@C F frmMirror.cs
	//
	//   @\ F ~[Xe[^X\@\
	//
	//
	// Copyright (C) NEC Corporation 2009
	//*****************************************************************************

	public class frmMirror : System.Windows.Forms.Form
	{
		public System.Windows.Forms.Label lblSmartState;
		public System.Windows.Forms.Label lblDrive1;
		public System.Windows.Forms.Label lblDrive2;
		public System.Windows.Forms.Label lblDrive3;
		public System.Windows.Forms.Label LedDrive1;
		public System.Windows.Forms.Label LedDrive2;
		public System.Windows.Forms.Label LedDrive3;
		private System.Windows.Forms.Timer timer1;
		private System.ComponentModel.IContainer components;

		//*****************************************************************************
		// HDD擾p萔`
		//*****************************************************************************

		// RETURNXe[^X
		private const int FCSRASAPI_SUCCESS = 0x00;
		private const int FCSRASAPI_DRVERR = 0x01;

	    // HDD̃ANZXw
		private const byte HDDSTS_PRI_MAS = 0x10;			// vC}}X^w
		private const byte HDDSTS_PRI_SRV = 0x20;			// vC}X[uw
		private const byte HDDSTS_SEC_MAS = 0x30;			// ZJ_}X^w
		private const byte HDDSTS_SEC_SRV = 0x40;			// ZJ_X[uw

		private const byte HDDSTS_MRR_DRV1 = 0x01;			// ~[hCuPw
		private const byte HDDSTS_MRR_DRV2 = 0x02;			// ~[hCuQw

		// HDD󋵂ޯď (IOCTL_FCSOFTRAS_GET_HDDINF)
		private const byte HDDCONN_SMARTERR_BIT = 0x01;		// SMARTG[  0:   1:ُ
		private const byte HDDCONN_CONNECT_BIT = 0x40;		// HDDڑ      0:ڑ 1:ڑL
		private const byte HDDCONN_MIRROR_BIT = 0x80;		// װ      0:ڑ 1:ڑL

		// HDDð (IOCTL_FCSOFTRAS_GET_HDDINF)
		private const byte HDDSTS_NORMAL = 0x00;			// 

		private const byte HDDSTS_ERR_DRV1 = 0x10;			// Drive1̏
		private const byte HDDSTS_ERR_DRV2 = 0x11;			// Drive2̏
		private const byte HDDSTS_ERR_DRV3 = 0x12;			// Drive3̏
		private const byte HDDSTS_ERR_DRV12 = 0x13;			// װDrive1,2̏
		private const byte HDDSTS_ERR_DRV13 = 0x14;			// װDrive1,3̏
		private const byte HDDSTS_ERR_DRV23 = 0x15;			// װDrive2,3̏

		private const byte HDDSTS_RECON_1 = 0x20;			// ްč\z(Drive2Drive1ֺ߰)
		private const byte HDDSTS_RECON_2 = 0x21;			// ްč\z(Drive1Drive2ֺ߰)
		private const byte HDDSTS_RECON_3 = 0x22;			// ްč\z(Drive3Drive1ֺ߰)
		private const byte HDDSTS_RECON_4 = 0x23;			// ްč\z(Drive1Drive3ֺ߰)
		private const byte HDDSTS_RECON_5 = 0x24;			// ްč\z(Drive3Drive2ֺ߰)
		private const byte HDDSTS_RECON_6 = 0x25;			// ްč\z(Drive2Drive3ֺ߰)
		private const byte HDDSTS_RECON_7 = 0x26;			// ްč\z(Drive1ExtDrive,Drive2ֺ߰)
		private const byte HDDSTS_RECON_8 = 0x27;			// ްč\z(Drive2ExtDrive,Drive1ֺ߰)
		private const byte HDDSTS_RECON_9 = 0x28;			// ްč\z(ExtDriveDrive1,Drive2ֺ߰)

		private const byte HDDSTS_RECON_SKIP_1 = 0x30;		// غݔ(Drive1Drive2ްč\z)
		private const byte HDDSTS_RECON_SKIP_2 = 0x31;		// غݔ(Drive2Drive1ްč\z)
		private const byte HDDSTS_RECON_SKIP_3 = 0x32;		// غݔ(Drive3)
		private const byte HDDSTS_RECON_SKIP_12 = 0x33;		// غݔ(Drive1,Drive2)
		private const byte HDDSTS_RECON_SKIP_13 = 0x34;		// غݔ(Drive1,Drive3)
		private const byte HDDSTS_RECON_SKIP_23 = 0x35;		// غݔ(Drive2,Drive3)

		private const byte HDDSTS_ERR_RECON_1 = 0x40;		// װDrive1̏,ްč\z(Drive3Drive2ֺ߰)
		private const byte HDDSTS_ERR_RECON_2 = 0x41;		// װDrive1̏,ްč\z(Drive2Drive3ֺ߰)
		private const byte HDDSTS_ERR_RECON_3 = 0x42;		// װDrive2̏,ްč\z(Drive3Drive1ֺ߰)
		private const byte HDDSTS_ERR_RECON_4 = 0x43;		// װDrive2̏,ްč\z(Drive1Drive3ֺ߰)
		private const byte HDDSTS_ERR_RECON_5 = 0x44;		// װDrive3̏,ްč\z(Drive2Drive1ֺ߰)
		private const byte HDDSTS_ERR_RECON_6 = 0x45;		// װDrive3̏,ްč\z(Drive1Drive2ֺ߰)

		//*****************************************************************************
		// \tgRASI/F`
		//*****************************************************************************
		[DllImport("FcsrasapiP.dll")]
		private static extern int fcsoftrasOpenP();
		[DllImport("FcsrasapiP.dll")]
		private static extern int fcsoftrasCloseP();
		[DllImport("FcsrasapiP.dll")]
		private static extern int fcsoftrasGetMirrorStatusP(byte DriveNum, [MarshalAs(UnmanagedType.SafeArray)] ref byte[] buff);
		[DllImport("FcsrasapiP.dll")]
		private static extern int fcsoftrasGetMirrorReconProgressP(byte DriveNum, ref byte buff);

		public frmMirror()
		{
			//
			// Windows tH[ fUCi T|[gɕKvłB
			//
			InitializeComponent();

			//
			// TODO: InitializeComponent ĂяǒɁARXgN^ R[hǉĂB
			//
		}

		/// <summary>
		/// gpĂ郊\[XɌ㏈s܂B
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if (components != null) 
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		#region Windows tH[ fUCiŐꂽR[h 
		/// <summary>
		/// fUCi T|[gɕKvȃ\bhłB̃\bh̓e
		/// R[h GfB^ŕύXȂłB
		/// </summary>
		private void InitializeComponent()
		{
			this.components = new System.ComponentModel.Container();
			System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(frmMirror));
			this.timer1 = new System.Windows.Forms.Timer(this.components);
			this.LedDrive1 = new System.Windows.Forms.Label();
			this.LedDrive2 = new System.Windows.Forms.Label();
			this.lblDrive1 = new System.Windows.Forms.Label();
			this.lblDrive2 = new System.Windows.Forms.Label();
			this.lblDrive3 = new System.Windows.Forms.Label();
			this.lblSmartState = new System.Windows.Forms.Label();
			this.LedDrive3 = new System.Windows.Forms.Label();
			this.SuspendLayout();
			// 
			// timer1
			// 
			this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
			// 
			// LedDrive1
			// 
			this.LedDrive1.BackColor = System.Drawing.Color.FromArgb(((System.Byte)(255)), ((System.Byte)(128)), ((System.Byte)(0)));
			this.LedDrive1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
			this.LedDrive1.Location = new System.Drawing.Point(121, 32);
			this.LedDrive1.Name = "LedDrive1";
			this.LedDrive1.Size = new System.Drawing.Size(73, 33);
			this.LedDrive1.TabIndex = 12;
			// 
			// LedDrive2
			// 
			this.LedDrive2.BackColor = System.Drawing.Color.Green;
			this.LedDrive2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
			this.LedDrive2.Location = new System.Drawing.Point(217, 32);
			this.LedDrive2.Name = "LedDrive2";
			this.LedDrive2.Size = new System.Drawing.Size(73, 33);
			this.LedDrive2.TabIndex = 11;
			// 
			// lblDrive1
			// 
			this.lblDrive1.BackColor = System.Drawing.SystemColors.Control;
			this.lblDrive1.Cursor = System.Windows.Forms.Cursors.Default;
			this.lblDrive1.ForeColor = System.Drawing.SystemColors.ControlText;
			this.lblDrive1.Location = new System.Drawing.Point(121, 8);
			this.lblDrive1.Name = "lblDrive1";
			this.lblDrive1.RightToLeft = System.Windows.Forms.RightToLeft.No;
			this.lblDrive1.Size = new System.Drawing.Size(73, 17);
			this.lblDrive1.TabIndex = 8;
			this.lblDrive1.Text = "DRIVE1";
			this.lblDrive1.TextAlign = System.Drawing.ContentAlignment.TopCenter;
			// 
			// lblDrive2
			// 
			this.lblDrive2.BackColor = System.Drawing.SystemColors.Control;
			this.lblDrive2.Cursor = System.Windows.Forms.Cursors.Default;
			this.lblDrive2.ForeColor = System.Drawing.SystemColors.ControlText;
			this.lblDrive2.Location = new System.Drawing.Point(217, 8);
			this.lblDrive2.Name = "lblDrive2";
			this.lblDrive2.RightToLeft = System.Windows.Forms.RightToLeft.No;
			this.lblDrive2.Size = new System.Drawing.Size(73, 17);
			this.lblDrive2.TabIndex = 9;
			this.lblDrive2.Text = "DRIVE2";
			this.lblDrive2.TextAlign = System.Drawing.ContentAlignment.TopCenter;
			// 
			// lblDrive3
			// 
			this.lblDrive3.BackColor = System.Drawing.SystemColors.Control;
			this.lblDrive3.Cursor = System.Windows.Forms.Cursors.Default;
			this.lblDrive3.ForeColor = System.Drawing.SystemColors.ControlText;
			this.lblDrive3.Location = new System.Drawing.Point(24, 8);
			this.lblDrive3.Name = "lblDrive3";
			this.lblDrive3.RightToLeft = System.Windows.Forms.RightToLeft.No;
			this.lblDrive3.Size = new System.Drawing.Size(73, 17);
			this.lblDrive3.TabIndex = 10;
			this.lblDrive3.Text = "ExtDRIVE";
			this.lblDrive3.TextAlign = System.Drawing.ContentAlignment.TopCenter;
			// 
			// lblSmartState
			// 
			this.lblSmartState.BackColor = System.Drawing.SystemColors.Control;
			this.lblSmartState.Cursor = System.Windows.Forms.Cursors.Default;
			this.lblSmartState.ForeColor = System.Drawing.SystemColors.ControlText;
			this.lblSmartState.Location = new System.Drawing.Point(3, 72);
			this.lblSmartState.Name = "lblSmartState";
			this.lblSmartState.RightToLeft = System.Windows.Forms.RightToLeft.No;
			this.lblSmartState.Size = new System.Drawing.Size(309, 15);
			this.lblSmartState.TabIndex = 6;
			this.lblSmartState.Text = "Label1";
			this.lblSmartState.TextAlign = System.Drawing.ContentAlignment.TopCenter;
			// 
			// LedDrive3
			// 
			this.LedDrive3.BackColor = System.Drawing.Color.Green;
			this.LedDrive3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
			this.LedDrive3.Location = new System.Drawing.Point(24, 32);
			this.LedDrive3.Name = "LedDrive3";
			this.LedDrive3.Size = new System.Drawing.Size(73, 33);
			this.LedDrive3.TabIndex = 7;
			// 
			// frmMirror
			// 
			this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
			this.ClientSize = new System.Drawing.Size(315, 88);
			this.Controls.Add(this.LedDrive3);
			this.Controls.Add(this.lblDrive3);
			this.Controls.Add(this.lblDrive2);
			this.Controls.Add(this.lblDrive1);
			this.Controls.Add(this.LedDrive2);
			this.Controls.Add(this.LedDrive1);
			this.Controls.Add(this.lblSmartState);
			this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
			this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
			this.Location = new System.Drawing.Point(3, 22);
			this.MaximizeBox = false;
			this.MinimizeBox = false;
			this.Name = "frmMirror";
			this.Text = "Triple Mirror State";
			this.Load += new System.EventHandler(this.frmMirror_Load);
			this.Closed += new System.EventHandler(this.frmMirror_Closed);
			this.ResumeLayout(false);

		}
		#endregion

		/// <summary>
		/// AvP[ṼC Gg |CgłB
		/// </summary>
		[STAThread]
		static void Main() 
		{
			Application.Run(new frmMirror());
		}

		//****************************************************
		//   ֐ F frmMirror_Load
		//   @\   Fʂ̋N()
		//      F Ȃ
		//   ߂l F Ȃ
		//****************************************************
		private void frmMirror_Load(object sender, System.EventArgs e)
		{
			int ret;

			// ƃtH_st@CtH_ɕύX DLLǂݏo
			System.IO.Directory.SetCurrentDirectory(Application.StartupPath);

			// \tgRAS̃Cu
			ret = fcsoftrasOpenP();

			// ݂̏Ԃ擾Ɖʂւ̔f
			subSetMirrorState();
		
			// ʍXVp̃^C}[ݒ
			timer1.Interval = 30000;		// 30bݒ
			timer1.Enabled = true;			// L
		
		}

		//****************************************************
		//   ֐ F frmMirror_Closed
		//   @\   Fʂ̏I(㏈)
		//      F Ȃ
		//   ߂l F Ȃ
		//****************************************************
		private void frmMirror_Closed(object sender, System.EventArgs e)
		{
			int ret;

			// \tgRAS̃CuI
			ret = fcsoftrasCloseP();
		}

		//****************************************************
		//   ֐ F timer1_Tick
		//   @\   F^C}[ɂʍXV
		//      F Ȃ
		//   ߂l F Ȃ
		//****************************************************
		private void timer1_Tick(object sender, System.EventArgs e)
		{
			// ݂̏Ԃ擾Ɖʂւ̔f
			subSetMirrorState();
		}

		//****************************************************
		//   ֐ F subSetMirrorState
		//   @\   F~[̏Ԃ擾Aʂ̍XVsȂ
		//      F Ȃ
		//   ߂l F Ȃ
		//****************************************************
		private void subSetMirrorState()
		{
			byte[] buff = new byte[4];	// ~[Xe[^Xۑp
			byte Progress = 0;			// i󋵕ۑp
			int ret;					// ߂lۑp

			// ~[Xe[^X̎擾
			ret = fcsoftrasGetMirrorStatusP(HDDSTS_PRI_MAS, ref buff);
			// ~[Xe[^X擾H
			if (FCSRASAPI_SUCCESS == ret)
			{
				// ~[Xe[^X̏󋵂ɂʂXV
				switch (buff[0])
				{
						// 
					case HDDSTS_NORMAL:
						lblSmartState.Text = "Normal";			// ڍ׏ݒ
						LedDrive1.BackColor = Color.Lime;		// hCu1 LEDݒ()
						LedDrive2.BackColor = Color.Lime;		// hCu2 LEDݒ()
                        LedDrive3.BackColor = Color.Lime;		// hCu3 LEDݒ()
						break;

						// hCuPG[
					case HDDSTS_ERR_DRV1:
						lblSmartState.Text = "DRIVE1 failure";	// ڍ׏ݒ
						LedDrive1.BackColor = Color.Red;		// hCu1 LEDݒ()
						LedDrive2.BackColor = Color.Lime;		// hCu2 LEDݒ()
                        LedDrive3.BackColor = Color.Lime;		// hCu3 LEDݒ()
						break;

						// hCuQG[
					case HDDSTS_ERR_DRV2:
						lblSmartState.Text = "DRIVE2 failure";	// ڍ׏ݒ
						LedDrive1.BackColor = Color.Lime;		// hCu1 LEDݒ()
						LedDrive2.BackColor = Color.Red;		// hCu2 LEDݒ()
                        LedDrive3.BackColor = Color.Lime;		// hCu3 LEDݒ()
						break;

                        // ghCuG[
                    case HDDSTS_ERR_DRV3:
                        lblSmartState.Text = "ExtDRIVE failure";	// ڍ׏ݒ
                        LedDrive1.BackColor = Color.Lime;		// hCu1 LEDݒ()
                        LedDrive2.BackColor = Color.Lime;		// hCu2 LEDݒ()
                        LedDrive3.BackColor = Color.Red;		// hCu3 LEDݒ()
						break;

                        // hCuPAQG[
                    case HDDSTS_ERR_DRV12:
                        lblSmartState.Text = "DRIVE1,DRIVE2 failure";	// ڍ׏ݒ
                        LedDrive1.BackColor = Color.Red;			// hCu1 LEDݒ()
                        LedDrive2.BackColor = Color.Red;			// hCu2 LEDݒ()
                        LedDrive3.BackColor = Color.Lime;			// hCu3 LEDݒ()
						break;

                        // ghCuAhCuPG[
                    case HDDSTS_ERR_DRV13:
                        lblSmartState.Text = "ExtDRIVE,DRIVE1 failure";	// ڍ׏ݒ
                        LedDrive1.BackColor = Color.Red;			// hCu1 LEDݒ()
                        LedDrive2.BackColor = Color.Lime;			// hCu2 LEDݒ()
                        LedDrive3.BackColor = Color.Red;			// hCu3 LEDݒ()
						break;

                        // ghCuAhCuQG[
                    case HDDSTS_ERR_DRV23:
                        lblSmartState.Text = "ExtDRIVE,DRIVE2 failure";	// ڍ׏ݒ
                        LedDrive1.BackColor = Color.Lime;			// hCu1 LEDݒ()
                        LedDrive2.BackColor = Color.Red;			// hCu2 LEDݒ()
                        LedDrive3.BackColor = Color.Red;			// hCu3 LEDݒ()
						break;

						// f[^č\z(DRIVE1DRIVE2)
					case HDDSTS_RECON_1:
						// i̎擾
						if (FCSRASAPI_SUCCESS == fcsoftrasGetMirrorReconProgressP(HDDSTS_PRI_MAS, ref Progress))
						{
							// ڍ׏ݒ(i܂)
							lblSmartState.Text = "Currently copying(DRIVE1<-DRIVE2)" + Progress + "%";
						}
							// i̎擾s
						else
						{
							// ڍ׏ݒ
							lblSmartState.Text = "Currently copying(DRIVE1<-DRIVE2)";
						}
						LedDrive1.BackColor = Color.Orange;		// hCu1 LEDݒ()
						LedDrive2.BackColor = Color.Lime;		// hCu2 LEDݒ()
                        LedDrive3.BackColor = Color.Lime;		// hCu3 LEDݒ()
						break;

						// f[^č\z(DRIVE1DRIVE2)
					case HDDSTS_RECON_2:
						// i̎擾
						if (FCSRASAPI_SUCCESS == fcsoftrasGetMirrorReconProgressP(HDDSTS_PRI_MAS, ref Progress))
						{
							// ڍ׏ݒ(i܂)
							lblSmartState.Text = "Currently copying(DRIVE1->DRIVE2)" + Progress + "%";
						}
							// i̎擾s
						else
						{
							// ڍ׏ݒ
							lblSmartState.Text = "Currently copying(DRIVE1->DRIVE2)";
						}
						LedDrive1.BackColor = Color.Lime;		// hCu1 LEDݒ()
						LedDrive2.BackColor = Color.Orange;		// hCu2 LEDݒ()
                        LedDrive3.BackColor = Color.Lime;		// hCu3 LEDݒ()
						break;

                        // f[^č\z(ExtDRIVEDRIVE1)
                    case HDDSTS_RECON_3:
                        // i̎擾
						if (FCSRASAPI_SUCCESS == fcsoftrasGetMirrorReconProgressP(HDDSTS_PRI_MAS, ref Progress))
						{
                            // ڍ׏ݒ(i܂)
                            lblSmartState.Text = "Currently copying(ExtDRIVE->DRIVE1)" + Progress + "%";
						}
                            // i̎擾s
                        else
						{
                            // ڍ׏ݒ
                            lblSmartState.Text = "Currently copying(ExtDRIVE->DRIVE1)";
						}
                        LedDrive1.BackColor = Color.Orange;		// hCu1 LEDݒ()
                        LedDrive2.BackColor = Color.Lime;		// hCu2 LEDݒ()
                        LedDrive3.BackColor = Color.Lime;		// hCu3 LEDݒ()
						break;

                        // f[^č\z(ExtDRIVEDRIVE1)
                    case HDDSTS_RECON_4:
                        // i̎擾
						if (FCSRASAPI_SUCCESS == fcsoftrasGetMirrorReconProgressP(HDDSTS_PRI_MAS, ref Progress))
						{
                            // ڍ׏ݒ(i܂)
                            lblSmartState.Text = "Currently copying(ExtDRIVE<-DRIVE1)" + Progress + "%";
						}
                            // i̎擾s
                        else
						{
                            // ڍ׏ݒ
                            lblSmartState.Text = "Currently copying(ExtDRIVE<-DRIVE1)";
						}
						LedDrive1.BackColor = Color.Lime;		// hCu1 LEDݒ()
                        LedDrive2.BackColor = Color.Lime;		// hCu2 LEDݒ()
                        LedDrive3.BackColor = Color.Orange;		// hCu3 LEDݒ()
						break;

                        // f[^č\z(ExtDRIVEDRIVE2)
                    case HDDSTS_RECON_5:
                        // i̎擾
						if (FCSRASAPI_SUCCESS == fcsoftrasGetMirrorReconProgressP(HDDSTS_PRI_MAS, ref Progress))
						{
                            // ڍ׏ݒ(i܂)
                            lblSmartState.Text = "Currently copying(ExtDRIVE->DRIVE2)" + Progress + "%";
						}
							// i̎擾s
						else
						{
							//ڍ׏ݒ
                            lblSmartState.Text = "Currently copying(ExtDRIVE->DRIVE2)";
						}
						LedDrive1.BackColor = Color.Lime;		// hCu1 LEDݒ()
                        LedDrive2.BackColor = Color.Orange;		// hCu2 LEDݒ()
                        LedDrive3.BackColor = Color.Lime;		// hCu3 LEDݒ()
						break;

                        // f[^č\z(ExtDRIVEDRIVE2)
                    case HDDSTS_RECON_6:
                        // i̎擾
						if (FCSRASAPI_SUCCESS == fcsoftrasGetMirrorReconProgressP(HDDSTS_PRI_MAS, ref Progress))
						{
                            // ڍ׏ݒ(i܂)
                            lblSmartState.Text = "Currently copying(ExtDRIVE<-DRIVE2)" + Progress + "%";
						}
							// i̎擾s
						else
						{
							//ڍ׏ݒ
                            lblSmartState.Text = "Currently copying(ExtDRIVE<-DRIVE2)";
						}
						LedDrive1.BackColor = Color.Lime;		// hCu1 LEDݒ()
                        LedDrive2.BackColor = Color.Lime;		// hCu2 LEDݒ()
                        LedDrive3.BackColor = Color.Orange;		// hCu3 LEDݒ()
						break;

                        // f[^č\z(DRIVE1ExtDRIVE,DRIVE2)
                    case HDDSTS_RECON_7:
                        // i̎擾
						if (FCSRASAPI_SUCCESS == fcsoftrasGetMirrorReconProgressP(HDDSTS_PRI_MAS, ref Progress))
						{
							// ڍ׏ݒ(i܂)
							lblSmartState.Text = "Currently copying(DRIVE1->ExtDRIVE,DRIVE2)" + Progress + "%";
						}
							// i̎擾s
						else
						{
							// ڍ׏ݒ
							lblSmartState.Text = "Currently copying(DRIVE1->ExtDRIVE,DRIVE2)";
						}
                        LedDrive1.BackColor = Color.Lime;           // hCu1 LEDݒ()
                        LedDrive2.BackColor = Color.Orange;         // hCu2 LEDݒ()
                        LedDrive3.BackColor = Color.Orange;         // ghCu LEDݒ()
						break;

                        // f[^č\z(DRIVE2ExtDRIVE,DRIVE1)
                    case HDDSTS_RECON_8:
                        // i̎擾
						if (FCSRASAPI_SUCCESS == fcsoftrasGetMirrorReconProgressP(HDDSTS_PRI_MAS, ref Progress))
						{
							// ڍ׏ݒ(i܂)
							lblSmartState.Text = "Currently copying(DRIVE2->ExtDRIVE,DRIVE1)" + Progress + "%";
						}
							// i̎擾s
						else
						{
							// ڍ׏ݒ
							lblSmartState.Text = "Currently copying(DRIVE2->ExtDRIVE,DRIVE1)";
						}
                        LedDrive1.BackColor = Color.Orange;         // hCu1 LEDݒ()
                        LedDrive2.BackColor = Color.Lime;           // hCu2 LEDݒ()
                        LedDrive3.BackColor = Color.Orange;         // ghCu LEDݒ()
						break;

                        // f[^č\z(ExtDRIVEDRIVE1,DRIVE2)
                    case HDDSTS_RECON_9:
                        // i̎擾
						if (FCSRASAPI_SUCCESS == fcsoftrasGetMirrorReconProgressP(HDDSTS_PRI_MAS, ref Progress))
						{
							// ڍ׏ݒ(i܂)
							lblSmartState.Text = "Currently copying(ExtDRIVE->DRIVE1,DRIVE2)" + Progress + "%";
						}
							// i̎擾s
						else
						{
							// ڍ׏ݒ
							lblSmartState.Text = "Currently copying(ExtDRIVE->DRIVE1,DRIVE2)";
						}
                        LedDrive1.BackColor = Color.Orange;         // hCu1 LEDݒ()
                        LedDrive2.BackColor = Color.Orange;         // hCu2 LEDݒ()
                        LedDrive3.BackColor = Color.Lime;           // ghCu LEDݒ()
						break;

						// XLbvR
					case HDDSTS_RECON_SKIP_1:
						lblSmartState.Text = "Skip recon(DRIVE1)";
						LedDrive1.BackColor = Color.Lime;		// hCu1 LEDݒ()
						LedDrive2.BackColor = Color.Lime;		// hCu2 LEDݒ()
                        LedDrive3.BackColor = Color.Lime;		// hCu3 LEDݒ()
						break;

						// XLbvR
					case HDDSTS_RECON_SKIP_2:
						// ڍ׏ݒ
						lblSmartState.Text = "Skip recon(DRIVE2)";
						LedDrive1.BackColor = Color.Lime;		// hCu1 LEDݒ()
						LedDrive2.BackColor = Color.Lime;		// hCu2 LEDݒ()
                        LedDrive3.BackColor = Color.Lime;		// hCu3 LEDݒ()
						break;

                        //XLbvR
                    case HDDSTS_RECON_SKIP_3:
                        lblSmartState.Text = "Skip recon(ExtDRIVE)";
                        LedDrive1.BackColor = Color.Lime;		// hCu1 LEDݒ()
                        LedDrive2.BackColor = Color.Lime;		// hCu2 LEDݒ()
                        LedDrive3.BackColor = Color.Lime;		// hCu3 LEDݒ()
						break;

                        // XLbvR
                    case HDDSTS_RECON_SKIP_12:
                        lblSmartState.Text = "Skip recon(DRIVE1,DRIVE2)";
                        LedDrive1.BackColor = Color.Lime;		// hCu1 LEDݒ()
                        LedDrive2.BackColor = Color.Lime;		// hCu2 LEDݒ()
                        LedDrive3.BackColor = Color.Lime;		// hCu3 LEDݒ()
						break;

                        // XLbvR
                    case HDDSTS_RECON_SKIP_13:
                        lblSmartState.Text = "Skip recon(ExtDRIVE,DRIVE1)";
                        LedDrive1.BackColor = Color.Lime;		// hCu1 LEDݒ()
                        LedDrive2.BackColor = Color.Lime;		// hCu2 LEDݒ()
                        LedDrive3.BackColor = Color.Lime;		// hCu3 LEDݒ()
						break;

                        // XLbvR
                    case HDDSTS_RECON_SKIP_23:
                        lblSmartState.Text = "Skip recon(ExtDRIVE,DRIVE2)";
                        LedDrive1.BackColor = Color.Lime;		// hCu1 LEDݒ()
                        LedDrive2.BackColor = Color.Lime;		// hCu2 LEDݒ()
                        LedDrive3.BackColor = Color.Lime;		// hCu3 LEDݒ()
						break;

                        // hCuPG[Af[^č\z(ExtDRIVEDRIVE2)
                    case HDDSTS_ERR_RECON_1:
                        // i̎擾
						if (FCSRASAPI_SUCCESS == fcsoftrasGetMirrorReconProgressP(HDDSTS_PRI_MAS, ref Progress))
						{
                            // ڍ׏ݒ(i܂)
                            lblSmartState.Text = "DRIVE1 failure,Currently copying(ExtDRIVE->DRIVE2)" + Progress + "%";
						}
							// i̎擾s
						else
						{
							//ڍ׏ݒ
							lblSmartState.Text = "DRIVE1 failure,Currently copying(ExtDRIVE->DRIVE2)";
						}
                        LedDrive1.BackColor = Color.Red;		// hCu1 LEDݒ()
                        LedDrive2.BackColor = Color.Orange;		// hCu2 LEDݒ()
                        LedDrive3.BackColor = Color.Lime;		// hCu3 LEDݒ()
						break;

                        // hCuPG[Af[^č\z(ExtDRIVEDRIVE2)
                    case HDDSTS_ERR_RECON_2:
                        // i̎擾
						if (FCSRASAPI_SUCCESS == fcsoftrasGetMirrorReconProgressP(HDDSTS_PRI_MAS, ref Progress))
						{
                            // ڍ׏ݒ(i܂)
                            lblSmartState.Text = "DRIVE1 failure,Currently copying(ExtDRIVE<-DRIVE2)" + Progress + "%";
						}
							// i̎擾s
						else
						{
							//ڍ׏ݒ
							lblSmartState.Text = "DRIVE1 failure,Currently copying(ExtDRIVE<-DRIVE2)";
						}
						LedDrive1.BackColor = Color.Red;		// hCu1 LEDݒ()
                        LedDrive2.BackColor = Color.Lime;		// hCu2 LEDݒ()
                        LedDrive3.BackColor = Color.Orange;		// hCu3 LEDݒ()
						break;

                        // hCuQG[Af[^č\z(ExtDRIVEDRIVE1)
                    case HDDSTS_ERR_RECON_3:
                        // i̎擾
						if (FCSRASAPI_SUCCESS == fcsoftrasGetMirrorReconProgressP(HDDSTS_PRI_MAS, ref Progress))
						{
                            // ڍ׏ݒ(i܂)
                            lblSmartState.Text = "DRIVE2 failure,Currently copying(ExtDRIVE->DRIVE1)" + Progress + "%";
						}
							// i̎擾s
						else
						{
							//ڍ׏ݒ
							lblSmartState.Text = "DRIVE2 failure,Currently copying(ExtDRIVE->DRIVE1)";
						}
						LedDrive1.BackColor = Color.Orange;		// hCu1 LEDݒ()
                        LedDrive2.BackColor = Color.Red;		// hCu2 LEDݒ()
                        LedDrive3.BackColor = Color.Lime;		// hCu3 LEDݒ()
						break;

                        // hCuQG[Af[^č\z(ExtDRIVEDRIVE1)
                    case HDDSTS_ERR_RECON_4:
                        // i̎擾
						if (FCSRASAPI_SUCCESS == fcsoftrasGetMirrorReconProgressP(HDDSTS_PRI_MAS, ref Progress))
						{
                            // ڍ׏ݒ(i܂)
                            lblSmartState.Text = "DRIVE2 failure,Currently copying(ExtDRIVE<-DRIVE1)" + Progress + "%";
						}
							// i̎擾s
						else
						{
							//ڍ׏ݒ
							lblSmartState.Text = "DRIVE2 failure,Currently copying(ExtDRIVE<-DRIVE1)";
						}
						LedDrive1.BackColor = Color.Lime;		// hCu1 LEDݒ()
                        LedDrive2.BackColor = Color.Red;		// hCu2 LEDݒ()
                        LedDrive3.BackColor = Color.Orange;		// hCu3 LEDݒ()
						break;

                        // ghCuG[Af[^č\z(DRIVE1DRIVE2)
                    case HDDSTS_ERR_RECON_5:
                        // i̎擾
						if (FCSRASAPI_SUCCESS == fcsoftrasGetMirrorReconProgressP(HDDSTS_PRI_MAS, ref Progress))
						{
                            // ڍ׏ݒ(i܂)
                            lblSmartState.Text = "ExtDRIVE failure,Currently copying(DRIVE1<-DRIVE2)" + Progress + "%";
						}
							// i̎擾s
						else
						{
							//ڍ׏ݒ
                            lblSmartState.Text = "ExtDRIVE failure,Currently copying(DRIVE1<-DRIVE2)";
						}
						LedDrive1.BackColor = Color.Orange;		// hCu1 LEDݒ()
                        LedDrive2.BackColor = Color.Lime;		// hCu2 LEDݒ()
                        LedDrive3.BackColor = Color.Red;		// hCu3 LEDݒ()
						break;

                        // ghCuG[Af[^č\z(DRIVE1DRIVE2)
                    case HDDSTS_ERR_RECON_6:
                        // i̎擾
						if (FCSRASAPI_SUCCESS == fcsoftrasGetMirrorReconProgressP(HDDSTS_PRI_MAS, ref Progress))
						{
                            // ڍ׏ݒ(i܂)
                            lblSmartState.Text = "ExtDRIVE failure,Currently copying(DRIVE1->DRIVE2)" + Progress + "%";
						}
							// i̎擾s
						else
						{
							//ڍ׏ݒ
							lblSmartState.Text = "ExtDRIVE failure,Currently copying(DRIVE1->DRIVE2)";
						}
						LedDrive1.BackColor = Color.Lime;		// hCu1 LEDݒ()
                        LedDrive2.BackColor = Color.Orange;		// hCu2 LEDݒ()
                        LedDrive3.BackColor = Color.Red;		// hCu3 LEDݒ()
						break;

				}
			}
			else
			{
				// ~[Xe[^X̎擾ŝŖ̏󋵂\
				lblSmartState.Text = "None mirror board";
				LedDrive1.BackColor = Color.White;
				LedDrive2.BackColor = Color.White;
				LedDrive3.BackColor = Color.White;
			}
		}
	}
}
