This commit is contained in:
biosvos
2026-08-07 17:38:18 +09:00
commit 873193a243
9613 changed files with 2755992 additions and 0 deletions
+308
View File
@@ -0,0 +1,308 @@
#ifndef _INTERFACE_H_
#define _INTERFACE_H_
#include "commdef.h"
// the error code the INTERFACE returned,
// if no error occurred, return the bytes sent or read
//
#define IF_OK (0)
#define IF_MORE_DATA (-1)
#define IF_FAIL_READ (-2)
#define IF_FAIL_WRITE (-3)
#define IF_NEED_RETRY (-4)
#define IF_OVER_MTU_SIZE (-5)
#define IF_FAIL_PARAMETER (-6)
#define IF_READ_TIMEOUT (-7)
#define IF_WRITE_TIMEOUT (-8)
#define IF_CTLR_FAILED (-9)
// rwflag
#define IF_WRITE_ONLY 0x01 // just do the operation of send
#define IF_READ_ONLY 0x02 // just do the operation of read
#define IF_RAW_READ 0x04
#define IF_RAW_WRITE 0x08
#define IF_SAS 0x10
// THE BELOW BLOCK IS ONLY FOR INTERNAL USE
/************************************************************************************/
enum
{
GUI_SET_SERIAL = 0x10,
GUI_SET_VENDOR,
GUI_SET_MODEL,
GUI_IDENTIFY,
GUI_CHECK_PASSWORD,
GUI_LOGOUT,
GUI_HTTP,
GUI_SET_ETHERNET_ADDR,
GUI_SET_LOGO,
GUI_POLL_EVENT,
GUI_GET_EVENT,
GUI_GET_HW_MONITOR,
GUI_SMART_TEST,
GUI_SET_TIME,
GUI_SNMP,
GUI_MISC, // 0x1F
GUI_GET_INFO_R = 0x20,
GUI_GET_INFO_V,
GUI_GET_INFO_P,
GUI_GET_INFO_S,
GUI_CLEAR_EVENT,
GUI_MUTE_BEEPER = 0x30,
GUI_BEEPER_SETTING,
GUI_SET_PASSWORD,
GUI_HOST_INTERFACE_MODE,
GUI_REBUILD_PRIORITY,
GUI_MAX_ATA_MODE,
GUI_RESET_CONTROLLER,
GUI_COM_PORT_SETTING,
GUI_NO_OPERATION,
GUI_DHCP_IP,
GUI_CREATE_PASS_THROUGH = 0x40,
GUI_MODIFY_PASS_THROUGH,
GUI_DELETE_PASS_THROUGH,
GUI_IDENTIFY_DEVICE,
GUI_CREATE_RAIDSET = 0x50,
GUI_DELETE_RAIDSET,
GUI_EXPAND_RAIDSET,
GUI_ACTIVATE_RAIDSET,
GUI_CREATE_HOT_SPARE,
GUI_DELETE_HOT_SPARE,
GUI_CREATE_VOLUME = 0x60,
GUI_MODIFY_VOLUME,
GUI_DELETE_VOLUME,
GUI_START_CHECK_VOLUME,
GUI_STOP_CHECK_VOLUME
};
// Application specific
enum
{
GUI_RAW_READ_WRITE = 0xEC,
GUI_RAW_READ = 0xED,
GUI_RAW_WRITE = 0xEE,
GUI_SET_ENCLOSURE_UNIT_SERIAL,
GUI_GET_TCPPORT,
GUI_GET_COMATTR,
// status code
GUI_WOULDBLOCK,
GUI_TIMEOUT
};
/****************************************************************************************/
//
// Library returned status
//
#define ARC_STATUS int
#define ARC_SUCCESS 0x00 // Operation succeeded
#define ARC_FAILURE 0x01 // Operation failed
#define ARC_RETURN_FRAME_ERROR 0x02 // The library does not recognize the returned data
// (including invalid data header, length or checksum, etc...)
#define ARC_INVALID_COM_HANDLE 0x03 // Invalid RS-232 handle
#define ARC_DATA_TRANSMIT_ERROR 0x04 // Failed to write to media
#define ARC_DATA_RECEIVE_ERROR 0x05 // Failed to read from media( no response from raid subsystem)
#define ARC_PARAMETER_ERROR 0x06 // The wrong parameter(s)
#define ARC_OPENFILE_ERROR 0x07 // Failed to open file
#define ARC_PASSWORD_REQUIRED 0x08 // Password required
#define ARC_INVALID_PASSWORD 0x09 // Wrong password
#define ARC_INSUFFICIENT_MEM 0x0A // Memory too small
#define ARC_CANT_ALLOC_MEM 0x0B // Failed to allocate necessary memory
#define ARC_BUFFER_TOO_SMALL 0x0C // The buffer is too small to put the returned data
#define ARC_SOCKET_ERROR 0x0D // Socket error
#define ARC_INVALID_SOCKET 0x0E // Invalid socket
#define ARC_INIT_COM_ERROR 0x0F // Failed to open COM port
#define ARC_SOCKET_STARTUP_ERROR 0x10 // Failed to init socket
#define ARC_INVALID_INTERFACE 0x11 // Invalid interface
#define ARC_NO_SUCH_DEVICE 0x12 // Device not found( including raidset, volumeset, physical drive )
#define ARC_DATA_TRANSMIT_TIMEOUT 0x13 // Failed to write to media in a given time
#define ARC_DATA_RECEIVE_TIMEOUT 0x14 // Failed to read from media in a given time
#define ARC_CTLR_FAILURE 0x15 // Controller failure or inactive
#define ARC_UNKNOWN_ERROR 0x3F // Unknown error
// RAID controller returned status
#define GUI_OK 0x41 // Operation successed
#define GUI_RAIDSET_NOT_NORMAL 0x42
#define GUI_VOLUMESET_NOT_NORMAL 0x43
#define GUI_NO_RAIDSET 0x44
#define GUI_NO_VOLUMESET 0x45
#define GUI_NO_PHYSICAL_DRIVE 0x46
#define GUI_PARAMETER_ERROR 0x47
#define GUI_UNSUPPORTED_COMMAND 0x48
#define GUI_DISK_CONFIG_CHANGED 0x49
#define GUI_INVALID_PASSWORD 0x4a
#define GUI_NO_DISK_SPACE 0x4b
#define GUI_CHECKSUM_ERROR 0x4c
#define GUI_PASSWORD_REQUIRED 0x4d
#define GUI_NO_MORE_DATA 0x4e // Internal use only
#define GUI_INTERNAL_ERROR 0x4f
#define GUI_FIRMWARE_CRC_ERROR 0x50
#define GUI_FIRMWARE_INVALID 0x51
#define GUI_FIRMWARE_UPDATE_FAILED 0x52
#define GUI_FIRMWARE_NO_HDD 0x53
#define GUI_END_OF_DATA 0x54
typedef int (*fn_decode_frame)(unsigned char *buf, int len);
typedef unsigned char (*fn_decode_cs)(unsigned char *buf, int len);
////////////////////////////////////////////////////////////
// for internal use only
//
typedef struct _IF_CMD_BLOCK
{
unsigned long timeout; // [in]in milliseconds
unsigned long rwflag; // [in]the flag which control the behavior of read/write
const char *outBuf; // [in] the output data buffer to be sent
unsigned long outLen; // [in] the output data buffer size
char *inBuf; // [out] the input data buffer to put the firmware returned data
unsigned long inLen; // [out] the input data buffer size
unsigned long io_status;// [out] the status of i/o
fn_decode_frame df; // [in]
fn_decode_cs dc; // [in]
}sIF_CMD_BLOCK, *pIF_CMD_BLOCK;
////////////////////////////////////////////////////////////
#ifdef _WIN32
class ARCLIB_API ArcInterface
#else
class ArcInterface
#endif
{
public:
virtual ~ArcInterface()
{
}
virtual int send(sIF_CMD_BLOCK *ifData) = 0;
virtual int recv(sIF_CMD_BLOCK *ifData) = 0;
virtual int syncSend(sIF_CMD_BLOCK *ifData) = 0;
//
// MTU: Maximum transmission unit
// the size (in bytes) of the largest packet that this layer can carry out.
//
virtual int getMTU() = 0;
virtual void *getDeviceHandle() = 0;
// These two member functions will be called by the syncSend() member function
// to ensure the synchronization of send() and recv() to the single controller.
// The requirelock() will be called before the send(),
// and releaselock() will be called after the recv().
virtual void requirelock(){}
virtual void releaselock(){}
virtual int getFirmSpec()
{
return 1;
}
// set the timeout for interface read operation
void setTimeOut(int nSec)
{
if(nSec > 0)
{
nTimeOut = nSec;
}
}
int getTimeOut()
{
return nTimeOut;
}
private:
int nTimeOut;
};
typedef void (*CMD_CALLBACK)(void *data);
typedef enum _SRC_SOURCE
{
SRC_UNKNOWN = -1,
SRC_COMM = 0,
SRC_DRIVER,
SRC_INBAND,
SRC_ETHERNET,
SRC_DRIVER_ODIN,
SRC_TOTAL
};
#ifdef _WIN32
class ARCLIB_API CArclibObj
#else
class CArclibObj
#endif
{
public:
CArclibObj()
{
m_Source = SRC_UNKNOWN;
}
virtual ~CArclibObj() {}
public:
unsigned long m_Source;
};
#ifdef _WIN32
class ARCLIB_API CArclibBase : public CArclibObj
#else
class CArclibBase : public CArclibObj
#endif
{
public:
CArclibBase()
{
m_Interface = NULL;
m_CallBackFunc = NULL;
}
virtual ~CArclibBase()
{
if(m_Interface)
{
delete m_Interface;
m_Interface = NULL;
}
}
virtual void ArcSetCallBack(CMD_CALLBACK pFunc)
{
m_CallBackFunc = pFunc;
}
/************************************************************************************
Function Name: ArcInitSession
Function: Startup areca library by assigning an interface to it
Input: 1. ArcInterface
Output: None.
Return Values: 1. ARC_STATUS
Note: This function should be called before any member functions be called
************************************************************************************/
virtual ARC_STATUS ArcInitSession(ArcInterface *Interface)
{
m_Interface = Interface;
return ARC_SUCCESS;
}
protected:
ArcInterface *m_Interface; // The communication path to the raid-subsystem
CMD_CALLBACK m_CallBackFunc;
};
#endif