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#ifndef CHRE_CORE_INIT_H_
18e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#define CHRE_CORE_INIT_H_
19e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie
20e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddienamespace chre {
21e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie
22e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie/**
23e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * Performs initialization of CHRE. The CHRE is designed to be portable and as
24e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * such the order of initialization must be as follows:
25e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie *
26e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * 1) [optional] Perform platform initialization if needed.
27e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * 2) [required] Perform CHRE initialization by invoking this function. All
28e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie *               platforms must invoke chre::init() prior to loading apps.
29e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie *
30e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * When step 2) is performed, the platform must be ready for any and all
31e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * platform-specific code to be invoked as part of CHRE initialization. (as an
32e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * example for the Linux platform, any functions provided by the platform/linux
33e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * directory must be available). If any platform specific initialization is
34e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * required, it must be performed in step 1).
35e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie */
36e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddievoid init();
37e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie
38b5ef2cebc2d8b17e1dd4fa026d3842f97c79d8fbAndrew Rossignol/**
39b5ef2cebc2d8b17e1dd4fa026d3842f97c79d8fbAndrew Rossignol * Performs deinitialization of CHRE. The order of deinitialization must be as
40b5ef2cebc2d8b17e1dd4fa026d3842f97c79d8fbAndrew Rossignol * follows:
41b5ef2cebc2d8b17e1dd4fa026d3842f97c79d8fbAndrew Rossignol *
42b5ef2cebc2d8b17e1dd4fa026d3842f97c79d8fbAndrew Rossignol * 1) [required] Perform CHRE deinitialization by invoking this function. All
43b5ef2cebc2d8b17e1dd4fa026d3842f97c79d8fbAndrew Rossignol *               platforms must invoke chre::deinit() after unloading all apps
44b5ef2cebc2d8b17e1dd4fa026d3842f97c79d8fbAndrew Rossignol *               and upon termination.
45b5ef2cebc2d8b17e1dd4fa026d3842f97c79d8fbAndrew Rossignol * 2) [optional] Perform any additional teardown as required by the platform but
46b5ef2cebc2d8b17e1dd4fa026d3842f97c79d8fbAndrew Rossignol *               not covered by common deinitialization logic.
47b5ef2cebc2d8b17e1dd4fa026d3842f97c79d8fbAndrew Rossignol *
48b5ef2cebc2d8b17e1dd4fa026d3842f97c79d8fbAndrew Rossignol * After step 1 is complete, chre common code has been deinitialized and calling
49b5ef2cebc2d8b17e1dd4fa026d3842f97c79d8fbAndrew Rossignol * into it is undefined behavior. Portions of the platform (ie: sensors) are
50b5ef2cebc2d8b17e1dd4fa026d3842f97c79d8fbAndrew Rossignol * also deinitialized by step 1. Only perform additional deinitialization after
51b5ef2cebc2d8b17e1dd4fa026d3842f97c79d8fbAndrew Rossignol * this function as not handled by common CHRE code. The goal is to minimize
52b5ef2cebc2d8b17e1dd4fa026d3842f97c79d8fbAndrew Rossignol * this additional teardown as much as possible.
53b5ef2cebc2d8b17e1dd4fa026d3842f97c79d8fbAndrew Rossignol */
54b5ef2cebc2d8b17e1dd4fa026d3842f97c79d8fbAndrew Rossignolvoid deinit();
55b5ef2cebc2d8b17e1dd4fa026d3842f97c79d8fbAndrew Rossignol
56e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie}  // namespace chre
57e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie
58e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#endif  // CHRE_CORE_INIT_H_
59