IPrefetchStatus.c revision bcc5c7225e3b7a1dbf2e9e830987f69167acf06f
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/* PrefetchStatus implementation */ 1861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 1961ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten#include "sles_allinclusive.h" 2061ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 21ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 22d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kastenstatic SLresult IPrefetchStatus_GetPrefetchStatus(SLPrefetchStatusItf self, SLuint32 *pStatus) 2361ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten{ 24ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_ENTER_INTERFACE 25ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 26ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten if (NULL == pStatus) { 27ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 28ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } else { 29bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten IPrefetchStatus *thiz = (IPrefetchStatus *) self; 30bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_lock_peek(thiz); 31bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten SLuint32 status = thiz->mStatus; 32bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_unlock_peek(thiz); 33ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten *pStatus = status; 34ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_SUCCESS; 35ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 36ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 37ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_LEAVE_INTERFACE 3861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten} 3961ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 40ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 41d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kastenstatic SLresult IPrefetchStatus_GetFillLevel(SLPrefetchStatusItf self, SLpermille *pLevel) 4261ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten{ 43ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_ENTER_INTERFACE 44ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 45ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten if (NULL == pLevel) { 46ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 47ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } else { 48bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten IPrefetchStatus *thiz = (IPrefetchStatus *) self; 49bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_lock_peek(thiz); 50bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten SLpermille level = thiz->mLevel; 51bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_unlock_peek(thiz); 52ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten *pLevel = level; 53ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_SUCCESS; 54ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 55ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 56ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_LEAVE_INTERFACE 5761ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten} 5861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 59ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 6061ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kastenstatic SLresult IPrefetchStatus_RegisterCallback(SLPrefetchStatusItf self, 6161ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten slPrefetchCallback callback, void *pContext) 6261ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten{ 63ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_ENTER_INTERFACE 64ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 65bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten IPrefetchStatus *thiz = (IPrefetchStatus *) self; 66bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_lock_exclusive(thiz); 67bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mCallback = callback; 68bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mContext = pContext; 69bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_unlock_exclusive(thiz); 70ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_SUCCESS; 71ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 72ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_LEAVE_INTERFACE 7361ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten} 7461ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 75ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 76d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kastenstatic SLresult IPrefetchStatus_SetCallbackEventsMask(SLPrefetchStatusItf self, SLuint32 eventFlags) 7761ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten{ 78ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_ENTER_INTERFACE 79ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 80bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten IPrefetchStatus *thiz = (IPrefetchStatus *) self; 81bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_lock_poke(thiz); 82bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mCallbackEventsMask = eventFlags; 83bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_unlock_poke(thiz); 84ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_SUCCESS; 85ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 86ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_LEAVE_INTERFACE 8761ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten} 8861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 89ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 9061ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kastenstatic SLresult IPrefetchStatus_GetCallbackEventsMask(SLPrefetchStatusItf self, 9161ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten SLuint32 *pEventFlags) 9261ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten{ 93ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_ENTER_INTERFACE 94ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 95ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten if (NULL == pEventFlags) { 96ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 97ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } else { 98bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten IPrefetchStatus *thiz = (IPrefetchStatus *) self; 99bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_lock_peek(thiz); 100bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten SLuint32 callbackEventsMask = thiz->mCallbackEventsMask; 101bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_unlock_peek(thiz); 102ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten *pEventFlags = callbackEventsMask; 103ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_SUCCESS; 104ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 105ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 106ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_LEAVE_INTERFACE 10761ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten} 10861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 109ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 110d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kastenstatic SLresult IPrefetchStatus_SetFillUpdatePeriod(SLPrefetchStatusItf self, SLpermille period) 11161ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten{ 112ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_ENTER_INTERFACE 113ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 114ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten if (0 == period) { 115ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 116ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } else { 117bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten IPrefetchStatus *thiz = (IPrefetchStatus *) self; 118bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_lock_poke(thiz); 119bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mFillUpdatePeriod = period; 120bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_unlock_poke(thiz); 121ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_SUCCESS; 122ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 123ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 124ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_LEAVE_INTERFACE 12561ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten} 12661ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 127ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 128d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kastenstatic SLresult IPrefetchStatus_GetFillUpdatePeriod(SLPrefetchStatusItf self, SLpermille *pPeriod) 12961ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten{ 130ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_ENTER_INTERFACE 131ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 132ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten if (NULL == pPeriod) { 133ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 134ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } else { 135bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten IPrefetchStatus *thiz = (IPrefetchStatus *) self; 136bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_lock_peek(thiz); 137bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten SLpermille fillUpdatePeriod = thiz->mFillUpdatePeriod; 138bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_unlock_peek(thiz); 139ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten *pPeriod = fillUpdatePeriod; 140ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_SUCCESS; 141ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 142ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 143ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_LEAVE_INTERFACE 14461ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten} 14561ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 146ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 14761ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kastenstatic const struct SLPrefetchStatusItf_ IPrefetchStatus_Itf = { 14861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten IPrefetchStatus_GetPrefetchStatus, 14961ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten IPrefetchStatus_GetFillLevel, 15061ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten IPrefetchStatus_RegisterCallback, 15161ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten IPrefetchStatus_SetCallbackEventsMask, 15261ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten IPrefetchStatus_GetCallbackEventsMask, 15361ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten IPrefetchStatus_SetFillUpdatePeriod, 15461ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten IPrefetchStatus_GetFillUpdatePeriod 15561ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten}; 15661ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 15761ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kastenvoid IPrefetchStatus_init(void *self) 15861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten{ 159bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten IPrefetchStatus *thiz = (IPrefetchStatus *) self; 160bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mItf = &IPrefetchStatus_Itf; 161bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mStatus = SL_PREFETCHSTATUS_UNDERFLOW; 162bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mLevel = 0; 163bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mCallback = NULL; 164bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mContext = NULL; 165bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mCallbackEventsMask = 0; 166bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mFillUpdatePeriod = 100; 16761ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten} 168