looper.cpp revision 4fe6c3e51be77e35f40872cdbca6c80f8f8b7ecb
1ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross/* 2ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * Copyright (C) 2010 The Android Open Source Project 3ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * 4ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * Licensed under the Apache License, Version 2.0 (the "License"); 5ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * you may not use this file except in compliance with the License. 6ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * You may obtain a copy of the License at 7ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * 8ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * http://www.apache.org/licenses/LICENSE-2.0 9ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * 10ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * Unless required by applicable law or agreed to in writing, software 11ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * distributed under the License is distributed on an "AS IS" BASIS, 12ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * See the License for the specific language governing permissions and 14ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * limitations under the License. 15ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross */ 16ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross 17ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#define LOG_TAG "ALooper" 18ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#include <utils/Log.h> 19ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross 20ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#include <android/looper.h> 21ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#include <utils/Looper.h> 22ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross 23ec0a2e83dc66d67addeb90e83144187691852a3eColin Crossusing android::Looper; 24ec0a2e83dc66d67addeb90e83144187691852a3eColin Crossusing android::sp; 25ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross 26ec0a2e83dc66d67addeb90e83144187691852a3eColin CrossALooper* ALooper_forThread() { 27ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross return Looper::getForThread().get(); 28ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross} 29ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross 30ec0a2e83dc66d67addeb90e83144187691852a3eColin CrossALooper* ALooper_prepare(int opts) { 31ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross return Looper::prepare(opts).get(); 32ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross} 336bd2b5d80db5630cb73e3e5a4be3b38afa241c5aColin Cross 34ec0a2e83dc66d67addeb90e83144187691852a3eColin Crossvoid ALooper_acquire(ALooper* looper) { 35ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross static_cast<Looper*>(looper)->incStrong((void*)ALooper_acquire); 366bd2b5d80db5630cb73e3e5a4be3b38afa241c5aColin Cross} 37ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross 38ec0a2e83dc66d67addeb90e83144187691852a3eColin Crossvoid ALooper_release(ALooper* looper) { 39ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross static_cast<Looper*>(looper)->decStrong((void*)ALooper_acquire); 40ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross} 41ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross 42ec0a2e83dc66d67addeb90e83144187691852a3eColin Crossint ALooper_pollOnce(int timeoutMillis, int* outFd, int* outEvents, void** outData) { 43ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross sp<Looper> looper = Looper::getForThread(); 44ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross if (looper == NULL) { 45ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross LOGE("ALooper_pollOnce: No looper for this thread!"); 46ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross return ALOOPER_POLL_ERROR; 47ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross } 48ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross 49ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross return looper->pollOnce(timeoutMillis, outFd, outEvents, outData); 506bd2b5d80db5630cb73e3e5a4be3b38afa241c5aColin Cross} 51ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross 52ec0a2e83dc66d67addeb90e83144187691852a3eColin Crossint ALooper_pollAll(int timeoutMillis, int* outFd, int* outEvents, void** outData) { 53ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross sp<Looper> looper = Looper::getForThread(); 54ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross if (looper == NULL) { 55ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross LOGE("ALooper_pollAll: No looper for this thread!"); 56ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross return ALOOPER_POLL_ERROR; 57ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross } 58ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross 59ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross return looper->pollAll(timeoutMillis, outFd, outEvents, outData); 60ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross} 61ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross 62ec0a2e83dc66d67addeb90e83144187691852a3eColin Crossvoid ALooper_wake(ALooper* looper) { 63ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross static_cast<Looper*>(looper)->wake(); 64ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross} 65ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross 66ec0a2e83dc66d67addeb90e83144187691852a3eColin Crossint ALooper_addFd(ALooper* looper, int fd, int ident, int events, 67ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross ALooper_callbackFunc callback, void* data) { 68ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross return static_cast<Looper*>(looper)->addFd(fd, ident, events, callback, data); 69ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross} 70ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross 71ec0a2e83dc66d67addeb90e83144187691852a3eColin Crossint ALooper_removeFd(ALooper* looper, int fd) { 72ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross return static_cast<Looper*>(looper)->removeFd(fd); 73ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross} 74ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross