diff options
author | Ben Fennema <fennema@google.com> | 2017-12-13 15:33:19 -0800 |
---|---|---|
committer | Ben Fennema <fennema@google.com> | 2017-12-19 11:43:27 -0800 |
commit | 5b6af28e86478b2afdb9040bcb80852bf23c4d82 (patch) | |
tree | 4d481a90f26024d8c24e896b7f576ee2e0e5b12d | |
parent | 7dd84c412ff36a96bbaabfaf6a8d192fd413b4ff (diff) | |
download | contexthub-5b6af28e86478b2afdb9040bcb80852bf23c4d82.tar.gz |
nanohub: fix build, add v1.2 stubs
Bug: 70716840
Test: build
Change-Id: Id28865376b9f9d7cdbc796d2bd62ab4308e5c84d
Signed-off-by: Ben Fennema <fennema@google.com>
-rw-r--r-- | firmware/app/chre/chre.mk | 7 | ||||
-rw-r--r-- | firmware/app/chre/chre11.mk | 33 | ||||
-rw-r--r-- | firmware/app/chre/common/Android.mk | 42 | ||||
-rw-r--r-- | firmware/app/chre/common/chre10_app.c | 2 | ||||
-rw-r--r-- | firmware/app/chre/common/chre10_app_syscalls.c | 41 | ||||
-rw-r--r-- | firmware/app/chre/common/chre11_app_syscalls.c | 234 | ||||
-rw-r--r-- | firmware/app/chre/common/chre_app.c | 2 | ||||
-rw-r--r-- | firmware/app/chre/common/chre_app_syscalls.c | 39 | ||||
-rw-r--r-- | firmware/build/app_chre10_executable.mk | 43 | ||||
-rw-r--r-- | firmware/build/app_chre11_executable.mk | 43 | ||||
-rw-r--r-- | firmware/build/app_chre_executable.mk | 10 | ||||
-rw-r--r-- | firmware/build/config.mk | 4 | ||||
-rw-r--r-- | firmware/os/core/nanohub_chre.c | 58 | ||||
-rw-r--r-- | firmware/os/inc/chreApi.h | 18 |
14 files changed, 544 insertions, 32 deletions
diff --git a/firmware/app/chre/chre.mk b/firmware/app/chre/chre.mk index aed3ce78..4d4de740 100644 --- a/firmware/app/chre/chre.mk +++ b/firmware/app/chre/chre.mk @@ -1,5 +1,5 @@ # -# Copyright (C) 2016 The Android Open Source Project +# Copyright (C) 2017 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. @@ -26,8 +26,9 @@ include $(NANOHUB_DIR)/firmware_conf.mk CFLAGS += $(COMMON_FLAGS) -# CHRE API 1.1 -BIN_POSTPROCESS_ARGS := -c 0x0101 +# CHRE API 1.2 +BIN_POSTPROCESS_ARGS := -c 0x0102 CFLAGS += -I$(NANOHUB_DIR)/../../../../system/chre/chre_api/include/chre_api +CFLAGS += -I$(NANOHUB_DIR)/../../../../system/chre/util/include include $(NANOHUB_DIR)/app/app.mk diff --git a/firmware/app/chre/chre11.mk b/firmware/app/chre/chre11.mk new file mode 100644 index 00000000..1051e78f --- /dev/null +++ b/firmware/app/chre/chre11.mk @@ -0,0 +1,33 @@ +# +# Copyright (C) 2017 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. +# +################################################################################ +# +# NanoApp C/C++ Makefile Utils +# +################################################################################ + +SRCS += $(NANOHUB_DIR)/app/chre/common/chre_app.c +SRCS += $(NANOHUB_DIR)/app/chre/common/chre11_app_syscalls.c + +include $(NANOHUB_DIR)/firmware_conf.mk + +CFLAGS += $(COMMON_FLAGS) + +# CHRE API 1.1 +BIN_POSTPROCESS_ARGS := -c 0x0101 +CFLAGS += -I$(NANOHUB_DIR)/../../../../system/chre/chre_api/legacy/v1_1 + +include $(NANOHUB_DIR)/app/app.mk diff --git a/firmware/app/chre/common/Android.mk b/firmware/app/chre/common/Android.mk index 0c8302fb..6a996db5 100644 --- a/firmware/app/chre/common/Android.mk +++ b/firmware/app/chre/common/Android.mk @@ -1,5 +1,5 @@ # -# Copyright (C) 2016 The Android Open Source Project +# Copyright (C) 2017 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. @@ -16,6 +16,46 @@ LOCAL_PATH := $(call my-dir) +######################################################## +# CHRE 1.0 Library +######################################################## + +include $(CLEAR_NANO_VARS) + +LOCAL_MODULE := libnanochre10 +LOCAL_MODULE_TAGS := optional + +LOCAL_SRC_FILES := \ + chre10_app.c \ + chre10_app_syscalls.c \ + +LOCAL_STATIC_LIBRARIES += libnanobuiltins +LOCAL_STATIC_LIBRARIES += libnanolibc + +include $(BUILD_NANOHUB_APP_STATIC_LIBRARY) + +######################################################## +# CHRE 1.1 Library +######################################################## + +include $(CLEAR_NANO_VARS) + +LOCAL_MODULE := libnanochre11 +LOCAL_MODULE_TAGS := optional + +LOCAL_SRC_FILES := \ + chre_app.c \ + chre11_app_syscalls.c \ + +LOCAL_STATIC_LIBRARIES += libnanobuiltins +LOCAL_STATIC_LIBRARIES += libnanolibc + +include $(BUILD_NANOHUB_APP_STATIC_LIBRARY) + +######################################################## +# CHRE 1.2 Library +######################################################## + include $(CLEAR_NANO_VARS) LOCAL_MODULE := libnanochre diff --git a/firmware/app/chre/common/chre10_app.c b/firmware/app/chre/common/chre10_app.c index deda37b5..6da4cc99 100644 --- a/firmware/app/chre/common/chre10_app.c +++ b/firmware/app/chre/common/chre10_app.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 The Android Open Source Project + * Copyright (C) 2017 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. diff --git a/firmware/app/chre/common/chre10_app_syscalls.c b/firmware/app/chre/common/chre10_app_syscalls.c index 666bdaed..868b716f 100644 --- a/firmware/app/chre/common/chre10_app_syscalls.c +++ b/firmware/app/chre/common/chre10_app_syscalls.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 The Android Open Source Project + * Copyright (C) 2017 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. @@ -113,23 +113,12 @@ bool chreSensorConfigure(uint32_t sensorHandle, interval_lo, interval_hi, latency_lo, latency_hi); } -bool chreSendEvent(uint16_t eventType, void *eventData, - chreEventCompleteFunction *freeCallback, - uint32_t targetInstanceId) -{ - return syscallDo4P(SYSCALL_CHRE_API(SEND_EVENT), eventType, eventData, freeCallback, targetInstanceId); -} - -bool chreSendMessageToHost(void *message, uint32_t messageSize, - uint32_t reservedMessageType, - chreMessageFreeFunction *freeCallback) -{ - return syscallDo4P(SYSCALL_CHRE_API(SEND_MSG), message, messageSize, reservedMessageType, freeCallback); -} - uint32_t chreGetApiVersion(void) { - return syscallDo0P(SYSCALL_CHRE_API(GET_OS_API_VERSION)); + static uint32_t apiVersion = 0; + if (!apiVersion) + apiVersion = syscallDo0P(SYSCALL_CHRE_API(GET_OS_API_VERSION)); + return apiVersion; } uint32_t chreGetVersion(void) @@ -143,3 +132,23 @@ uint64_t chreGetPlatformId(void) (void)syscallDo1P(SYSCALL_CHRE_API(GET_PLATFORM_ID), &plat); return plat; } + +bool chreSendEvent(uint16_t eventType, void *eventData, + chreEventCompleteFunction *freeCallback, + uint32_t targetInstanceId) +{ + if (chreGetApiVersion() == CHRE_API_VERSION_1_0) + return syscallDo4P(SYSCALL_CHRE_API(SEND_EVENT), eventType, eventData, freeCallback, targetInstanceId); + else + return syscallDo4P(SYSCALL_NO(SYSCALL_DOMAIN_CHRE, SYSCALL_CHRE_MAIN, SYSCALL_CHRE_MAIN_EVENT, SYSCALL_CHRE_MAIN_EVENT_SEND_EVENT), eventType, eventData, freeCallback, targetInstanceId); +} + +bool chreSendMessageToHost(void *message, uint32_t messageSize, + uint32_t reservedMessageType, + chreMessageFreeFunction *freeCallback) +{ + if (chreGetApiVersion() == CHRE_API_VERSION_1_0) + return syscallDo4P(SYSCALL_CHRE_API(SEND_MSG), message, messageSize, reservedMessageType, freeCallback); + else + return syscallDo5P(SYSCALL_NO(SYSCALL_DOMAIN_CHRE, SYSCALL_CHRE_MAIN, SYSCALL_CHRE_MAIN_EVENT, SYSCALL_CHRE_MAIN_EVENT_SEND_MSG), message, messageSize, reservedMessageType, CHRE_HOST_ENDPOINT_BROADCAST, freeCallback); +} diff --git a/firmware/app/chre/common/chre11_app_syscalls.c b/firmware/app/chre/common/chre11_app_syscalls.c new file mode 100644 index 00000000..a12e35b7 --- /dev/null +++ b/firmware/app/chre/common/chre11_app_syscalls.c @@ -0,0 +1,234 @@ +/* + * Copyright (C) 2017 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. + */ + +#include <stdarg.h> + +#include <gpio.h> +#include <osApi.h> +#include <sensors.h> +#include <seos.h> +#include <util.h> + +/* CHRE syscalls */ +#include <chre.h> +#include <chreApi.h> +#include <syscall.h> +#include <syscall_defs.h> + +#define SYSCALL_CHRE_API(name) \ + SYSCALL_NO(SYSCALL_DOMAIN_CHRE, SYSCALL_CHRE_MAIN, SYSCALL_CHRE_MAIN_API, SYSCALL_CHRE_MAIN_API_ ## name) + +uint64_t chreGetAppId(void) +{ + uint64_t appId = 0; + (void)syscallDo1P(SYSCALL_CHRE_API(GET_APP_ID), &appId); + return appId; +} + +uint32_t chreGetInstanceId(void) +{ + return syscallDo0P(SYSCALL_CHRE_API(GET_INST_ID)); +} + +uint64_t chreGetTime(void) { + uint64_t time_ns = 0; + (void)syscallDo1P(SYSCALL_CHRE_API(GET_TIME), &time_ns); + return time_ns; +} + +int64_t chreGetEstimatedHostTimeOffset(void) { + int64_t time_ns = 0; + (void)syscallDo1P(SYSCALL_CHRE_API(GET_HOST_TIME_OFFSET), &time_ns); + return time_ns; +} + +void chreLog(enum chreLogLevel level, const char *str, ...) +{ + va_list vl; + + va_start(vl, str); + (void)syscallDo3P(SYSCALL_CHRE_API(LOG), level, str, VA_LIST_TO_INTEGER(vl)); + va_end(vl); +} + +uint32_t chreTimerSet(uint64_t duration, const void* cookie, bool oneShot) +{ + uint32_t dur_lo = duration; + uint32_t dur_hi = duration >> 32; + return syscallDo4P(SYSCALL_CHRE_API(TIMER_SET), dur_lo, dur_hi, cookie, oneShot); +} + +bool chreTimerCancel(uint32_t timerId) +{ + return syscallDo1P(SYSCALL_CHRE_API(TIMER_CANCEL), timerId); +} + +void chreAbort(uint32_t abortCode) +{ + (void)syscallDo1P(SYSCALL_CHRE_API(ABORT), abortCode); +} + +void* chreHeapAlloc(uint32_t bytes) +{ + return (void *)syscallDo1P(SYSCALL_CHRE_API(HEAP_ALLOC), bytes); +} + +void chreHeapFree(void* ptr) +{ + (void)syscallDo1P(SYSCALL_CHRE_API(HEAP_FREE), ptr); +} + +bool chreSensorFindDefault(uint8_t sensorType, uint32_t *handle) +{ + return syscallDo2P(SYSCALL_CHRE_API(SENSOR_FIND_DEFAULT), sensorType, handle); +} + +bool chreGetSensorInfo(uint32_t sensorHandle, struct chreSensorInfo *info) +{ + return syscallDo2P(SYSCALL_CHRE_API(SENSOR_GET_INFO), sensorHandle, info); +} + +bool chreGetSensorSamplingStatus(uint32_t sensorHandle, + struct chreSensorSamplingStatus *status) +{ + return syscallDo2P(SYSCALL_CHRE_API(SENSOR_GET_STATUS), sensorHandle, status); +} + +bool chreSensorConfigure(uint32_t sensorHandle, + enum chreSensorConfigureMode mode, + uint64_t interval, uint64_t latency) +{ + uint32_t interval_lo = interval; + uint32_t interval_hi = interval >> 32; + uint32_t latency_lo = latency; + uint32_t latency_hi = latency >> 32; + return syscallDo6P(SYSCALL_CHRE_API(SENSOR_CONFIG), sensorHandle, mode, + interval_lo, interval_hi, latency_lo, latency_hi); +} + +uint32_t chreGetApiVersion(void) +{ + static uint32_t apiVersion = 0; + if (!apiVersion) + apiVersion = syscallDo0P(SYSCALL_CHRE_API(GET_OS_API_VERSION)); + return apiVersion; +} + +uint32_t chreGetVersion(void) +{ + return syscallDo0P(SYSCALL_CHRE_API(GET_OS_VERSION)); +} + +uint64_t chreGetPlatformId(void) +{ + uint64_t plat = 0; + (void)syscallDo1P(SYSCALL_CHRE_API(GET_PLATFORM_ID), &plat); + return plat; +} + +bool chreSendEvent(uint16_t eventType, void *eventData, + chreEventCompleteFunction *freeCallback, + uint32_t targetInstanceId) +{ + if (chreGetApiVersion() == CHRE_API_VERSION_1_0) + return syscallDo4P(SYSCALL_CHRE_API(SEND_EVENT), eventType, eventData, freeCallback, targetInstanceId); + else + return syscallDo4P(SYSCALL_NO(SYSCALL_DOMAIN_CHRE, SYSCALL_CHRE_MAIN, SYSCALL_CHRE_MAIN_EVENT, SYSCALL_CHRE_MAIN_EVENT_SEND_EVENT), eventType, eventData, freeCallback, targetInstanceId); +} + +bool chreSendMessageToHost(void *message, uint32_t messageSize, + uint32_t messageType, + chreMessageFreeFunction *freeCallback) +{ + if (chreGetApiVersion() == CHRE_API_VERSION_1_0) + return syscallDo4P(SYSCALL_CHRE_API(SEND_MSG), message, messageSize, messageType, freeCallback); + else + return syscallDo5P(SYSCALL_NO(SYSCALL_DOMAIN_CHRE, SYSCALL_CHRE_MAIN, SYSCALL_CHRE_MAIN_EVENT, SYSCALL_CHRE_MAIN_EVENT_SEND_MSG), message, messageSize, messageType, CHRE_HOST_ENDPOINT_BROADCAST, freeCallback); +} + +bool chreSendMessageToHostEndpoint(void *message, size_t messageSize, + uint32_t messageType, uint16_t hostEndpoint, + chreMessageFreeFunction *freeCallback) +{ + return syscallDo5P(SYSCALL_NO(SYSCALL_DOMAIN_CHRE, SYSCALL_CHRE_MAIN, SYSCALL_CHRE_MAIN_EVENT, SYSCALL_CHRE_MAIN_EVENT_SEND_MSG), message, messageSize, messageType, hostEndpoint, freeCallback); +} + +bool chreGetNanoappInfoByAppId(uint64_t appId, struct chreNanoappInfo *info) +{ + uint32_t app_lo = appId; + uint32_t app_hi = appId >> 32; + return syscallDo3P(SYSCALL_NO(SYSCALL_DOMAIN_CHRE, SYSCALL_CHRE_MAIN, SYSCALL_CHRE_MAIN_EVENT, SYSCALL_CHRE_MAIN_EVENT_INFO_BY_APP_ID), app_lo, app_hi, info); +} + +bool chreGetNanoappInfoByInstanceId(uint32_t instanceId, struct chreNanoappInfo *info) +{ + return syscallDo2P(SYSCALL_NO(SYSCALL_DOMAIN_CHRE, SYSCALL_CHRE_MAIN, SYSCALL_CHRE_MAIN_EVENT, SYSCALL_CHRE_MAIN_EVENT_INFO_BY_INST_ID), instanceId, info); +} + +void chreConfigureNanoappInfoEvents(bool enable) +{ + syscallDo1P(SYSCALL_NO(SYSCALL_DOMAIN_CHRE, SYSCALL_CHRE_MAIN, SYSCALL_CHRE_MAIN_EVENT, SYSCALL_CHRE_MAIN_EVENT_CFG_INFO), enable); +} + +uint32_t chreGnssGetCapabilities(void) +{ + return syscallDo0P(SYSCALL_NO(SYSCALL_DOMAIN_CHRE, SYSCALL_CHRE_DRIVERS, SYSCALL_CHRE_DRV_GNSS, SYSCALL_CHRE_DRV_GNSS_GET_CAP)); +} + +bool chreGnssLocationSessionStartAsync(uint32_t minIntervalMs, uint32_t minTimeToNextFixMs, const void *cookie) +{ + return syscallDo3P(SYSCALL_NO(SYSCALL_DOMAIN_CHRE, SYSCALL_CHRE_DRIVERS, SYSCALL_CHRE_DRV_GNSS, SYSCALL_CHRE_DRV_GNSS_LOC_START_ASYNC), minIntervalMs, minTimeToNextFixMs, cookie); +} + +bool chreGnssLocationSessionStopAsync(const void *cookie) +{ + return syscallDo1P(SYSCALL_NO(SYSCALL_DOMAIN_CHRE, SYSCALL_CHRE_DRIVERS, SYSCALL_CHRE_DRV_GNSS, SYSCALL_CHRE_DRV_GNSS_LOC_STOP_ASYNC), cookie); +} + +bool chreGnssMeasurementSessionStartAsync(uint32_t minIntervalMs, const void *cookie) +{ + return syscallDo2P(SYSCALL_NO(SYSCALL_DOMAIN_CHRE, SYSCALL_CHRE_DRIVERS, SYSCALL_CHRE_DRV_GNSS, SYSCALL_CHRE_DRV_GNSS_MEAS_START_ASYNC), minIntervalMs, cookie); +} + +bool chreGnssMeasurementSessionStopAsync(const void *cookie) +{ + return syscallDo1P(SYSCALL_NO(SYSCALL_DOMAIN_CHRE, SYSCALL_CHRE_DRIVERS, SYSCALL_CHRE_DRV_GNSS, SYSCALL_CHRE_DRV_GNSS_MEAS_STOP_ASYNC), cookie); +} + +uint32_t chreWifiGetCapabilities(void) +{ + return syscallDo0P(SYSCALL_NO(SYSCALL_DOMAIN_CHRE, SYSCALL_CHRE_DRIVERS, SYSCALL_CHRE_DRV_WIFI, SYSCALL_CHRE_DRV_WIFI_GET_CAP)); +} + +bool chreWifiConfigureScanMonitorAsync(bool enable, const void *cookie) +{ + return syscallDo2P(SYSCALL_NO(SYSCALL_DOMAIN_CHRE, SYSCALL_CHRE_DRIVERS, SYSCALL_CHRE_DRV_WIFI, SYSCALL_CHRE_DRV_WIFI_CONF_SCAN_MON_ASYNC), enable, cookie); +} + +bool chreWifiRequestScanAsync(const struct chreWifiScanParams *params, const void *cookie) +{ + return syscallDo2P(SYSCALL_NO(SYSCALL_DOMAIN_CHRE, SYSCALL_CHRE_DRIVERS, SYSCALL_CHRE_DRV_WIFI, SYSCALL_CHRE_DRV_WIFI_REQ_SCAN_ASYNC), params, cookie); +} + +uint32_t chreWwanGetCapabilities(void) +{ + return syscallDo0P(SYSCALL_NO(SYSCALL_DOMAIN_CHRE, SYSCALL_CHRE_DRIVERS, SYSCALL_CHRE_DRV_WWAN, SYSCALL_CHRE_DRV_WWAN_GET_CAP)); +} + +bool chreWwanGetCellInfoAsync(const void *cookie) +{ + return syscallDo1P(SYSCALL_NO(SYSCALL_DOMAIN_CHRE, SYSCALL_CHRE_DRIVERS, SYSCALL_CHRE_DRV_WWAN, SYSCALL_CHRE_DRV_WWAN_GET_CELL_INFO_ASYNC), cookie); +} diff --git a/firmware/app/chre/common/chre_app.c b/firmware/app/chre/common/chre_app.c index 0eba2394..04829b61 100644 --- a/firmware/app/chre/common/chre_app.c +++ b/firmware/app/chre/common/chre_app.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 The Android Open Source Project + * Copyright (C) 2017 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. diff --git a/firmware/app/chre/common/chre_app_syscalls.c b/firmware/app/chre/common/chre_app_syscalls.c index fc1bc8c3..a6ab16e2 100644 --- a/firmware/app/chre/common/chre_app_syscalls.c +++ b/firmware/app/chre/common/chre_app_syscalls.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 The Android Open Source Project + * Copyright (C) 2017 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. @@ -183,6 +183,16 @@ void chreConfigureNanoappInfoEvents(bool enable) syscallDo1P(SYSCALL_NO(SYSCALL_DOMAIN_CHRE, SYSCALL_CHRE_MAIN, SYSCALL_CHRE_MAIN_EVENT, SYSCALL_CHRE_MAIN_EVENT_CFG_INFO), enable); } +void chreConfigureHostSleepStateEvents(bool enable) +{ + syscallDo1P(SYSCALL_NO(SYSCALL_DOMAIN_CHRE, SYSCALL_CHRE_MAIN, SYSCALL_CHRE_MAIN_EVENT, SYSCALL_CHRE_MAIN_EVENT_HOST_SLEEP), enable); +} + +bool chreIsHostAwake(void) +{ + return syscallDo0P(SYSCALL_NO(SYSCALL_DOMAIN_CHRE, SYSCALL_CHRE_MAIN, SYSCALL_CHRE_MAIN_EVENT, SYSCALL_CHRE_MAIN_EVENT_IS_HOST_AWAKE)); +} + uint32_t chreGnssGetCapabilities(void) { return syscallDo0P(SYSCALL_NO(SYSCALL_DOMAIN_CHRE, SYSCALL_CHRE_DRIVERS, SYSCALL_CHRE_DRV_GNSS, SYSCALL_CHRE_DRV_GNSS_GET_CAP)); @@ -208,6 +218,11 @@ bool chreGnssMeasurementSessionStopAsync(const void *cookie) return syscallDo1P(SYSCALL_NO(SYSCALL_DOMAIN_CHRE, SYSCALL_CHRE_DRIVERS, SYSCALL_CHRE_DRV_GNSS, SYSCALL_CHRE_DRV_GNSS_MEAS_STOP_ASYNC), cookie); } +bool chreGnssConfigureLocationMonitor(bool enable) +{ + return syscallDo1P(SYSCALL_NO(SYSCALL_DOMAIN_CHRE, SYSCALL_CHRE_DRIVERS, SYSCALL_CHRE_DRV_GNSS, SYSCALL_CHRE_DRV_GNSS_CONF_LOC_MON), enable); +} + uint32_t chreWifiGetCapabilities(void) { return syscallDo0P(SYSCALL_NO(SYSCALL_DOMAIN_CHRE, SYSCALL_CHRE_DRIVERS, SYSCALL_CHRE_DRV_WIFI, SYSCALL_CHRE_DRV_WIFI_GET_CAP)); @@ -232,3 +247,25 @@ bool chreWwanGetCellInfoAsync(const void *cookie) { return syscallDo1P(SYSCALL_NO(SYSCALL_DOMAIN_CHRE, SYSCALL_CHRE_DRIVERS, SYSCALL_CHRE_DRV_WWAN, SYSCALL_CHRE_DRV_WWAN_GET_CELL_INFO_ASYNC), cookie); } + +bool chreAudioGetSource(uint32_t handle, struct chreAudioSource *audioSource) +{ + return syscallDo2P(SYSCALL_NO(SYSCALL_DOMAIN_CHRE, SYSCALL_CHRE_DRIVERS, SYSCALL_CHRE_DRV_AUDIO, SYSCALL_CHRE_DRV_AUDIO_GET_SRC), handle, audioSource); +} + +bool chreAudioConfigureSource(uint32_t handle, bool enable, + uint64_t bufferDuration, + uint64_t deliveryInterval) +{ + uint32_t duration_lo = bufferDuration; + uint32_t duration_hi = bufferDuration >> 32; + uint32_t interval_lo = deliveryInterval; + uint32_t interval_hi = deliveryInterval >> 32; + + return syscallDo6P(SYSCALL_NO(SYSCALL_DOMAIN_CHRE, SYSCALL_CHRE_DRIVERS, SYSCALL_CHRE_DRV_AUDIO, SYSCALL_CHRE_DRV_AUDIO_CONF_SRC), handle, enable, duration_lo, duration_hi, interval_lo, interval_hi); +} + +bool chreAudioGetStatus(uint32_t handle, struct chreAudioSourceStatus *status) +{ + return syscallDo2P(SYSCALL_NO(SYSCALL_DOMAIN_CHRE, SYSCALL_CHRE_DRIVERS, SYSCALL_CHRE_DRV_AUDIO, SYSCALL_CHRE_DRV_AUDIO_GET_STATUS), handle, status); +} diff --git a/firmware/build/app_chre10_executable.mk b/firmware/build/app_chre10_executable.mk new file mode 100644 index 00000000..43f87767 --- /dev/null +++ b/firmware/build/app_chre10_executable.mk @@ -0,0 +1,43 @@ +# +# Copyright (C) 2017 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. +# + +LOCAL_MODULE_SUFFIX := .napp +include $(NANOHUB_APP_CONFIG) + +my_variants := $(LOCAL_NANO_VARIANT_LIST) + +ifeq ($(strip $(my_variants)),) +# default is to use all variants supported by this OS +my_variants := $(AUX_OS_VARIANT_LIST_$(NANO_OS)) +endif + +# mark the app as CHRE 1.0 nanoapp +LOCAL_NANO_APP_POSTPROCESS_FLAGS += -c 0x0100 + +# add app-side CHRE implementation +LOCAL_WHOLE_STATIC_LIBRARIES += \ + libnanochre10 \ + +# add standard libaries +LOCAL_STATIC_LIBRARIES += \ + libnanobuiltins \ + libnanolibc \ + libnanolibm \ + +LOCAL_C_INCLUDES += \ + system/chre/chre_api/legacy/v1_0 \ + +$(call for-each-variant,$(my_variants),APP,$(BUILD_NANOHUB_EXECUTABLE)) diff --git a/firmware/build/app_chre11_executable.mk b/firmware/build/app_chre11_executable.mk new file mode 100644 index 00000000..2112418a --- /dev/null +++ b/firmware/build/app_chre11_executable.mk @@ -0,0 +1,43 @@ +# +# Copyright (C) 2017 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. +# + +LOCAL_MODULE_SUFFIX := .napp +include $(NANOHUB_APP_CONFIG) + +my_variants := $(LOCAL_NANO_VARIANT_LIST) + +ifeq ($(strip $(my_variants)),) +# default is to use all variants supported by this OS +my_variants := $(AUX_OS_VARIANT_LIST_$(NANO_OS)) +endif + +# mark the app as CHRE 1.1 nanoapp +LOCAL_NANO_APP_POSTPROCESS_FLAGS += -c 0x0101 + +# add app-side CHRE implementation +LOCAL_WHOLE_STATIC_LIBRARIES += \ + libnanochre11 \ + +# add standard libaries +LOCAL_STATIC_LIBRARIES += \ + libnanobuiltins \ + libnanolibc \ + libnanolibm \ + +LOCAL_C_INCLUDES += \ + system/chre/chre_api/legacy/v1_1 \ + +$(call for-each-variant,$(my_variants),APP,$(BUILD_NANOHUB_EXECUTABLE)) diff --git a/firmware/build/app_chre_executable.mk b/firmware/build/app_chre_executable.mk index 009dc15c..da776821 100644 --- a/firmware/build/app_chre_executable.mk +++ b/firmware/build/app_chre_executable.mk @@ -1,5 +1,5 @@ # -# Copyright (C) 2016 The Android Open Source Project +# Copyright (C) 2017 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. @@ -24,8 +24,8 @@ ifeq ($(strip $(my_variants)),) my_variants := $(AUX_OS_VARIANT_LIST_$(NANO_OS)) endif -# mark the app as CHRE 1.1 nanoapp -LOCAL_NANO_APP_POSTPROCESS_FLAGS += -c 0x0101 +# mark the app as CHRE 1.2 nanoapp +LOCAL_NANO_APP_POSTPROCESS_FLAGS += -c 0x0102 # add app-side CHRE implementation LOCAL_WHOLE_STATIC_LIBRARIES += \ @@ -37,4 +37,8 @@ LOCAL_STATIC_LIBRARIES += \ libnanolibc \ libnanolibm \ +LOCAL_C_INCLUDES += \ + system/chre/chre_api/include/chre_api \ + system/chre/util/include \ + $(call for-each-variant,$(my_variants),APP,$(BUILD_NANOHUB_EXECUTABLE)) diff --git a/firmware/build/config.mk b/firmware/build/config.mk index 2776653b..423d9d0d 100644 --- a/firmware/build/config.mk +++ b/firmware/build/config.mk @@ -1,5 +1,5 @@ # -# Copyright (C) 2016 The Android Open Source Project +# Copyright (C) 2017 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. @@ -37,6 +37,8 @@ BUILD_NANOHUB_BL_EXECUTABLE := $(NANO_BUILD)/bl_executable.mk BUILD_NANOHUB_OS_EXECUTABLE := $(NANO_BUILD)/os_executable.mk BUILD_NANOHUB_OS_IMAGE := $(NANO_BUILD)/os_image.mk BUILD_NANOHUB_APP_EXECUTABLE := $(NANO_BUILD)/app_executable.mk +BUILD_NANOHUB_APP_CHRE10_EXECUTABLE := $(NANO_BUILD)/app_chre10_executable.mk +BUILD_NANOHUB_APP_CHRE11_EXECUTABLE := $(NANO_BUILD)/app_chre11_executable.mk BUILD_NANOHUB_APP_CHRE_EXECUTABLE := $(NANO_BUILD)/app_chre_executable.mk NANOAPP_POSTPROCESS := $(HOST_OUT_EXECUTABLES)/nanoapp_postprocess diff --git a/firmware/os/core/nanohub_chre.c b/firmware/os/core/nanohub_chre.c index 5ed419b6..4ecbff3a 100644 --- a/firmware/os/core/nanohub_chre.c +++ b/firmware/os/core/nanohub_chre.c @@ -538,6 +538,16 @@ static void osChreEventCfgInfo(uintptr_t *retValP, va_list args) osEventsUnsubscribe(2, EVT_APP_STARTED, EVT_APP_STOPPED); } +static void osChreEventHostSleep(uintptr_t *retValP, va_list args) +{ + // bool enable = va_arg(args, int(); +} + +static void osChreEventIsHostAwake(uintptr_t *retValP, va_list args) +{ + *retValP = true; +} + static void osChreDrvGnssGetCap(uintptr_t *retValP, va_list args) { *retValP = CHRE_GNSS_CAPABILITIES_NONE; @@ -570,6 +580,12 @@ static void osChreDrvGnssMeasStopAsync(uintptr_t *retValP, va_list args) *retValP = false; } +static void osChreDrvGnssConfLocMon(uintptr_t *retValP, va_list args) +{ + // bool enable = va_args(args, bool); + *retValP = false; +} + static void osChreDrvWifiGetCap(uintptr_t *retValP, va_list args) { *retValP = CHRE_WIFI_CAPABILITIES_NONE; @@ -600,6 +616,33 @@ static void osChreDrvWwanGetCallInfoAsync(uintptr_t *retValP, va_list args) *retValP = false; } +static void osChreDrvAudioGetSrc(uintptr_t *retValP, va_list args) +{ + // uint32_t handle = va_args(args, uint32_t); + // struct chreAudioSource *audioSource = va_args(args, struct chreAudioSource *); + *retValP = false; +} + +static void osChreDrvAudioConfSrc(uintptr_t *retValP, va_list args) +{ + // uint32_t handle = va_args(args, uint32_t); + // bool enable = va_args(args, int); + // uint32_t duration_lo = va_arg(args, uint32_t); + // uint32_t duration_hi = va_arg(args, uint32_t); + // uint64_t bufferDuration = (((uint64_t)dur_hi) << 32) | dur_lo; + // uint32_t interval_lo = va_args(args, uint32_t); + // uint32_t interval_hi = va_args(args, uint32_t); + // uint64_t deliveryInterval = (((uint64_t)del_hi) << 32) | del_lo; + *retValP = false; +} + +static void osChreDrvAudioGetStatus(uintptr_t *retValP, va_list args) +{ + // uint32_t handle = va_args(args, uint32_t); + // struct chreAudioSourceStatus *status = va_args(args, struct chreAudioSourceStatus *); + *retValP = false; +} + static const struct SyscallTable chreMainApiTable = { .numEntries = SYSCALL_CHRE_MAIN_API_LAST, .entry = { @@ -618,7 +661,7 @@ static const struct SyscallTable chreMainApiTable = { [SYSCALL_CHRE_MAIN_API_SEND_MSG] = { .func = osChreApiSendMessageToHost }, [SYSCALL_CHRE_MAIN_API_SENSOR_FIND_DEFAULT] = { .func = osChreApiSensorFindDefault }, [SYSCALL_CHRE_MAIN_API_SENSOR_GET_INFO_OLD] = { .func = osChreApiSensorGetInfoOld }, - [SYSCALL_CHRE_MAIN_API_SENSOR_GET_INFO] = { .func = osChreApiSensorGetInfo }, + [SYSCALL_CHRE_MAIN_API_SENSOR_GET_INFO] = { .func = osChreApiSensorGetInfo }, [SYSCALL_CHRE_MAIN_API_SENSOR_GET_STATUS] = { .func = osChreApiSensorGetStatus }, [SYSCALL_CHRE_MAIN_API_SENSOR_CONFIG] = { .func = osChreApiSensorConfig }, [SYSCALL_CHRE_MAIN_API_GET_OS_API_VERSION] = { .func = osChreApiChreApiVersion }, @@ -635,6 +678,8 @@ static const struct SyscallTable chreMainEventTable = { [SYSCALL_CHRE_MAIN_EVENT_INFO_BY_APP_ID] = { .func = osChreEventInfoByAppId }, [SYSCALL_CHRE_MAIN_EVENT_INFO_BY_INST_ID] = { .func = osChreEeventInfoByInstId }, [SYSCALL_CHRE_MAIN_EVENT_CFG_INFO] = { .func = osChreEventCfgInfo }, + [SYSCALL_CHRE_MAIN_EVENT_HOST_SLEEP] = { .func = osChreEventHostSleep }, + [SYSCALL_CHRE_MAIN_EVENT_IS_HOST_AWAKE] = { .func = osChreEventIsHostAwake }, }, }; @@ -654,6 +699,7 @@ static const struct SyscallTable chreDrvGnssTable = { [SYSCALL_CHRE_DRV_GNSS_LOC_STOP_ASYNC] = { .func = osChreDrvGnssLocStopAsync }, [SYSCALL_CHRE_DRV_GNSS_MEAS_START_ASYNC] = { .func = osChreDrvGnssMeasStartAsync }, [SYSCALL_CHRE_DRV_GNSS_MEAS_STOP_ASYNC] = { .func = osChreDrvGnssMeasStopAsync }, + [SYSCALL_CHRE_DRV_GNSS_CONF_LOC_MON] = { .func = osChreDrvGnssConfLocMon }, }, }; @@ -674,12 +720,22 @@ static const struct SyscallTable chreDrvWwanTable = { }, }; +static const struct SyscallTable chreDrvAudioTable = { + .numEntries = SYSCALL_CHRE_DRV_AUDIO_LAST, + .entry = { + [SYSCALL_CHRE_DRV_AUDIO_GET_SRC] = { .func = osChreDrvAudioGetSrc }, + [SYSCALL_CHRE_DRV_AUDIO_CONF_SRC] = { .func = osChreDrvAudioConfSrc }, + [SYSCALL_CHRE_DRV_AUDIO_GET_STATUS] = { .func = osChreDrvAudioGetStatus }, + }, +}; + static const struct SyscallTable chreDriversTable = { .numEntries = SYSCALL_CHRE_DRV_LAST, .entry = { [SYSCALL_CHRE_DRV_GNSS] = { .subtable = (struct SyscallTable*)&chreDrvGnssTable, }, [SYSCALL_CHRE_DRV_WIFI] = { .subtable = (struct SyscallTable*)&chreDrvWifiTable, }, [SYSCALL_CHRE_DRV_WWAN] = { .subtable = (struct SyscallTable*)&chreDrvWwanTable, }, + [SYSCALL_CHRE_DRV_AUDIO] = { .subtable = (struct SyscallTable*)&chreDrvAudioTable }, }, }; diff --git a/firmware/os/inc/chreApi.h b/firmware/os/inc/chreApi.h index e355ed5a..fc0f1ec5 100644 --- a/firmware/os/inc/chreApi.h +++ b/firmware/os/inc/chreApi.h @@ -74,13 +74,16 @@ C_STATIC_ASSERT(uintptr_size, sizeof(uintptr_t) >= sizeof(uint32_t)); #define SYSCALL_CHRE_MAIN_EVENT_INFO_BY_APP_ID 2 // (uint64_t, struct chreNanoappInfo *) -> bool #define SYSCALL_CHRE_MAIN_EVENT_INFO_BY_INST_ID 3 // (uint32_t, struct chreNanoappInfo *) -> bool #define SYSCALL_CHRE_MAIN_EVENT_CFG_INFO 4 // (bool) -> void -#define SYSCALL_CHRE_MAIN_EVENT_LAST 5 // always last. holes are allowed, but not immediately before this +#define SYSCALL_CHRE_MAIN_EVENT_HOST_SLEEP 5 // (bool) -> void +#define SYSCALL_CHRE_MAIN_EVENT_IS_HOST_AWAKE 6 // (void) -> bool +#define SYSCALL_CHRE_MAIN_EVENT_LAST 7 // always last. holes are allowed, but not immediately before this //level 2 indices in the CHRE.drivers table #define SYSCALL_CHRE_DRV_GNSS 0 #define SYSCALL_CHRE_DRV_WIFI 1 #define SYSCALL_CHRE_DRV_WWAN 2 -#define SYSCALL_CHRE_DRV_LAST 3 // always last. holes are allowed, but not immediately before this +#define SYSCALL_CHRE_DRV_AUDIO 3 +#define SYSCALL_CHRE_DRV_LAST 4 // always last. holes are allowed, but not immediately before this //level 3 indices in the CHRE.drivers.gnss table #define SYSCALL_CHRE_DRV_GNSS_GET_CAP 0 // (void) -> uint32_t @@ -98,8 +101,15 @@ C_STATIC_ASSERT(uintptr_size, sizeof(uintptr_t) >= sizeof(uint32_t)); //level 3 indices in the CHRE.drivers.wwan table #define SYSCALL_CHRE_DRV_WWAN_GET_CAP 0 // (void) -> uint32_t -#define SYSCALL_CHRE_DRV_WWAN_GET_CELL_INFO_ASYNC 1 // (const void *cookie) -> bool -#define SYSCALL_CHRE_DRV_WWAN_LAST 2 // always last. holes are allowed, but not immediately before this +#define SYSCALL_CHRE_DRV_WWAN_GET_CELL_INFO_ASYNC 1 // (const void *) -> bool +#define SYSCALL_CHRE_DRV_GNSS_CONF_LOC_MON 2 // (bool) -> bool +#define SYSCALL_CHRE_DRV_WWAN_LAST 3 // always last. holes are allowed, but not immediately before this + +//level 3 indicies in the CHRE.drivers.audio table +#define SYSCALL_CHRE_DRV_AUDIO_GET_SRC 0 // (uint32_t, struct chreAudioSource *) -> bool +#define SYSCALL_CHRE_DRV_AUDIO_CONF_SRC 1 // (uint32_t, bool, uint64_t, uint64_t) -> bool +#define SYSCALL_CHRE_DRV_AUDIO_GET_STATUS 2 // (uint32_t, struct chreAudioSourceStatus *) -> bool +#define SYSCALL_CHRE_DRV_AUDIO_LAST 3 // always last. holes are allowed, but not immediately before this //called by os entry point to export the api void osChreApiExport(void); |