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