1da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie/*
2da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie * Copyright (C) 2016 The Android Open Source Project
3da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie *
4da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie * Licensed under the Apache License, Version 2.0 (the "License");
5da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie * you may not use this file except in compliance with the License.
6da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie * You may obtain a copy of the License at
7da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie *
8da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie *      http://www.apache.org/licenses/LICENSE-2.0
9da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie *
10da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie * Unless required by applicable law or agreed to in writing, software
11da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie * distributed under the License is distributed on an "AS IS" BASIS,
12da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie * See the License for the specific language governing permissions and
14da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie * limitations under the License.
15da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie */
16da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie
17da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie#ifndef _CHRE_NANOAPP_H_
18da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie#define _CHRE_NANOAPP_H_
19da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie
20da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie/**
21da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie * Methods in the Context Hub Runtime Environment which must be implemented
22da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie * by the nanoapp.
23da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie */
24da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie
25da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie#include <stdbool.h>
26da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie#include <stdint.h>
27da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie
28da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie#ifdef __cplusplus
29da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddieextern "C" {
30da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie#endif
31da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie
32da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie/**
33da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie * Method invoked by the CHRE when loading the nanoapp.
34da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie *
35da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie * Every CHRE method is legal to call from this method.
36da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie *
37da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie * @returns  'true' if the nanoapp successfully started.  'false' if the nanoapp
38da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie *     failed to properly initialize itself (for example, could not obtain
39da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie *     sufficient memory from the heap).  If this method returns 'false', the
40da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie *     nanoapp will be unloaded by the CHRE (and nanoappEnd will
41da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie *     _not_ be invoked in that case).
42da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie * @see nanoappEnd
43da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie */
44da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddiebool nanoappStart(void);
45da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie
46da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie/**
47da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie * Method invoked by the CHRE when there is an event for this nanoapp.
48da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie *
49da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie * Every CHRE method is legal to call from this method.
50da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie *
51da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie * @param senderInstanceId  The Instance ID for the source of this event.
52da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie *     Note that this may be CHRE_INSTANCE_ID, indicating that the event
53da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie *     was generated by the CHRE.
54da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie * @param eventType  The event type.  This might be one of the CHRE_EVENT_*
55da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie *     types defined in this API.  But it might also be a user-defined event.
56da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie * @param eventData  The associated data, if any, for this specific type of
57da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie *     event.  From the nanoapp's perspective, this eventData's lifetime ends
58da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie *     when this method returns, and thus any data the nanoapp wishes to
59da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie *     retain must be copied.  Note that interpretation of event data is
60da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie *     given by the event type, and for some events may not be a valid
61da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie *     pointer.  See documentation of the specific CHRE_EVENT_* types for how to
62da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie *     interpret this data for those.  Note that for user events, you will
63da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie *     need to establish what this data means.
64da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie */
65da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddievoid nanoappHandleEvent(uint32_t senderInstanceId, uint16_t eventType,
66da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie                        const void* eventData);
67da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie
68da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie/**
69da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie * Method invoked by the CHRE when unloading the nanoapp.
70da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie *
71da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie * It is not valid to attempt to send events or messages, or to invoke functions
72da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie * which will generate events to this app, within the nanoapp implementation of
73da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie * this function.  That means it is illegal for the nanoapp invoke any of the
74da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie * following:
75da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie * - chreSendEvent()
76da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie * - chreSendMessageToHost()
77da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie * - chreSensorConfigure()
78da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie * - chreSensorConfigureModeOnly()
79da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie * - chreTimerSet()
80da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie *
81da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie * @see nanoappStart
82da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie */
83da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddievoid nanoappEnd(void);
84da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie
85da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie
86da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie#ifdef __cplusplus
87da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie}
88da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie#endif
89da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie
90da192a4ae641e01a09a7b01ef9e274f65d225af8Brian Duddie#endif  /* _CHRE_NANOAPP_H_ */
91