IDeviceVolume.c revision a438eb1cf1ae602afab00336528dd230bd929206
161ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten/* 261ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten * Copyright (C) 2010 The Android Open Source Project 361ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten * 461ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten * Licensed under the Apache License, Version 2.0 (the "License"); 561ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten * you may not use this file except in compliance with the License. 661ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten * You may obtain a copy of the License at 761ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten * 861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten * http://www.apache.org/licenses/LICENSE-2.0 961ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten * 1061ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten * Unless required by applicable law or agreed to in writing, software 1161ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten * distributed under the License is distributed on an "AS IS" BASIS, 1261ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1361ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten * See the License for the specific language governing permissions and 1461ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten * limitations under the License. 1561ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten */ 1661ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 1761ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten/* DeviceVolume implementation */ 1861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 1961ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten#include "sles_allinclusive.h" 2061ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 21d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kastenstatic SLresult IDeviceVolume_GetVolumeScale(SLDeviceVolumeItf self, SLuint32 deviceID, 22d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kasten SLint32 *pMinValue, SLint32 *pMaxValue, SLboolean *pIsMillibelScale) 2361ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten{ 24d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kasten switch (deviceID) { 25d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kasten case SL_DEFAULTDEVICEID_AUDIOINPUT: 26d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kasten case SL_DEFAULTDEVICEID_AUDIOOUTPUT: 27d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kasten // FIXME move these to device-specific or platform-specific file 28d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kasten case DEVICE_ID_HEADSET: 29d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kasten case DEVICE_ID_HANDSFREE: 30d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kasten break; 31d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kasten default: 32d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kasten return SL_RESULT_PARAMETER_INVALID; 33d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kasten } 3461ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten if (NULL != pMinValue) 3561ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten *pMinValue = 0; 3661ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten if (NULL != pMaxValue) 3761ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten *pMaxValue = 10; 3861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten if (NULL != pIsMillibelScale) 3961ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten *pIsMillibelScale = SL_BOOLEAN_FALSE; 4061ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten return SL_RESULT_SUCCESS; 4161ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten} 4261ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 43d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kastenstatic SLresult IDeviceVolume_SetVolume(SLDeviceVolumeItf self, SLuint32 deviceID, SLint32 volume) 4461ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten{ 4561ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten switch (deviceID) { 4661ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten case SL_DEFAULTDEVICEID_AUDIOINPUT: 4761ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten case SL_DEFAULTDEVICEID_AUDIOOUTPUT: 4861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten break; 49a438eb1cf1ae602afab00336528dd230bd929206Glenn Kasten // FIXME These are treated same as generic audio output for now 50d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kasten case DEVICE_ID_HEADSET: 51d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kasten case DEVICE_ID_HANDSFREE: 52a438eb1cf1ae602afab00336528dd230bd929206Glenn Kasten deviceID = SL_DEFAULTDEVICEID_AUDIOOUTPUT; 53a438eb1cf1ae602afab00336528dd230bd929206Glenn Kasten break; 5461ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten default: 5561ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten return SL_RESULT_PARAMETER_INVALID; 5661ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten } 57d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kasten IDeviceVolume *this = (IDeviceVolume *) self; 5861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten interface_lock_poke(this); 5961ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten this->mVolume[~deviceID] = volume; 6061ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten interface_unlock_poke(this); 6161ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten return SL_RESULT_SUCCESS; 6261ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten} 6361ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 64e5bf0d2c9531a7064eb3ddcafaf93ac1b0974037Glenn Kastenstatic SLresult IDeviceVolume_GetVolume(SLDeviceVolumeItf self, SLuint32 deviceID, SLint32 *pVolume) 6561ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten{ 6661ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten if (NULL == pVolume) 6761ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten return SL_RESULT_PARAMETER_INVALID; 6861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten switch (deviceID) { 6961ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten case SL_DEFAULTDEVICEID_AUDIOINPUT: 7061ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten case SL_DEFAULTDEVICEID_AUDIOOUTPUT: 7161ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten break; 72a438eb1cf1ae602afab00336528dd230bd929206Glenn Kasten // FIXME These are treated same as generic audio output for now 73d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kasten case DEVICE_ID_HEADSET: 74d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kasten case DEVICE_ID_HANDSFREE: 75a438eb1cf1ae602afab00336528dd230bd929206Glenn Kasten deviceID = SL_DEFAULTDEVICEID_AUDIOOUTPUT; 76a438eb1cf1ae602afab00336528dd230bd929206Glenn Kasten break; 7761ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten default: 7861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten return SL_RESULT_PARAMETER_INVALID; 7961ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten } 80d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kasten IDeviceVolume *this = (IDeviceVolume *) self; 8161ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten interface_lock_peek(this); 8261ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten SLint32 volume = this->mVolume[~deviceID]; 8361ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten interface_unlock_peek(this); 8461ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten *pVolume = volume; 8561ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten return SL_RESULT_SUCCESS; 8661ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten} 8761ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 8861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kastenstatic const struct SLDeviceVolumeItf_ IDeviceVolume_Itf = { 8961ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten IDeviceVolume_GetVolumeScale, 9061ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten IDeviceVolume_SetVolume, 9161ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten IDeviceVolume_GetVolume 9261ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten}; 9361ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 9461ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kastenvoid IDeviceVolume_init(void *self) 9561ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten{ 9661ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten IDeviceVolume *this = (IDeviceVolume *) self; 9761ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten this->mItf = &IDeviceVolume_Itf; 980b167267bda99b68346045ccab14e810121d5de4Glenn Kasten // FIXME hard-coded array size for default in/out 9961ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten this->mVolume[0] = 10; 10061ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten this->mVolume[1] = 10; 10161ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten} 102