blob: 950e0813269122bca8782737e61ca1f53081ef9d [file] [log] [blame]
/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.hardware.contexthub@1.0;
import IContexthubCallback;
/**
* The Context Hub HAL provides an interface to a separate low-power processing
* domain that has direct access to contextual information, such as sensors.
* Native applications that run within a context hub are known as nanoapps, and
* they execute within the Context Hub Runtime Environment (CHRE), which is
* standardized via the CHRE API, defined elsewhere.
*/
interface IContexthub {
/**
* Enumerate all available context hubs on the system.
*
* @return hubs list of hubs on this system.
*/
getHubs() generates (vec<ContextHub> hubs);
/**
* Register a callback for the HAL implementation to send asynchronous
* messages to the service from a context hub. There can be a maximum of
* one callback registered with the HAL. A call to this function when a
* callback has already been registered must override the previous
* registration.
*
* @param hubId identifier for the hub
* @param callback an implementation of the IContextHubCallbacks
*
* @return result OK on success
* BAD_VALUE if parameters are not sane
*
*/
registerCallback(uint32_t hubId, IContexthubCallback cb) generates (Result result);
/**
* Send a message to a hub
*
* @param hubId identifier for hub to send message to
* @param msg message to be sent
*
* @return result OK if successful, error code otherwise
* BAD_VALUE if parameters are not sane
* TRANSACTION_FAILED if message send failed
*/
sendMessageToHub(uint32_t hubId, ContextHubMsg msg)
generates (Result result);
/**
* Loads a nanoApp. After loading, the nanoApp's init method must be called.
* After the init method for nanoApp returns success, this must be indicated
* to the service by an asynchronous call to handleTxnResult.
*
* Loading a nanoapp must not take more than 30 seconds.
*
* Depending on the implementation, nanoApps loaded via this API may or may
* not persist across reboots of the hub. If they do persist, the
* implementation must initially place nanoApps in the disabled state upon a
* reboot, and not start them until a call is made to enableNanoApp(). In
* this case, the app must also be unloaded upon a factory reset of the
* device.
*
* @param hubId identifer of the contextHub
* @param appBinary contains the binary representation of the nanoApp, plus
* metadata
* @param transactionId transactionId for this call
*
* @return result OK if transation started
* BAD_VALUE if parameters are not sane
* TRANSACTION_PENDING if hub is busy with another
* load/unload transaction
* TRANSACTION_FAILED if load failed synchronously
*
*/
loadNanoApp(uint32_t hubId,
NanoAppBinary appBinary,
uint32_t transactionId)
generates (Result result);
/**
* Unloads a nanoApp. Before the unload, the apps deinit method is called.
* After this, success must be indicated to the service through an
* asynchronous call to handleTxnResult.
*
* Unloading a nanoapp must not take more than 5 seconds.
*
* @param hubId identifer of the contextHub
* @param appId appIdentifier returned by the HAL
* @param msg message to be sent
*
* @return result OK if transation started
* BAD_VALUE if parameters are not sane
* TRANSACTION_PENDING if hub is busy with another
* load/unload transaction
* TRANSACTION_FAILED if unload failed synchronously
*
*/
unloadNanoApp(uint32_t hubId, uint64_t appId, uint32_t transactionId)
generates (Result result);
/**
* Enables a nanoApp. The app's init method is called.
* After this, success must be indicated to the service through an
* asynchronous message.
*
* Enabling a nanoapp must not take more than 5 seconds.
*
* @param hubId identifer of the contextHub
* @param appId appIdentifier returned by the HAL
* @param msg message to be sent
*
* @return result OK if transation started
* BAD_VALUE if parameters are not sane
* TRANSACTION_PENDING if hub is busy with another
* load/unload transaction
* FAILED_TRANSACTION if load fails immediately
*
*/
enableNanoApp(uint32_t hubId, uint64_t appId, uint32_t transactionId)
generates (Result result);
/**
* Disables a nanoApp. The app's deinit method is called.
* After this, success must be indicated to the service through an
* asynchronous message.
*
* Disabling a nanoapp must not take more than 5 seconds.
*
* @param hubId identifer of the contextHub
* @param appId appIdentifier returned by the HAL
* @param msg message to be sent
*
* @return result OK if transation started
* BAD_VALUE if parameters are not sane
* TRANSACTION_PENDING if hub is busy with another
* load/unload transaction
* FAILED_TRANSACTION if load fails immediately
*
*/
disableNanoApp(uint32_t hubId, uint64_t appId, uint32_t transactionId)
generates (Result result);
/**
* Queries for Loaded apps on the hub
*
* @param hubId identifer of the contextHub
*
* @return apps all nanoApps on the hub.
* All nanoApps that can be modified by the service must
* be returned. A non-modifiable nanoapps must not be
* returned. A modifiable nanoApp is one that can be
* unloaded/disabled/enabled by the service.
*
*/
queryApps(uint32_t hubId) generates (Result result);
};