base
This commit is contained in:
Vendored
+308
@@ -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
|
||||
Reference in New Issue
Block a user