Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,22 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).

<!-- auto-changelog-above -->

#### [1.1.6](https://github.com/rdkcentral/control/compare/1.1.5...1.1.6)

> 19 November 2025

- RDKEMW-9124 : remove xr-voice-sdk build flags - XRAUDIO_CURTAIL XLOG_CURTAIL [`#132`](https://github.com/rdkcentral/control/pull/132)
- RDKEMW-8676 : remove ctrlm build flags - MIC_TAP, LOCAL_MIC, LOCAL_MIC_DISABLE_VIA_PRIVACY [`#120`](https://github.com/rdkcentral/control/pull/120)
- RDKEMW-8664 : remove ctrlm build flags - MEM_DEBUG, ASSERT_ON_WRONG_THREAD [`#118`](https://github.com/rdkcentral/control/pull/118)
- RDKEMW-8297 : remove ctrlm build flags - A5000_ENABLE [`#117`](https://github.com/rdkcentral/control/pull/117)
- RDKEMW-8668 : modify ctrlm build flag - BREAKPAD [`#119`](https://github.com/rdkcentral/control/pull/119)
- RDKEMW-8296 : remove ctrlm build flags - DEEPSLEEP_CLOSE_DB [`#112`](https://github.com/rdkcentral/control/pull/112)
- RDKEMW-8295 : remove ctrlm build flags - MEMORY_LOCK [`#111`](https://github.com/rdkcentral/control/pull/111)
- RDKEMW-7905 : remove ctrlm build flags - ANSI_CODES_DISABLED [`#110`](https://github.com/rdkcentral/control/pull/110)
- Revert "RDKEMW-8929 (#129)" [`#145`](https://github.com/rdkcentral/control/pull/145)
- RDKEMW-10311 : RF4CE update key mapping [`#140`](https://github.com/rdkcentral/control/pull/140)
- RDKEMW-10164: update CHANGELOG for release v1.1.5 [`#139`](https://github.com/rdkcentral/control/pull/139)

#### [1.1.5](https://github.com/rdkcentral/control/compare/1.1.4...1.1.5)

> 5 November 2025
Expand Down
79 changes: 59 additions & 20 deletions src/ble/ctrlm_ble_network.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -525,7 +525,6 @@ void ctrlm_obj_network_ble_t::req_process_voice_session_begin(void *data, int si

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

ctrlm_voice_format_t voice_format = { .type = CTRLM_VOICE_FORMAT_INVALID };

Expand All @@ -543,43 +542,43 @@ void ctrlm_obj_network_ble_t::req_process_voice_session_begin(void *data, int si
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);

pressAndHoldSupport = audio_format.getPressAndHoldSupport();
if(!pressAndHoldSupport) {
streamEnd = CTRLM_HAL_BLE_VOICE_STREAM_END_ON_AUDIO_DURATION;
}
controllers_[controller_id]->setPressAndHoldSupport(pressAndHoldSupport);
}
}

ctrlm_voice_start_audio_params_t audio_start_params;
audio_start_params.m_controller_id = controller_id;
audio_start_params.m_fd = -1;
audio_start_params.m_started = false;
auto audio_start_cb = std::bind(&ctrlm_obj_network_ble_t::start_controller_audio_streaming, this, std::placeholders::_1);

voice_status = ctrlm_get_voice_obj()->voice_session_req(network_id_get(), controller_id, device, voice_format, NULL,
controllers_[controller_id]->get_model().c_str(),
controllers_[controller_id]->get_sw_revision().to_string().c_str(),
controllers_[controller_id]->get_hw_revision().to_string().c_str(), 0.0,
false, NULL, NULL, NULL, true, pressAndHoldSupport);
false, NULL, NULL, NULL, true, pressAndHoldSupport, audio_start_cb, &audio_start_params);
if (!controllers_[controller_id]->get_capabilities().has_capability(ctrlm_controller_capabilities_t::capability::PAR) && (VOICE_SESSION_RESPONSE_AVAILABLE_PAR_VOICE == voice_status)) {
XLOGD_WARN("PAR voice is enabled but not supported by BLE controller treating as normal voice session");
voice_status = VOICE_SESSION_RESPONSE_AVAILABLE;
}
if (VOICE_SESSION_RESPONSE_AVAILABLE != voice_status) {
XLOGD_TELEMETRY("Failed opening voice session in ctrlm_voice_t, error = <%d>", voice_status);
} else {
int fd = -1;
bool success = false;

if (ble_rcu_interface_) {
int fd = -1;

if (!ble_rcu_interface_->startAudioStreaming(ieee_address, encoding, streamEnd, fd)) {
XLOGD_ERROR("failed to start audio streaming on remote");
} else {
if (!audio_start_params.m_started) { // voice session req did not need to start audio
start_controller_audio_streaming(&audio_start_params);
}
fd = audio_start_params.m_fd;

if (fd < 0) {
XLOGD_ERROR("Voice streaming pipe invalid (fd = <%d>), aborting voice session", fd);
success = false;
} else {
XLOGD_INFO("Acquired voice streaming pipe fd = <%d>, sending to voice engine", fd);
//Send the fd acquired from bluez to the voice engine
success = ctrlm_get_voice_obj()->voice_session_data(network_id_get(), controller_id, fd);
}
}
if (fd < 0) {
XLOGD_ERROR("Voice streaming pipe invalid (fd = <%d>), aborting voice session", fd);
success = false;
} else {
XLOGD_INFO("Acquired voice streaming pipe fd = <%d>, sending to voice engine", fd);
//Send the fd acquired from bluez to the voice engine
success = ctrlm_get_voice_obj()->voice_session_data(network_id_get(), controller_id, fd);
}

if (false == success) {
Expand Down Expand Up @@ -2616,3 +2615,43 @@ ctrlm_controller_id_t ctrlm_obj_network_ble_t::find_controller_from_upgrade_sess
}
return id;
}

void ctrlm_obj_network_ble_t::start_controller_audio_streaming(ctrlm_voice_start_audio_params_t *params) {
THREAD_ID_VALIDATE();
int fd = -1;
ctrlm_controller_id_t id = params->m_controller_id;
params->m_fd = fd;
params->m_started = false;

if (!ready_) {
XLOGD_FATAL("Network is not ready!");
return;
}

if(!controller_exists(id)) {
XLOGD_WARN("Controller %u doesn't exist.", id);
return;
}

if (!ble_rcu_interface_) {
XLOGD_WARN("ble rcu interface not ready");
return;
}

ctrlm_hal_ble_VoiceEncoding_t encoding = CTRLM_HAL_BLE_ENCODING_ADPCM;
ctrlm_hal_ble_VoiceStreamEnd_t streamEnd = CTRLM_HAL_BLE_VOICE_STREAM_END_ON_KEY_UP;
auto rcu = controllers_.at(id);

if (rcu->getPressAndHoldSupport()) {
streamEnd = CTRLM_HAL_BLE_VOICE_STREAM_END_ON_AUDIO_DURATION;
}

uint64_t ieee_address = rcu->ieee_address_get().get_value();
if (!ble_rcu_interface_->startAudioStreaming(ieee_address, encoding, streamEnd, fd)) {
XLOGD_ERROR("failed to start audio streaming on remote");
return;
}

params->m_fd = fd;
params->m_started = true;
}
2 changes: 2 additions & 0 deletions src/ble/ctrlm_ble_network.h
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,8 @@ class ctrlm_obj_network_ble_t : public ctrlm_obj_network_t {

std::shared_ptr<ConfigSettings> getConfigSettings();

virtual void start_controller_audio_streaming(ctrlm_voice_start_audio_params_t *params);

private:
ctrlm_obj_network_ble_t();

Expand Down
5 changes: 5 additions & 0 deletions src/ctrlm_network.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1074,3 +1074,8 @@ void ctrlm_obj_network_t::iarm_event_rcu_firmware_status(const ctrlm_obj_control
}
#endif
}

void ctrlm_obj_network_t::start_controller_audio_streaming(ctrlm_voice_start_audio_params_t *params) {
XLOGD_WARN("not implemented for %s network", name_get());
return;
}
2 changes: 2 additions & 0 deletions src/ctrlm_network.h
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,8 @@ class ctrlm_obj_network_t
virtual void iarm_event_rcu_validation_status(void);
virtual void iarm_event_rcu_firmware_status(const ctrlm_obj_controller_t &rcu);

virtual void start_controller_audio_streaming(ctrlm_voice_start_audio_params_t *params);

// Internal methods

std::string version_;
Expand Down
Loading
Loading