Clarify Context hub implementation.

am: 0675b44

* commit '0675b44089c96b0391a098a414af6f2c1655f513':
  Clarify Context hub implementation.

Change-Id: I86459024ab7dd81f82f5465aab4f688b32b7e621
This commit is contained in:
Ashutosh Joshi 2016-04-12 18:48:52 +00:00 committed by android-build-merger
commit e90056dbac

View file

@ -90,6 +90,10 @@ __BEGIN_DECLS
#define NANO_APP_ID(vendor, seq_id) \
(((uint64_t)vendor & NANOAPP_VENDORS_ALL) | ((uint64_t)seq_id & NANOAPP_VENDOR_ALL_APPS))
struct hub_app_name_t {
uint64_t id;
};
/**
* Other memory types (likely not writeable, informational only)
*/
@ -115,8 +119,19 @@ struct mem_range_t {
uint32_t mem_flags; // MEM_FLAG_*
};
struct hub_app_name_t {
uint64_t id;
#define NANOAPP_SIGNED_FLAG 0x1
#define NANOAPP_ENCRYPTED_FLAG 0x2
// The binary format below is in little endian format
struct nano_app_binary_t {
uint32_t header_version; // 0x1 for this version
uint32_t magic; // "NANO"
struct hub_app_name_t app_id; // App Id contains vendor id
uint32_t app_version; // Version of the app
uint32_t flags; // Signed, encrypted
uint64_t hw_hub_type; // which hub type is this compiled for
uint32_t reserved[2]; // Should be all zeroes
uint8_t custom_binary[0]; // start of custom binary data
};
struct hub_app_info {
@ -192,18 +207,6 @@ struct connected_sensor_t {
};
};
/**
* Messages of this length or less must be supported by all implementations,
* longer lengths are supported up to max_supported_msg_len. This is exposed
* to third party apps, and since we do not know their msg data formats we
* cannot fragment for them. Our own messages are allowed to be bigger and
* this HAL will fragment as needed. "Our own" messages are messaegs defined
* in this file.
*/
#define HUB_REQUIRED_SUPPORTED_MSG_LEN 128
struct hub_message_t {
struct hub_app_name_t app_name; /* To/From this nanoapp */
uint32_t message_type;
@ -211,7 +214,6 @@ struct hub_message_t {
const void *message;
};
/**
* Definition of a context hub. A device may contain more than one low
* power domain. In that case, please add an entry for each hub. However,
@ -235,10 +237,125 @@ struct context_hub_t {
const struct connected_sensor_t *connected_sensors; // array of connected sensors
uint32_t num_connected_sensors; // number of connected sensors
uint32_t max_supported_msg_len;
const struct hub_app_name_t os_app_name; /* send msgs here for OS functions */
uint32_t max_supported_msg_len; // This is the maximum size of the message that can
// be sent to the hub in one chunk (in bytes)
};
/**
* Definitions of message payloads, see hub_messages_e
*/
struct status_response_t {
int32_t result; // 0 on success, < 0 : error on failure. > 0 for any descriptive status
};
struct apps_enable_request_t {
struct hub_app_name_t app_name;
};
struct apps_disable_request_t {
struct hub_app_name_t app_name;
};
struct load_app_request_t {
struct nano_app_binary_t app_binary;
};
struct unload_app_request_t {
struct hub_app_name_t app_name;
};
struct query_apps_request_t {
struct hub_app_name_t app_name;
};
/**
* CONTEXT_HUB_APPS_ENABLE
* Enables the specified nano-app(s)
*
* Payload : apps_enable_request_t
*
* Response : status_response_t
* On receipt of a successful response, it is
* expected that
*
* i) the app is executing and able to receive
* any messages.
*
* ii) the system should be able to respond to an
* CONTEXT_HUB_QUERY_APPS request.
*
*/
/**
* CONTEXT_HUB_APPS_DISABLE
* Stops the specified nano-app(s)
*
* Payload : apps_disable_request_t
*
* Response : status_response_t
* On receipt of a successful response,
* i) No further events are delivered to the
* nanoapp.
*
* ii) The app should not show up in a
* CONTEXT_HUB_QUERY_APPS request.
*/
/**
* CONTEXT_HUB_LOAD_APP
* Loads a nanoApp. Upon loading the nanoApp's init method is
* called.
*
*
* Payload : load_app_request_t
*
* Response : status_response_t On receipt of a successful
* response, it is expected that
* i) the app is executing and able to receive
* messages.
*
* ii) the system should be able to respond to a
* CONTEXT_HUB_QUERY_APPS.
*/
/**
* CONTEXT_HUB_UNLOAD_APP
* Unloads a nanoApp. Before the unload, the app's deinit method
* is called.
*
* Payload : unload_app_request_t.
*
* Response : status_response_t On receipt of a
* successful response, it is expected that
* i) No further events are delivered to the
* nanoapp.
*
* ii) the system does not list the app in a
* response to a CONTEXT_HUB_QUERY_APPS.
*
* iii) Any resources used by the app should be
* freed up and available to the system.
*/
/**
* CONTEXT_HUB_QUERY_APPS Queries for status of apps
*
* Payload : query_apps_request_t
*
* Response : struct hub_app_info[]
*/
/**
* CONTEXT_HUB_QUERY_MEMORY Queries for memory regions on the
* hub
*
* Payload : NULL
*
* Response : struct mem_range_t[]
*/
/**
* All communication between the context hubs and the Context Hub Service is in
* the form of messages. Some message types are distinguished and their
@ -248,18 +365,16 @@ struct context_hub_t {
*/
typedef enum {
CONTEXT_HUB_APPS_ENABLE = 1, // 1: Enables the loaded nano-apps
CONTEXT_HUB_APPS_DISABLE, // 2: Disables any loaded nano-apps
CONTEXT_HUB_LOAD_APP, // 3: Load a supplied app
CONTEXT_HUB_UNLOAD_APP, // 4: Unload a specified app
CONTEXT_HUB_QUERY_APPS, // 5: Query for apps info on hub (gets struct hub_app_info[])
CONTEXT_HUB_QUERY_MEMORY, // 5: Query for memory info (gets struct mem_range_t[])
CONTEXT_HUB_LOAD_OS, // 6: Load up OS update
CONTEXT_HUB_APPS_ENABLE = 1, // Enables loaded nano-app(s)
CONTEXT_HUB_APPS_DISABLE = 2, // Disables loaded nano-app(s)
CONTEXT_HUB_LOAD_APP = 3, // Load a supplied app
CONTEXT_HUB_UNLOAD_APP = 4, // Unload a specified app
CONTEXT_HUB_QUERY_APPS = 5, // Query for app(s) info on hub
CONTEXT_HUB_QUERY_MEMORY = 6, // Query for memory info
} hub_messages_e;
#define CONTEXT_HUB_TYPE_PRIVATE_MSG_BASE 0x10000
/**
* A callback registers with the context hub service to pass messages
* coming from the hub to the service/clients.