From 414b13084060d0f0b6246be111d45fbd337e6214 Mon Sep 17 00:00:00 2001 From: Gene Gallagher <129112619+egalla204@users.noreply.github.com> Date: Thu, 9 Apr 2026 15:07:48 -0400 Subject: [PATCH 1/5] Release/1.1.12 (#200) https://ccp.sys.comcast.net/browse/RDKEMW-16915 --- CHANGELOG.md | 26 +++++++++- CMakeLists.txt | 2 - include/ctrlm_ipc_voice.h | 2 +- src/auth/ctrlm_auth.h | 1 - src/auth/ctrlm_auth_thunder.cpp | 5 -- src/auth/ctrlm_auth_thunder.h | 1 - src/auth/ctrlm_thunder_plugin_authservice.cpp | 18 ------- src/auth/ctrlm_thunder_plugin_authservice.h | 7 --- src/ctrlm.h | 1 - src/ctrlm_controller.cpp | 4 -- src/ctrlm_controller.h | 1 - src/ctrlm_main.cpp | 46 ------------------ src/ctrlm_network.cpp | 10 ---- src/ctrlm_network.h | 3 -- src/thunder/ctrlm_thunder_plugin.cpp | 47 +++++++++++++++++++ src/thunder/ctrlm_thunder_plugin.h | 29 +++++++++--- .../ctrlm_thunder_plugin_powermanager.cpp | 21 +++++---- src/voice/ctrlm_voice_obj.cpp | 18 ------- src/voice/ctrlm_voice_obj.h | 3 -- src/voice/endpoints/ctrlm_voice_endpoint.cpp | 1 - src/voice/endpoints/ctrlm_voice_endpoint.h | 1 - .../endpoints/ctrlm_voice_endpoint_http.cpp | 8 ---- .../endpoints/ctrlm_voice_endpoint_http.h | 1 - .../ctrlm_voice_endpoint_ws_nextgen.cpp | 8 ---- .../ctrlm_voice_endpoint_ws_nextgen.h | 1 - 25 files changed, 107 insertions(+), 158 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 52e8cb2d..8121aa80 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,9 +4,32 @@ All notable changes to this project will be documented in this file. Dates are d Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). + + +#### [1.1.12](https://github.com/rdkcentral/control/compare/1.1.11...1.1.12) + +> 9 April 2026 + +- RDKEMW-16333: Update Thunder plugin to use _string and _boolean [`#197`](https://github.com/rdkcentral/control/pull/197) +- RDKEMW-5849 : remove deprecated "experience" code [`#185`](https://github.com/rdkcentral/control/pull/185) + +#### [1.1.11.2](https://github.com/rdkcentral/control/compare/1.1.11.1...1.1.11.2) + +> 7 April 2026 + +- RDKEMW-16711: CHANGELOG for ctrlm hotfix release 1.1.11.2 [`#196`](https://github.com/rdkcentral/control/pull/196) +- RDKEMW-16711 : Add wakeup reason string, on support/1.1.11 [`#195`](https://github.com/rdkcentral/control/pull/195) + +#### [1.1.11.1](https://github.com/rdkcentral/control/compare/1.1.11...1.1.11.1) + +> 1 April 2026 + +- RDKEMW-16330: Update Control Manager to use bool for NSM [`#188`](https://github.com/rdkcentral/control/pull/188) +- RDKEMW-16330: update CHANGELOG for release 1.1.11p1 [`98ea5f5`](https://github.com/rdkcentral/control/commit/98ea5f51f8da9ef6ded7038d760baa3b41cc4a90) + #### [1.1.11](https://github.com/rdkcentral/control/compare/1.1.10...1.1.11) -> 5 March 2026 +> 6 March 2026 - RDKEMW-14589: No UI action with "Info" keypress from rf4ce remote in RF mode [`#181`](https://github.com/rdkcentral/control/pull/181) - RDKEMW-14445 : Add session end and protocol return to telemetry [`#182`](https://github.com/rdkcentral/control/pull/182) @@ -15,7 +38,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - RDKEMW-12930: RF4CE network export XCONF on pair/unpair/etc. [`#177`](https://github.com/rdkcentral/control/pull/177) - RDKEMW-13833: Remove duplicate RFC fetch attempts in listeners [`#179`](https://github.com/rdkcentral/control/pull/179) - #### [1.1.10](https://github.com/rdkcentral/control/compare/1.1.9...1.1.10) diff --git a/CMakeLists.txt b/CMakeLists.txt index 565ab874..112b3c00 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -234,8 +234,6 @@ if(THUNDER) if(AUTH_ACTIVATION_STATUS) add_compile_definitions(AUTH_ACTIVATION_STATUS) endif() - #By default disabled but can be enabled - #add_compile_definitions(AUTH_EXPERIENCE) target_link_libraries(controlMgr RdkCertSelector) endif() endif() diff --git a/include/ctrlm_ipc_voice.h b/include/ctrlm_ipc_voice.h index 665ffaa5..ed96c951 100644 --- a/include/ctrlm_ipc_voice.h +++ b/include/ctrlm_ipc_voice.h @@ -64,7 +64,7 @@ #define CTRLM_VOICE_SESSION_TEXT_MAX_LENGTH (512) ///< Session text string maximum length #define CTRLM_VOICE_SESSION_MSG_MAX_LENGTH (128) ///< Session message string maximum length #define CTRLM_VOICE_QUERY_STRING_MAX_LENGTH (128) ///< Query string maximum name or value length -#define CTRLM_VOICE_QUERY_STRING_MAX_PAIRS (16) ///< Query string maximum number of name/value pairs +#define CTRLM_VOICE_QUERY_STRING_MAX_PAIRS (24) ///< Query string maximum number of name/value pairs #define CTRLM_VOICE_REQUEST_IP_MAX_LENGTH (48) ///< cURL request primary IP address string maximum length (big enough for IPv6) #define CTRLM_VOICE_MIN_UTTERANCE_DURATION_MAXIMUM (600) ///< Maximum value of the utterance duration minimum setting (in milliseconds) diff --git a/src/auth/ctrlm_auth.h b/src/auth/ctrlm_auth.h index 0964335f..bda34998 100644 --- a/src/auth/ctrlm_auth.h +++ b/src/auth/ctrlm_auth.h @@ -34,7 +34,6 @@ class ctrlm_auth_t { virtual bool get_device_id(std::string &device_id) = 0; virtual bool get_account_id(std::string &account_id) = 0; virtual bool get_partner_id(std::string &partner_id) = 0; - virtual bool get_experience(std::string &experience) = 0; virtual bool get_sat(std::string &sat, time_t &expiration) = 0; virtual bool supports_sat_expiration() const = 0; diff --git a/src/auth/ctrlm_auth_thunder.cpp b/src/auth/ctrlm_auth_thunder.cpp index 2f954df3..7e37f8b4 100644 --- a/src/auth/ctrlm_auth_thunder.cpp +++ b/src/auth/ctrlm_auth_thunder.cpp @@ -48,11 +48,6 @@ bool ctrlm_auth_thunder_t::get_partner_id(std::string &partner_id) { return(ret); } -bool ctrlm_auth_thunder_t::get_experience(std::string &experience) { - bool ret = this->plugin->get_experience(experience); - return(ret); -} - bool ctrlm_auth_thunder_t::get_sat(std::string &sat, time_t &expiration) { bool ret = this->plugin->get_sat(sat, expiration); return(ret); diff --git a/src/auth/ctrlm_auth_thunder.h b/src/auth/ctrlm_auth_thunder.h index 3a476e67..67a385db 100644 --- a/src/auth/ctrlm_auth_thunder.h +++ b/src/auth/ctrlm_auth_thunder.h @@ -13,7 +13,6 @@ class ctrlm_auth_thunder_t : public ctrlm_auth_t { virtual bool get_device_id(std::string &device_id); virtual bool get_account_id(std::string &account_id); virtual bool get_partner_id(std::string &partner_id); - virtual bool get_experience(std::string &experience); virtual bool get_sat(std::string &sat, time_t &expiration); virtual bool supports_sat_expiration() const; diff --git a/src/auth/ctrlm_thunder_plugin_authservice.cpp b/src/auth/ctrlm_thunder_plugin_authservice.cpp index 60c57d7a..e5913d07 100644 --- a/src/auth/ctrlm_thunder_plugin_authservice.cpp +++ b/src/auth/ctrlm_thunder_plugin_authservice.cpp @@ -125,24 +125,6 @@ bool ctrlm_thunder_plugin_authservice_t::get_account_id(std::string &account_id) return(ret); } -bool ctrlm_thunder_plugin_authservice_t::get_experience(std::string &experience) { - bool ret = false; - JsonObject params, response; - if(this->call_plugin("getExperience", (void *)¶ms, (void *)&response)) { - if(response["success"].Boolean()) { // If success doesn't exist, it defaults to false which is fine. - experience = response["experience"].String(); - if(!experience.empty()) { - ret = true; - } - } else { - XLOGD_WARN("Success for getExperience was false"); - } - } else { - XLOGD_WARN("Call for getExperience failed"); - } - return(ret); -} - bool ctrlm_thunder_plugin_authservice_t::get_sat(std::string &sat, time_t &expiration) { bool ret = false; JsonObject params, response; diff --git a/src/auth/ctrlm_thunder_plugin_authservice.h b/src/auth/ctrlm_thunder_plugin_authservice.h index c39de41d..169cee88 100644 --- a/src/auth/ctrlm_thunder_plugin_authservice.h +++ b/src/auth/ctrlm_thunder_plugin_authservice.h @@ -75,13 +75,6 @@ class ctrlm_thunder_plugin_authservice_t : public Thunder::Plugin::ctrlm_thunder */ bool get_account_id(std::string &account_id); - /** - * Function that retrieves the Experience String from Authservice. - * @param experience The reference to a string which will contain the Experience String. - * @return True on success otherwise False. - */ - bool get_experience(std::string &experience); - /** * Function that retrieves the SAT Token from Authservice. * @param sat The reference to a string which will contain the SAT Token. diff --git a/src/ctrlm.h b/src/ctrlm.h index 905803d1..376608b3 100644 --- a/src/ctrlm.h +++ b/src/ctrlm.h @@ -458,7 +458,6 @@ gboolean ctrlm_main_has_device_id_get(void); gboolean ctrlm_main_has_device_type_get(void); gboolean ctrlm_main_has_service_account_id_get(void); gboolean ctrlm_main_has_partner_id_get(void); -gboolean ctrlm_main_has_experience_get(void); gboolean ctrlm_main_needs_service_access_token_get(void); void ctrlm_main_invalidate_service_access_token(void); void ctrlm_main_sat_enabled_set(gboolean sat_enabled); diff --git a/src/ctrlm_controller.cpp b/src/ctrlm_controller.cpp index 15496dd3..60173d47 100644 --- a/src/ctrlm_controller.cpp +++ b/src/ctrlm_controller.cpp @@ -118,10 +118,6 @@ string ctrlm_obj_controller_t::partner_id_get() const { return(obj_network_->partner_id_get()); } -string ctrlm_obj_controller_t::experience_get() const { - return(obj_network_->experience_get()); -} - string ctrlm_obj_controller_t::stb_name_get() const { return(obj_network_->stb_name_get()); } diff --git a/src/ctrlm_controller.h b/src/ctrlm_controller.h index 66749062..ae9b800b 100644 --- a/src/ctrlm_controller.h +++ b/src/ctrlm_controller.h @@ -63,7 +63,6 @@ class ctrlm_obj_controller_t std::string device_id_get() const; std::string service_account_id_get() const; std::string partner_id_get() const; - std::string experience_get() const; std::string stb_name_get() const; void set_device_minor_id(int device_minor_id); int get_device_minor_id() const; diff --git a/src/ctrlm_main.cpp b/src/ctrlm_main.cpp index f76c3682..c3da8d6d 100644 --- a/src/ctrlm_main.cpp +++ b/src/ctrlm_main.cpp @@ -302,10 +302,6 @@ static void ctrlm_main_has_service_account_id_set(gboolean has_id); static gboolean ctrlm_load_partner_id(void); static void ctrlm_main_has_partner_id_set(gboolean has_id); #endif -#ifdef AUTH_EXPERIENCE -static gboolean ctrlm_load_experience(void); -static void ctrlm_main_has_experience_set(gboolean has_experience); -#endif #ifdef AUTH_SAT_TOKEN static gboolean ctrlm_load_service_access_token(void); static void ctrlm_main_has_service_access_token_set(gboolean has_token); @@ -1421,30 +1417,6 @@ gboolean ctrlm_load_partner_id(void) { } #endif -#ifdef AUTH_EXPERIENCE -gboolean ctrlm_main_has_experience_get(void) { - return(g_ctrlm.has_experience); -} - -void ctrlm_main_has_experience_set(gboolean has_experience) { - g_ctrlm.has_experience = has_experience; -} - -gboolean ctrlm_load_experience(void) { - if(!g_ctrlm.authservice->get_experience(g_ctrlm.experience)) { - ctrlm_main_has_experience_set(false); - return(false); - } - g_ctrlm.voice_session->voice_stb_data_experience_set(g_ctrlm.experience); - - for(auto const &itr : g_ctrlm.networks) { - itr.second->experience_set(g_ctrlm.experience); - } - ctrlm_main_has_experience_set(true); - return(true); -} -#endif - #ifdef AUTH_SAT_TOKEN gboolean ctrlm_main_needs_service_access_token_get(void) { gboolean ret = false; @@ -1510,12 +1482,6 @@ gboolean ctrlm_has_authservice_data(void) { } #endif -#ifdef AUTH_EXPERIENCE - if(!ctrlm_main_has_experience_get()) { - ret = FALSE; - } -#endif - #ifdef AUTH_SAT_TOKEN if(ctrlm_main_needs_service_access_token_get()) { ret = FALSE; @@ -1566,18 +1532,6 @@ gboolean ctrlm_load_authservice_data(void) { } #endif -#ifdef AUTH_EXPERIENCE - if(!ctrlm_main_has_experience_get()) { - XLOGD_INFO("load experience"); - if(!ctrlm_load_experience()) { - XLOGD_TELEMETRY("failed to load experience"); - ret = FALSE; - } else { - XLOGD_INFO("load experience successfully <%s>", ctrlm_is_pii_mask_enabled() ? "***" : g_ctrlm.experience.c_str()); - } - } -#endif - #ifdef AUTH_SAT_TOKEN if(ctrlm_main_needs_service_access_token_get()) { XLOGD_INFO("load sat token"); diff --git a/src/ctrlm_network.cpp b/src/ctrlm_network.cpp index e8f591c3..26201231 100644 --- a/src/ctrlm_network.cpp +++ b/src/ctrlm_network.cpp @@ -187,16 +187,6 @@ string ctrlm_obj_network_t::partner_id_get() const { return(partner_id_); } -void ctrlm_obj_network_t::experience_set(const string& experience) { - THREAD_ID_VALIDATE(); - experience_ = experience; -} - -string ctrlm_obj_network_t::experience_get() const { - THREAD_ID_VALIDATE(); - return(experience_); -} - void ctrlm_obj_network_t::stb_name_set(const string& stb_name) { THREAD_ID_VALIDATE(); XLOGD_INFO("STB Name <%s>", stb_name.c_str()); diff --git a/src/ctrlm_network.h b/src/ctrlm_network.h index 90ea909f..ca6ad547 100644 --- a/src/ctrlm_network.h +++ b/src/ctrlm_network.h @@ -192,8 +192,6 @@ class ctrlm_obj_network_t std::string service_account_id_get() const; void partner_id_set(const std::string& partner_id); std::string partner_id_get() const; - void experience_set(const std::string& experience); - std::string experience_get() const; void mask_key_codes_set(gboolean mask_key_codes); gboolean mask_key_codes_get() const; void stb_name_set(const std::string& stb_name); @@ -325,7 +323,6 @@ class ctrlm_obj_network_t std::string device_id_; std::string service_account_id_; std::string partner_id_; - std::string experience_; std::string stb_name_; ctrlm_rcu_validation_result_t validation_result_ = CTRLM_RCU_VALIDATION_RESULT_MAX; ctrlm_key_code_t validation_key_ = CTRLM_KEY_CODE_INVALID; diff --git a/src/thunder/ctrlm_thunder_plugin.cpp b/src/thunder/ctrlm_thunder_plugin.cpp index 3040fae5..ca6afffc 100644 --- a/src/thunder/ctrlm_thunder_plugin.cpp +++ b/src/thunder/ctrlm_thunder_plugin.cpp @@ -261,6 +261,53 @@ bool ctrlm_thunder_plugin_t::call_plugin(std::string method, void *params, void return(ret); } +bool ctrlm_thunder_plugin_t::call_plugin_boolean(std::string method, void *params, bool *response) { + bool ret = false; + auto clientObject = (JSONRPC::LinkType*)this->plugin_client; + JsonObject *jsonParams = (JsonObject *)params; + if(clientObject) { + if(!method.empty() && jsonParams && response) { + Core::JSON::Boolean jsonResponse; + uint32_t thunderRet = clientObject->Invoke(CALL_TIMEOUT, _T(method), *jsonParams, jsonResponse); + if(thunderRet != Core::ERROR_NONE) { + XLOGD_ERROR("Thunder call failed <%s> <%u>", method.c_str(), thunderRet); + } else { + *response = jsonResponse.Value(); + ret = true; + } + } else { + XLOGD_ERROR("Invalid parameters"); + } + } else { + XLOGD_ERROR("Client is NULL"); + } + return(ret); +} + +bool ctrlm_thunder_plugin_t::call_plugin_string(std::string method, void *params, std::string *response) { + bool ret = false; + auto clientObject = (JSONRPC::LinkType*)this->plugin_client; + JsonObject *jsonParams = (JsonObject *)params; + if(clientObject) { + if(!method.empty() && jsonParams && response) { + Core::JSON::String jsonString; + uint32_t thunderRet = clientObject->Invoke(CALL_TIMEOUT, _T(method), *jsonParams, jsonString); + if(thunderRet != Core::ERROR_NONE) { + XLOGD_ERROR("Thunder call failed <%s> <%u>", method.c_str(), thunderRet); + } else { + *response = jsonString.Value(); + ret = true; + } + } else { + XLOGD_ERROR("Invalid parameters"); + } + } else { + XLOGD_ERROR("Client is NULL"); + } + return(ret); +} + + bool ctrlm_thunder_plugin_t::call_controller(std::string method, void *params, void *response) { bool ret = false; if(this->controller) { diff --git a/src/thunder/ctrlm_thunder_plugin.h b/src/thunder/ctrlm_thunder_plugin.h index f1a3944a..9bf6d780 100644 --- a/src/thunder/ctrlm_thunder_plugin.h +++ b/src/thunder/ctrlm_thunder_plugin.h @@ -105,9 +105,8 @@ class ctrlm_thunder_plugin_t { std::string callsign_with_api(); /** - * This functions is used to get a Thunder Plugin property. - * @param method The method in which the user wants to call. - * @param params The WPEFramework JsonObject containing the parameters for the call. (We can't include WPEFramework headers in controlMgr .h files as their logging macros clash) + * This function is used to get a Thunder Plugin property. + * @param property The name of the property that the user wants to get * @param response The WPEFramework JsonObject containing the response from the call. (We can't include WPEFramework headers in controlMgr .h files as their logging macros clash) * @param retries The number of retries if the call times out. * @return True if the call succeeded, otherwise False. @@ -115,7 +114,7 @@ class ctrlm_thunder_plugin_t { bool property_get(std::string property, void *response, unsigned int retries = 0); /** - * This functions is used to call a Thunder Plugin method. + * This function is used to call a Thunder Plugin method. * @param method The method in which the user wants to call. * @param params The WPEFramework JsonObject containing the parameters for the call. (We can't include WPEFramework headers in controlMgr .h files as their logging macros clash) * @param response The WPEFramework JsonObject containing the response from the call. (We can't include WPEFramework headers in controlMgr .h files as their logging macros clash) @@ -125,7 +124,25 @@ class ctrlm_thunder_plugin_t { bool call_plugin(std::string method, void *params, void *response, unsigned int retries = 0); /** - * This functions is used to call a Thunder Controller method. + * This function is used to call a Thunder Plugin method. + * @param method The method in which the user wants to call. + * @param params The WPEFramework JsonObject containing the parameters for the call. (We can't include WPEFramework headers in controlMgr .h files as their logging macros clash) + * @param response The boolean pointer which will be assigned the response from the call + * @return True if the call succeeded, otherwise False. + */ + bool call_plugin_boolean(std::string method, void *params, bool *response); + + /** + * This function is used to call a Thunder Plugin method. + * @param method The method in which the user wants to call. + * @param params The WPEFramework JsonObject containing the parameters for the call. (We can't include WPEFramework headers in controlMgr .h files as their logging macros clash) + * @param response The string pointer which will be assigned containing the response from the call. + * @return True if the call succeeded, otherwise False. + */ + bool call_plugin_string(std::string method, void *params, std::string *response); + + /** + * This function is used to call a Thunder Controller method. * @param method The method in which the user wants to call. * @param params The WPEFramework JsonObject containing the parameters for the call. (We can't include WPEFramework headers in controlMgr .h files as their logging macros clash) * @param params The WPEFramework JsonObject containing the response from the call. (We can't include WPEFramework headers in controlMgr .h files as their logging macros clash) @@ -164,4 +181,4 @@ class ctrlm_thunder_plugin_t { }; }; -#endif \ No newline at end of file +#endif diff --git a/src/thunder/ctrlm_thunder_plugin_powermanager.cpp b/src/thunder/ctrlm_thunder_plugin_powermanager.cpp index 6e0c83b0..e84fa983 100755 --- a/src/thunder/ctrlm_thunder_plugin_powermanager.cpp +++ b/src/thunder/ctrlm_thunder_plugin_powermanager.cpp @@ -89,16 +89,15 @@ ctrlm_power_state_t ctrlm_thunder_plugin_powermanager_t::get_power_state() { /* root@pioneer-uhd:~# curl --request POST --url http://127.0.0.1:9998/jsonrpc --header 'Content-Type: application/json' --data '{ "jsonrpc": "2.0", "id": 1234567890, "method": "org.rdk.PowerManager.1.getNetworkStandbyMode", "params": {} }' {"jsonrpc":"2.0","id":1234567890,"result":true} */ bool ctrlm_thunder_plugin_powermanager_t::get_networked_standby_mode() { - JsonObject params, response; + JsonObject params; params = {}; bool networked_standby_mode = false; - sem_wait(&this->semaphore); - if(this->call_plugin("getNetworkStandbyMode", (void *)¶ms, (void *)&response)) { - networked_standby_mode = response["result"].Boolean(); + sem_wait(&this->semaphore); + if(this->call_plugin_boolean("getNetworkStandbyMode", (void *)¶ms, &networked_standby_mode)) { XLOGD_DEBUG("networked_standby_mode is %s", networked_standby_mode?"TRUE":"FALSE"); } else { - XLOGD_ERROR("getNetworkedStandbyMode call failed"); + XLOGD_ERROR("getNetworkStandbyMode call failed"); } sem_post(&this->semaphore); @@ -108,19 +107,23 @@ bool ctrlm_thunder_plugin_powermanager_t::get_networked_standby_mode() { /* root@pioneer-uhd:~# curl --request POST --url http://127.0.0.1:9998/jsonrpc --header 'Content-Type: application/json' --data '{ "jsonrpc": "2.0", "id": 1234567890, "method": "org.rdk.PowerManager.1.getLastWakeupReason", "params": {} }' {"jsonrpc":"2.0","id":1234567890,"result":"COLDBOOT"} */ bool ctrlm_thunder_plugin_powermanager_t::get_wakeup_reason_voice() { - JsonObject params, response; + JsonObject params; + std::string response; params = {}; bool wakeup_reason_voice = false; sem_wait(&this->semaphore); - if(this->call_plugin("getLastWakeupReason", (void *)¶ms, (void *)&response)) { - wakeup_reason_voice = (0 == strncmp(response["result"].String().c_str(), "VOICE", 5)); - XLOGD_DEBUG("voice_wakeup is %s", wakeup_reason_voice?"TRUE":"FALSE"); + if(this->call_plugin_string("getLastWakeupReason", (void *)¶ms, &response)) { + if(response == "VOICE") { + wakeup_reason_voice = true; + } } else { XLOGD_ERROR("getLastWakeupReason call failed"); } sem_post(&this->semaphore); + XLOGD_DEBUG("voice_wakeup is %s", wakeup_reason_voice?"TRUE":"FALSE"); + return wakeup_reason_voice; } diff --git a/src/voice/ctrlm_voice_obj.cpp b/src/voice/ctrlm_voice_obj.cpp index 6e4b354f..a6787b1e 100644 --- a/src/voice/ctrlm_voice_obj.cpp +++ b/src/voice/ctrlm_voice_obj.cpp @@ -2252,18 +2252,6 @@ std::string ctrlm_voice_t::voice_stb_data_partner_id_get() const { return(this->partner_id); } -void ctrlm_voice_t::voice_stb_data_experience_set(std::string &experience) { - XLOGD_DEBUG("Experience Tag set to %s", experience.c_str()); - this->experience = experience; - for(const auto &itr : this->endpoints) { - itr->voice_stb_data_experience_set(experience); - } -} - -std::string ctrlm_voice_t::voice_stb_data_experience_get() const { - return(this->experience); -} - std::string ctrlm_voice_t::voice_stb_data_app_id_http_get() const { return(this->prefs.app_id_http); } @@ -2427,12 +2415,6 @@ bool ctrlm_voice_t::voice_session_has_stb_data() { return(false); } #endif -#ifdef AUTH_EXPERIENCE - if(this->experience == "") { - XLOGD_INFO("No experience tag"); - return(false); - } -#endif #ifdef AUTH_SAT_TOKEN if(this->sat_token_required && this->sat_token[0] == '\0') { XLOGD_INFO("No SAT token"); diff --git a/src/voice/ctrlm_voice_obj.h b/src/voice/ctrlm_voice_obj.h index 38699a6b..3ec217b2 100644 --- a/src/voice/ctrlm_voice_obj.h +++ b/src/voice/ctrlm_voice_obj.h @@ -525,8 +525,6 @@ class ctrlm_voice_t { ctrlm_device_type_t voice_stb_data_device_type_get() const; virtual void voice_stb_data_partner_id_set(std::string &partner_id); std::string voice_stb_data_partner_id_get() const; - virtual void voice_stb_data_experience_set(std::string &experience); - std::string voice_stb_data_experience_get() const; std::string voice_stb_data_app_id_http_get() const; std::string voice_stb_data_app_id_ws_get() const; virtual void voice_stb_data_guide_language_set(const char *language); @@ -662,7 +660,6 @@ class ctrlm_voice_t { std::string device_id; ctrlm_device_type_t device_type; std::string partner_id; - std::string experience; char sat_token[XRSR_SAT_TOKEN_LEN_MAX]; bool sat_token_required; bool mtls_required; diff --git a/src/voice/endpoints/ctrlm_voice_endpoint.cpp b/src/voice/endpoints/ctrlm_voice_endpoint.cpp index 7815cd27..1aed8d46 100644 --- a/src/voice/endpoints/ctrlm_voice_endpoint.cpp +++ b/src/voice/endpoints/ctrlm_voice_endpoint.cpp @@ -63,7 +63,6 @@ void ctrlm_voice_endpoint_t::voice_stb_data_account_number_set(std::string &acco void ctrlm_voice_endpoint_t::voice_stb_data_device_id_set(std::string &device_id) {} void ctrlm_voice_endpoint_t::voice_stb_data_device_type_set(ctrlm_device_type_t device_type) {} void ctrlm_voice_endpoint_t::voice_stb_data_partner_id_set(std::string &partner_id) {} -void ctrlm_voice_endpoint_t::voice_stb_data_experience_set(std::string &experience) {} void ctrlm_voice_endpoint_t::voice_stb_data_guide_language_set(const char *language) {} void ctrlm_voice_endpoint_t::voice_stb_data_mask_pii_set(bool enable) {} diff --git a/src/voice/endpoints/ctrlm_voice_endpoint.h b/src/voice/endpoints/ctrlm_voice_endpoint.h index ac881880..3298348f 100644 --- a/src/voice/endpoints/ctrlm_voice_endpoint.h +++ b/src/voice/endpoints/ctrlm_voice_endpoint.h @@ -50,7 +50,6 @@ class ctrlm_voice_endpoint_t { virtual void voice_stb_data_device_id_set(std::string &device_id); virtual void voice_stb_data_device_type_set(ctrlm_device_type_t device_type); virtual void voice_stb_data_partner_id_set(std::string &partner_id); - virtual void voice_stb_data_experience_set(std::string &experience); virtual void voice_stb_data_guide_language_set(const char *language); virtual void voice_stb_data_mask_pii_set(bool enable); // End Data Setters diff --git a/src/voice/endpoints/ctrlm_voice_endpoint_http.cpp b/src/voice/endpoints/ctrlm_voice_endpoint_http.cpp index 1ec3e647..c119ee43 100644 --- a/src/voice/endpoints/ctrlm_voice_endpoint_http.cpp +++ b/src/voice/endpoints/ctrlm_voice_endpoint_http.cpp @@ -72,14 +72,12 @@ bool ctrlm_voice_endpoint_http_t::open() { std::string device_id = this->voice_obj->voice_stb_data_device_id_get(); std::string partner_id = this->voice_obj->voice_stb_data_partner_id_get(); - std::string experience = this->voice_obj->voice_stb_data_experience_get(); std::string app_id = this->voice_obj->voice_stb_data_app_id_http_get(); std::string language = this->voice_obj->voice_stb_data_guide_language_get().c_str(); xrsv_http_params_t params_http = { .device_id = device_id.c_str(), .partner_id = partner_id.c_str(), - .experience = experience.c_str(), .app_id = app_id.c_str(), .language = language.c_str(), .test_flag = this->voice_obj->voice_stb_data_test_get(), @@ -138,12 +136,6 @@ void ctrlm_voice_endpoint_http_t::voice_stb_data_partner_id_set(std::string &par } } -void ctrlm_voice_endpoint_http_t::voice_stb_data_experience_set(std::string &experience) { - if(this->xrsv_obj_http) { - xrsv_http_update_experience(this->xrsv_obj_http, experience.c_str()); - } -} - void ctrlm_voice_endpoint_http_t::voice_stb_data_guide_language_set(const char *language) { if(this->xrsv_obj_http) { xrsv_http_update_language(this->xrsv_obj_http, language); diff --git a/src/voice/endpoints/ctrlm_voice_endpoint_http.h b/src/voice/endpoints/ctrlm_voice_endpoint_http.h index 9338e20d..79a0d50d 100644 --- a/src/voice/endpoints/ctrlm_voice_endpoint_http.h +++ b/src/voice/endpoints/ctrlm_voice_endpoint_http.h @@ -32,7 +32,6 @@ class ctrlm_voice_endpoint_http_t : public ctrlm_voice_endpoint_t { public: void voice_stb_data_device_id_set(std::string &device_id); void voice_stb_data_partner_id_set(std::string &partner_id); - void voice_stb_data_experience_set(std::string &experience); void voice_stb_data_guide_language_set(const char *language); void voice_stb_data_pii_mask_set(bool enable); diff --git a/src/voice/endpoints/ctrlm_voice_endpoint_ws_nextgen.cpp b/src/voice/endpoints/ctrlm_voice_endpoint_ws_nextgen.cpp index e5165cd7..9abc27db 100644 --- a/src/voice/endpoints/ctrlm_voice_endpoint_ws_nextgen.cpp +++ b/src/voice/endpoints/ctrlm_voice_endpoint_ws_nextgen.cpp @@ -86,7 +86,6 @@ bool ctrlm_voice_endpoint_ws_nextgen_t::open() { } std::string device_id = this->voice_obj->voice_stb_data_device_id_get(); std::string partner_id = this->voice_obj->voice_stb_data_partner_id_get(); - std::string experience = this->voice_obj->voice_stb_data_experience_get(); std::string language = this->voice_obj->voice_stb_data_guide_language_get().c_str(); std::string account_number = this->voice_obj->voice_stb_data_account_number_get(); std::string device_mac = ctrlm_device_mac_get(); @@ -96,7 +95,6 @@ bool ctrlm_voice_endpoint_ws_nextgen_t::open() { .device_id = (device_id.empty() == false ? device_id.c_str() : NULL), .account_id = (account_number.empty() == false ? account_number.c_str() : NULL), .partner_id = (partner_id.empty() == false ? partner_id.c_str() : NULL), - .experience = (experience.empty() == false ? experience.c_str() : NULL), .audio_profile = controller_name_to_audio_profile(""), .audio_model = controller_name_to_audio_model(""), .language = language.c_str(), @@ -235,12 +233,6 @@ void ctrlm_voice_endpoint_ws_nextgen_t::voice_stb_data_partner_id_set(std::strin } } -void ctrlm_voice_endpoint_ws_nextgen_t::voice_stb_data_experience_set(std::string &experience) { - if(this->xrsv_obj_ws_nextgen) { - xrsv_ws_nextgen_update_experience(this->xrsv_obj_ws_nextgen, experience.c_str()); - } -} - void ctrlm_voice_endpoint_ws_nextgen_t::voice_stb_data_guide_language_set(const char *language) { if(this->xrsv_obj_ws_nextgen) { xrsv_ws_nextgen_update_language(this->xrsv_obj_ws_nextgen, language); diff --git a/src/voice/endpoints/ctrlm_voice_endpoint_ws_nextgen.h b/src/voice/endpoints/ctrlm_voice_endpoint_ws_nextgen.h index 16667f2f..218e1d39 100644 --- a/src/voice/endpoints/ctrlm_voice_endpoint_ws_nextgen.h +++ b/src/voice/endpoints/ctrlm_voice_endpoint_ws_nextgen.h @@ -37,7 +37,6 @@ class ctrlm_voice_endpoint_ws_nextgen_t : public ctrlm_voice_endpoint_t { void voice_stb_data_device_id_set(std::string &device_id); void voice_stb_data_device_type_set(ctrlm_device_type_t device_type); void voice_stb_data_partner_id_set(std::string &partner_id); - void voice_stb_data_experience_set(std::string &experience); void voice_stb_data_guide_language_set(const char *language); void voice_stb_data_mask_pii_set(bool enable); From 6a7f4c34754361059c46082b429b7847b1d53122 Mon Sep 17 00:00:00 2001 From: Gene Gallagher Date: Thu, 14 May 2026 23:23:09 +0000 Subject: [PATCH 2/5] RDKEMW-16814: reduce ble status prints and events --- src/attributes/ctrlm_attr_general.cpp | 12 +- src/attributes/ctrlm_attr_voice.cpp | 4 +- src/ble/ctrlm_ble_controller.cpp | 4 +- src/ble/ctrlm_ble_controller_attr_version.cpp | 8 +- src/ble/ctrlm_ble_network.cpp | 252 ++++++++++++------ src/ble/ctrlm_ble_network.h | 7 + src/ble/ctrlm_ble_rcu_interface.cpp | 6 +- .../gatt/gatt_audioservice_rdk.cpp | 4 +- .../bleservices/gatt/gatt_batteryservice.cpp | 2 +- .../gatt/gatt_deviceinfoservice.cpp | 20 +- .../bleservices/gatt/gatt_infraredservice.cpp | 4 +- .../bleservices/gatt/gatt_infraredsignal.cpp | 12 +- .../gatt/gatt_remotecontrolservice.cpp | 20 +- .../hal/blercu/bluez/blegattnotifypipe.cpp | 2 +- src/ctrlm_controller.cpp | 6 +- src/ctrlm_ir_controller.cpp | 2 +- src/ctrlm_network.cpp | 8 + src/ctrlm_network.h | 3 + src/database/ctrlm_database.cpp | 2 +- src/database/ctrlm_db_types.cpp | 4 +- 20 files changed, 248 insertions(+), 134 deletions(-) diff --git a/src/attributes/ctrlm_attr_general.cpp b/src/attributes/ctrlm_attr_general.cpp index a533e6fc..80a6edb9 100644 --- a/src/attributes/ctrlm_attr_general.cpp +++ b/src/attributes/ctrlm_attr_general.cpp @@ -76,7 +76,7 @@ bool ctrlm_string_db_attr_t::read_db(ctrlm_db_ctx_t ctx) { if(blob.read_db(ctx)) { this->value = blob.to_string(); ret = true; - XLOGD_INFO("%s read from database: %s", this->get_name().c_str(), this->to_string().c_str()); + XLOGD_DEBUG("%s read from database: %s", this->get_name().c_str(), this->to_string().c_str()); } else { XLOGD_ERROR("failed to read from db <%s>", this->get_name().c_str()); } @@ -90,7 +90,7 @@ bool ctrlm_string_db_attr_t::write_db(ctrlm_db_ctx_t ctx) { if(blob.from_string(this->value)) { if(blob.write_db(ctx)) { ret = true; - XLOGD_INFO("%s written to database: %s", this->get_name().c_str(), this->to_string().c_str()); + XLOGD_DEBUG("%s written to database: %s", this->get_name().c_str(), this->to_string().c_str()); } else { XLOGD_ERROR("failed to write to db <%s>", this->get_name().c_str()); } @@ -157,7 +157,7 @@ bool ctrlm_uint64_db_attr_t::read_db(ctrlm_db_ctx_t ctx) { if(data.read_db(ctx)) { this->set_value(data.get_uint64()); ret = true; - XLOGD_INFO("%s read from database: %s", this->get_name().c_str(), this->to_string().c_str()); + XLOGD_DEBUG("%s read from database: %s", this->get_name().c_str(), this->to_string().c_str()); } else { XLOGD_ERROR("failed to read from db <%s>", this->get_name().c_str()); } @@ -169,7 +169,7 @@ bool ctrlm_uint64_db_attr_t::write_db(ctrlm_db_ctx_t ctx) { ctrlm_db_uint64_t data(this->get_key(), this->get_table(), this->get_value()); if(data.write_db(ctx)) { ret = true; - XLOGD_INFO("%s written to database: %s", this->get_name().c_str(), this->to_string().c_str()); + XLOGD_DEBUG("%s written to database: %s", this->get_name().c_str(), this->to_string().c_str()); } else { XLOGD_ERROR("failed to write to db <%s>", this->get_name().c_str()); } @@ -237,7 +237,7 @@ bool ctrlm_ieee_db_addr_t::read_db(ctrlm_db_ctx_t ctx) { if(data.read_db(ctx)) { this->set_value(data.get_uint64()); ret = true; - XLOGD_INFO("%s read from database: %s", this->get_name().c_str(), this->to_string().c_str()); + XLOGD_DEBUG("%s read from database: %s", this->get_name().c_str(), this->to_string().c_str()); } else { XLOGD_ERROR("failed to read from db <%s>", this->get_name().c_str()); } @@ -249,7 +249,7 @@ bool ctrlm_ieee_db_addr_t::write_db(ctrlm_db_ctx_t ctx) { ctrlm_db_uint64_t data(this->get_key(), this->get_table(), this->get_value()); if(data.write_db(ctx)) { ret = true; - XLOGD_INFO("%s written to database: %s", this->get_name().c_str(), this->to_string().c_str()); + XLOGD_DEBUG("%s written to database: %s", this->get_name().c_str(), this->to_string().c_str()); } else { XLOGD_ERROR("failed to write to db <%s>", this->get_name().c_str()); } diff --git a/src/attributes/ctrlm_attr_voice.cpp b/src/attributes/ctrlm_attr_voice.cpp index 87f1759d..963b3b09 100644 --- a/src/attributes/ctrlm_attr_voice.cpp +++ b/src/attributes/ctrlm_attr_voice.cpp @@ -256,7 +256,7 @@ bool ctrlm_voice_metrics_t::read_db(ctrlm_db_ctx_t ctx) { this->utterances_exceeding_packet_loss_threshold_today = ((buf[39] << 24) | (buf[38] << 16) | (buf[37] << 8) | buf[36]); this->utterances_exceeding_packet_loss_threshold_yesterday = ((buf[43] << 24) | (buf[42] << 16) | (buf[41] << 8) | buf[40]); ret = true; - XLOGD_INFO("%s read from database: %s", this->get_name().c_str(), this->to_string().c_str()); + XLOGD_DEBUG("%s read from database: %s", this->get_name().c_str(), this->to_string().c_str()); } else { XLOGD_ERROR("data from db is too small <%s>", this->get_name().c_str()); } @@ -322,7 +322,7 @@ bool ctrlm_voice_metrics_t::write_db(ctrlm_db_ctx_t ctx) { if(blob.from_buffer(buf, sizeof(buf))) { if(blob.write_db(ctx)) { ret = true; - XLOGD_INFO("%s written to database: %s", this->get_name().c_str(), this->to_string().c_str()); + XLOGD_DEBUG("%s written to database: %s", this->get_name().c_str(), this->to_string().c_str()); } else { XLOGD_ERROR("failed to write to db <%s>", this->get_name().c_str()); } diff --git a/src/ble/ctrlm_ble_controller.cpp b/src/ble/ctrlm_ble_controller.cpp index f1a87c22..c9e996c9 100644 --- a/src/ble/ctrlm_ble_controller.cpp +++ b/src/ble/ctrlm_ble_controller.cpp @@ -58,7 +58,7 @@ ctrlm_obj_controller_ble_t::ctrlm_obj_controller_ble_t(ctrlm_controller_id_t con wakeup_custom_list_(), irdbs_supported_(0) { - XLOGD_INFO("constructor - controller id <%u>", controller_id); + XLOGD_DEBUG("constructor - controller id <%u>", controller_id); voice_metrics_->read_config(); ieee_address_->set_num_bytes(6); @@ -66,7 +66,7 @@ ctrlm_obj_controller_ble_t::ctrlm_obj_controller_ble_t(ctrlm_controller_id_t con } ctrlm_obj_controller_ble_t::ctrlm_obj_controller_ble_t() { - XLOGD_INFO("default constructor"); + XLOGD_DEBUG("default constructor"); } void ctrlm_obj_controller_ble_t::db_create() { diff --git a/src/ble/ctrlm_ble_controller_attr_version.cpp b/src/ble/ctrlm_ble_controller_attr_version.cpp index 0bfd0a41..9ffb9077 100644 --- a/src/ble/ctrlm_ble_controller_attr_version.cpp +++ b/src/ble/ctrlm_ble_controller_attr_version.cpp @@ -40,7 +40,7 @@ bool ctrlm_ble_sw_version_t::read_db(ctrlm_db_ctx_t ctx) { if(blob.read_db(ctx)) { if (this->from_string(blob.to_string())) { ret = true; - XLOGD_INFO("%s read from database: %s", this->get_name().c_str(), this->to_string().c_str()); + XLOGD_DEBUG("%s read from database: %s", this->get_name().c_str(), this->to_string().c_str()); } else { XLOGD_ERROR("%s read from database failed to parse <%s> ", this->get_name().c_str(), blob.to_string().c_str()); } @@ -58,7 +58,7 @@ bool ctrlm_ble_sw_version_t::write_db(ctrlm_db_ctx_t ctx) { if(blob.from_string(ver_str)) { if(blob.write_db(ctx)) { ret = true; - XLOGD_INFO("%s written to database: %s", this->get_name().c_str(), this->to_string().c_str()); + XLOGD_DEBUG("%s written to database: %s", this->get_name().c_str(), this->to_string().c_str()); } else { XLOGD_ERROR("failed to write to db <%s>", this->get_name().c_str()); } @@ -90,7 +90,7 @@ bool ctrlm_ble_hw_version_t::read_db(ctrlm_db_ctx_t ctx) { if(blob.read_db(ctx)) { if (this->from_string(blob.to_string())) { ret = true; - XLOGD_INFO("%s read from database: %s", this->get_name().c_str(), this->to_string().c_str()); + XLOGD_DEBUG("%s read from database: %s", this->get_name().c_str(), this->to_string().c_str()); } else { XLOGD_ERROR("%s read from database failed to parse <%s> ", this->get_name().c_str(), blob.to_string().c_str()); } @@ -108,7 +108,7 @@ bool ctrlm_ble_hw_version_t::write_db(ctrlm_db_ctx_t ctx) { if(blob.from_string(ver_str)) { if(blob.write_db(ctx)) { ret = true; - XLOGD_INFO("%s written to database: %s", this->get_name().c_str(), this->to_string().c_str()); + XLOGD_DEBUG("%s written to database: %s", this->get_name().c_str(), this->to_string().c_str()); } else { XLOGD_ERROR("failed to write to db <%s>", this->get_name().c_str()); } diff --git a/src/ble/ctrlm_ble_network.cpp b/src/ble/ctrlm_ble_network.cpp index 03e1322f..12df1f0f 100644 --- a/src/ble/ctrlm_ble_network.cpp +++ b/src/ble/ctrlm_ble_network.cpp @@ -56,6 +56,11 @@ using namespace std; #define CTRLM_BLE_UPGRADE_CONTINUE_TIMEOUT (MINUTE_IN_MILLISECONDS * 5) // 5 minutes #define CTRLM_BLE_UPGRADE_PAUSE_TIMEOUT (MINUTE_IN_MILLISECONDS * 2) // 2 minutes +#define CTRLM_BLE_PRINT_STATUS_TIMEOUT (1000 * 6) // 6 seconds +#define CTRLM_BLE_EVENT_STATUS_TIMEOUT (1000 * 6) // 6 seconds +#define CTRLM_BLE_PRINT_STATUS_DEFER_MAX (20) +#define CTRLM_BLE_EVENT_STATUS_DEFER_MAX (20) + #define CTRLM_VENDOR_BLE_NETWORK_DISABLE_FILE "/etc/vendor/input/ble_network_disable" #define CTRLM_VENDOR_BLE_REMOTE_WHITELIST_FILE "/etc/vendor/input/ble_remote_whitelist.json" #define CTRLM_VENDOR_BLE_NETWORK_OPTIONS_FILE "/etc/vendor/input/ble_network_options.json" @@ -64,6 +69,8 @@ using namespace std; typedef struct { guint upgrade_controllers_timer_tag; guint upgrade_pause_timer_tag; + guint print_status_timer_tag; + guint event_status_timer_tag; } ctrlm_ble_network_t; static ctrlm_ble_network_t g_ctrlm_ble_network; @@ -77,8 +84,11 @@ static const vector ctrlm_ble_ir_key_names { }; -static gboolean ctrlm_ble_upgrade_controllers(gpointer user_data); -static gboolean ctrlm_ble_upgrade_resume(gpointer user_data); +static gboolean ctrlm_ble_print_status_timer_cb(gpointer user_data); +static gboolean ctrlm_ble_event_status_timer_cb(gpointer user_data); + +static gboolean ctrlm_ble_upgrade_controllers_timer_cb(gpointer user_data); +static gboolean ctrlm_ble_upgrade_resume_timer_cb(gpointer user_data); static bool ctrlm_ble_parse_upgrade_image_info(const std::string &filename, ctrlm_ble_upgrade_image_info_t &image_info); ctrlm_ble_unpair_metrics_t::ctrlm_ble_unpair_metrics_t() @@ -288,6 +298,8 @@ ctrlm_obj_network_ble_t::ctrlm_obj_network_ble_t(ctrlm_network_type_t type, ctrl init_result_ = CTRLM_HAL_RESULT_ERROR; ready_ = false; voice_disabled_ = false; + print_status_defer_count_ = 0; + event_status_defer_count_ = 0; g_ctrlm_ble_network.upgrade_controllers_timer_tag = 0; g_ctrlm_ble_network.upgrade_pause_timer_tag = 0; @@ -325,6 +337,8 @@ ctrlm_obj_network_ble_t::~ctrlm_obj_network_ble_t() { ctrlm_timeout_destroy(&g_ctrlm_ble_network.upgrade_controllers_timer_tag); ctrlm_timeout_destroy(&g_ctrlm_ble_network.upgrade_pause_timer_tag); + ctrlm_timeout_destroy(&g_ctrlm_ble_network.event_status_timer_tag); + ctrlm_timeout_destroy(&g_ctrlm_ble_network.print_status_timer_tag); ctrlm_ble_iarm_terminate(); @@ -414,20 +428,21 @@ void ctrlm_obj_network_ble_t::start(GMainLoop* main_loop) } } - // Print out pairing table - XLOGD_INFO("===================================================================="); - XLOGD_INFO(" %u Bound Controllers", controllers_.size()); XLOGD_INFO("===================================================================="); + XLOGD_INFO(" %u Bound BLE Controllers", controllers_.size()); for(auto &controller : controllers_) { if (controller.second->is_stale(this->stale_remote_time_threshold_get())) { XLOGD_TELEMETRY("Stale remote suspected: <%s>", controller.second->ieee_address_get().to_string().c_str()); } - controller.second->print_status(); } + XLOGD_INFO("===================================================================="); + + // Print out pairing table in a couple seconds to allow callbacks from bluez to finish + schedule_status_print(); // Read IR RF Database from database ir_rf_database_.load_db(); - XLOGD_INFO("\n%s", this->ir_rf_database_.to_string(true).c_str()); + XLOGD_INFO("\n%s", this->ir_rf_database_.to_string(false).c_str()); } @@ -798,7 +813,8 @@ void ctrlm_obj_network_ble_t::req_process_program_ir_codes(void *data, int size) // First add IR Codes to the IR RF Database (this contains all of the logic for maintaining TV vs AVR codes) ir_rf_database_.add_irdb_codes(dqm->ir_codes); - XLOGD_INFO("\n%s", this->ir_rf_database_.to_string(true).c_str()); + XLOGD_INFO("\n%s", this->ir_rf_database_.to_string(false).c_str()); + XLOGD_DEBUG("\n%s", this->ir_rf_database_.to_string(true).c_str()); // Now get the IR codes for the BLE IR slots for(auto key : ctrlm_ble_ir_key_names) { if(ir_rf_database_.has_entry(key)) { @@ -861,7 +877,7 @@ void ctrlm_obj_network_ble_t::req_process_ir_clear_codes(void *data, int size) { } else { success = true; ir_rf_database_.clear_ir_codes(); - XLOGD_INFO("\n%s", ir_rf_database_.to_string(true).c_str()); + XLOGD_INFO("\n%s", ir_rf_database_.to_string(false).c_str()); controllers_[controller_id]->irdb_entry_id_name_set(CTRLM_IRDB_DEV_TYPE_TV, "0"); controllers_[controller_id]->irdb_entry_id_name_set(CTRLM_IRDB_DEV_TYPE_AVR, "0"); } @@ -1287,7 +1303,7 @@ void ctrlm_obj_network_ble_t::clearUpgradeImages() { upgrade_images_.clear(); } -static gboolean ctrlm_ble_upgrade_controllers(gpointer user_data) { +static gboolean ctrlm_ble_upgrade_controllers_timer_cb(gpointer user_data) { ctrlm_network_id_t* net_id = (ctrlm_network_id_t*) user_data; if (net_id != NULL) { // Allocate a message and send it to Control Manager's queue @@ -1302,7 +1318,7 @@ static gboolean ctrlm_ble_upgrade_controllers(gpointer user_data) { return false; } -static gboolean ctrlm_ble_upgrade_resume(gpointer user_data) { +static gboolean ctrlm_ble_upgrade_resume_timer_cb(gpointer user_data) { ctrlm_network_id_t* net_id = (ctrlm_network_id_t*) user_data; if (net_id != NULL) { // Allocate a message and send it to Control Manager's queue @@ -1386,7 +1402,7 @@ void ctrlm_obj_network_ble_t::req_process_upgrade_controllers(void *data, int si // simply will not take the reboot and the software revision will remain unchanged. XLOGD_DEBUG("Upgrading one remote at a time, setting timer for %d minutes to check if other remotes need upgrades.", CTRLM_BLE_UPGRADE_CONTINUE_TIMEOUT / MINUTE_IN_MILLISECONDS); ctrlm_timeout_destroy(&g_ctrlm_ble_network.upgrade_controllers_timer_tag); - g_ctrlm_ble_network.upgrade_controllers_timer_tag = ctrlm_timeout_create(CTRLM_BLE_UPGRADE_CONTINUE_TIMEOUT, ctrlm_ble_upgrade_controllers, &id_); + g_ctrlm_ble_network.upgrade_controllers_timer_tag = ctrlm_timeout_create(CTRLM_BLE_UPGRADE_CONTINUE_TIMEOUT, ctrlm_ble_upgrade_controllers_timer_cb, &id_); return; } else { XLOGD_INFO("Software upgrade not required for controller %s.", controller.second->ieee_address_get().to_string().c_str()); @@ -1418,7 +1434,7 @@ void ctrlm_obj_network_ble_t::req_process_upgrade_controllers(void *data, int si } else { XLOGD_INFO("Upgrade currently in progress, setting timer for %d minutes to check if other remotes need upgrades.", CTRLM_BLE_UPGRADE_CONTINUE_TIMEOUT / MINUTE_IN_MILLISECONDS); ctrlm_timeout_destroy(&g_ctrlm_ble_network.upgrade_controllers_timer_tag); - g_ctrlm_ble_network.upgrade_controllers_timer_tag = ctrlm_timeout_create(CTRLM_BLE_UPGRADE_CONTINUE_TIMEOUT, ctrlm_ble_upgrade_controllers, &id_); + g_ctrlm_ble_network.upgrade_controllers_timer_tag = ctrlm_timeout_create(CTRLM_BLE_UPGRADE_CONTINUE_TIMEOUT, ctrlm_ble_upgrade_controllers_timer_cb, &id_); } } @@ -1682,10 +1698,7 @@ void ctrlm_obj_network_ble_t::ind_rcu_status(ctrlm_hal_ble_RcuStatusData_t *para } void ctrlm_obj_network_ble_t::ind_process_rcu_status(void *data, int size) { - // XLOGD_DEBUG("Enter..."); THREAD_ID_VALIDATE(); - bool report_status = true; - bool print_status = true; ctrlm_hal_ble_RcuStatusData_t *dqm = (ctrlm_hal_ble_RcuStatusData_t *)data; g_assert(dqm); @@ -1702,19 +1715,25 @@ void ctrlm_obj_network_ble_t::ind_process_rcu_status(void *data, int size) { // These properties are associated with the network, not a specific RCU case CTRLM_HAL_BLE_PROPERTY_IS_PAIRING: // don't send up status event for this since CTRLM_HAL_BLE_PROPERTY_STATE handles all pairing states. - report_status = false; - print_status = false; break; case CTRLM_HAL_BLE_PROPERTY_PAIRING_CODE: - report_status = false; // don't send up status event for this. break; case CTRLM_HAL_BLE_PROPERTY_STATE: XLOGD_TELEMETRY("BLE remote RF pairing state changed to <%s>", ctrlm_rf_pair_state_str(dqm->state)); state_ = dqm->state; + if (state_ == CTRLM_RF_PAIR_STATE_COMPLETE || state_ == CTRLM_RF_PAIR_STATE_IDLE) { + // report status in a couple seconds to allow remote data to be received from bluez + schedule_status_event(); + } else { + // for any other states, send event immediately. + schedule_status_event(true); + } break; case CTRLM_HAL_BLE_PROPERTY_IR_STATE: XLOGD_TELEMETRY("BLE remote IR programming state changed to <%s>", ctrlm_ir_state_str(dqm->ir_state)); ir_state_ = dqm->ir_state; + // send event immediately. + schedule_status_event(true); break; default: { @@ -1723,35 +1742,58 @@ void ctrlm_obj_network_ble_t::ind_process_rcu_status(void *data, int size) { if (false == getControllerId(dqm->rcu_data.ieee_address, &controller_id)) { XLOGD_ERROR("Controller <%s> NOT found in the network!!", ctrlm_convert_mac_long_to_string(dqm->rcu_data.ieee_address).c_str()); - report_status = false; - print_status = false; } else { auto controller = controllers_[controller_id]; switch (dqm->property_updated) { case CTRLM_HAL_BLE_PROPERTY_DEVICE_ID: controller->set_device_minor_id(dqm->rcu_data.device_minor_id); + XLOGD_INFO("Controller <%s> device minor ID changed to <%d>", controller->ieee_address_get().to_string().c_str(), dqm->rcu_data.device_minor_id); + //report this immediately since listeners use this to find the input device path for the remote + schedule_status_event(true); break; case CTRLM_HAL_BLE_PROPERTY_NAME: controller->setName(string(dqm->rcu_data.name), true); + XLOGD_INFO("Controller <%s> name changed to <%s>", controller->ieee_address_get().to_string().c_str(), dqm->rcu_data.name); + schedule_status_print(); + schedule_status_event(); break; case CTRLM_HAL_BLE_PROPERTY_MANUFACTURER: controller->setManufacturer(string(dqm->rcu_data.manufacturer), true); + XLOGD_INFO("Controller <%s> manufacturer changed to <%s>", controller->ieee_address_get().to_string().c_str(), dqm->rcu_data.manufacturer); + schedule_status_print(); + schedule_status_event(); break; case CTRLM_HAL_BLE_PROPERTY_MODEL: controller->setModel(string(dqm->rcu_data.model), true); + XLOGD_INFO("Controller <%s> model changed to <%s>", controller->ieee_address_get().to_string().c_str(), dqm->rcu_data.model); + schedule_status_print(); + schedule_status_event(); break; case CTRLM_HAL_BLE_PROPERTY_SERIAL_NUMBER: controller->setSerialNumber(string(dqm->rcu_data.serial_number), true); + XLOGD_INFO("Controller <%s> serial number changed to <%s>", controller->ieee_address_get().to_string().c_str(), dqm->rcu_data.serial_number); + schedule_status_print(); + schedule_status_event(); break; case CTRLM_HAL_BLE_PROPERTY_HW_REVISION: controller->setHwRevision(string(dqm->rcu_data.hw_revision), true); + XLOGD_INFO("Controller <%s> hardware revision changed to <%s>", controller->ieee_address_get().to_string().c_str(), dqm->rcu_data.hw_revision); + schedule_status_print(); + schedule_status_event(); break; case CTRLM_HAL_BLE_PROPERTY_FW_REVISION: controller->setFwRevision(string(dqm->rcu_data.fw_revision), true); + XLOGD_INFO("Controller <%s> firmware revision changed to <%s>", controller->ieee_address_get().to_string().c_str(), dqm->rcu_data.fw_revision); + schedule_status_print(); + schedule_status_event(); break; case CTRLM_HAL_BLE_PROPERTY_SW_REVISION: { controller->setSwRevision(string(dqm->rcu_data.sw_revision), true); + XLOGD_INFO("Controller <%s> software revision changed to <%s>", controller->ieee_address_get().to_string().c_str(), dqm->rcu_data.sw_revision); + schedule_status_print(); + schedule_status_event(); + // SW Rev updated, make sure xconf config file is updated ctrlm_main_queue_msg_header_t *msg = (ctrlm_main_queue_msg_header_t *)g_malloc(sizeof(ctrlm_main_queue_msg_header_t)); if(msg == NULL) { @@ -1764,26 +1806,33 @@ void ctrlm_obj_network_ble_t::ind_process_rcu_status(void *data, int size) { } case CTRLM_HAL_BLE_PROPERTY_IR_CODE: controller->setIrCode(dqm->rcu_data.ir_code); + XLOGD_INFO("Controller <%s> IR code changed to <%d>", controller->ieee_address_get().to_string().c_str(), dqm->rcu_data.ir_code); break; case CTRLM_HAL_BLE_PROPERTY_TOUCH_MODE: controller->setTouchMode(dqm->rcu_data.touch_mode); - print_status = false; - report_status = false; + XLOGD_INFO("Controller <%s> touch mode changed to <%u>", controller->ieee_address_get().to_string().c_str(), dqm->rcu_data.touch_mode); break; case CTRLM_HAL_BLE_PROPERTY_TOUCH_MODE_SETTABLE: controller->setTouchModeSettable(dqm->rcu_data.touch_mode_settable); - print_status = false; - report_status = false; + XLOGD_INFO("Controller <%s> touch mode settable changed to <%s>", controller->ieee_address_get().to_string().c_str(), dqm->rcu_data.touch_mode_settable ? "TRUE" : "FALSE"); break; case CTRLM_HAL_BLE_PROPERTY_BATTERY_LEVEL: controller->setBatteryPercent(dqm->rcu_data.battery_level, true); - print_status = false; + XLOGD_INFO("Controller <%s> battery level changed to <%u%%>", controller->ieee_address_get().to_string().c_str(), dqm->rcu_data.battery_level); + schedule_status_print(); + schedule_status_event(); break; case CTRLM_HAL_BLE_PROPERTY_CONNECTED: controller->setConnected(dqm->rcu_data.connected); + XLOGD_INFO("Controller <%s> connected changed to <%s>", controller->ieee_address_get().to_string().c_str(), dqm->rcu_data.connected ? "TRUE" : "FALSE"); + + schedule_status_print(); + // send event immediately. + schedule_status_event(true); break; case CTRLM_HAL_BLE_PROPERTY_AUDIO_STREAMING: controller->setAudioStreaming(dqm->rcu_data.audio_streaming); + XLOGD_INFO("Controller <%s> audio streaming changed to <%s>", controller->ieee_address_get().to_string().c_str(), dqm->rcu_data.audio_streaming ? "TRUE" : "FALSE"); if(!dqm->rcu_data.audio_streaming) { // report end of stream stats if (ble_rcu_interface_) { @@ -1812,19 +1861,14 @@ void ctrlm_obj_network_ble_t::ind_process_rcu_status(void *data, int size) { } } } - - report_status = false; - print_status = false; break; case CTRLM_HAL_BLE_PROPERTY_AUDIO_GAIN_LEVEL: controller->setAudioGainLevel(dqm->rcu_data.audio_gain_level); - report_status = false; - print_status = false; + XLOGD_INFO("Controller <%s> audio gain level changed to <%u>", controller->ieee_address_get().to_string().c_str(), dqm->rcu_data.audio_gain_level); break; case CTRLM_HAL_BLE_PROPERTY_AUDIO_CODECS: controller->setAudioCodecs(dqm->rcu_data.audio_codecs); - report_status = false; - print_status = false; + XLOGD_INFO("Controller <%s> audio codecs changed to <0x%X>", controller->ieee_address_get().to_string().c_str(), dqm->rcu_data.audio_codecs); break; case CTRLM_HAL_BLE_PROPERTY_IS_UPGRADING: XLOGD_AUTOMATION_INFO("Controller <%s> firmware upgrading = %s", controller->ieee_address_get().to_string().c_str(), dqm->rcu_data.is_upgrading ? "TRUE" : "FALSE"); @@ -1834,8 +1878,6 @@ void ctrlm_obj_network_ble_t::ind_process_rcu_status(void *data, int size) { // flag to TRUE based on this property. Controller upgrade progress flag should only be set to true if packets are actively being sent controller->setUpgradeInProgress(false); } - report_status = false; - print_status = false; break; case CTRLM_HAL_BLE_PROPERTY_UPGRADE_PROGRESS: XLOGD_AUTOMATION_INFO("Controller <%s> firmware upgrade %d%% complete...", controller->ieee_address_get().to_string().c_str(), dqm->rcu_data.upgrade_progress); @@ -1845,21 +1887,17 @@ void ctrlm_obj_network_ble_t::ind_process_rcu_status(void *data, int size) { controller->set_upgrade_progress(dqm->rcu_data.upgrade_progress); if (controller->is_upgrade_progress_at_increment()) { - iarm_event_rcu_firmware_status(*controller); + iarm_event_rcu_firmware_status(*controller); } - report_status = false; - print_status = false; break; case CTRLM_HAL_BLE_PROPERTY_UPGRADE_ERROR: XLOGD_AUTOMATION_ERROR("Controller <%s> firmware upgrade FAILED with error <%s>.", controller->ieee_address_get().to_string().c_str(), dqm->rcu_data.upgrade_error); - report_status = false; - print_status = false; controller->set_upgrade_error(dqm->rcu_data.upgrade_error); if (controller->retry_ota()) { controller->setUpgradeAttempted(false); XLOGD_WARN("Upgrade failed, setting timer for %d minutes to retry.", CTRLM_BLE_UPGRADE_CONTINUE_TIMEOUT / MINUTE_IN_MILLISECONDS); ctrlm_timeout_destroy(&g_ctrlm_ble_network.upgrade_controllers_timer_tag); - g_ctrlm_ble_network.upgrade_controllers_timer_tag = ctrlm_timeout_create(CTRLM_BLE_UPGRADE_CONTINUE_TIMEOUT, ctrlm_ble_upgrade_controllers, &id_); + g_ctrlm_ble_network.upgrade_controllers_timer_tag = ctrlm_timeout_create(CTRLM_BLE_UPGRADE_CONTINUE_TIMEOUT, ctrlm_ble_upgrade_controllers_timer_cb, &id_); controller->set_upgrade_state(CTRLM_RCU_UPGRADE_STATE_RETRYING); } else { controller->check_upgrade_error(); @@ -1886,8 +1924,6 @@ void ctrlm_obj_network_ble_t::ind_process_rcu_status(void *data, int size) { case CTRLM_HAL_BLE_PROPERTY_UNPAIR_REASON: XLOGD_AUTOMATION_INFO("Controller <%s> notified reason for unpairing = <%s>", controller->ieee_address_get().to_string().c_str(), ctrlm_ble_unpair_reason_str(dqm->rcu_data.unpair_reason)); last_rcu_unpair_metrics_.write_rcu_unpair_event(controller->ieee_address_get().get_value(), string(ctrlm_ble_unpair_reason_str(dqm->rcu_data.unpair_reason))); - report_status = false; - print_status = false; if (this->unpair_on_remote_request_ && (dqm->rcu_data.unpair_reason == CTRLM_BLE_RCU_UNPAIR_REASON_SFM || dqm->rcu_data.unpair_reason == CTRLM_BLE_RCU_UNPAIR_REASON_FACTORY_RESET || @@ -1906,8 +1942,6 @@ void ctrlm_obj_network_ble_t::ind_process_rcu_status(void *data, int size) { dqm->rcu_data.reboot_reason == CTRLM_BLE_RCU_REBOOT_REASON_ASSERT ? dqm->rcu_data.assert_report : "" , dqm->rcu_data.reboot_reason == CTRLM_BLE_RCU_REBOOT_REASON_ASSERT ? "\"" : ""); - report_status = false; - print_status = false; if (dqm->rcu_data.reboot_reason == CTRLM_BLE_RCU_REBOOT_REASON_FW_UPDATE) { controller->ota_clear_all_failure_counters(); @@ -1925,48 +1959,112 @@ void ctrlm_obj_network_ble_t::ind_process_rcu_status(void *data, int size) { XLOGD_INFO("Controller <%s> notified last wakeup key = %u (%s key)", controller->ieee_address_get().to_string().c_str(), dqm->rcu_data.last_wakeup_key, ctrlm_linux_key_code_str(dqm->rcu_data.last_wakeup_key, false)); controller->setLastWakeupKey(dqm->rcu_data.last_wakeup_key); - print_status = false; + + // send event immediately. + schedule_status_event(true); break; case CTRLM_HAL_BLE_PROPERTY_WAKEUP_CONFIG: controller->setWakeupConfig(dqm->rcu_data.wakeup_config); XLOGD_INFO("Controller <%s> notified wakeup config = <%s>", controller->ieee_address_get().to_string().c_str(), ctrlm_rcu_wakeup_config_str(controller->get_wakeup_config())); - if (controller->get_wakeup_config() == CTRLM_RCU_WAKEUP_CONFIG_CUSTOM) { - // Don't report status yet if its a custom config. Do that after we receive the custom list - report_status = false; - print_status = false; - } + schedule_status_print(); + schedule_status_event(); break; case CTRLM_HAL_BLE_PROPERTY_WAKEUP_CUSTOM_LIST: controller->setWakeupCustomList(dqm->rcu_data.wakeup_custom_list, dqm->rcu_data.wakeup_custom_list_size); XLOGD_INFO("Controller <%s> notified wakeup custom list = <%s>", controller->ieee_address_get().to_string().c_str(), controller->wakeupCustomListToString().c_str()); - if (controller->get_wakeup_config() != CTRLM_RCU_WAKEUP_CONFIG_CUSTOM) { - // Only report status if the config is set to custom - report_status = false; - print_status = false; - } + schedule_status_print(); + schedule_status_event(); break; case CTRLM_HAL_BLE_PROPERTY_IRDBS_SUPPORTED: controller->setSupportedIrdbs(dqm->rcu_data.irdbs_supported); - report_status = false; - print_status = false; + schedule_status_print(); break; default: XLOGD_WARN("Unhandled Property: %d !!!!!!!!!!!!!!!!!!!!!!!!", dqm->property_updated); - report_status = false; - print_status = false; break; } } break; } } +} + +void ctrlm_obj_network_ble_t::schedule_status_print(bool immediately) { + XLOGD_DEBUG("immediately = <%s>, print_status_defer_count_ = <%d>", immediately ? "TRUE" : "FALSE", print_status_defer_count_); + THREAD_ID_VALIDATE(); + ctrlm_timeout_destroy(&g_ctrlm_ble_network.print_status_timer_tag); + if (immediately || print_status_defer_count_ > CTRLM_BLE_PRINT_STATUS_DEFER_MAX) { + ctrlm_main_queue_msg_header_t msg; + errno_t safec_rc = memset_s(&msg, sizeof(msg), 0, sizeof(msg)); + ERR_CHK(safec_rc); + ctrlm_main_queue_handler_push(CTRLM_HANDLER_NETWORK, (ctrlm_msg_handler_network_t)&ctrlm_obj_network_t::req_process_print_status, &msg, sizeof(msg), NULL, id_); + } else { + print_status_defer_count_++; + g_ctrlm_ble_network.print_status_timer_tag = ctrlm_timeout_create(CTRLM_BLE_PRINT_STATUS_TIMEOUT, ctrlm_ble_print_status_timer_cb, &id_); + } +} + +void ctrlm_obj_network_ble_t::schedule_status_event(bool immediately) { + XLOGD_DEBUG("immediately = <%s>, event_status_defer_count_ = <%d>", immediately ? "TRUE" : "FALSE", event_status_defer_count_); + THREAD_ID_VALIDATE(); + ctrlm_timeout_destroy(&g_ctrlm_ble_network.event_status_timer_tag); + if (immediately || event_status_defer_count_ > CTRLM_BLE_EVENT_STATUS_DEFER_MAX) { + ctrlm_main_queue_msg_header_t msg; + errno_t safec_rc = memset_s(&msg, sizeof(msg), 0, sizeof(msg)); + ERR_CHK(safec_rc); + ctrlm_main_queue_handler_push(CTRLM_HANDLER_NETWORK, (ctrlm_msg_handler_network_t)&ctrlm_obj_network_t::req_process_event_status, &msg, sizeof(msg), NULL, id_); + } else { + event_status_defer_count_++; + g_ctrlm_ble_network.event_status_timer_tag = ctrlm_timeout_create(CTRLM_BLE_EVENT_STATUS_TIMEOUT, ctrlm_ble_event_status_timer_cb, &id_); + } +} + + +void ctrlm_obj_network_ble_t::req_process_print_status(void *data, int size) { + XLOGD_DEBUG("Enter..."); + THREAD_ID_VALIDATE(); + + print_status_defer_count_ = 0; + printStatus(); +} + +void ctrlm_obj_network_ble_t::req_process_event_status(void *data, int size) { + XLOGD_DEBUG("Enter..."); + THREAD_ID_VALIDATE(); + + event_status_defer_count_ = 0; + iarm_event_rcu_status(); +} + + +static gboolean ctrlm_ble_print_status_timer_cb(gpointer user_data) { + XLOGD_DEBUG("Enter..."); + ctrlm_network_id_t* net_id = (ctrlm_network_id_t*) user_data; + if (net_id != NULL) { + // Allocate a message and send it to Control Manager's queue + ctrlm_main_queue_msg_header_t msg; + errno_t safec_rc = memset_s(&msg, sizeof(msg), 0, sizeof(msg)); + ERR_CHK(safec_rc); - if (true == print_status) { - printStatus(); + ctrlm_main_queue_handler_push(CTRLM_HANDLER_NETWORK, (ctrlm_msg_handler_network_t)&ctrlm_obj_network_t::req_process_print_status, &msg, sizeof(msg), NULL, *net_id); } - if (true == report_status) { - iarm_event_rcu_status(); + g_ctrlm_ble_network.print_status_timer_tag = 0; + return false; +} + +static gboolean ctrlm_ble_event_status_timer_cb(gpointer user_data) { + XLOGD_DEBUG("Enter..."); + ctrlm_network_id_t* net_id = (ctrlm_network_id_t*) user_data; + if (net_id != NULL) { + // Allocate a message and send it to Control Manager's queue + ctrlm_main_queue_msg_header_t msg; + errno_t safec_rc = memset_s(&msg, sizeof(msg), 0, sizeof(msg)); + ERR_CHK(safec_rc); + + ctrlm_main_queue_handler_push(CTRLM_HANDLER_NETWORK, (ctrlm_msg_handler_network_t)&ctrlm_obj_network_t::req_process_event_status, &msg, sizeof(msg), NULL, *net_id); } + g_ctrlm_ble_network.event_status_timer_tag = 0; + return false; } void ctrlm_obj_network_ble_t::populate_rcu_status_message(ctrlm_iarm_RcuStatus_params_t *msg) { @@ -2048,6 +2146,11 @@ ctrlm_controller_id_t ctrlm_obj_network_ble_t::controller_add(ctrlm_hal_ble_rcu_ controller->db_store(); } + + // Print out pairing table in a couple seconds to allow callbacks from bluez to finish + schedule_status_print(); + schedule_status_event(); + return id; } @@ -2075,13 +2178,9 @@ void ctrlm_obj_network_ble_t::ind_process_paired(void *data, int size) { return; } - ctrlm_controller_id_t id = controller_add(dqm->rcu_data); - if (controller_exists(id)) { - controllers_[id]->print_status(); - } + controller_add(dqm->rcu_data); // Sync currently connected devices with the HAL - if (ble_rcu_interface_) { auto devices = ble_rcu_interface_->getManagedDevices(); @@ -2145,9 +2244,9 @@ void ctrlm_obj_network_ble_t::ind_process_unpaired(void *data, int size) { controller_remove(id); controllers_.erase(id); - // report updated controller status to the plugin - printStatus(); - iarm_event_rcu_status(); + + schedule_status_print(); + schedule_status_event(); // Update xconf config file ctrlm_main_queue_msg_header_t *msg = (ctrlm_main_queue_msg_header_t *)g_malloc(sizeof(ctrlm_main_queue_msg_header_t)); @@ -2242,7 +2341,7 @@ void ctrlm_obj_network_ble_t::ind_process_keypress(void *data, int size) { XLOGD_INFO("Upgrade cancelled since remote is being used. Setting timer to resume upgrade in %d minutes.", CTRLM_BLE_UPGRADE_PAUSE_TIMEOUT / MINUTE_IN_MILLISECONDS); //delete existing timer and start again ctrlm_timeout_destroy(&g_ctrlm_ble_network.upgrade_pause_timer_tag); - g_ctrlm_ble_network.upgrade_pause_timer_tag = ctrlm_timeout_create(CTRLM_BLE_UPGRADE_PAUSE_TIMEOUT, ctrlm_ble_upgrade_resume, &id_); + g_ctrlm_ble_network.upgrade_pause_timer_tag = ctrlm_timeout_create(CTRLM_BLE_UPGRADE_PAUSE_TIMEOUT, ctrlm_ble_upgrade_resume_timer_cb, &id_); } else if (controller->getUpgradeStuck() && !upgrade_in_progress_) { @@ -2250,7 +2349,7 @@ void ctrlm_obj_network_ble_t::ind_process_keypress(void *data, int size) { controller->ieee_address_get().to_string().c_str()); //delete existing timer and immediately kick off another upgrade ctrlm_timeout_destroy(&g_ctrlm_ble_network.upgrade_pause_timer_tag); - g_ctrlm_ble_network.upgrade_pause_timer_tag = ctrlm_timeout_create(500, ctrlm_ble_upgrade_resume, &id_); + g_ctrlm_ble_network.upgrade_pause_timer_tag = ctrlm_timeout_create(500, ctrlm_ble_upgrade_resume_timer_cb, &id_); } } else if (key_status == CTRLM_KEY_STATUS_UP) { @@ -2395,8 +2494,7 @@ bool ctrlm_obj_network_ble_t::getControllerId(unsigned long long ieee_address, c } } if ( !found ) { - XLOGD_WARN("Controller matching ieee_address (%s) NOT FOUND.", - ctrlm_convert_mac_long_to_string(ieee_address).c_str()); + XLOGD_DEBUG("Controller matching ieee_address (%s) NOT FOUND.", ctrlm_convert_mac_long_to_string(ieee_address).c_str()); } return found; } @@ -2445,7 +2543,7 @@ ctrlm_controller_id_t ctrlm_obj_network_ble_t::controller_id_assign() { // Get the next available controller id for(ctrlm_controller_id_t index = BLE_RCU_ID_RANGE_MIN; index < BLE_RCU_ID_RANGE_MAX; index++) { if(!controller_exists(index)) { - XLOGD_INFO("controller id %u", index); + XLOGD_DEBUG("controller id %u", index); return(index); } } diff --git a/src/ble/ctrlm_ble_network.h b/src/ble/ctrlm_ble_network.h index 1182889a..90724d94 100644 --- a/src/ble/ctrlm_ble_network.h +++ b/src/ble/ctrlm_ble_network.h @@ -168,6 +168,11 @@ class ctrlm_obj_network_ble_t : public ctrlm_obj_network_t { virtual void req_process_cancel_controller_upgrade(void *data, int size); virtual void req_process_status_controller_upgrade(void *data, int size); + void schedule_status_print(bool immediately = false); + void schedule_status_event(bool immediately = false); + virtual void req_process_print_status(void *data, int size); + virtual void req_process_event_status(void *data, int size); + virtual json_t * xconf_export_controllers(); void addUpgradeImage(const ctrlm_ble_upgrade_image_info_t &image_info); void clearUpgradeImages(); @@ -215,6 +220,8 @@ class ctrlm_obj_network_ble_t : public ctrlm_obj_network_t { bool upgrade_in_progress_ = false; bool unpair_on_remote_request_ = true; ctrlm_ble_unpair_metrics_t last_rcu_unpair_metrics_; + int print_status_defer_count_ = 0; + int event_status_defer_count_ = 0; std::map controllers_; std::map upgrade_images_; diff --git a/src/ble/ctrlm_ble_rcu_interface.cpp b/src/ble/ctrlm_ble_rcu_interface.cpp index 6abecad1..a3d4218e 100644 --- a/src/ble/ctrlm_ble_rcu_interface.cpp +++ b/src/ble/ctrlm_ble_rcu_interface.cpp @@ -1422,7 +1422,7 @@ std::vector ctrlm_ble_rcu_interface_t::getManagedDevices() return ret; } - XLOGD_INFO("Get list of currently managed devices"); + XLOGD_DEBUG("Get list of currently managed devices"); auto devices = m_controller->managedDevices(); for (auto const &device : devices) { @@ -1507,8 +1507,8 @@ static int OpenKeyInputDevice(uint64_t ieee_address) uint64_t evdev_macaddr = ctrlm_convert_mac_string_to_long(libevdev_get_uniq(evdev)); if (evdev_macaddr == ieee_address) { - XLOGD_INFO("Input Dev Node (%s) for device (0x%llX) FOUND, returning file descriptor: <%d>", - keyInputFilename.c_str(), ieee_address, input_fd); + XLOGD_INFO("Input Dev Node (%s) for device: <%s> (0x%llX) FOUND, returning file descriptor: <%d>", + keyInputFilename.c_str(), libevdev_get_name(evdev), ieee_address, input_fd); libevdev_free(evdev); evdev = NULL; diff --git a/src/ble/hal/blercu/bleservices/gatt/gatt_audioservice_rdk.cpp b/src/ble/hal/blercu/bleservices/gatt/gatt_audioservice_rdk.cpp index 265a5d83..80897f10 100644 --- a/src/ble/hal/blercu/bleservices/gatt/gatt_audioservice_rdk.cpp +++ b/src/ble/hal/blercu/bleservices/gatt/gatt_audioservice_rdk.cpp @@ -468,7 +468,7 @@ void GattAudioServiceRdk::requestGainLevel() if (value.size() == 1) { m_gainLevel = value[0]; - XLOGD_INFO("Successfully read from RCU gain level = %u", m_gainLevel); + XLOGD_DEBUG("Successfully read from RCU gain level = %u", m_gainLevel); m_gainLevelChangedSlots.invoke(m_gainLevel); } else { XLOGD_ERROR("gain value received has invalid length (%d bytes)", value.size()); @@ -502,7 +502,7 @@ void GattAudioServiceRdk::requestAudioCodecs() if (value.size() == sizeof(m_audioCodecs)) { memcpy(&m_audioCodecs, value.data(), sizeof(m_audioCodecs)); - XLOGD_INFO("Successfully read from RCU audio codecs bit mask = 0x%X", m_audioCodecs); + XLOGD_DEBUG("Successfully read from RCU audio codecs bit mask = 0x%X", m_audioCodecs); m_audioCodecsChangedSlots.invoke(m_audioCodecs); } else { XLOGD_ERROR("audio codec received has invalid length (%d bytes)", value.size()); diff --git a/src/ble/hal/blercu/bleservices/gatt/gatt_batteryservice.cpp b/src/ble/hal/blercu/bleservices/gatt/gatt_batteryservice.cpp index 0dd84fcf..951674e7 100644 --- a/src/ble/hal/blercu/bleservices/gatt/gatt_batteryservice.cpp +++ b/src/ble/hal/blercu/bleservices/gatt/gatt_batteryservice.cpp @@ -275,7 +275,7 @@ void GattBatteryService::onBatteryLevelChanged(const std::vector &newVa return; } - XLOGD_INFO("battery level changed to %u%%", newValue[0]); + XLOGD_DEBUG("battery level changed to %u%%", newValue[0]); // clamp the reply between 0 and 100 unsigned int level = sanitiseBatteryLevel(newValue[0]); diff --git a/src/ble/hal/blercu/bleservices/gatt/gatt_deviceinfoservice.cpp b/src/ble/hal/blercu/bleservices/gatt/gatt_deviceinfoservice.cpp index f4955dfa..441dda76 100644 --- a/src/ble/hal/blercu/bleservices/gatt/gatt_deviceinfoservice.cpp +++ b/src/ble/hal/blercu/bleservices/gatt/gatt_deviceinfoservice.cpp @@ -239,11 +239,9 @@ void GattDeviceInfoService::onEnteredState(int state) */ void GattDeviceInfoService::onExitedState(int state) { - // on exiting the initialising state we should have all the required - // device info fields, so at this point log a milestone message with all - // the details + // on exiting the initialising state we should have all the required device info fields if (state == InitialisingState) { - XLOGD_INFO("bluetooth rcu device info [ %s / %s / hw:%s / fw:%s / sw:%s ]", + XLOGD_DEBUG("bluetooth rcu device info [ %s / %s / hw:%s / fw:%s / sw:%s ]", m_manufacturerName.c_str(), m_modelNumber.c_str(), m_hardwareRevision.c_str(), m_firmwareVersion.c_str(), m_softwareVersion.c_str()); @@ -380,7 +378,7 @@ void GattDeviceInfoService::setManufacturerName(const std::vector &valu if (name != m_manufacturerName) { m_manufacturerName = name; - XLOGD_INFO("manufacturer name: %s", m_manufacturerName.c_str()); + XLOGD_DEBUG("manufacturer name: %s", m_manufacturerName.c_str()); m_manufacturerNameChangedSlots.invoke(m_manufacturerName); } @@ -401,7 +399,7 @@ void GattDeviceInfoService::setModelNumber(const std::vector &value) if (model != m_modelNumber) { m_modelNumber = model; - XLOGD_INFO("model number: %s", m_modelNumber.c_str()); + XLOGD_DEBUG("model number: %s", m_modelNumber.c_str()); m_modelNumberChangedSlots.invoke(m_modelNumber); } @@ -422,7 +420,7 @@ void GattDeviceInfoService::setSerialNumber(const std::vector &value) if (serial != m_serialNumber) { m_serialNumber = serial; - XLOGD_INFO("serial number: %s", m_serialNumber.c_str()); + XLOGD_DEBUG("serial number: %s", m_serialNumber.c_str()); m_serialNumberChangedSlots.invoke(m_serialNumber); } @@ -443,7 +441,7 @@ void GattDeviceInfoService::setHardwareRevision(const std::vector &valu if (hwVersion != m_hardwareRevision) { m_hardwareRevision = hwVersion; - XLOGD_INFO("hardware revision: %s", m_hardwareRevision.c_str()); + XLOGD_DEBUG("hardware revision: %s", m_hardwareRevision.c_str()); m_hardwareRevisionChangedSlots.invoke(m_hardwareRevision); } @@ -465,7 +463,7 @@ void GattDeviceInfoService::setFirmwareVersion(const std::vector &value if (fwVersion != m_firmwareVersion) { m_firmwareVersion = fwVersion; - XLOGD_INFO("firmware version: %s", m_firmwareVersion.c_str()); + XLOGD_DEBUG("firmware version: %s", m_firmwareVersion.c_str()); m_firmwareVersionChangedSlots.invoke(m_firmwareVersion); } @@ -487,7 +485,7 @@ void GattDeviceInfoService::setSoftwareVersion(const std::vector &value if (swVersion != m_softwareVersion) { m_softwareVersion = swVersion; - XLOGD_INFO("software version: %s", m_softwareVersion.c_str()); + XLOGD_DEBUG("software version: %s", m_softwareVersion.c_str()); m_softwareVersionChangedSlots.invoke(m_softwareVersion); } @@ -518,7 +516,7 @@ void GattDeviceInfoService::setSystemId(const std::vector &value) (((uint64_t)value[6]) << 8) | (((uint64_t)value[7]) << 0); - XLOGD_INFO("system id: 0x%016llx", m_systemId); + XLOGD_DEBUG("system id: 0x%016llx", m_systemId); } // ----------------------------------------------------------------------------- diff --git a/src/ble/hal/blercu/bleservices/gatt/gatt_infraredservice.cpp b/src/ble/hal/blercu/bleservices/gatt/gatt_infraredservice.cpp index 40dff3c6..d7be62e4 100644 --- a/src/ble/hal/blercu/bleservices/gatt/gatt_infraredservice.cpp +++ b/src/ble/hal/blercu/bleservices/gatt/gatt_infraredservice.cpp @@ -449,7 +449,7 @@ void GattInfraredService::requestIrSupport() if (value.size() == 1) { uint8_t irSupport_ = value[0]; - XLOGD_INFO("IR support value = 0x%x", irSupport_); + XLOGD_DEBUG("IR support value = 0x%x", irSupport_); if (irSupport_ != m_irSupport) { m_irSupport = irSupport_; m_irSupportChangedSlots.invoke(m_irSupport); @@ -500,7 +500,7 @@ void GattInfraredService::requestCodeId() (int32_t(value[2]) << 16) | (int32_t(value[3]) << 24); - XLOGD_INFO("IR code ID = %d", codeId_); + XLOGD_DEBUG("IR code ID = %d", codeId_); if (codeId_ != m_codeId) { m_codeId = codeId_; diff --git a/src/ble/hal/blercu/bleservices/gatt/gatt_infraredsignal.cpp b/src/ble/hal/blercu/bleservices/gatt/gatt_infraredsignal.cpp index b5ecc8fb..351e5cb9 100644 --- a/src/ble/hal/blercu/bleservices/gatt/gatt_infraredsignal.cpp +++ b/src/ble/hal/blercu/bleservices/gatt/gatt_infraredsignal.cpp @@ -365,27 +365,27 @@ void GattInfraredSignal::onEnteredInitialisingState() switch (value[0]) { case 0x0C: m_keyCode = Key_PowerPrimary; - XLOGD_INFO("found characteristic for 0x%02hhx (Key_PowerPrimary)", value[0]); + XLOGD_DEBUG("found characteristic for 0x%02hhx (Key_PowerPrimary)", value[0]); break; case 0x0B: m_keyCode = Key_PowerSecondary; - XLOGD_INFO("found characteristic for 0x%02hhx (Key_PowerSecondary)", value[0]); + XLOGD_DEBUG("found characteristic for 0x%02hhx (Key_PowerSecondary)", value[0]); break; case 0x29: m_keyCode = Key_Input; - XLOGD_INFO("found characteristic for 0x%02hhx (Key_Input)", value[0]); + XLOGD_DEBUG("found characteristic for 0x%02hhx (Key_Input)", value[0]); break; case 0x10: m_keyCode = Key_VolUp; - XLOGD_INFO("found characteristic for 0x%02hhx (Key_VolUp)", value[0]); + XLOGD_DEBUG("found characteristic for 0x%02hhx (Key_VolUp)", value[0]); break; case 0x11: m_keyCode = Key_VolDown; - XLOGD_INFO("found characteristic for 0x%02hhx (Key_VolDown)", value[0]); + XLOGD_DEBUG("found characteristic for 0x%02hhx (Key_VolDown)", value[0]); break; case 0x0D: m_keyCode = Key_Mute; - XLOGD_INFO("found characteristic for 0x%02hhx (Key_Mute)", value[0]); + XLOGD_DEBUG("found characteristic for 0x%02hhx (Key_Mute)", value[0]); break; /* diff --git a/src/ble/hal/blercu/bleservices/gatt/gatt_remotecontrolservice.cpp b/src/ble/hal/blercu/bleservices/gatt/gatt_remotecontrolservice.cpp index a6c89198..2ec23b0a 100644 --- a/src/ble/hal/blercu/bleservices/gatt/gatt_remotecontrolservice.cpp +++ b/src/ble/hal/blercu/bleservices/gatt/gatt_remotecontrolservice.cpp @@ -279,7 +279,7 @@ void GattRemoteControlService::requestStartUnpairNotify() m_stateMachine.cancelDelayedEvents(RetryStartNotifyEvent); m_stateMachine.postDelayedEvent(RetryStartNotifyEvent, 2000); } else { - XLOGD_INFO("request to start notifications on Unpair characteristic succeeded"); + XLOGD_DEBUG("request to start notifications on Unpair characteristic succeeded"); } }; @@ -303,7 +303,7 @@ void GattRemoteControlService::requestStartRebootNotify() m_stateMachine.cancelDelayedEvents(RetryStartNotifyEvent); m_stateMachine.postDelayedEvent(RetryStartNotifyEvent, 2000); } else { - XLOGD_INFO("request to start notifications on Reboot Reason characteristic succeeded"); + XLOGD_DEBUG("request to start notifications on Reboot Reason characteristic succeeded"); } }; @@ -332,7 +332,7 @@ void GattRemoteControlService::requestRawBatteryVoltageChangedNotify() m_stateMachine.cancelDelayedEvents(RetryStartNotifyEvent); m_stateMachine.postDelayedEvent(RetryStartNotifyEvent, 2000); } else { - XLOGD_INFO("request to start notifications on Raw Battery Voltage characteristic succeeded"); + XLOGD_DEBUG("request to start notifications on Raw Battery Voltage characteristic succeeded"); } }; @@ -433,7 +433,7 @@ void GattRemoteControlService::requestUnpairReason() if (value.size() == 1) { m_unpairReason = value[0]; - XLOGD_INFO("Initial unpair reason is %u (%s)", m_unpairReason, + XLOGD_DEBUG("Initial unpair reason is %u (%s)", m_unpairReason, ctrlm_ble_unpair_reason_str((ctrlm_ble_RcuUnpairReason_t)m_unpairReason)); } else { XLOGD_ERROR("Unpair reason received has invalid length (%d bytes)", value.size()); @@ -468,7 +468,7 @@ void GattRemoteControlService::requestRebootReason() if (value.size() == 1) { m_rebootReason = value[0]; - XLOGD_INFO("Initial reboot reason is %u (%s)", m_rebootReason, + XLOGD_DEBUG("Initial reboot reason is %u (%s)", m_rebootReason, ctrlm_ble_reboot_reason_str((ctrlm_ble_RcuRebootReason_t)m_rebootReason)); if (m_rebootReason == CTRLM_BLE_RCU_REBOOT_REASON_ASSERT) { @@ -509,7 +509,7 @@ void GattRemoteControlService::requestAssertReport() if (value.size() == CTRLM_RCU_ASSERT_REPORT_MAX_SIZE) { string assertStr(value.begin(), value.end()); - XLOGD_INFO("Initial RCU assert report is <%s>", assertStr.c_str()); + XLOGD_DEBUG("Initial RCU assert report is <%s>", assertStr.c_str()); } else { XLOGD_ERROR("RCU assert report has invalid length (%d bytes)", value.size()); } @@ -545,7 +545,7 @@ void GattRemoteControlService::requestLastKeypress() if (value.size() == 1) { m_lastKeypress = value[0]; - XLOGD_INFO("Successfully read last key press characteristic, value = <0x%X>, emitting signal...", m_lastKeypress); + XLOGD_DEBUG("Successfully read last key press characteristic, value = <0x%X>, emitting signal...", m_lastKeypress); m_lastKeypressChangedSlots.invoke(m_lastKeypress); } else { XLOGD_ERROR("Last key press received has invalid length (%d bytes)", value.size()); @@ -625,7 +625,7 @@ void GattRemoteControlService::requestAdvConfig() if (value.size() == 1) { m_advConfig = value[0]; - XLOGD_INFO("Successfully read advertising config characteristic, value = <0x%X>, emitting signal...", m_advConfig); + XLOGD_DEBUG("Successfully read advertising config characteristic, value = <0x%X>, emitting signal...", m_advConfig); m_advConfigChangedSlots.invoke(m_advConfig); } else { XLOGD_ERROR("Advertising config received has invalid length (%d bytes)", value.size()); @@ -662,7 +662,7 @@ void GattRemoteControlService::requestAdvConfigCustomList() XLOGD_ERROR("Failed to read custom advertising config due to <%s>", reply->errorMessage().c_str()); } else { m_advConfigCustomList = reply->result(); - XLOGD_INFO("Successfully read advertising config custom list characteristic"); + XLOGD_DEBUG("Successfully read advertising config custom list characteristic"); m_advConfigCustomListChangedSlots.invoke(m_advConfigCustomList); } @@ -882,7 +882,7 @@ void GattRemoteControlService::onRebootReasonChanged(const vector &newV XLOGD_ERROR("Reboot reason received has invalid length (%d bytes)", newValue.size()); } else { m_rebootReason = newValue[0]; - XLOGD_INFO("reboot reason changed to %u (%s)", m_rebootReason, + XLOGD_DEBUG("reboot reason changed to %u (%s)", m_rebootReason, ctrlm_ble_reboot_reason_str((ctrlm_ble_RcuRebootReason_t)m_rebootReason)); if (m_rebootReason == CTRLM_BLE_RCU_REBOOT_REASON_ASSERT && m_assertReportCharacteristic) { diff --git a/src/ble/hal/blercu/bluez/blegattnotifypipe.cpp b/src/ble/hal/blercu/bluez/blegattnotifypipe.cpp index 6f54af37..1c9c0afc 100644 --- a/src/ble/hal/blercu/bluez/blegattnotifypipe.cpp +++ b/src/ble/hal/blercu/bluez/blegattnotifypipe.cpp @@ -183,7 +183,7 @@ BleGattNotifyPipe::BleGattNotifyPipe(int notifyPipeFd, uint16_t mtu, BleUuid uui m_notifyThread.name = "ble_notify"; sem_init(&m_notifyThreadSem, 0, 0); - XLOGD_INFO("Launching thread <%s> for %s...", m_notifyThread.name, m_uuid.toString().c_str()); + XLOGD_DEBUG("Launching thread <%s> for %s...", m_notifyThread.name, m_uuid.toString().c_str()); if (false == ThreadCreate(&m_notifyThread, NotifyThread, this)) { sem_destroy(&m_notifyThreadSem); } else { diff --git a/src/ctrlm_controller.cpp b/src/ctrlm_controller.cpp index 60173d47..9385708a 100644 --- a/src/ctrlm_controller.cpp +++ b/src/ctrlm_controller.cpp @@ -43,15 +43,15 @@ ctrlm_obj_controller_t::ctrlm_obj_controller_t(ctrlm_controller_id_t controller_ voice_metrics_(std::make_shared(&network, controller_id)), ota_failure_cnt_from_last_success_(std::make_shared("OTA Failure Count From Last Success", 0, &network, controller_id, "ota_failure_cnt_last_success")) { - XLOGD_INFO("constructor - %u", controller_id_); + XLOGD_DEBUG("constructor - %u", controller_id_); } ctrlm_obj_controller_t::ctrlm_obj_controller_t() { - XLOGD_INFO("constructor - default"); + XLOGD_DEBUG("constructor - default"); } ctrlm_obj_controller_t::~ctrlm_obj_controller_t() { - XLOGD_INFO("deconstructor - %u", controller_id_); + XLOGD_DEBUG("deconstructor - %u", controller_id_); } void ctrlm_obj_controller_t::db_load() { diff --git a/src/ctrlm_ir_controller.cpp b/src/ctrlm_ir_controller.cpp index 17db165b..3ab97b23 100644 --- a/src/ctrlm_ir_controller.cpp +++ b/src/ctrlm_ir_controller.cpp @@ -143,7 +143,7 @@ bool ctrlm_ir_controller_t::read_config() { string substr; getline( ss, substr, ',' ); if (!substr.empty()) { - XLOGD_INFO("Adding IR input device name: <%s>", substr.c_str()); + XLOGD_DEBUG("Adding IR input device name: <%s>", substr.c_str()); input_device_names_.push_back(substr); } } diff --git a/src/ctrlm_network.cpp b/src/ctrlm_network.cpp index 26201231..0e6f3a06 100644 --- a/src/ctrlm_network.cpp +++ b/src/ctrlm_network.cpp @@ -882,6 +882,14 @@ void ctrlm_obj_network_t::req_process_upgrade_controllers(void *data, int size) XLOGD_WARN("not implemented for %s network", name_get()); } +void ctrlm_obj_network_t::req_process_print_status(void *data, int size) { + XLOGD_WARN("not implemented for %s network", name_get()); +} + +void ctrlm_obj_network_t::req_process_event_status(void *data, int size) { + XLOGD_WARN("not implemented for %s network", name_get()); +} + void ctrlm_obj_network_t::req_process_start_controller_upgrade(void *data, int size) { ctrlm_main_queue_msg_start_controller_upgrade_t *dqm = (ctrlm_main_queue_msg_start_controller_upgrade_t *)data; diff --git a/src/ctrlm_network.h b/src/ctrlm_network.h index ca6ad547..592e6e84 100644 --- a/src/ctrlm_network.h +++ b/src/ctrlm_network.h @@ -288,6 +288,9 @@ class ctrlm_obj_network_t virtual void power_state_change(gboolean waking_up); time_t stale_remote_time_threshold_get(); + virtual void req_process_print_status(void *data, int size); + virtual void req_process_event_status(void *data, int size); + virtual void iarm_event_rcu_status(void); virtual void iarm_event_rcu_validation_status(void); virtual void iarm_event_rcu_firmware_status(const ctrlm_obj_controller_t &rcu); diff --git a/src/database/ctrlm_database.cpp b/src/database/ctrlm_database.cpp index dfe2bb21..e28e4432 100644 --- a/src/database/ctrlm_database.cpp +++ b/src/database/ctrlm_database.cpp @@ -2183,7 +2183,7 @@ void ctrlm_db_controller_create(ctrlm_network_id_t network_id, ctrlm_controller_ char table_name_controller_entry[CONTROLLER_TABLE_NAME_MAX_LEN]; char key[3]; - XLOGD_INFO("network id %u controller id %u", network_id, controller_id); + XLOGD_DEBUG("network id %u controller id %u", network_id, controller_id); switch(ctrlm_network_type_get(network_id)) { case CTRLM_NETWORK_TYPE_IP: diff --git a/src/database/ctrlm_db_types.cpp b/src/database/ctrlm_db_types.cpp index 0a464b06..362c9f3c 100644 --- a/src/database/ctrlm_db_types.cpp +++ b/src/database/ctrlm_db_types.cpp @@ -35,7 +35,7 @@ ctrlm_db_obj_t::~ctrlm_db_obj_t() { bool ctrlm_db_obj_t::read_db(ctrlm_db_ctx_t ctx) { bool ret = false; sqlite3 *handle = (sqlite3 *)ctx; - XLOGD_INFO("reading blob %s from table %s", this->key.c_str(), this->table.c_str()); + XLOGD_DEBUG("reading blob %s from table %s", this->key.c_str(), this->table.c_str()); if(handle) { sqlite3_stmt *stmt = NULL; std::string query = "SELECT value FROM " + this->table + " WHERE key='" + this->key + "';"; @@ -63,7 +63,7 @@ bool ctrlm_db_obj_t::read_db(ctrlm_db_ctx_t ctx) { bool ctrlm_db_obj_t::write_db(ctrlm_db_ctx_t ctx) { bool ret = false; sqlite3 *handle = (sqlite3 *)ctx; - XLOGD_INFO("writing blob %s to table %s", this->key.c_str(), this->table.c_str()); + XLOGD_DEBUG("writing blob %s to table %s", this->key.c_str(), this->table.c_str()); if(handle) { sqlite3_stmt *stmt = NULL; std::string query = "INSERT OR REPLACE INTO " + this->table + "(key,value) VALUES (?,?);"; From 57a79f582984922ce3b10500d47500b4bb26c5ca Mon Sep 17 00:00:00 2001 From: Gene Gallagher Date: Thu, 14 May 2026 23:47:28 +0000 Subject: [PATCH 3/5] apply some copilot review suggestions --- src/ble/ctrlm_ble_network.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/ble/ctrlm_ble_network.cpp b/src/ble/ctrlm_ble_network.cpp index 12df1f0f..5e623513 100644 --- a/src/ble/ctrlm_ble_network.cpp +++ b/src/ble/ctrlm_ble_network.cpp @@ -428,16 +428,13 @@ void ctrlm_obj_network_ble_t::start(GMainLoop* main_loop) } } - XLOGD_INFO("===================================================================="); - XLOGD_INFO(" %u Bound BLE Controllers", controllers_.size()); + XLOGD_INFO("%u bound BLE controllers", controllers_.size()); for(auto &controller : controllers_) { if (controller.second->is_stale(this->stale_remote_time_threshold_get())) { XLOGD_TELEMETRY("Stale remote suspected: <%s>", controller.second->ieee_address_get().to_string().c_str()); } } - XLOGD_INFO("===================================================================="); - // Print out pairing table in a couple seconds to allow callbacks from bluez to finish schedule_status_print(); // Read IR RF Database from database @@ -1994,6 +1991,7 @@ void ctrlm_obj_network_ble_t::schedule_status_print(bool immediately) { THREAD_ID_VALIDATE(); ctrlm_timeout_destroy(&g_ctrlm_ble_network.print_status_timer_tag); if (immediately || print_status_defer_count_ > CTRLM_BLE_PRINT_STATUS_DEFER_MAX) { + print_status_defer_count_ = 0; ctrlm_main_queue_msg_header_t msg; errno_t safec_rc = memset_s(&msg, sizeof(msg), 0, sizeof(msg)); ERR_CHK(safec_rc); @@ -2009,6 +2007,7 @@ void ctrlm_obj_network_ble_t::schedule_status_event(bool immediately) { THREAD_ID_VALIDATE(); ctrlm_timeout_destroy(&g_ctrlm_ble_network.event_status_timer_tag); if (immediately || event_status_defer_count_ > CTRLM_BLE_EVENT_STATUS_DEFER_MAX) { + event_status_defer_count_ = 0; ctrlm_main_queue_msg_header_t msg; errno_t safec_rc = memset_s(&msg, sizeof(msg), 0, sizeof(msg)); ERR_CHK(safec_rc); From 231d41817e1ae0f7939567e8d2d4104d9943dd7a Mon Sep 17 00:00:00 2001 From: Gene Gallagher Date: Fri, 15 May 2026 00:51:47 +0000 Subject: [PATCH 4/5] some more copilot comments --- src/ble/ctrlm_ble_network.cpp | 1 - src/ctrlm_controller.cpp | 2 +- src/ctrlm_network.cpp | 2 +- src/network/ctrlm_ir_rf_db.h | 2 +- src/rf4ce/ctrlm_rf4ce_controller.cpp | 2 +- src/rf4ce/ctrlm_rf4ce_network.cpp | 2 +- 6 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/ble/ctrlm_ble_network.cpp b/src/ble/ctrlm_ble_network.cpp index 5e623513..3117e4bd 100644 --- a/src/ble/ctrlm_ble_network.cpp +++ b/src/ble/ctrlm_ble_network.cpp @@ -2146,7 +2146,6 @@ ctrlm_controller_id_t ctrlm_obj_network_ble_t::controller_add(ctrlm_hal_ble_rcu_ controller->db_store(); } - // Print out pairing table in a couple seconds to allow callbacks from bluez to finish schedule_status_print(); schedule_status_event(); diff --git a/src/ctrlm_controller.cpp b/src/ctrlm_controller.cpp index 9385708a..0e7b175e 100644 --- a/src/ctrlm_controller.cpp +++ b/src/ctrlm_controller.cpp @@ -51,7 +51,7 @@ ctrlm_obj_controller_t::ctrlm_obj_controller_t() { } ctrlm_obj_controller_t::~ctrlm_obj_controller_t() { - XLOGD_DEBUG("deconstructor - %u", controller_id_); + XLOGD_DEBUG("destructor - %u", controller_id_); } void ctrlm_obj_controller_t::db_load() { diff --git a/src/ctrlm_network.cpp b/src/ctrlm_network.cpp index 0e6f3a06..8715c038 100644 --- a/src/ctrlm_network.cpp +++ b/src/ctrlm_network.cpp @@ -66,7 +66,7 @@ ctrlm_obj_network_t::ctrlm_obj_network_t() { } ctrlm_obj_network_t::~ctrlm_obj_network_t() { - XLOGD_INFO("deconstructor - Type (%u) Id (%u) Name (%s)", type_, id_, name_.c_str()); + XLOGD_INFO("destructor - Type (%u) Id (%u) Name (%s)", type_, id_, name_.c_str()); if(NULL != hal_api_term_) { ctrlm_network_term_hal_t *term_data; diff --git a/src/network/ctrlm_ir_rf_db.h b/src/network/ctrlm_ir_rf_db.h index c9f489a2..439bf1e0 100644 --- a/src/network/ctrlm_ir_rf_db.h +++ b/src/network/ctrlm_ir_rf_db.h @@ -43,7 +43,7 @@ class ctrlm_ir_rf_db_t { ctrlm_ir_rf_db_t(bool power_toggle_favor_tv = true, bool power_discrete_favor_tv = false); /** - * Default Deconstructor + * Default destructor */ virtual ~ctrlm_ir_rf_db_t(); diff --git a/src/rf4ce/ctrlm_rf4ce_controller.cpp b/src/rf4ce/ctrlm_rf4ce_controller.cpp index 960b3fd2..c298ab9e 100644 --- a/src/rf4ce/ctrlm_rf4ce_controller.cpp +++ b/src/rf4ce/ctrlm_rf4ce_controller.cpp @@ -212,7 +212,7 @@ ctrlm_obj_controller_rf4ce_t::ctrlm_obj_controller_rf4ce_t() { } ctrlm_obj_controller_rf4ce_t::~ctrlm_obj_controller_rf4ce_t() { - XLOGD_INFO("deconstructor"); + XLOGD_INFO("destructor"); if (metrics_tag_ != 0) { XLOGD_WARN("metrics timer destroyed"); diff --git a/src/rf4ce/ctrlm_rf4ce_network.cpp b/src/rf4ce/ctrlm_rf4ce_network.cpp index 5009c592..51b3eb53 100644 --- a/src/rf4ce/ctrlm_rf4ce_network.cpp +++ b/src/rf4ce/ctrlm_rf4ce_network.cpp @@ -303,7 +303,7 @@ ctrlm_obj_network_rf4ce_t::ctrlm_obj_network_rf4ce_t() { } ctrlm_obj_network_rf4ce_t::~ctrlm_obj_network_rf4ce_t() { - XLOGD_INFO("deconstructor"); + XLOGD_INFO("destructor"); for (auto timeout : bind_validation_failed_timeout_) { ctrlm_timeout_destroy(&timeout->timer_id); if (controller_exists(timeout->controller_id)){ From 22616f6b7ef5ac1f2ce211ff22cecafbe38cbfdf Mon Sep 17 00:00:00 2001 From: Gene Gallagher Date: Mon, 18 May 2026 18:31:19 +0000 Subject: [PATCH 5/5] fix a comment --- src/ble/ctrlm_ble_network.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ble/ctrlm_ble_network.cpp b/src/ble/ctrlm_ble_network.cpp index 3117e4bd..af626975 100644 --- a/src/ble/ctrlm_ble_network.cpp +++ b/src/ble/ctrlm_ble_network.cpp @@ -1719,7 +1719,7 @@ void ctrlm_obj_network_ble_t::ind_process_rcu_status(void *data, int size) { XLOGD_TELEMETRY("BLE remote RF pairing state changed to <%s>", ctrlm_rf_pair_state_str(dqm->state)); state_ = dqm->state; if (state_ == CTRLM_RF_PAIR_STATE_COMPLETE || state_ == CTRLM_RF_PAIR_STATE_IDLE) { - // report status in a couple seconds to allow remote data to be received from bluez + // allow some time for all remote data to be received before sending the event to avoid multiple events schedule_status_event(); } else { // for any other states, send event immediately.