Skip to content

Commit d81cb6a

Browse files
committed
Merge branch 'develop' into feature/RDKEMW-9474_multiple_IRDBs
2 parents c57ecfe + 4f688c6 commit d81cb6a

24 files changed

Lines changed: 305 additions & 169 deletions

CHANGELOG.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,16 @@ All notable changes to this project will be documented in this file. Dates are d
9595
### Fixed
9696
- crash during OTA interrupted by unpair or reset
9797

98-
9998
<!-- auto-changelog-above -->
10099

100+
#### [1.1.7](https://github.com/rdkcentral/control/compare/1.1.6...1.1.7)
101+
102+
> 4 December 2025
103+
104+
- RDKEMW-11159: new_certselector_type [`#157`](https://github.com/rdkcentral/control/pull/157)
105+
- RDKEMW-10425: Automation Logging [`#144`](https://github.com/rdkcentral/control/pull/144)
106+
- RDKEMW-9600: FIRST_PACKET_TIMEOUTs [`#135`](https://github.com/rdkcentral/control/pull/135)
107+
101108
#### [1.1.6](https://github.com/rdkcentral/control/compare/1.1.5...1.1.6)
102109

103110
> 19 November 2025

src/auth/ctrlm_auth_certificate.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ ctrlm_auth_certificate_t::ctrlm_auth_certificate_t() {
4242

4343
char *cert_path = NULL;
4444
char *cert_password = NULL;
45-
rdkcertselector_h cert_selector = rdkcertselector_new( NULL, NULL, "MTLS" );
45+
rdkcertselector_h cert_selector = rdkcertselector_new( NULL, NULL, "FBK_MTLS" );
4646

4747
if(cert_selector == NULL){
4848
XLOGD_TELEMETRY("cert selector init failed");

src/ble/ctrlm_ble_controller.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -629,13 +629,13 @@ void ctrlm_obj_controller_ble_t::print_status() {
629629
XLOGD_INFO("Model : %s", model_->to_string().c_str());
630630
XLOGD_INFO("MAC Address : %s", ieee_address_->to_string().c_str());
631631
XLOGD_INFO("Device Minor ID : %d", device_minor_id_);
632-
XLOGD_INFO("Battery Level : %u%%", get_battery_percent());
632+
XLOGD_AUTOMATION_INFO("Battery Level : %u%%", get_battery_percent());
633633
XLOGD_INFO("HW Revision : %s", hw_revision_->to_string().c_str());
634634
XLOGD_INFO("FW Revision : %s", fw_revision_->to_string().c_str());
635-
XLOGD_INFO("SW Revision : %s", sw_revision_->to_string().c_str());
635+
XLOGD_AUTOMATION_INFO("SW Revision : %s", sw_revision_->to_string().c_str());
636636
XLOGD_INFO("Serial Number : %s", serial_number_->to_string().c_str());
637637
XLOGD_INFO("");
638-
XLOGD_INFO("Connected : %s", (connected_==true) ? "true" : "false");
638+
XLOGD_AUTOMATION_INFO("Connected : %s", (connected_==true) ? "true" : "false");
639639
XLOGD_INFO("Last Activity Time : %s", ctrlm_utils_time_as_string(this->last_activity_time_get()).c_str());
640640
XLOGD_INFO("Bound Time : %s", ctrlm_utils_time_as_string(this->time_binding_get()).c_str());
641641
XLOGD_INFO("");

src/ble/ctrlm_ble_network.cpp

Lines changed: 69 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -525,7 +525,6 @@ void ctrlm_obj_network_ble_t::req_process_voice_session_begin(void *data, int si
525525

526526
// only support ADPCM from ble-rcu component
527527
ctrlm_hal_ble_VoiceEncoding_t encoding = CTRLM_HAL_BLE_ENCODING_ADPCM;
528-
ctrlm_hal_ble_VoiceStreamEnd_t streamEnd = CTRLM_HAL_BLE_VOICE_STREAM_END_ON_KEY_UP;
529528

530529
ctrlm_voice_format_t voice_format = { .type = CTRLM_VOICE_FORMAT_INVALID };
531530

@@ -543,43 +542,43 @@ void ctrlm_obj_network_ble_t::req_process_voice_session_begin(void *data, int si
543542
audio_format.getHeaderInfoAdpcm(adpcm_frame->offset_step_size_index, adpcm_frame->offset_predicted_sample_lsb, adpcm_frame->offset_predicted_sample_msb, adpcm_frame->offset_sequence_value, adpcm_frame->shift_sequence_value, adpcm_frame->sequence_value_min, adpcm_frame->sequence_value_max);
544543

545544
pressAndHoldSupport = audio_format.getPressAndHoldSupport();
546-
if(!pressAndHoldSupport) {
547-
streamEnd = CTRLM_HAL_BLE_VOICE_STREAM_END_ON_AUDIO_DURATION;
548-
}
549545
controllers_[controller_id]->setPressAndHoldSupport(pressAndHoldSupport);
550546
}
551547
}
552548

549+
ctrlm_voice_start_audio_params_t audio_start_params;
550+
audio_start_params.m_controller_id = controller_id;
551+
audio_start_params.m_fd = -1;
552+
audio_start_params.m_started = false;
553+
auto audio_start_cb = std::bind(&ctrlm_obj_network_ble_t::start_controller_audio_streaming, this, std::placeholders::_1);
554+
553555
voice_status = ctrlm_get_voice_obj()->voice_session_req(network_id_get(), controller_id, device, voice_format, NULL,
554556
controllers_[controller_id]->get_model().c_str(),
555557
controllers_[controller_id]->get_sw_revision().to_string().c_str(),
556558
controllers_[controller_id]->get_hw_revision().to_string().c_str(), 0.0,
557-
false, NULL, NULL, NULL, true, pressAndHoldSupport);
559+
false, NULL, NULL, NULL, true, pressAndHoldSupport, audio_start_cb, &audio_start_params);
558560
if (!controllers_[controller_id]->get_capabilities().has_capability(ctrlm_controller_capabilities_t::capability::PAR) && (VOICE_SESSION_RESPONSE_AVAILABLE_PAR_VOICE == voice_status)) {
559561
XLOGD_WARN("PAR voice is enabled but not supported by BLE controller treating as normal voice session");
560562
voice_status = VOICE_SESSION_RESPONSE_AVAILABLE;
561563
}
562564
if (VOICE_SESSION_RESPONSE_AVAILABLE != voice_status) {
563565
XLOGD_TELEMETRY("Failed opening voice session in ctrlm_voice_t, error = <%d>", voice_status);
564566
} else {
567+
int fd = -1;
565568
bool success = false;
566569

567-
if (ble_rcu_interface_) {
568-
int fd = -1;
569-
570-
if (!ble_rcu_interface_->startAudioStreaming(ieee_address, encoding, streamEnd, fd)) {
571-
XLOGD_ERROR("failed to start audio streaming on remote");
572-
} else {
570+
if (!audio_start_params.m_started) { // voice session req did not need to start audio
571+
start_controller_audio_streaming(&audio_start_params);
572+
}
573+
fd = audio_start_params.m_fd;
573574

574-
if (fd < 0) {
575-
XLOGD_ERROR("Voice streaming pipe invalid (fd = <%d>), aborting voice session", fd);
576-
success = false;
577-
} else {
578-
XLOGD_INFO("Acquired voice streaming pipe fd = <%d>, sending to voice engine", fd);
579-
//Send the fd acquired from bluez to the voice engine
580-
success = ctrlm_get_voice_obj()->voice_session_data(network_id_get(), controller_id, fd);
581-
}
582-
}
575+
if (fd < 0) {
576+
XLOGD_ERROR("Voice streaming pipe invalid (fd = <%d>), aborting voice session", fd);
577+
success = false;
578+
} else {
579+
XLOGD_AUTOMATION_INFO("Acquired voice streaming pipe fd = <%d>, sending to voice engine", fd);
580+
//Send the fd acquired from bluez to the voice engine
581+
success = ctrlm_get_voice_obj()->voice_session_data(network_id_get(), controller_id, fd);
583582
}
584583

585584
if (false == success) {
@@ -1826,7 +1825,7 @@ void ctrlm_obj_network_ble_t::ind_process_rcu_status(void *data, int size) {
18261825
print_status = false;
18271826
break;
18281827
case CTRLM_HAL_BLE_PROPERTY_IS_UPGRADING:
1829-
XLOGD_INFO("Controller <%s> firmware upgrading = %s", controller->ieee_address_get().to_string().c_str(), dqm->rcu_data.is_upgrading ? "TRUE" : "FALSE");
1828+
XLOGD_AUTOMATION_INFO("Controller <%s> firmware upgrading = %s", controller->ieee_address_get().to_string().c_str(), dqm->rcu_data.is_upgrading ? "TRUE" : "FALSE");
18301829
upgrade_in_progress_ = dqm->rcu_data.is_upgrading;
18311830
if (!dqm->rcu_data.is_upgrading) {
18321831
// If we get FALSE here, make sure the controller upgrade progress flag is cleared. But we don't want to set the controller progress
@@ -1837,7 +1836,7 @@ void ctrlm_obj_network_ble_t::ind_process_rcu_status(void *data, int size) {
18371836
print_status = false;
18381837
break;
18391838
case CTRLM_HAL_BLE_PROPERTY_UPGRADE_PROGRESS:
1840-
XLOGD_INFO("Controller <%s> firmware upgrade %d%% complete...", controller->ieee_address_get().to_string().c_str(), dqm->rcu_data.upgrade_progress);
1839+
XLOGD_AUTOMATION_INFO("Controller <%s> firmware upgrade %d%% complete...", controller->ieee_address_get().to_string().c_str(), dqm->rcu_data.upgrade_progress);
18411840
// From a controller perspective, we cannot use the CTRLM_HAL_BLE_PROPERTY_IS_UPGRADING flag above to determine if its actively upgrading.
18421841
// Instead, its more accurate to use the progress percentage to determine if the remote is actively receiving firmware packets.
18431842
controller->setUpgradeInProgress(dqm->rcu_data.upgrade_progress > 0 && dqm->rcu_data.upgrade_progress < 100);
@@ -1850,7 +1849,7 @@ void ctrlm_obj_network_ble_t::ind_process_rcu_status(void *data, int size) {
18501849
print_status = false;
18511850
break;
18521851
case CTRLM_HAL_BLE_PROPERTY_UPGRADE_ERROR:
1853-
XLOGD_ERROR("Controller <%s> firmware upgrade FAILED with error <%s>.", controller->ieee_address_get().to_string().c_str(), dqm->rcu_data.upgrade_error);
1852+
XLOGD_AUTOMATION_ERROR("Controller <%s> firmware upgrade FAILED with error <%s>.", controller->ieee_address_get().to_string().c_str(), dqm->rcu_data.upgrade_error);
18541853
report_status = false;
18551854
print_status = false;
18561855
controller->set_upgrade_error(dqm->rcu_data.upgrade_error);
@@ -1883,7 +1882,7 @@ void ctrlm_obj_network_ble_t::ind_process_rcu_status(void *data, int size) {
18831882
controller->ota_failure_cnt_incr();
18841883
break;
18851884
case CTRLM_HAL_BLE_PROPERTY_UNPAIR_REASON:
1886-
XLOGD_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));
1885+
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));
18871886
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)));
18881887
report_status = false;
18891888
print_status = false;
@@ -1898,7 +1897,7 @@ void ctrlm_obj_network_ble_t::ind_process_rcu_status(void *data, int size) {
18981897
}
18991898
break;
19001899
case CTRLM_HAL_BLE_PROPERTY_REBOOT_REASON:
1901-
XLOGD_TELEMETRY("Controller <%s> notified reason for rebooting = <%s%s%s%s>",
1900+
XLOGD_AUTOMATION_TELEMETRY("Controller <%s> notified reason for rebooting = <%s%s%s%s>",
19021901
controller->ieee_address_get().to_string().c_str(),
19031902
ctrlm_ble_reboot_reason_str(dqm->rcu_data.reboot_reason),
19041903
dqm->rcu_data.reboot_reason == CTRLM_BLE_RCU_REBOOT_REASON_ASSERT ? " - \"" : "",
@@ -2206,7 +2205,7 @@ void ctrlm_obj_network_ble_t::ind_process_keypress(void *data, int size) {
22062205
controller->setVoiceStartTime(keyDownTime);
22072206

22082207
XLOGD_INFO("------------------------------------------------------------------------");
2209-
XLOGD_INFO("CODE_VOICE_KEY button PRESSED event for device: %s", controller->ieee_address_get().to_string().c_str());
2208+
XLOGD_AUTOMATION_INFO("CODE_VOICE_KEY button PRESSED event for device: %s", controller->ieee_address_get().to_string().c_str());
22102209
XLOGD_INFO("------------------------------------------------------------------------");
22112210

22122211
ctrlm_voice_iarm_call_voice_session_t v_params;
@@ -2256,7 +2255,7 @@ void ctrlm_obj_network_ble_t::ind_process_keypress(void *data, int size) {
22562255
if (controller->isVoiceKey(dqm->event.code)) {
22572256
if(!controller->getPressAndHoldSupport()) { // if the voice session is "Press and Release" then don't end session on voice key up event
22582257
XLOGD_INFO("------------------------------------------------------------------------");
2259-
XLOGD_INFO("CODE_VOICE_KEY button RELEASED event for device: %s (ignored for PAR session)", controller->ieee_address_get().to_string().c_str());
2258+
XLOGD_AUTOMATION_INFO("CODE_VOICE_KEY button RELEASED event for device: %s (ignored for PAR session)", controller->ieee_address_get().to_string().c_str());
22602259
XLOGD_INFO("------------------------------------------------------------------------");
22612260
} else {
22622261
rdkx_timestamp_t keyUpTime, keyUpTimeLocal, voiceStartTimeLocal, firstAudioDataTime;
@@ -2291,11 +2290,11 @@ void ctrlm_obj_network_ble_t::ind_process_keypress(void *data, int size) {
22912290
}
22922291

22932292
XLOGD_INFO("------------------------------------------------------------------------");
2294-
XLOGD_INFO("CODE_VOICE_KEY button RELEASED event for device: %s duration <%lld ms> start lag <%lld ms>", controller->ieee_address_get().to_string().c_str(), audioDurationKeys, startAudioLag);
2293+
XLOGD_AUTOMATION_INFO("CODE_VOICE_KEY button RELEASED event for device: %s duration <%lld ms> start lag <%lld ms>", controller->ieee_address_get().to_string().c_str(), audioDurationKeys, startAudioLag);
22952294
XLOGD_INFO("------------------------------------------------------------------------");
22962295
} else {
22972296
XLOGD_INFO("------------------------------------------------------------------------");
2298-
XLOGD_INFO("CODE_VOICE_KEY button RELEASED event for device: %s duration <%lld ms>", controller->ieee_address_get().to_string().c_str(), audioDurationKeys);
2297+
XLOGD_AUTOMATION_INFO("CODE_VOICE_KEY button RELEASED event for device: %s duration <%lld ms>", controller->ieee_address_get().to_string().c_str(), audioDurationKeys);
22992298
XLOGD_INFO("------------------------------------------------------------------------");
23002299
}
23012300

@@ -2498,7 +2497,7 @@ void ctrlm_obj_network_ble_t::printStatus() {
24982497
it->second->print_status();
24992498
}
25002499
XLOGD_INFO("BLE Network Status: <%s>", ctrlm_rf_pair_state_str(state_));
2501-
XLOGD_TELEMETRY("IR Programming Status: <%s>", ctrlm_ir_state_str(ir_state_));
2500+
XLOGD_AUTOMATION_TELEMETRY("IR Programming Status: <%s>", ctrlm_ir_state_str(ir_state_));
25022501
XLOGD_WARN("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
25032502
}
25042503

@@ -2616,3 +2615,43 @@ ctrlm_controller_id_t ctrlm_obj_network_ble_t::find_controller_from_upgrade_sess
26162615
}
26172616
return id;
26182617
}
2618+
2619+
void ctrlm_obj_network_ble_t::start_controller_audio_streaming(ctrlm_voice_start_audio_params_t *params) {
2620+
THREAD_ID_VALIDATE();
2621+
int fd = -1;
2622+
ctrlm_controller_id_t id = params->m_controller_id;
2623+
params->m_fd = fd;
2624+
params->m_started = false;
2625+
2626+
if (!ready_) {
2627+
XLOGD_FATAL("Network is not ready!");
2628+
return;
2629+
}
2630+
2631+
if(!controller_exists(id)) {
2632+
XLOGD_WARN("Controller %u doesn't exist.", id);
2633+
return;
2634+
}
2635+
2636+
if (!ble_rcu_interface_) {
2637+
XLOGD_WARN("ble rcu interface not ready");
2638+
return;
2639+
}
2640+
2641+
ctrlm_hal_ble_VoiceEncoding_t encoding = CTRLM_HAL_BLE_ENCODING_ADPCM;
2642+
ctrlm_hal_ble_VoiceStreamEnd_t streamEnd = CTRLM_HAL_BLE_VOICE_STREAM_END_ON_KEY_UP;
2643+
auto rcu = controllers_.at(id);
2644+
2645+
if (rcu->getPressAndHoldSupport()) {
2646+
streamEnd = CTRLM_HAL_BLE_VOICE_STREAM_END_ON_AUDIO_DURATION;
2647+
}
2648+
2649+
uint64_t ieee_address = rcu->ieee_address_get().get_value();
2650+
if (!ble_rcu_interface_->startAudioStreaming(ieee_address, encoding, streamEnd, fd)) {
2651+
XLOGD_ERROR("failed to start audio streaming on remote");
2652+
return;
2653+
}
2654+
2655+
params->m_fd = fd;
2656+
params->m_started = true;
2657+
}

src/ble/ctrlm_ble_network.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,8 @@ class ctrlm_obj_network_ble_t : public ctrlm_obj_network_t {
192192

193193
std::shared_ptr<ConfigSettings> getConfigSettings();
194194

195+
virtual void start_controller_audio_streaming(ctrlm_voice_start_audio_params_t *params);
196+
195197
private:
196198
ctrlm_obj_network_ble_t();
197199

src/ble/hal/blercu/blercupairingstatemachine.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -517,19 +517,19 @@ void BleRcuPairingStateMachine::onStateTransition(int oldState, int newState)
517517
{
518518
if (newState == FinishedState) {
519519
if (oldState == UnpairingState) {
520-
XLOGD_WARN("timed-out in un-pairing phase (failed rcu may be left paired)");
520+
XLOGD_AUTOMATION_WARN("timed-out in un-pairing phase (failed rcu may be left paired)");
521521
} else if (oldState == StartingDiscoveryState) {
522-
XLOGD_ERROR("timed-out waiting for discovery started signal");
522+
XLOGD_AUTOMATION_ERROR("timed-out waiting for discovery started signal");
523523
} else if (oldState == DiscoveringState) {
524-
XLOGD_ERROR("timed-out in discovery phase (didn't find target rcu device to pair to)");
524+
XLOGD_AUTOMATION_ERROR("timed-out in discovery phase (didn't find target rcu device to pair to)");
525525
} else if (oldState == StoppingDiscoveryState) {
526-
XLOGD_ERROR("timed-out waiting for discovery to stop (suggesting something has gone wrong inside bluez)");
526+
XLOGD_AUTOMATION_ERROR("timed-out waiting for discovery to stop (suggesting something has gone wrong inside bluez)");
527527
}
528528
} else if (newState == UnpairingState) {
529529
if (oldState == EnablePairableState || oldState == PairingState) {
530-
XLOGD_WARN("timed-out in pairing phase (rcu device didn't pair within %dms)", m_pairingTimeout);
530+
XLOGD_AUTOMATION_WARN("timed-out in pairing phase (rcu device didn't pair within %dms)", m_pairingTimeout);
531531
} else if (oldState == SetupState) {
532-
XLOGD_WARN("timed-out in setup phase (rcu didn't response to all requests within %dms)", m_setupTimeout);
532+
XLOGD_AUTOMATION_WARN("timed-out in setup phase (rcu didn't response to all requests within %dms)", m_setupTimeout);
533533
}
534534
}
535535
}

src/ble/hal/blercu/bluez/blercuadapter.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1721,7 +1721,7 @@ void BleRcuAdapterBluez::onDevicePairedChanged(const BleAddress &address,
17211721
void BleRcuAdapterBluez::onDeviceReadyChanged(const BleAddress &address,
17221722
bool ready)
17231723
{
1724-
XLOGD_INFO("device with address %s is %sREADY", address.toString().c_str(), ready ? "" : "NOT ");
1724+
XLOGD_AUTOMATION_INFO("device with address %s is %sREADY", address.toString().c_str(), ready ? "" : "NOT ");
17251725

17261726
map<BleAddress, shared_ptr<BleRcuDeviceBluez>>::const_iterator it = m_devices.find(address);
17271727

@@ -1768,7 +1768,7 @@ bool BleRcuAdapterBluez::setConnectionParams(BleAddress address, double minInter
17681768

17691769
if (address == deviceInfo.address) {
17701770

1771-
XLOGD_INFO("HCI connection handle: %u, device: %s requesting an update of connection parameters to "
1771+
XLOGD_AUTOMATION_INFO("HCI connection handle: %u, device: %s requesting an update of connection parameters to "
17721772
"minInterval=%f, maxInterval=%f, latency=%d, supervisionTimeout=%d",
17731773
deviceInfo.handle, deviceInfo.address.toString().c_str(),
17741774
minInterval, maxInterval, latency, supervisionTimeout);

src/ble/hal/blercu/bluez/blercudevice.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -668,7 +668,7 @@ void BleRcuDeviceBluez::onEnteredRecoveryDisconnectingState()
668668
m_recoveryAttempts++;
669669

670670
// log the attempt
671-
XLOGD_ERROR("entered recovery state after device %s failed to resolve services (attempt #%d)",
671+
XLOGD_AUTOMATION_ERROR("entered recovery state after device %s failed to resolve services (attempt #%d)",
672672
m_address.toString().c_str(), m_recoveryAttempts);
673673

674674

0 commit comments

Comments
 (0)