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" 21652e8d2cfaa930eb6c0eb35baf923125a7fd2e9cAndrew Rossignol#include "chre/platform/memory.h" 22e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#include "chre/platform/system_time.h" 239695b7bc89781c40aeb545ac0e879ff063590bf0Andrew Rossignol#include "chre/util/macros.h" 24e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 25841e366daaacd7a893046add8535c9a23d9bc599Andrew Rossignolusing chre::EventLoopManager; 269526b7b52ed3e6cb198c649f582877acb27f1c56Andrew Rossignolusing chre::EventLoopManagerSingleton; 27841e366daaacd7a893046add8535c9a23d9bc599Andrew Rossignol 289695b7bc89781c40aeb545ac0e879ff063590bf0Andrew RossignolDLL_EXPORT uint64_t chreGetTime() { 29e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie return chre::SystemTime::getMonotonicTime().toRawNanoseconds(); 30e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie} 31e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 325fc9df58dc67591b24fd04f143b61fcf12100239Arthur IshiguroDLL_EXPORT int64_t chreGetEstimatedHostTimeOffset() { 335fc9df58dc67591b24fd04f143b61fcf12100239Arthur Ishiguro return chre::SystemTime::getEstimatedHostTimeOffset(); 345fc9df58dc67591b24fd04f143b61fcf12100239Arthur Ishiguro} 355fc9df58dc67591b24fd04f143b61fcf12100239Arthur Ishiguro 369695b7bc89781c40aeb545ac0e879ff063590bf0Andrew RossignolDLL_EXPORT uint64_t chreGetAppId(void) { 37841e366daaacd7a893046add8535c9a23d9bc599Andrew Rossignol chre::Nanoapp *nanoapp = EventLoopManager::validateChreApiCall(__func__); 38841e366daaacd7a893046add8535c9a23d9bc599Andrew Rossignol return nanoapp->getAppId(); 39e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie} 40e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 419695b7bc89781c40aeb545ac0e879ff063590bf0Andrew RossignolDLL_EXPORT uint32_t chreGetInstanceId(void) { 42841e366daaacd7a893046add8535c9a23d9bc599Andrew Rossignol chre::Nanoapp *nanoapp = EventLoopManager::validateChreApiCall(__func__); 43841e366daaacd7a893046add8535c9a23d9bc599Andrew Rossignol return nanoapp->getInstanceId(); 44e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie} 450fa0b6d84fba9264363e28b57de28b3a6ce6d3b2Andrew Rossignol 469695b7bc89781c40aeb545ac0e879ff063590bf0Andrew RossignolDLL_EXPORT uint32_t chreTimerSet(uint64_t duration, const void *cookie, 479695b7bc89781c40aeb545ac0e879ff063590bf0Andrew Rossignol bool oneShot) { 48841e366daaacd7a893046add8535c9a23d9bc599Andrew Rossignol chre::Nanoapp *nanoapp = EventLoopManager::validateChreApiCall(__func__); 499526b7b52ed3e6cb198c649f582877acb27f1c56Andrew Rossignol return EventLoopManagerSingleton::get()->getEventLoop().getTimerPool() 509526b7b52ed3e6cb198c649f582877acb27f1c56Andrew Rossignol .setTimer(nanoapp, chre::Nanoseconds(duration), cookie, oneShot); 510fa0b6d84fba9264363e28b57de28b3a6ce6d3b2Andrew Rossignol} 520fa0b6d84fba9264363e28b57de28b3a6ce6d3b2Andrew Rossignol 539695b7bc89781c40aeb545ac0e879ff063590bf0Andrew RossignolDLL_EXPORT bool chreTimerCancel(uint32_t timerId) { 54841e366daaacd7a893046add8535c9a23d9bc599Andrew Rossignol chre::Nanoapp *nanoapp = EventLoopManager::validateChreApiCall(__func__); 559526b7b52ed3e6cb198c649f582877acb27f1c56Andrew Rossignol return EventLoopManagerSingleton::get()->getEventLoop().getTimerPool() 569526b7b52ed3e6cb198c649f582877acb27f1c56Andrew Rossignol .cancelTimer(nanoapp, timerId); 570fa0b6d84fba9264363e28b57de28b3a6ce6d3b2Andrew Rossignol} 58652e8d2cfaa930eb6c0eb35baf923125a7fd2e9cAndrew Rossignol 599695b7bc89781c40aeb545ac0e879ff063590bf0Andrew RossignolDLL_EXPORT void *chreHeapAlloc(uint32_t bytes) { 6076dce8246ec7c8a8c0ca2107cd754e469450880fArthur Ishiguro chre::Nanoapp *nanoapp = EventLoopManager::validateChreApiCall(__func__); 6176dce8246ec7c8a8c0ca2107cd754e469450880fArthur Ishiguro return chre::EventLoopManagerSingleton::get()->getMemoryManager(). 6276dce8246ec7c8a8c0ca2107cd754e469450880fArthur Ishiguro nanoappAlloc(nanoapp, bytes); 63652e8d2cfaa930eb6c0eb35baf923125a7fd2e9cAndrew Rossignol} 64652e8d2cfaa930eb6c0eb35baf923125a7fd2e9cAndrew Rossignol 659695b7bc89781c40aeb545ac0e879ff063590bf0Andrew RossignolDLL_EXPORT void chreHeapFree(void *ptr) { 6669f79f083bf8331e773ed9a33678cc3d6a4ff800Arthur Ishiguro chre::Nanoapp *nanoapp = EventLoopManager::validateChreApiCall(__func__); 6769f79f083bf8331e773ed9a33678cc3d6a4ff800Arthur Ishiguro chre::EventLoopManagerSingleton::get()->getMemoryManager(). 6869f79f083bf8331e773ed9a33678cc3d6a4ff800Arthur Ishiguro nanoappFree(nanoapp, ptr); 69652e8d2cfaa930eb6c0eb35baf923125a7fd2e9cAndrew Rossignol} 70