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