Lines Matching defs:device

31 status_t AudioPolicyManagerBase::setDeviceConnectionState(AudioSystem::audio_devices device,
36 LOGV("setDeviceConnectionState() device: %x, state %d, address %s", device, state, device_address);
38 // connect/disconnect only 1 device at a time
39 if (AudioSystem::popCount(device) != 1) return BAD_VALUE;
47 if (AudioSystem::isOutputDevice(device)) {
50 if (AudioSystem::isA2dpDevice(device)) {
51 LOGE("setDeviceConnectionState() invalid device: %x", device);
58 // handle output device connection
60 if (mAvailableOutputDevices & device) {
61 LOGW("setDeviceConnectionState() device already connected: %x", device);
64 LOGV("setDeviceConnectionState() connecting device %x", device);
66 // register new device as available
67 mAvailableOutputDevices |= device;
70 // handle A2DP device connection
71 if (AudioSystem::isA2dpDevice(device)) {
72 status_t status = handleA2dpConnection(device, device_address);
74 mAvailableOutputDevices &= ~device;
80 if (AudioSystem::isBluetoothScoDevice(device)) {
81 LOGV("setDeviceConnectionState() BT SCO device, address %s", device_address);
82 // keep track of SCO device address
93 // handle output device disconnection
95 if (!(mAvailableOutputDevices & device)) {
96 LOGW("setDeviceConnectionState() device not connected: %x", device);
101 LOGV("setDeviceConnectionState() disconnecting device %x", device);
102 // remove device from available output devices
103 mAvailableOutputDevices &= ~device;
106 // handle A2DP device disconnection
107 if (AudioSystem::isA2dpDevice(device)) {
108 status_t status = handleA2dpDisconnection(device, device_address);
110 mAvailableOutputDevices |= device;
116 if (AudioSystem::isBluetoothScoDevice(device)) {
138 if (state == AudioSystem::DEVICE_STATE_UNAVAILABLE && AudioSystem::isA2dpDevice(device)) {
145 if (device == AudioSystem::DEVICE_OUT_WIRED_HEADSET) {
146 device = AudioSystem::DEVICE_IN_WIRED_HEADSET;
147 } else if (device == AudioSystem::DEVICE_OUT_BLUETOOTH_SCO ||
148 device == AudioSystem::DEVICE_OUT_BLUETOOTH_SCO_HEADSET ||
149 device == AudioSystem::DEVICE_OUT_BLUETOOTH_SCO_CARKIT) {
150 device = AudioSystem::DEVICE_IN_BLUETOOTH_SCO_HEADSET;
156 if (AudioSystem::isInputDevice(device)) {
160 // handle input device connection
162 if (mAvailableInputDevices & device) {
163 LOGW("setDeviceConnectionState() device already connected: %d", device);
166 mAvailableInputDevices |= device;
170 // handle input device disconnection
172 if (!(mAvailableInputDevices & device)) {
173 LOGW("setDeviceConnectionState() device not connected: %d", device);
176 mAvailableInputDevices &= ~device;
189 LOGV("setDeviceConnectionState() changing device from %x to %x for input %d",
201 LOGW("setDeviceConnectionState() invalid device: %x", device);
205 AudioSystem::device_connection_state AudioPolicyManagerBase::getDeviceConnectionState(AudioSystem::audio_devices device,
210 if (AudioSystem::isOutputDevice(device)) {
211 if (device & mAvailableOutputDevices) {
213 if (AudioSystem::isA2dpDevice(device) &&
218 if (AudioSystem::isBluetoothScoDevice(device) &&
224 } else if (AudioSystem::isInputDevice(device)) {
225 if (device & mAvailableInputDevices) {
265 // even if no device change is needed
270 // even if no device change is needed
274 // check for device and output changes triggered by new phone state
278 // suspend A2DP output if a SCO device is present.
292 // even if no device change is needed
294 newDevice = hwOutputDesc->device();
302 // delay the device change command by twice the output latency to have some margin
317 // setting output device above
386 // check for device and output changes triggered by new phone state
426 uint32_t device = getDeviceForStrategy(strategy);
462 if (needsDirectOuput(stream, samplingRate, format, channels, flags, device)) {
464 LOGV("getOutput() opening direct output device %x", device);
466 outputDesc->mDevice = device;
505 uint32_t a2dpDevice = device & AudioSystem::DEVICE_OUT_ALL_A2DP;
506 if (AudioSystem::popCount((AudioSystem::audio_devices)device) == 2) {
511 LOGW_IF((mA2dpOutput == 0), "getOutput() A2DP device in multiple %x selected but A2DP output not opened", device);
519 LOGV("getOutput() using output %d for 2 devices %x", output, device);
523 // if playing on A2DP device, use a2dp output
524 LOGW_IF((mA2dpOutput == 0), "getOutput() A2DP device %x selected but A2DP output not opened", device);
529 // if playing on not A2DP device, use hardware output
571 // apply volume rules for current stream and device if necessary
572 checkAndSetVolume(stream, mStreams[stream].mIndexCur, output, outputDesc->device());
656 uint32_t device = getDeviceForInputSource(inputSource);
660 if (device == 0) {
682 inputDesc->mDevice = device;
808 // compute and apply stream volume on all outputs according to connected device
811 status_t volStatus = checkAndSetVolume(stream, index, mOutputs.keyAt(i), mOutputs.valueAt(i)->device());
844 snprintf(buffer, SIZE, " A2DP device address: %s\n", mA2dpDeviceAddress.string());
847 snprintf(buffer, SIZE, " SCO device address: %s\n", mScoDeviceAddress.string());
1139 status_t AudioPolicyManagerBase::handleA2dpConnection(AudioSystem::audio_devices device,
1142 // when an A2DP device is connected, open an A2DP and a duplicated output
1143 LOGV("opening A2DP output for device %s", device_address);
1145 outputDesc->mDevice = device;
1155 // set initial stream volume for A2DP device
1156 applyStreamVolumes(mA2dpOutput, device);
1162 // If both A2DP and duplicated outputs are open, send device address to A2DP hardware
1179 applyStreamVolumes(mDuplicatedOutput, device);
1191 LOGW("setDeviceConnectionState() could not open A2DP output for device %x", device);
1203 if (AudioSystem::isBluetoothScoDevice((AudioSystem::audio_devices)hwOutputDesc->device())) {
1218 status_t AudioPolicyManagerBase::handleA2dpDisconnection(AudioSystem::audio_devices device,
1346 uint32_t device = 0;
1351 // use device for strategy phone
1353 // use device for strategy sonification
1355 // use device for strategy media
1357 // use device for strategy DTMF
1360 device = getDeviceForStrategy(STRATEGY_PHONE, fromCache);
1362 device = getDeviceForStrategy(STRATEGY_SONIFICATION, fromCache);
1364 device = getDeviceForStrategy(STRATEGY_MEDIA, fromCache);
1366 device = getDeviceForStrategy(STRATEGY_DTMF, fromCache);
1369 LOGV("getNewDevice() selected device %x", device);
1370 return device;
1400 uint32_t device = 0;
1403 LOGV("getDeviceForStrategy() from cache strategy %d, device %x", strategy, mDeviceForStrategy[strategy]);
1411 device = getDeviceForStrategy(STRATEGY_MEDIA, false);
1423 device = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_BLUETOOTH_SCO_CARKIT;
1424 if (device) break;
1426 device = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_BLUETOOTH_SCO_HEADSET;
1427 if (device) break;
1428 device = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_BLUETOOTH_SCO;
1429 if (device) break;
1430 // if SCO device is requested but no SCO device is available, fall back to default case
1434 device = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_WIRED_HEADPHONE;
1435 if (device) break;
1436 device = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_WIRED_HEADSET;
1437 if (device) break;
1441 device = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_BLUETOOTH_A2DP;
1442 if (device) break;
1443 device = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES;
1444 if (device) break;
1447 device = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_EARPIECE;
1448 if (device == 0) {
1449 LOGE("getDeviceForStrategy() earpiece device not found");
1455 device = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_BLUETOOTH_SCO_CARKIT;
1456 if (device) break;
1462 device = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER;
1463 if (device) break;
1466 device = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_SPEAKER;
1467 if (device == 0) {
1468 LOGE("getDeviceForStrategy() speaker device not found");
1476 // If incall, just select the STRATEGY_PHONE device: The rest of the behavior is handled by
1479 device = getDeviceForStrategy(STRATEGY_PHONE, false);
1482 device = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_SPEAKER;
1483 if (device == 0) {
1484 LOGE("getDeviceForStrategy() speaker device not found");
1486 // The second device used for sonification is the same as the device used by media strategy
1517 // device is DEVICE_OUT_SPEAKER if we come from case STRATEGY_SONIFICATION, 0 otherwise
1518 device |= device2;
1519 if (device == 0) {
1520 LOGE("getDeviceForStrategy() speaker device not found");
1529 LOGV("getDeviceForStrategy() strategy %d, device %x", strategy, device);
1530 return device;
1540 void AudioPolicyManagerBase::setOutputDevice(audio_io_handle_t output, uint32_t device, bool force, int delayMs)
1542 LOGV("setOutputDevice() output %d device %x delayMs %d", output, device, delayMs);
1547 setOutputDevice(outputDesc->mOutput1->mId, device, force, delayMs);
1548 setOutputDevice(outputDesc->mOutput2->mId, device, force, delayMs);
1554 device &= AudioSystem::DEVICE_OUT_ALL_A2DP;
1556 device &= ~AudioSystem::DEVICE_OUT_ALL_A2DP;
1560 uint32_t prevDevice = (uint32_t)outputDesc->device();
1562 // - the requestede device is 0
1563 // - the requested device is the same as current device and force is not specified.
1565 if ((device == 0 || device == prevDevice) && !force) {
1566 LOGV("setOutputDevice() setting same device %x or null device for output %d", device, output);
1570 outputDesc->mDevice = device;
1572 if (output == mHardwareOutput && AudioSystem::popCount(device) == 2) {
1578 // suspend A2DP output if SCO device is selected
1579 if (AudioSystem::isBluetoothScoDevice((AudioSystem::audio_devices)device)) {
1587 param.addInt(String8(AudioParameter::keyRouting), (int)device);
1589 // update stream volumes according to new device
1590 applyStreamVolumes(output, device, delayMs);
1593 // if disconnecting SCO device, restore A2DP output
1609 uint32_t device;
1617 device = AudioSystem::DEVICE_IN_BLUETOOTH_SCO_HEADSET;
1619 device = AudioSystem::DEVICE_IN_WIRED_HEADSET;
1621 device = AudioSystem::DEVICE_IN_BUILTIN_MIC;
1626 device = AudioSystem::DEVICE_IN_BACK_MIC;
1628 device = AudioSystem::DEVICE_IN_BUILTIN_MIC;
1634 device = AudioSystem::DEVICE_IN_VOICE_CALL;
1638 device = 0;
1641 LOGV("getDeviceForInputSource()input source %d, device %08x", inputSource, device);
1642 return device;
1655 float AudioPolicyManagerBase::computeVolume(int stream, int index, audio_io_handle_t output, uint32_t device)
1661 if (device == 0) {
1662 device = outputDesc->device();
1673 if ((device &
1685 float musicVol = computeVolume(AudioSystem::MUSIC, mStreams[AudioSystem::MUSIC].mIndexCur, output, device);
1697 status_t AudioPolicyManagerBase::checkAndSetVolume(int stream, int index, audio_io_handle_t output, uint32_t device, int delayMs, bool force)
1714 float volume = computeVolume(stream, index, output, device);
1741 void AudioPolicyManagerBase::applyStreamVolumes(audio_io_handle_t output, uint32_t device, int delayMs)
1743 LOGV("applyStreamVolumes() for output %d and device %x", output, device);
1746 checkAndSetVolume(stream, mStreams[stream].mIndexCur, output, device, delayMs);
1770 checkAndSetVolume(stream, 0, output, outputDesc->device(), delayMs);
1781 checkAndSetVolume(stream, streamDesc.mIndexCur, output, outputDesc->device(), delayMs);
1790 // in the device used for phone strategy and play the tone if the selected device does not
1791 // interfere with the device used for phone strategy
1797 LOGV("handleIncallSonification() stream %d starting %d device %x stateChange %d",
1811 if (outputDesc->device() & getDeviceForStrategy(STRATEGY_PHONE)) {
1832 uint32_t device)
1852 uint32_t AudioPolicyManagerBase::AudioOutputDescriptor::device()
1854 uint32_t device = 0;
1856 device = mOutput1->mDevice | mOutput2->mDevice;
1858 device = mDevice;
1860 return device;
1916 snprintf(buffer, SIZE, " Devices %08x\n", device());