init.cc revision f53ddfb0683e210f9cf803d968c2d8c5d3b00a55
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/core/event.h" 18e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#include "chre/core/event_loop.h" 19b1c45b9446bd6bf2e95b0768353165e8009594f6Andrew Rossignol#include "chre/core/event_loop_manager.h" 20e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#include "chre/core/init.h" 21e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#include "chre/core/nanoapp.h" 22f53ddfb0683e210f9cf803d968c2d8c5d3b00a55Andrew Rossignol#include "chre/core/static_nanoapps.h" 23388d81b80425f66acb306c774e46d53221d36b33Andrew Rossignol#include "chre/platform/context.h" 24e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#include "chre/platform/log.h" 252003cdc07c3ad198d58ba26524d215c9a1b3bdd9Andrew Rossignol#include "chre/platform/shared/platform_log.h" 26e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#include "chre/platform/system_timer.h" 27e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#include "chre/util/time.h" 28e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 29e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#include <csignal> 30cc39d7566ed61c7127020228e1439a49e07074f9Brian Duddie#include <thread> 31e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 32e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddieusing chre::Milliseconds; 33e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 34e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddienamespace { 35e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 36e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddieextern "C" void signalHandler(int sig) { 37e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie (void) sig; 38e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie LOGI("Stop request received"); 39388d81b80425f66acb306c774e46d53221d36b33Andrew Rossignol chre::getCurrentEventLoop()->stop(); 40e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie} 41e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 42e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie} 43e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 44e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddieint main() { 452003cdc07c3ad198d58ba26524d215c9a1b3bdd9Andrew Rossignol chre::PlatformLogSingleton::init(); 46e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie chre::init(); 47e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 48e969b9be8eca27ffc875167879ab0ec093b3e313Andrew Rossignol // Construct the event loop and register the signal handler. 492de17c9c5c541d72248f8371dfb4d7e402dc93e8Andrew Rossignol chre::EventLoop& eventLoop = *chre::getCurrentEventLoop(); 50ece2a2d31bf96888182e2b37165bafb499bbdd58Andrew Rossignol std::signal(SIGINT, signalHandler); 51e969b9be8eca27ffc875167879ab0ec093b3e313Andrew Rossignol 52e969b9be8eca27ffc875167879ab0ec093b3e313Andrew Rossignol // Load any static nanoapps and start the event loop. 53cc39d7566ed61c7127020228e1439a49e07074f9Brian Duddie std::thread chreThread([&]() { 54cc39d7566ed61c7127020228e1439a49e07074f9Brian Duddie chre::loadStaticNanoapps(&eventLoop); 55cc39d7566ed61c7127020228e1439a49e07074f9Brian Duddie eventLoop.run(); 56cc39d7566ed61c7127020228e1439a49e07074f9Brian Duddie }); 57cc39d7566ed61c7127020228e1439a49e07074f9Brian Duddie chreThread.join(); 58e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 59b5ef2cebc2d8b17e1dd4fa026d3842f97c79d8fbAndrew Rossignol chre::deinit(); 602003cdc07c3ad198d58ba26524d215c9a1b3bdd9Andrew Rossignol chre::PlatformLogSingleton::deinit(); 61e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie return 0; 62e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie} 63