mirror of
				https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
				synced 2025-11-03 09:01:50 -05:00 
			
		
		
		
	bluetooth: use native and ofono backends in parallel with headset=auto
This patch changes the behavior of the headset=auto switch for module-bluez5-discover. With headset=auto now both backends will be active at the same time for the AG role and the switching between the backends is only done for the HS role. headset=ofono and headset=native remain unchanged. This allows to use old HSP only headsets while running ofono and to have headset support via pulseaudio if ofono is started with the --noplugin=hfp_ag_bluez5 option.
This commit is contained in:
		
							parent
							
								
									d065e4d114
								
							
						
					
					
						commit
						adc2e8cd0a
					
				
					 3 changed files with 27 additions and 13 deletions
				
			
		| 
						 | 
				
			
			@ -40,6 +40,7 @@ struct pa_bluetooth_backend {
 | 
			
		|||
  pa_core *core;
 | 
			
		||||
  pa_dbus_connection *connection;
 | 
			
		||||
  pa_bluetooth_discovery *discovery;
 | 
			
		||||
  bool enable_hs_role;
 | 
			
		||||
 | 
			
		||||
  PA_LLIST_HEAD(pa_dbus_pending, pending);
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -657,7 +658,20 @@ static void profile_done(pa_bluetooth_backend *b, pa_bluetooth_profile_t profile
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pa_bluetooth_backend *pa_bluetooth_native_backend_new(pa_core *c, pa_bluetooth_discovery *y) {
 | 
			
		||||
void pa_bluetooth_native_backend_enable_hs_role(pa_bluetooth_backend *native_backend, bool enable_hs_role) {
 | 
			
		||||
 | 
			
		||||
   if (enable_hs_role == native_backend->enable_hs_role)
 | 
			
		||||
       return;
 | 
			
		||||
 | 
			
		||||
   if (enable_hs_role)
 | 
			
		||||
       profile_init(native_backend, PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY);
 | 
			
		||||
   else
 | 
			
		||||
       profile_done(native_backend, PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY);
 | 
			
		||||
 | 
			
		||||
   native_backend->enable_hs_role = enable_hs_role;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pa_bluetooth_backend *pa_bluetooth_native_backend_new(pa_core *c, pa_bluetooth_discovery *y, bool enable_hs_role) {
 | 
			
		||||
    pa_bluetooth_backend *backend;
 | 
			
		||||
    DBusError err;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -675,8 +689,10 @@ pa_bluetooth_backend *pa_bluetooth_native_backend_new(pa_core *c, pa_bluetooth_d
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    backend->discovery = y;
 | 
			
		||||
    backend->enable_hs_role = enable_hs_role;
 | 
			
		||||
 | 
			
		||||
    profile_init(backend, PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY);
 | 
			
		||||
    if (enable_hs_role)
 | 
			
		||||
       profile_init(backend, PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY);
 | 
			
		||||
    profile_init(backend, PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT);
 | 
			
		||||
 | 
			
		||||
    return backend;
 | 
			
		||||
| 
						 | 
				
			
			@ -687,7 +703,8 @@ void pa_bluetooth_native_backend_free(pa_bluetooth_backend *backend) {
 | 
			
		|||
 | 
			
		||||
    pa_dbus_free_pending_list(&backend->pending);
 | 
			
		||||
 | 
			
		||||
    profile_done(backend, PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY);
 | 
			
		||||
    if (backend->enable_hs_role)
 | 
			
		||||
       profile_done(backend, PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY);
 | 
			
		||||
    profile_done(backend, PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT);
 | 
			
		||||
 | 
			
		||||
    pa_dbus_connection_unref(backend->connection);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue