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