@@ -37,32 +37,44 @@ void DetectPatriotViperControllers(std::vector<i2c_smbus_interface*> &busses)
3737 // Test for Patriot Viper RGB SPD at slot_addr
3838 // This test was copied from Viper RGB software
3939 // 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 ;
4141
42- std::this_thread::sleep_for (1ms );
42+ int res = busses[bus]-> i2c_smbus_read_byte (slot_addr );
4343
44- if (busses[bus]-> i2c_smbus_read_byte_data (slot_addr, 0x00 ) == 0x23 )
44+ if (res >= 0 )
4545 {
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 );
4752
4853 std::this_thread::sleep_for (1ms);
4954
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 )
6056 {
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+ }
6274 }
63- }
6475
65- std::this_thread::sleep_for (1ms);
76+ std::this_thread::sleep_for (1ms);
77+ }
6678 }
6779
6880 if (slots_valid != 0 )
0 commit comments