Add Page 14 (Event Log) and Page 20 (Enclosure Info) to C mock driver

This commit is contained in:
accusys
2026-03-29 15:08:47 +08:00
parent e7af73992d
commit f64450bdfa
5 changed files with 220 additions and 10 deletions
+140 -1
View File
@@ -57,6 +57,7 @@ void mock_init(void) {
mock_fill_page10(0);
mock_fill_page11(0);
mock_fill_page14(0);
mock_fill_page20(0);
mock_fill_page27(0);
// Register default events
@@ -185,7 +186,145 @@ void mock_fill_page11(int ctrlIndex) {
}
void mock_fill_page14(int ctrlIndex) {
memset(g_mockCtrl[ctrlIndex].bPage14Data, 0, 1024);
unsigned char *buf = g_mockCtrl[ctrlIndex].bPage14Data;
memset(buf, 0, 1024);
// Event Log Structure (16 events, 64 bytes each)
// Each event: 32 bytes data + 32 bytes message
// Offset 0-15: Event Type (4 bytes), Timestamp (4 bytes), Slot/EID (4 bytes), Status (4 bytes)
// Offset 16-31: Reserved
// Offset 32-63: Event Message (32 bytes)
time_t now = time(NULL);
// Event 0: Controller started
buf[0] = 0x01; // Event Type: System
buf[1] = 0x00;
buf[2] = 0x00;
buf[3] = 0x00;
*(unsigned int*)(buf + 4) = (unsigned int)(now - 3600); // 1 hour ago
*(unsigned int*)(buf + 8) = 0xFFFFFFFF; // Controller
buf[12] = 0x01; // Status: Info
memcpy(buf + 32, "Controller started successfully ", 32);
// Event 1: Disk online
buf[64] = 0x02; // Event Type: Disk
buf[65] = 0x00;
buf[66] = 0x00;
buf[67] = 0x00;
*(unsigned int*)(buf + 68) = (unsigned int)(now - 1800); // 30 min ago
*(unsigned int*)(buf + 72) = 0x02; // Slot 2
buf[76] = 0x01; // Status: Info
memcpy(buf + 96, "Disk online ", 32);
// Event 2: RAID normal
buf[128] = 0x03; // Event Type: RAID
buf[129] = 0x00;
buf[130] = 0x00;
buf[131] = 0x00;
*(unsigned int*)(buf + 132) = (unsigned int)(now - 900); // 15 min ago
*(unsigned int*)(buf + 136) = 0x00; // RAID ID 0
buf[140] = 0x01; // Status: Info
memcpy(buf + 160, "RAID-01 status: Normal ", 32);
// Event 3: Temperature warning
buf[192] = 0x02; // Event Type: Disk
buf[193] = 0x00;
buf[194] = 0x00;
buf[195] = 0x00;
*(unsigned int*)(buf + 196) = (unsigned int)(now - 600); // 10 min ago
*(unsigned int*)(buf + 200) = 0x03; // Slot 3
buf[204] = 0x02; // Status: Warning
memcpy(buf + 224, "Disk temperature warning: 45C ", 32);
// Event 4: Power supply normal
buf[256] = 0x05; // Event Type: Power
buf[257] = 0x00;
buf[258] = 0x00;
buf[259] = 0x00;
*(unsigned int*)(buf + 260) = (unsigned int)(now - 300); // 5 min ago
*(unsigned int*)(buf + 264) = 0x00; // PS 0
buf[268] = 0x01; // Status: Info
memcpy(buf + 288, "Power supply 1 online ", 32);
// Event 5: Fan normal
buf[320] = 0x04; // Event Type: Enclosure
buf[321] = 0x00;
buf[322] = 0x00;
buf[323] = 0x00;
*(unsigned int*)(buf + 324) = (unsigned int)(now - 120); // 2 min ago
*(unsigned int*)(buf + 328) = 0x00; // Fan 0
buf[332] = 0x01; // Status: Info
memcpy(buf + 352, "Fan speed normal: 5200 RPM ", 32);
// Event 6: Network up
buf[384] = 0x06; // Event Type: Network
buf[385] = 0x00;
buf[386] = 0x00;
buf[387] = 0x00;
*(unsigned int*)(buf + 388) = (unsigned int)(now - 60); // 1 min ago
*(unsigned int*)(buf + 392) = 0x00; // Port 0
buf[396] = 0x01; // Status: Info
memcpy(buf + 416, "Network port link up ", 32);
// Event 7: Battery OK
buf[448] = 0x01; // Event Type: System
buf[449] = 0x00;
buf[450] = 0x00;
buf[451] = 0x00;
*(unsigned int*)(buf + 452) = (unsigned int)now; // Now
*(unsigned int*)(buf + 456) = 0xFFFFFFFF; // Controller
buf[460] = 0x01; // Status: Info
memcpy(buf + 480, "Battery backup unit initialized ", 32);
// Event count at offset 960 (0x3C0)
buf[960] = 8; // 8 events stored
if (g_verbose) {
printf("[MOCK] Page 14 filled for controller %d (8 events)\n", ctrlIndex);
}
}
void mock_fill_page20(int ctrlIndex) {
unsigned char *buf = g_mockCtrl[ctrlIndex].bPage20Data;
memset(buf, 0, 512);
buf[0] = 2; // Fan Count
buf[1] = 2; // Power Supply Count
buf[2] = 4; // Temperature Sensor Count
buf[3] = 1; // Heat Sink Count
buf[4] = 1; // Power Supply Fan Count
buf[0x10] = 0x50;
buf[0x11] = 0x14;
buf[0x12] = 0x40;
buf[0x13] = 0x13;
buf[0x18] = 0xA0;
buf[0x19] = 0x0F;
buf[0x20] = 35;
buf[0x21] = 32;
buf[0x22] = 38;
buf[0x23] = 30;
buf[0x40] = 0x00;
buf[0x41] = 0x00;
buf[0x42] = 0x01;
buf[0x43] = 0x00;
buf[0x50] = 0x00;
buf[0x51] = 0x00;
buf[0x60] = 0x01;
buf[0x61] = 0x64;
buf[0x62] = 0x00;
buf[0x00] = 0x00;
if (g_verbose) {
printf("[MOCK] Page 20 filled for controller %d (Enclosure Info)\n", ctrlIndex);
}
}
void mock_fill_page27(int ctrlIndex) {