blob: 42f2e2d8f6fae7515b1067fd1e61652e39d8ea31 [file] [log] [blame]
Ashutosh Joshi6104b272016-10-27 11:06:23 -07001/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.hardware.contexthub@1.0;
18
19import IContexthubCallback;
20
Brian Duddie188552e2017-01-03 09:38:24 -080021/*
22 * The Context Hub HAL provides an interface to a separate low-power processing
23 * domain that has direct access to contextual information, such as sensors.
24 * Native applications that run within a context hub are known as nanoapps, and
25 * they execute within the Context Hub Runtime Environment (CHRE), which is
26 * standardized via the CHRE API, defined elsewhere.
27 */
Ashutosh Joshi6104b272016-10-27 11:06:23 -070028interface IContexthub {
29 /*
30 * Enumerate all available context hubs on the system.
31 *
32 * @return hubs list of hubs on this system.
33 */
34 getHubs() generates (vec<ContextHub> hubs);
35
36 /*
37 * Register a callback for the HAL implementation to send asynchronous
38 * messages to the service from a context hub. There can be a maximum of
39 * one callback registered with the HAL. A call to this function when a
40 * callback has already been registered must override the previous
41 * registration.
42 *
43 * @param hubId identifier for the hub
44 * callback an implementation of the IContextHubCallbacks
45 *
46 * @return result OK on success
47 * BAD_VALUE if parameters are not sane
48 *
49 */
50 registerCallback(uint32_t hubId, IContexthubCallback cb) generates (Result result);
51
52 /**
53 * Send a message to a hub
54 *
55 * @param hubId identifier for hub to send message to
56 * msg message to be sent
57 *
58 * @return result OK if successful, error code otherwise
59 * BAD_VALUE if parameters are not sane
60 * TRANSACTION_FAILED if message send failed
61 */
62 sendMessageToHub(uint32_t hubId, ContextHubMsg msg)
63 generates (Result result);
64
65 /**
66 * Loads a nanoApp. After loading, the nanoApp's init method must be called.
67 * After the init method for nanoApp returns success, this must be indicated
68 * to the service by an asynchronous call to handleTxnResult.
69 *
Ashutosh Joshi69e3aa32016-11-22 14:08:20 -080070 * Loading a nanoapp must not take more than 30 seconds.
71 *
Brian Duddiec21ff092017-01-03 10:12:45 -080072 * Depending on the implementation, nanoApps loaded via this API may or may
73 * not persist across reboots of the hub. If they do persist, the
74 * implementation must initially place nanoApps in the disabled state upon a
75 * reboot, and not start them until a call is made to enableNanoApp(). In
76 * this case, the app must also be unloaded upon a factory reset of the
77 * device.
78 *
Ashutosh Joshi6104b272016-10-27 11:06:23 -070079 * @param hubId identifer of the contextHub
Ashutosh Joshi69e3aa32016-11-22 14:08:20 -080080 * appBinary serialized NanoApppBinary for the nanoApp
81 * transactionId transactionId for this call
Ashutosh Joshi6104b272016-10-27 11:06:23 -070082 *
83 * @return result OK if transation started
84 * BAD_VALUE if parameters are not sane
85 * TRANSACTION_PENDING if hub is busy with another
86 * load/unload transaction
87 * TRANSACTION_FAILED if load failed synchronously
88 *
89 */
Ashutosh Joshi69e3aa32016-11-22 14:08:20 -080090 loadNanoApp(uint32_t hubId,
91 vec<uint8_t> appBinary,
92 uint32_t transactionId)
Ashutosh Joshi6104b272016-10-27 11:06:23 -070093 generates (Result result);
94
95 /**
96 * Unloads a nanoApp. Before the unload, the apps deinit method is called.
97 * After this, success must be indicated to the service through an
98 * asynchronous call to handleTxnResult.
99 *
Ashutosh Joshi69e3aa32016-11-22 14:08:20 -0800100 * Unloading a nanoapp must not take more than 5 seconds.
101 *
Ashutosh Joshi6104b272016-10-27 11:06:23 -0700102 * @param hubId identifer of the contextHub
103 * appId appIdentifier returned by the HAL
104 * msg message to be sent
105 *
106 * @return result OK if transation started
107 * BAD_VALUE if parameters are not sane
108 * TRANSACTION_PENDING if hub is busy with another
109 * load/unload transaction
110 * TRANSACTION_FAILED if unload failed synchronously
111 *
112 */
113 unloadNanoApp(uint32_t hubId, uint64_t appId, uint32_t transactionId)
114 generates (Result result);
115
116 /**
117 * Enables a nanoApp. The app's init method is called.
118 * After this, success must be indicated to the service through an
119 * asynchronous message.
120 *
Ashutosh Joshi69e3aa32016-11-22 14:08:20 -0800121 * Enabling a nanoapp must not take more than 5 seconds.
122 *
Ashutosh Joshi6104b272016-10-27 11:06:23 -0700123 * @param hubId identifer of the contextHub
124 * appId appIdentifier returned by the HAL
125 * msg message to be sent
126 *
127 * @return result OK if transation started
128 * BAD_VALUE if parameters are not sane
129 * TRANSACTION_PENDING if hub is busy with another
130 * load/unload transaction
131 * FAILED_TRANSACTION if load fails immediately
132 *
133 */
134 enableNanoApp(uint32_t hubId, uint64_t appId, uint32_t transactionId)
135 generates (Result result);
136
137 /**
138 * Disables a nanoApp. The app's deinit method is called.
139 * After this, success must be indicated to the service through an
140 * asynchronous message.
141 *
Ashutosh Joshi69e3aa32016-11-22 14:08:20 -0800142 * Disabling a nanoapp must not take more than 5 seconds.
143 *
Ashutosh Joshi6104b272016-10-27 11:06:23 -0700144 * @param hubId identifer of the contextHub
145 * appId appIdentifier returned by the HAL
146 * msg message to be sent
147 *
148 * @return result OK if transation started
149 * BAD_VALUE if parameters are not sane
150 * TRANSACTION_PENDING if hub is busy with another
151 * load/unload transaction
152 * FAILED_TRANSACTION if load fails immediately
153 *
154 */
155 disableNanoApp(uint32_t hubId, uint64_t appId, uint32_t transactionId)
156 generates (Result result);
157
158 /**
159 * Queries for Loaded apps on the hub
160 *
161 * @param hubId identifer of the contextHub
162 *
Ashutosh Joshi69e3aa32016-11-22 14:08:20 -0800163 * @return apps all nanoApps on the hub.
164 * All nanoApps that can be modified by the service must
165 * be returned. A non-modifiable nanoapps must not be
166 * returned. A modifiable nanoApp is one that can be
167 * unloaded/disabled/enabled by the service.
Ashutosh Joshi6104b272016-10-27 11:06:23 -0700168 *
169 */
170 queryApps(uint32_t hubId) generates (Result result);
Ashutosh Joshi6104b272016-10-27 11:06:23 -0700171};