From 2603dbe4abaffd8afe85d563b4456151a90abaad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ale=C5=A1=20Nezbeda?= Date: Tue, 27 Sep 2022 02:29:59 +0000 Subject: [PATCH] Fix profile not being applied when I2C bus ID changes on reboot --- ProfileManager.cpp | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/ProfileManager.cpp b/ProfileManager.cpp index d77624a0..51399063 100644 --- a/ProfileManager.cpp +++ b/ProfileManager.cpp @@ -215,25 +215,36 @@ bool ProfileManager::LoadDeviceFromListWithOptions /*---------------------------------------------------------*\ | Do not compare location string for HID devices, as the | | location string may change between runs as devices are | - | connected and disconnected | + | connected and disconnected. Also do not compare the I2C | + | bus number, since it is not persistent across reboots | + | on Linux - strip the I2C number and compare only address. | \*---------------------------------------------------------*/ - bool compare_location = true; + bool location_check; if(load_controller->location.find("HID: ") == 0) { - compare_location = false; + location_check = true; + } + else if(load_controller->location.find("I2C: ") == 0) + { + std::string i2c_address = load_controller->location.substr(load_controller->location.find_last_of(", ") + 2); + location_check = temp_controller->location.find(i2c_address) != std::string::npos; + } + else + { + location_check = temp_controller->location == load_controller->location; } /*---------------------------------------------------------*\ | Test if saved controller data matches this controller | \*---------------------------------------------------------*/ - if((temp_controller_used[temp_index] == false ) - &&(temp_controller->type == load_controller->type ) - &&(temp_controller->name == load_controller->name ) - &&(temp_controller->description == load_controller->description ) - &&(temp_controller->version == load_controller->version ) - &&(temp_controller->serial == load_controller->serial ) - &&((temp_controller->location == load_controller->location ) || (!compare_location))) + if((temp_controller_used[temp_index] == false ) + &&(temp_controller->type == load_controller->type ) + &&(temp_controller->name == load_controller->name ) + &&(temp_controller->description == load_controller->description) + &&(temp_controller->version == load_controller->version ) + &&(temp_controller->serial == load_controller->serial ) + &&(location_check == true )) { /*---------------------------------------------------------*\ | Set used flag for this temp device |