platform_hardware_interfaces/contexthub/1.0/IContexthub.hal
Brian Duddie c6d2fd4953 contexthub: Explicitly pass nanoapp binary header data
Parse the nanoapp binary header in the framework and pass the relevant
data to the HAL explicitly in the NanoAppBinary structure. Note that not
all fields from the header are carried forward into NanoAppBinary, as
they are either implied by the HAL API (version, magic), or inherent in
the implementation-specific data (hwHubType), or unused and will only be
added via a future HAL version bump (second reserved field).

Also, convert the flags field in struct MemRange to a bitmask, which is
the proper representation for its use.

Bug: 34182159
Test: run hello world context hub GTS test
Change-Id: I13da9883b851e978d760548ec4265094ce81510a
2017-01-17 16:27:44 -08:00

172 lines
6.7 KiB
Text

/*
* 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
* 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
* 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
* appBinary contains the binary representation of the nanoApp, plus
* metadata
* 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
* appId appIdentifier returned by the HAL
* 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
* appId appIdentifier returned by the HAL
* 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
* appId appIdentifier returned by the HAL
* 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);
};