chre_api_re.cc revision 9695b7bc89781c40aeb545ac0e879ff063590bf0
1e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie/* 2e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * Copyright (C) 2016 The Android Open Source Project 3e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * 4e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * Licensed under the Apache License, Version 2.0 (the "License"); 5e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * you may not use this file except in compliance with the License. 6e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * You may obtain a copy of the License at 7e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * 8e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * http://www.apache.org/licenses/LICENSE-2.0 9e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * 10e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * Unless required by applicable law or agreed to in writing, software 11e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * distributed under the License is distributed on an "AS IS" BASIS, 12e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * See the License for the specific language governing permissions and 14e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * limitations under the License. 15e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie */ 16e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 17e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#include "chre_api/chre/re.h" 18e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#include "chre/core/event_loop.h" 19841e366daaacd7a893046add8535c9a23d9bc599Andrew Rossignol#include "chre/core/event_loop_manager.h" 20e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#include "chre/platform/assert.h" 21e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#include "chre/platform/context.h" 22652e8d2cfaa930eb6c0eb35baf923125a7fd2e9cAndrew Rossignol#include "chre/platform/memory.h" 23e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#include "chre/platform/system_time.h" 249695b7bc89781c40aeb545ac0e879ff063590bf0Andrew Rossignol#include "chre/util/macros.h" 25e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 26841e366daaacd7a893046add8535c9a23d9bc599Andrew Rossignolusing chre::EventLoopManager; 27841e366daaacd7a893046add8535c9a23d9bc599Andrew Rossignol 289695b7bc89781c40aeb545ac0e879ff063590bf0Andrew RossignolDLL_EXPORT uint64_t chreGetTime() { 29e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie return chre::SystemTime::getMonotonicTime().toRawNanoseconds(); 30e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie} 31e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 329695b7bc89781c40aeb545ac0e879ff063590bf0Andrew RossignolDLL_EXPORT uint64_t chreGetAppId(void) { 33841e366daaacd7a893046add8535c9a23d9bc599Andrew Rossignol chre::Nanoapp *nanoapp = EventLoopManager::validateChreApiCall(__func__); 34841e366daaacd7a893046add8535c9a23d9bc599Andrew Rossignol return nanoapp->getAppId(); 35e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie} 36e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 379695b7bc89781c40aeb545ac0e879ff063590bf0Andrew RossignolDLL_EXPORT uint32_t chreGetInstanceId(void) { 38841e366daaacd7a893046add8535c9a23d9bc599Andrew Rossignol chre::Nanoapp *nanoapp = EventLoopManager::validateChreApiCall(__func__); 39841e366daaacd7a893046add8535c9a23d9bc599Andrew Rossignol return nanoapp->getInstanceId(); 40e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie} 410fa0b6d84fba9264363e28b57de28b3a6ce6d3b2Andrew Rossignol 429695b7bc89781c40aeb545ac0e879ff063590bf0Andrew RossignolDLL_EXPORT uint32_t chreTimerSet(uint64_t duration, const void *cookie, 439695b7bc89781c40aeb545ac0e879ff063590bf0Andrew Rossignol bool oneShot) { 44841e366daaacd7a893046add8535c9a23d9bc599Andrew Rossignol chre::Nanoapp *nanoapp = EventLoopManager::validateChreApiCall(__func__); 45841e366daaacd7a893046add8535c9a23d9bc599Andrew Rossignol return chre::getCurrentEventLoop()->getTimerPool().setTimer(nanoapp, 46725bef45ca127971b3ea798cd1f4e4b2c0d8fe9dAndrew Rossignol chre::Nanoseconds(duration), cookie, oneShot); 470fa0b6d84fba9264363e28b57de28b3a6ce6d3b2Andrew Rossignol} 480fa0b6d84fba9264363e28b57de28b3a6ce6d3b2Andrew Rossignol 499695b7bc89781c40aeb545ac0e879ff063590bf0Andrew RossignolDLL_EXPORT bool chreTimerCancel(uint32_t timerId) { 50841e366daaacd7a893046add8535c9a23d9bc599Andrew Rossignol chre::Nanoapp *nanoapp = EventLoopManager::validateChreApiCall(__func__); 51841e366daaacd7a893046add8535c9a23d9bc599Andrew Rossignol return chre::getCurrentEventLoop()->getTimerPool().cancelTimer(nanoapp, 52841e366daaacd7a893046add8535c9a23d9bc599Andrew Rossignol timerId); 530fa0b6d84fba9264363e28b57de28b3a6ce6d3b2Andrew Rossignol} 54652e8d2cfaa930eb6c0eb35baf923125a7fd2e9cAndrew Rossignol 559695b7bc89781c40aeb545ac0e879ff063590bf0Andrew RossignolDLL_EXPORT void *chreHeapAlloc(uint32_t bytes) { 56652e8d2cfaa930eb6c0eb35baf923125a7fd2e9cAndrew Rossignol // TODO: Build a MemoryManager to track allocations to an app. If an app is 57652e8d2cfaa930eb6c0eb35baf923125a7fd2e9cAndrew Rossignol // unloaded or aborts we need to release any unfreed memory. 58652e8d2cfaa930eb6c0eb35baf923125a7fd2e9cAndrew Rossignol return chre::memoryAlloc(bytes); 59652e8d2cfaa930eb6c0eb35baf923125a7fd2e9cAndrew Rossignol} 60652e8d2cfaa930eb6c0eb35baf923125a7fd2e9cAndrew Rossignol 619695b7bc89781c40aeb545ac0e879ff063590bf0Andrew RossignolDLL_EXPORT void chreHeapFree(void *ptr) { 62652e8d2cfaa930eb6c0eb35baf923125a7fd2e9cAndrew Rossignol chre::memoryFree(ptr); 63652e8d2cfaa930eb6c0eb35baf923125a7fd2e9cAndrew Rossignol} 64