@@ -37,32 +37,44 @@ void DetectPatriotViperControllers(std::vector<i2c_smbus_interface*> &busses)
37
37
// Test for Patriot Viper RGB SPD at slot_addr
38
38
// This test was copied from Viper RGB software
39
39
// Tests SPD addresses in order: 0x00, 0x40, 0x41, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68
40
- busses[bus]-> i2c_smbus_write_byte_data ( 0x36 , 0x00 , 0xFF ) ;
40
+ bool pass = false ;
41
41
42
- std::this_thread::sleep_for (1ms );
42
+ int res = busses[bus]-> i2c_smbus_read_byte (slot_addr );
43
43
44
- if (busses[bus]-> i2c_smbus_read_byte_data (slot_addr, 0x00 ) == 0x23 )
44
+ if (res >= 0 )
45
45
{
46
- busses[bus]->i2c_smbus_write_byte_data (0x37 , 0x00 , 0xFF );
46
+ pass = true ;
47
+ }
48
+
49
+ if (pass)
50
+ {
51
+ busses[bus]->i2c_smbus_write_byte_data (0x36 , 0x00 , 0xFF );
47
52
48
53
std::this_thread::sleep_for (1ms);
49
54
50
- if ((busses[bus]->i2c_smbus_read_byte_data (slot_addr, 0x40 ) == 0x85 )
51
- &&(busses[bus]->i2c_smbus_read_byte_data (slot_addr, 0x41 ) == 0x02 )
52
- &&(busses[bus]->i2c_smbus_read_byte_data (slot_addr, 0x61 ) == 0x4D )
53
- &&(busses[bus]->i2c_smbus_read_byte_data (slot_addr, 0x62 ) == 0x49 )
54
- &&(busses[bus]->i2c_smbus_read_byte_data (slot_addr, 0x63 ) == 0x43 )
55
- &&(busses[bus]->i2c_smbus_read_byte_data (slot_addr, 0x64 ) == 0x53 )
56
- &&(busses[bus]->i2c_smbus_read_byte_data (slot_addr, 0x65 ) == 0x59 )
57
- &&(busses[bus]->i2c_smbus_read_byte_data (slot_addr, 0x66 ) == 0x53 )
58
- &&(busses[bus]->i2c_smbus_read_byte_data (slot_addr, 0x67 ) == 0x5f )
59
- &&(busses[bus]->i2c_smbus_read_byte_data (slot_addr, 0x68 ) == 0x44 ))
55
+ if (busses[bus]->i2c_smbus_read_byte_data (slot_addr, 0x00 ) == 0x23 )
60
56
{
61
- slots_valid |= (1 << (slot_addr - 0x50 ));
57
+ busses[bus]->i2c_smbus_write_byte_data (0x37 , 0x00 , 0xFF );
58
+
59
+ std::this_thread::sleep_for (1ms);
60
+
61
+ if ((busses[bus]->i2c_smbus_read_byte_data (slot_addr, 0x40 ) == 0x85 )
62
+ &&(busses[bus]->i2c_smbus_read_byte_data (slot_addr, 0x41 ) == 0x02 )
63
+ &&(busses[bus]->i2c_smbus_read_byte_data (slot_addr, 0x61 ) == 0x4D )
64
+ &&(busses[bus]->i2c_smbus_read_byte_data (slot_addr, 0x62 ) == 0x49 )
65
+ &&(busses[bus]->i2c_smbus_read_byte_data (slot_addr, 0x63 ) == 0x43 )
66
+ &&(busses[bus]->i2c_smbus_read_byte_data (slot_addr, 0x64 ) == 0x53 )
67
+ &&(busses[bus]->i2c_smbus_read_byte_data (slot_addr, 0x65 ) == 0x59 )
68
+ &&(busses[bus]->i2c_smbus_read_byte_data (slot_addr, 0x66 ) == 0x53 )
69
+ &&(busses[bus]->i2c_smbus_read_byte_data (slot_addr, 0x67 ) == 0x5f )
70
+ &&(busses[bus]->i2c_smbus_read_byte_data (slot_addr, 0x68 ) == 0x44 ))
71
+ {
72
+ slots_valid |= (1 << (slot_addr - 0x50 ));
73
+ }
62
74
}
63
- }
64
75
65
- std::this_thread::sleep_for (1ms);
76
+ std::this_thread::sleep_for (1ms);
77
+ }
66
78
}
67
79
68
80
if (slots_valid != 0 )
0 commit comments