VERSION 5.00
Begin VB.Form frmMirror 
   BorderStyle     =   1  'Œ()
   Caption         =   "Mirror State"
   ClientHeight    =   1320
   ClientLeft      =   45
   ClientTop       =   330
   ClientWidth     =   3660
   Icon            =   "frmMirror.frx":0000
   LinkTopic       =   "Form1"
   MaxButton       =   0   'False
   MinButton       =   0   'False
   ScaleHeight     =   1320
   ScaleWidth      =   3660
   StartUpPosition =   3  'Windows ̊l
   Begin VB.Timer Timer1 
      Left            =   0
      Top             =   480
   End
   Begin VB.Label lblAllow 
      Alignment       =   2  '
      AutoSize        =   -1  'True
      Caption         =   "Label1"
      BeginProperty Font 
         Name            =   "lr oSVbN"
         Size            =   12
         Charset         =   128
         Weight          =   700
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   240
      Left            =   1425
      TabIndex        =   3
      Top             =   600
      Width           =   765
   End
   Begin VB.Label lblDrive2 
      Alignment       =   2  '
      Caption         =   "Drive2"
      Height          =   255
      Left            =   2160
      TabIndex        =   2
      Top             =   120
      Width           =   1095
   End
   Begin VB.Label lblDrive1 
      Alignment       =   2  '
      Caption         =   "Drive1"
      Height          =   255
      Left            =   360
      TabIndex        =   1
      Top             =   120
      Width           =   1095
   End
   Begin VB.Shape LedDrive2 
      FillColor       =   &H0000FF00&
      FillStyle       =   0  'hԂ
      Height          =   495
      Left            =   2160
      Shape           =   4  'ۂ݂̂钷`
      Top             =   480
      Width           =   1095
   End
   Begin VB.Shape LedDrive1 
      FillColor       =   &H000080FF&
      FillStyle       =   0  'hԂ
      Height          =   495
      Left            =   360
      Shape           =   4  'ۂ݂̂钷`
      Top             =   480
      Width           =   1095
   End
   Begin VB.Label lblSmartState 
      Alignment       =   2  '
      AutoSize        =   -1  'True
      Caption         =   "Label1"
      Height          =   180
      Left            =   0
      TabIndex        =   0
      Top             =   1080
      Width           =   3735
   End
End
Attribute VB_Name = "frmMirror"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit

'*****************************************************************************
'   t@C F frmMirror.frm
'
'   @\ F ~[Xe[^X\@\
'
'
' Copyright (C) NEC Corporation 2005
'*****************************************************************************




'*****************************************************************************
' HDD擾p萔`
'*****************************************************************************

' RETURNXe[^X
Private Const FCSRASAPI_SUCCESS   As Integer = &H0
Private Const FCSRASAPI_DRVERR    As Integer = &H1


' HDD̃ANZXw
Private Const HDDSTS_PRI_MAS As Integer = &H10          ' vC}}X^w
Private Const HDDSTS_PRI_SRV As Integer = &H20          ' vC}X[uw
Private Const HDDSTS_SEC_MAS As Integer = &H30          ' ZJ_}X^w
Private Const HDDSTS_SEC_SRV As Integer = &H40          ' ZJ_X[uw

Private Const HDDSTS_MRR_DRV1 As Integer = &H1          ' ~[hCuPw
Private Const HDDSTS_MRR_DRV2 As Integer = &H2          ' ~[hCuQw

' HDD󋵂ޯď (IOCTL_FCSOFTRAS_GET_HDDINF)
Private Const HDDCONN_SMARTERR_BIT  As Byte = &H1       ' SMARTG[  0:   1:ُ
Private Const HDDCONN_CONNECT_BIT   As Byte = &H40      ' HDDڑ      0:ڑ 1:ڑL
Private Const HDDCONN_MIRROR_BIT    As Byte = &H80      ' װ      0:ڑ 1:ڑL

' HDDð (IOCTL_FCSOFTRAS_GET_HDDINF)
Private Const HDDSTS_NORMAL       As Byte = &H0         ' 
Private Const HDDSTS_ERR_DRV1     As Byte = &H10        ' Drive1̏ (ײإϽ or װ_1)
Private Const HDDSTS_ERR_DRV2     As Byte = &H11        ' Drive2̏ (ײإڰ or װ_2)
Private Const HDDSTS_ERR_DRV3     As Byte = &H12        ' Drive3̏ (إϽ)
Private Const HDDSTS_ERR_DRV4     As Byte = &H13        ' Drive4̏ (إڰ)

Private Const HDDSTS_RECON_1      As Byte = &H20        ' ްč\z(Drive2Drive1ֺ߰)
Private Const HDDSTS_RECON_2      As Byte = &H21        ' ްč\z(Drive1Drive2ֺ߰)
Private Const HDDSTS_RECON_SKIP_1 As Byte = &H30        ' غݔ(Drive1Drive2ްč\z)
Private Const HDDSTS_RECON_SKIP_2 As Byte = &H31        ' غݔ(Drive2Drive1ްč\z)

Private Const vbOrange As Long = &H80FF&                ' ԕ\p̐Fݒ(j

'*****************************************************************************
' \tgRASI/F`
'*****************************************************************************
Private Declare Function fcsoftrasOpen Lib "FcSrasapiP.dll" Alias "fcsoftrasOpenP" () As Long
Private Declare Function fcsoftrasClose Lib "FcSrasapiP.dll" Alias "fcsoftrasCloseP" () As Long
Private Declare Function fcsoftrasGetMirrorStatus Lib "FcSrasapiP.dll" Alias "fcsoftrasGetMirrorStatusP" (ByVal DriveNum As Byte, ByRef buff() As Byte) As Long
Private Declare Function fcsoftrasGetMirrorReconProgress Lib "FcSrasapiP.dll" Alias "fcsoftrasGetMirrorReconProgressP" (ByVal DriveNum As Byte, buff As Byte) As Long

'****************************************************
'   ֐ F Form_Load
'   @\   Fʂ̋N()
'      F Ȃ
'   ߂l F Ȃ
'****************************************************
Private Sub Form_Load()
    ' ƃtH_st@CtH_ɕύX DLLǂݏo
    ChDrive App.Path
    ChDir App.Path

    ' \tgRAS̃Cu
    Call fcsoftrasOpen
    ' ݂̏Ԃ擾Ɖʂւ̔f
    Call subSetMirrorState
    
    ' ʍXVp̃^C}[ݒ
    Timer1.Interval = 30000                             ' 30bݒ
    Timer1.Enabled = True                               ' L

End Sub

'****************************************************
'   ֐ F Form_Unload
'   @\   Fʂ̏I(㏈)
'      F Ȃ
'   ߂l F Ȃ
'****************************************************
Private Sub Form_Unload(Cancel As Integer)
    ' \tgRAS̃CuI
    Call fcsoftrasClose
End Sub

'****************************************************
'   ֐ F Timer1_Timer
'   @\   F^C}[ɂʍXV
'      F Ȃ
'   ߂l F Ȃ
'****************************************************
Private Sub Timer1_Timer()
    ' ݂̏Ԃ擾Ɖʂւ̔f
    Call subSetMirrorState
End Sub

'****************************************************
'   ֐ F subSetMirrorState
'   @\   F~[̏Ԃ擾Aʂ̍XVsȂ
'      F Ȃ
'   ߂l F Ȃ
'****************************************************
Private Sub subSetMirrorState()
    Dim buff(0 To 2) As Byte                            ' ~[Xe[^Xۑp
    Dim Ret As Integer                                  ' ߂lۑp
    Dim Progress As Byte                                ' i󋵕ۑp
    
    ' ~[Xe[^X̎擾
    Ret = fcsoftrasGetMirrorStatus(HDDSTS_PRI_MAS, buff())
    
    ' ~[Xe[^X擾H
    If FCSRASAPI_SUCCESS = Ret Then

    
        With lblSmartState
            ' ~[Xe[^X̏󋵂ɂʂXV
            Select Case buff(0)
            
            ' 
            Case HDDSTS_NORMAL
                .Caption = "Normal"                       ' ڍ׏ݒ
                LedDrive1.FillColor = vbGreen           ' hCu1 LEDݒ()
                LedDrive2.FillColor = vbGreen           ' hCu2 LEDݒ()
                lblAllow.Caption = ""                   ' č\zp\
                        
            ' hCuPG[
            Case HDDSTS_ERR_DRV1
                .Caption = "Drive1 failure"               ' ڍ׏ݒ
                LedDrive1.FillColor = vbRed             ' hCu1 LEDݒ()
                LedDrive2.FillColor = vbGreen           ' hCu2 LEDݒ()
                lblAllow.Caption = ""                   ' č\zp\
    
            ' hCuQG[
            Case HDDSTS_ERR_DRV2
                .Caption = "Drive2 failure"               ' ڍ׏ݒ
                LedDrive1.FillColor = vbGreen           ' hCu1 LEDݒ()
                LedDrive2.FillColor = vbRed             ' hCu2 LEDݒ()
                lblAllow.Caption = ""                   ' č\zp\
            
            ' f[^č\z(DRIVE1DRIVE2)
            Case HDDSTS_RECON_1
                ' i̎擾
                If FCSRASAPI_SUCCESS = fcsoftrasGetMirrorReconProgress(HDDSTS_PRI_MAS, Progress) Then
                                                        ' ڍ׏ݒ(i܂)
                    .Caption = "Currently copying(DRIVE1<-DRIVE2)" & Progress & "%"
                
                ' i̎擾s
                Else
                                                        ' ڍ׏ݒ
                    .Caption = "Currently copying(DRIVE1<-DRIVE2)"
                End If
                LedDrive1.FillColor = vbOrange          ' hCu1 LEDݒ()
                LedDrive2.FillColor = vbGreen           ' hCu2 LEDݒ()
                lblAllow.Caption = "<<"
                
            ' f[^č\z(DRIVE1DRIVE2)
            Case HDDSTS_RECON_2
                ' i̎擾
                If FCSRASAPI_SUCCESS = fcsoftrasGetMirrorReconProgress(HDDSTS_PRI_MAS, Progress) Then
                                                        ' ڍ׏ݒ(i܂)
                    .Caption = "Currently copying(DRIVE1->DRIVE2)" & Progress & "%"
                
                ' i̎擾s
                Else
                                                        ' ڍ׏ݒ
                    .Caption = "Currently copying(DRIVE1->DRIVE2)"
                End If
                
                LedDrive1.FillColor = vbGreen           ' hCu1 LEDݒ()
                LedDrive2.FillColor = vbOrange          ' hCu2 LEDݒ()
                lblAllow.Caption = ">>"               ' č\zp\
            
            ' XLbvR
            Case HDDSTS_RECON_SKIP_1
                .Caption = "Skip recon(DRIVE1->DRIVE2)"
                LedDrive1.FillColor = vbGreen           ' hCu1 LEDݒ()
                LedDrive2.FillColor = vbGreen           ' hCu2 LEDݒ()
                lblAllow.Caption = ""                   ' č\zp\
            
            ' XLbvR
            Case HDDSTS_RECON_SKIP_2
                                                        ' ڍ׏ݒ
                .Caption = "Skip recon(DRIVE2->DRIVE1)"
                LedDrive1.FillColor = vbGreen           ' hCu1 LEDݒ()
                LedDrive2.FillColor = vbGreen           ' hCu2 LEDݒ()
                lblAllow.Caption = ""                   ' č\zp\
            
            End Select
        End With
    Else
        ' ~[Xe[^X̎擾ŝŖ̏󋵂\
        lblSmartState.Caption = "None mirror board"
        lblAllow.Caption = ""
        LedDrive1.FillColor = vbWhite
        LedDrive2.FillColor = vbWhite
    End If
End Sub

