199 lines
3.9 KiB
Markdown
199 lines
3.9 KiB
Markdown
# RAIDGuard X Mock Driver (C)
|
||
|
||
Mock driver for RAIDGuard X GUI Server - provides simulated RAID controller for testing without hardware.
|
||
|
||
## 目錄結構
|
||
|
||
```
|
||
raidguard_c_gui_server_mock/
|
||
├── mock_driver.h # Header file
|
||
├── mock_driver.c # Implementation
|
||
├── test_mock_driver.c # Test program
|
||
├── Makefile # Build file
|
||
└── README.md # This file
|
||
```
|
||
|
||
## 建構
|
||
|
||
```bash
|
||
make
|
||
```
|
||
|
||
## 執行測試
|
||
|
||
```bash
|
||
./test_mock_driver
|
||
```
|
||
|
||
## 使用方式
|
||
|
||
### 1. 初始化
|
||
|
||
```c
|
||
#include "mock_driver.h"
|
||
|
||
// 初始化 Mock Driver
|
||
mock_init();
|
||
|
||
// 啟用詳細輸出
|
||
mock_set_verbose(true);
|
||
```
|
||
|
||
### 2. 設定控制器
|
||
|
||
```c
|
||
// 設定控制器數量 (預設 1)
|
||
mock_set_controller_count(2);
|
||
|
||
// 設定控制器序號
|
||
mock_set_controller_serial(0, "MOCK00000001");
|
||
mock_set_controller_serial(1, "MOCK00000002");
|
||
|
||
// 設定控制器型號
|
||
mock_set_controller_model(0, "Accusys GEN2");
|
||
```
|
||
|
||
### 3. 查詢控制器資訊
|
||
|
||
```c
|
||
UCHAR pageBuf[1024];
|
||
UCHAR heatsink;
|
||
|
||
// 查詢控制器資訊
|
||
CHAR result = mock_QuaryDTR(0, pageBuf, &heatsink);
|
||
|
||
if (result == 1) {
|
||
// 取得序號
|
||
printf("SN: %.16s\n", pageBuf);
|
||
|
||
// 取得型號
|
||
printf("Model: %.20s\n", pageBuf + 16);
|
||
|
||
// 取得韌體版本
|
||
printf("FW: %.8s\n", pageBuf + 64);
|
||
}
|
||
```
|
||
|
||
### 4. 取得事件
|
||
|
||
```c
|
||
EVENT_INFO evt;
|
||
UCHAR result = mock_GetCtlrEvent(0, &evt);
|
||
|
||
if (result == SYSOK && evt.bStatus) {
|
||
// 處理事件
|
||
printf("Event Type: %d\n", evt.bEventBuf[0]);
|
||
}
|
||
```
|
||
|
||
### 5. 模擬事件
|
||
|
||
```c
|
||
// 模擬磁碟上線事件
|
||
mock_generate_disk_event(5, 0x01);
|
||
|
||
// 模擬 RAID 重建事件
|
||
mock_generate_raid_event(0, 0x02);
|
||
|
||
// 自訂事件
|
||
UCHAR customEvent[] = {
|
||
0x03, 0x00, 0x00, 0x00, // Event Type
|
||
0x00, 0x00, 0x00, 0x00, // Timestamp
|
||
0x00, 0x00, 0x00, 0x00, // Data
|
||
0x00, 0x00, 0x00, 0x00
|
||
};
|
||
mock_push_event(customEvent, 16);
|
||
```
|
||
|
||
### 6. 清理
|
||
|
||
```c
|
||
mock_cleanup();
|
||
```
|
||
|
||
## API 參考
|
||
|
||
### 初始化與清理
|
||
|
||
| 函數 | 說明 |
|
||
|------|------|
|
||
| `mock_init()` | 初始化 Mock Driver |
|
||
| `mock_cleanup()` | 清理資源 |
|
||
| `mock_set_verbose(bool)` | 設定詳細輸出 |
|
||
|
||
### 控制器設定
|
||
|
||
| 函數 | 說明 |
|
||
|------|------|
|
||
| `mock_set_controller_count(int)` | 設定控制器數量 |
|
||
| `mock_set_controller_serial(int, const char*)` | 設定控制器序號 |
|
||
| `mock_set_controller_model(int, const char*)` | 設定控制器型號 |
|
||
| `mock_set_controller_status(int, UCHAR)` | 設定控制器狀態 |
|
||
|
||
### Driver 函數
|
||
|
||
| 函數 | 說明 |
|
||
|------|------|
|
||
| `mock_QuaryDTR(UCHAR, UCHAR*, UCHAR*)` | 查詢控制器資訊 |
|
||
| `mock_DevIoControl(...)` | I/O Control (模擬) |
|
||
| `mock_GetCtlrEvent(UCHAR, EVENT_INFO*)` | 取得事件 |
|
||
|
||
### 事件模擬
|
||
|
||
| 函數 | 說明 |
|
||
|------|------|
|
||
| `mock_push_event(UCHAR*, int)` | 推入自訂事件 |
|
||
| `mock_clear_events()` | 清除所有事件 |
|
||
| `mock_generate_disk_event(int, int)` | 產生磁碟事件 |
|
||
| `mock_generate_raid_event(int, int)` | 產生 RAID 事件 |
|
||
|
||
## 模擬的 Page 資料
|
||
|
||
| Page | 大小 | 內容 |
|
||
|------|------|------|
|
||
| 0x00 | 1024 | Controller Info |
|
||
| 0x01 | 1024 | RAID Snapshot |
|
||
| 0x07 | 512 | LUN Map Table |
|
||
| 0x0A | 1024 | RAID Info |
|
||
| 0x0B | 1024 | RAID Info |
|
||
| 0x0E | 1024 | RAID Info |
|
||
| 0x1B | 512 | Disk List |
|
||
|
||
## 整合到 GS
|
||
|
||
要將 Mock Driver 整合到 GS (DtrGuiSrv),請在編譯時使用 `-DENABLE_MOCK_MODE` :
|
||
|
||
```makefile
|
||
ifdef ENABLE_MOCK_MODE
|
||
CFLAGS += -DENABLE_MOCK_MODE
|
||
SRCS += mock_driver.c
|
||
|
||
# 置換函數
|
||
CFLAGS += -DQuaryDTR=mock_QuaryDTR
|
||
CFLAGS += -DDevIoControl=mock_DevIoControl
|
||
CFLAGS += -DGetCtlrEvent=mock_GetCtlrEvent
|
||
endif
|
||
```
|
||
|
||
或使用 FFI:
|
||
|
||
```c
|
||
#ifdef ENABLE_MOCK_MODE
|
||
#include "mock_driver.h"
|
||
#define DevIoControl mock_DevIoControl
|
||
#define QuaryDTR mock_QuaryDTR
|
||
#define GetCtlrEvent mock_GetCtlrEvent
|
||
#endif
|
||
```
|
||
|
||
## 開發日誌
|
||
|
||
- 2024-03-29: 初始版本
|
||
- 基本控制器模擬
|
||
- 事件佇列
|
||
- Page 0-1, 7, 10, 27 資料
|
||
|
||
## License
|
||
|
||
Proprietary - Accusys Inc.
|