@@ -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+ }
0 commit comments