Skip to content
Snippets Groups Projects
Commit e345e16b authored by Jan-Simon Moeller's avatar Jan-Simon Moeller
Browse files

Prepare master for new framework integration


During the last workshop the transition to the new framework was presented.
This change essentially deprecates the SMACK-based application framework.

To prepare the integration of it, we remove the deprecated components:
- meta-speech-framework and the voiceagent services

Bug-AGL: SPEC-4121

Signed-off-by: default avatarJan-Simon Moeller <jsmoeller@linuxfoundation.org>
Change-Id: I803dd18184338a1f5519af27136e1d5a58ee9369
parent 796e9aef
No related branches found
No related tags found
No related merge requests found
Showing
with 0 additions and 687 deletions
# A bbappend has been added to meta-agl to enable nghttp2, mask out the one
# from meta-aac to avoid triggering rebuilds of all curl dependencies when
# agl-voiceagent-alexa is configured.
BBMASK += "meta-aac/recipes-support/curl/curl_%.bbappend"
# Mask out the nghttp2 recipe in meta-aac as well, as a newer version
# is available in meta-networking, and due to meta-aac having a higher
# layer priority, rebuilds will be triggered when the voiceagent feature
# is configured and the layer is added.
BBMASK += "meta-aac/recipes-connectivity/nghttp2"
# Mask out the duplicate libopus recipe in meta-aac for the same reason
BBMASK += "meta-aac/recipes-multimedia/libopus"
PREFERRED_RPROVIDER_virtual/voice-high-config = "alexa-voice-high-config"
FEATURE_PACKAGES:agl-voiceagent-alexa = "packagegroup-agl-voiceagent-alexa"
AGL_FEATURES += "agl-voiceagent-alexa"
# We have a conf and classes directory, add to BBPATH
BBPATH .= ":${LAYERDIR}"
# Let us add layer-specific bbappends which are only applied when that
# layer is included in our configuration -
# e.g. only add layers if a bsp is present.
# This is based on the BBFILE_COLLECTIONS name of the layer.
# We use either the BBFILE_COLLECTIONS name of the layer directly (meta-ti)
BBFILES += "${@' '.join('${LAYERDIR}/%s/recipes*/*/*.bbappend' % layer \
for layer in BBFILE_COLLECTIONS.split())}"
BBFILES += "${@' '.join('${LAYERDIR}/%s/recipes*/*/*.bb' % layer \
for layer in BBFILE_COLLECTIONS.split())}"
# or we prepend it with meta- (e.g. rpi, fsl*)
BBFILES += "${@' '.join('${LAYERDIR}/meta-%s/recipes*/*/*.bbappend' % layer \
for layer in BBFILE_COLLECTIONS.split())}"
BBFILES += "${@' '.join('${LAYERDIR}/meta-%s/recipes*/*/*.bb' % layer \
for layer in BBFILE_COLLECTIONS.split())}"
# We have recipes-* directories, add to BBFILES
BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
${LAYERDIR}/recipes-*/*/*.bbappend"
BBFILE_COLLECTIONS += "speech-framework"
BBFILE_PATTERN_speech-framework = "^${LAYERDIR}/"
BBFILE_PRIORITY_speech-framework = "8"
LAYERSERIES_COMPAT_speech-framework = "dunfell"
# Required to avoid QA errors from the prebuilt libraries
INSANE_SKIP:${PN} += "ldflags"
SUMMARY = "High level voice service binding default voiceagent configuration for Alexa"
DESCRIPTION = "Alexa default voiceagent JSON configuration file for agl-service-voice-high binding"
HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/apps/agl-service-voice-high"
SECTION = "apps"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
SRC_URI = "file://voice-high.json"
inherit allarch
do_compile[noexec] = "1"
do_install () {
install -D -m 644 ${WORKDIR}/voice-high.json ${D}${sysconfdir}/xdg/AGL/voice-high.json
}
RPROVIDES:${PN} += "virtual/voice-high-config"
{
"deviceInfo":
{
"clientId": "@@ALEXA_CLIENTID@@",
"deviceSerialNumber": "@@ALEXA_SERIALNUMBER@@",
"productId": "@@ALEXA_PRODUCTID@@",
"manufacturerName": "@@ALEXA_MFG_NAME@@",
"description": "@@ALEXA_DESCRIPTION@@"
},
"libcurlUtils":
{
"CURLOPT_CAPATH":"/etc/ssl/certs"
},
"deviceSettings": {
"defaultLocale":"@@ALEXA_LOCALE@@",
"defaultTimezone":"@@ALEXA_TIMEZONE@@"
},
"aace.vehicle": {
"info": {
"make": "Amazon",
"model": "AutoSDK",
"year": "2019",
"trim": "aac",
"geography": "US",
"version": "1.2.3",
"os": "AGL",
"arch": "aarch64",
"language": "en_US",
"microphone": "SingleArray",
"countries": "US,GB,IE,CA,DE,AT,IN,JP,AU,NZ,FR",
"vehicleIdentifier": "Sample Identifier ABC"
},
"operatingCountry": "US",
"currentLocation": "36.1363,-115.1513"
},
"aace.audio.input": {
"voice": "Default"
},
"aace.audio.output": {
"tts": "Speech-Low",
"music": "Speech-High",
"alarm": "Custom-Low"
},
"aace.wakeword": {
"enabled":@@ALEXA_WAKEWORD@@
},
"aace.cbl": {
"enabled": true
},
"aace.localmediasource": {
"enabled":false,
"sources": {
"bluetooth":true,
"usb":true,
"fmRadio":true,
"amRadio":true,
"satelliteRadio":false,
"lineIn":false,
"compactDisc":true,
"siriusXM":false,
"dab":false
}
}
}
SUMMARY = "Alexa service binding default configuration to connect to Alexa"
DESCRIPTION = "Alexa alexa-voiceagent-service binding configuration files"
HOMEPAGE = "https://github.com/alexa/alexa-auto-sdk/tree/master/platforms/agl/alexa-voiceagent-service"
SECTION = "apps"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
SRC_URI = "file://AlexaAutoCoreEngineConfig.json.in"
inherit allarch
ALEXA_WAKEWORD ??= "false"
ALEXA_LOCALE ??= "en-US"
ALEXA_TIMEZONE ??= "America/Vancouver"
do_compile[noexec] = "1"
do_install () {
if [ -z "${ALEXA_CLIENTID}" ]; then
bbfatal "ALEXA_CLIENTID not defined in your environment e.g. conf/local.conf"
fi
if [ -z "${ALEXA_SERIALNUMBER}" ]; then
bbfatal "ALEXA_SERIALNUMBER not defined in your environment e.g. conf/local.conf"
fi
if [ -z "${ALEXA_PRODUCTID}" ]; then
bbfatal "ALEXA_PRODUCTID not defined in your environment e.g. conf/local.conf"
fi
if [ -z "${ALEXA_MFG_NAME}" ]; then
bbfatal "ALEXA_MFG_NAME not defined in your environment e.g. conf/local.conf"
fi
if [ -z "${ALEXA_DESCRIPTION}" ]; then
bbfatal "ALEXA_DESCRIPTION not defined in your environment e.g. conf/local.conf"
fi
#replace
sed -e "s|@@ALEXA_CLIENTID@@|${ALEXA_CLIENTID}|" \
-e "s|@@ALEXA_SERIALNUMBER@@|${ALEXA_SERIALNUMBER}|" \
-e "s|@@ALEXA_PRODUCTID@@|${ALEXA_PRODUCTID}|" \
-e "s|@@ALEXA_MFG_NAME@@|${ALEXA_MFG_NAME}|" \
-e "s|@@ALEXA_DESCRIPTION@@|${ALEXA_DESCRIPTION}|" \
-e "s|@@ALEXA_WAKEWORD@@|${ALEXA_WAKEWORD}|" \
-e "s|@@ALEXA_LOCALE@@|${ALEXA_LOCALE}|" \
-e "s|@@ALEXA_TIMEZONE@@|${ALEXA_TIMEZONE}|" \
${WORKDIR}/AlexaAutoCoreEngineConfig.json.in > ${WORKDIR}/AlexaAutoCoreEngineConfig.json
# install
install -D -m 644 ${WORKDIR}/AlexaAutoCoreEngineConfig.json ${D}${sysconfdir}/xdg/AGL/AlexaAutoCoreEngineConfig.json
}
RPROVIDES:${PN} += "virtual/alexa-voiceagent-config"
Remove copying of library dependencies
Since we are targeting building into an image, the widget build does
not have to copy host library dependencies into the widget as it would
when being built standalone with the SDK. Remove the copying, as
runtime dependencies will be used to pull the libraries in.
Upstream-Status: Inappropriate [embedded specific]
Signed-off-by: Scott Murray <scott.murray@konsulko.com>
diff --git a/libs/CMakeLists.txt b/libs/CMakeLists.txt
index 8a955feb..5b097877 100644
--- a/libs/CMakeLists.txt
+++ b/libs/CMakeLists.txt
@@ -92,16 +92,11 @@ add_avs_library(SQLiteStorage ${AAC_HOME}/lib/libSQLiteStorage.so)
add_avs_library(SystemSoundPlayer ${AAC_HOME}/lib/libSystemSoundPlayer.so)
add_avs_library(TemplateRuntime ${AAC_HOME}/lib/libTemplateRuntime.so)
add_avs_library(ToggleController ${AAC_HOME}/lib/libToggleController.so)
-add_avs_library(curl ${AAC_HOME}/lib/libcurl.so.4)
-add_avs_library(nghttp2 ${AAC_HOME}/lib/libnghttp2.so.14)
-add_avs_library(opus ${AAC_HOME}/lib/libopus.so.0)
-add_avs_library(sqlite3 ${AAC_HOME}/lib/libsqlite3.so.0)
-if(EXISTS ${AAC_HOME}/lib/libpryon_lite.so.1.13)
+if(EXISTS ${AAC_HOME}/lib/libAACEAmazonLiteEngine.so)
add_aace_library(AACEAmazonLiteEngine)
add_avs_library(AMAZONLITE ${AAC_HOME}/lib/libAMAZONLITE.so)
add_avs_library(KeywordDetectorProvider ${AAC_HOME}/lib/libKeywordDetectorProvider.so)
- add_avs_library(pryon_lite ${AAC_HOME}/lib/libpryon_lite.so.1.13)
endif()
if(EXISTS ${AAC_HOME}/share/cmake/AACESystemAudio.cmake)
Add autobuild scripts
Add autobuild scripts and update .gitignore to not ignore them.
The autobuild/agl/autobuild script will be required for building widgets
in AGL, add the latest version to the voiceagent source tree.
Upstream-Status: Pending
Signed-off-by: Scott Murray <scott.murray@konsulko.com>
diff --git a/.gitignore b/.gitignore
index b3c1108..edbf1b5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,2 @@
-autobuild/
build/
alexa-voiceagent-apidef.h
diff --git a/autobuild/agl/autobuild b/autobuild/agl/autobuild
new file mode 100755
index 0000000..16181b8
--- /dev/null
+++ b/autobuild/agl/autobuild
@@ -0,0 +1,128 @@
+#!/usr/bin/make -f
+# Copyright (C) 2015 - 2018 "IoT.bzh"
+# Copyright (C) 2020 Konsulko Group
+# Author "Romain Forlot" <romain.forlot@iot.bzh>
+#
+# 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.
+
+THISFILE := $(lastword $(MAKEFILE_LIST))
+ROOT_DIR := $(abspath $(dir $(THISFILE))/../..)
+
+# Build directories
+# Note that the debug/test/coverage directories are defined in relation
+# to the release directory (BUILD_DIR), this needs to be kept in mind
+# if over-riding it and building those widget types, the specific widget
+# type variable (e.g. BUILD_DIR_DEBUG) may also need to be specified
+# to yield the desired output hierarchy.
+BUILD_DIR = $(ROOT_DIR)/build
+BUILD_DIR_DEBUG = $(abspath $(BUILD_DIR)/../build-debug)
+BUILD_DIR_TEST = $(abspath $(BUILD_DIR)/../build-test)
+BUILD_DIR_COVERAGE = $(abspath $(BUILD_DIR)/../build-coverage)
+
+# Output directory variable for use in pattern rules.
+# This is intended for internal use only, hence the explicit override
+# definition.
+override OUTPUT_DIR = $(BUILD_DIR)
+
+# Final install directory for widgets
+DEST = $(OUTPUT_DIR)
+
+# Default build type for release/test builds
+BUILD_TYPE = RELEASE
+
+.PHONY: all help update install distclean
+.PHONY: clean clean-release clean-debug clean-test clean-coverage clean-all
+.PHONY: configure configure-release configure-debug configure-test configure-coverage
+.PHONY: build build-release build-debug build-test build-coverage build-all
+.PHONY: package package-release package-debug package-test package-coverage package-all
+
+help:
+ @echo "List of targets available:"
+ @echo ""
+ @echo "- all"
+ @echo "- help"
+ @echo "- clean"
+ @echo "- distclean"
+ @echo "- configure"
+ @echo "- build: compilation, link and prepare files for package into a widget"
+ @echo "- package: output a widget file '*.wgt'"
+ @echo "- install: install in your $(CMAKE_INSTALL_DIR) directory"
+ @echo ""
+ @echo "Usage: ./autobuild/agl/autobuild package DEST=${HOME}/opt"
+ @echo "Don't use your build dir as DEST as wgt file is generated at this location"
+
+all: package-all
+
+# Target specific variable over-rides so static pattern rules can be
+# used for the various type-specific targets.
+
+configure-test build-test package-test clean-test: OUTPUT_DIR = $(BUILD_DIR_TEST)
+
+configure-coverage build-coverage package-coverage clean-coverage: OUTPUT_DIR = $(BUILD_DIR_COVERAGE)
+configure-coverage build-coverage package-coverage: BUILD_TYPE = COVERAGE
+
+configure-debug build-debug package-debug clean-debug: OUTPUT_DIR = $(BUILD_DIR_DEBUG)
+configure-debug build-debug package-debug: BUILD_TYPE = DEBUG
+
+clean-release clean-test clean-debug clean-coverage:
+ @if [ -d $(OUTPUT_DIR) ]; then \
+ $(MAKE) -C $(OUTPUT_DIR) $(CLEAN_ARGS) clean; \
+ else \
+ echo Nothing to clean; \
+ fi
+
+clean: clean-release
+
+clean-all: clean-release clean-test clean-debug clean-coverage
+
+distclean: clean-all
+
+configure-release configure-test configure-debug configure-coverage:
+ @mkdir -p $(OUTPUT_DIR)
+ @if [ ! -f $(OUTPUT_DIR)/Makefile ]; then \
+ (cd $(OUTPUT_DIR) && cmake -S $(ROOT_DIR) -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) $(CONFIGURE_ARGS)); \
+ fi
+
+configure: configure-release
+
+build-release build-debug build-coverage: build-%: configure-%
+ @cmake --build $(OUTPUT_DIR) $(BUILD_ARGS) --target all
+
+# Kept for consistency, empty to avoid building everything for test widget
+build-test: configure-test
+
+build: build-release
+
+build-all: build-release build-debug build-test build-coverage
+
+package-release package-debug package-coverage: package-%: build-%
+ @cmake --build $(OUTPUT_DIR) $(PACKAGE_ARGS) --target widget
+ @if [ "$(abspath $(DEST))" != "$(abspath $(OUTPUT_DIR))" ]; then \
+ mkdir -p $(DEST) && cp $(OUTPUT_DIR)/*.wgt $(DEST); \
+ fi
+
+package-test: build-test
+ @cmake --build $(OUTPUT_DIR) $(PACKAGE_ARGS) --target test_widget
+ @if [ "$(abspath $(DEST))" != "$(abspath $(OUTPUT_DIR))" ]; then \
+ mkdir -p $(DEST) && cp $(OUTPUT_DIR)/*.wgt $(DEST); \
+ fi
+
+package: package-release
+
+package-all: package-release package-test package-coverage package-debug
+
+update: configure
+ @cmake --build $(BUILD_DIR) --target autobuild
+
+install: build
+ @cmake --build $(BUILD_DIR) $(INSTALL_ARGS) --target install
diff --git a/autobuild/linux/autobuild b/autobuild/linux/autobuild
new file mode 100755
index 0000000..16181b8
--- /dev/null
+++ b/autobuild/linux/autobuild
@@ -0,0 +1,128 @@
+#!/usr/bin/make -f
+# Copyright (C) 2015 - 2018 "IoT.bzh"
+# Copyright (C) 2020 Konsulko Group
+# Author "Romain Forlot" <romain.forlot@iot.bzh>
+#
+# 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.
+
+THISFILE := $(lastword $(MAKEFILE_LIST))
+ROOT_DIR := $(abspath $(dir $(THISFILE))/../..)
+
+# Build directories
+# Note that the debug/test/coverage directories are defined in relation
+# to the release directory (BUILD_DIR), this needs to be kept in mind
+# if over-riding it and building those widget types, the specific widget
+# type variable (e.g. BUILD_DIR_DEBUG) may also need to be specified
+# to yield the desired output hierarchy.
+BUILD_DIR = $(ROOT_DIR)/build
+BUILD_DIR_DEBUG = $(abspath $(BUILD_DIR)/../build-debug)
+BUILD_DIR_TEST = $(abspath $(BUILD_DIR)/../build-test)
+BUILD_DIR_COVERAGE = $(abspath $(BUILD_DIR)/../build-coverage)
+
+# Output directory variable for use in pattern rules.
+# This is intended for internal use only, hence the explicit override
+# definition.
+override OUTPUT_DIR = $(BUILD_DIR)
+
+# Final install directory for widgets
+DEST = $(OUTPUT_DIR)
+
+# Default build type for release/test builds
+BUILD_TYPE = RELEASE
+
+.PHONY: all help update install distclean
+.PHONY: clean clean-release clean-debug clean-test clean-coverage clean-all
+.PHONY: configure configure-release configure-debug configure-test configure-coverage
+.PHONY: build build-release build-debug build-test build-coverage build-all
+.PHONY: package package-release package-debug package-test package-coverage package-all
+
+help:
+ @echo "List of targets available:"
+ @echo ""
+ @echo "- all"
+ @echo "- help"
+ @echo "- clean"
+ @echo "- distclean"
+ @echo "- configure"
+ @echo "- build: compilation, link and prepare files for package into a widget"
+ @echo "- package: output a widget file '*.wgt'"
+ @echo "- install: install in your $(CMAKE_INSTALL_DIR) directory"
+ @echo ""
+ @echo "Usage: ./autobuild/agl/autobuild package DEST=${HOME}/opt"
+ @echo "Don't use your build dir as DEST as wgt file is generated at this location"
+
+all: package-all
+
+# Target specific variable over-rides so static pattern rules can be
+# used for the various type-specific targets.
+
+configure-test build-test package-test clean-test: OUTPUT_DIR = $(BUILD_DIR_TEST)
+
+configure-coverage build-coverage package-coverage clean-coverage: OUTPUT_DIR = $(BUILD_DIR_COVERAGE)
+configure-coverage build-coverage package-coverage: BUILD_TYPE = COVERAGE
+
+configure-debug build-debug package-debug clean-debug: OUTPUT_DIR = $(BUILD_DIR_DEBUG)
+configure-debug build-debug package-debug: BUILD_TYPE = DEBUG
+
+clean-release clean-test clean-debug clean-coverage:
+ @if [ -d $(OUTPUT_DIR) ]; then \
+ $(MAKE) -C $(OUTPUT_DIR) $(CLEAN_ARGS) clean; \
+ else \
+ echo Nothing to clean; \
+ fi
+
+clean: clean-release
+
+clean-all: clean-release clean-test clean-debug clean-coverage
+
+distclean: clean-all
+
+configure-release configure-test configure-debug configure-coverage:
+ @mkdir -p $(OUTPUT_DIR)
+ @if [ ! -f $(OUTPUT_DIR)/Makefile ]; then \
+ (cd $(OUTPUT_DIR) && cmake -S $(ROOT_DIR) -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) $(CONFIGURE_ARGS)); \
+ fi
+
+configure: configure-release
+
+build-release build-debug build-coverage: build-%: configure-%
+ @cmake --build $(OUTPUT_DIR) $(BUILD_ARGS) --target all
+
+# Kept for consistency, empty to avoid building everything for test widget
+build-test: configure-test
+
+build: build-release
+
+build-all: build-release build-debug build-test build-coverage
+
+package-release package-debug package-coverage: package-%: build-%
+ @cmake --build $(OUTPUT_DIR) $(PACKAGE_ARGS) --target widget
+ @if [ "$(abspath $(DEST))" != "$(abspath $(OUTPUT_DIR))" ]; then \
+ mkdir -p $(DEST) && cp $(OUTPUT_DIR)/*.wgt $(DEST); \
+ fi
+
+package-test: build-test
+ @cmake --build $(OUTPUT_DIR) $(PACKAGE_ARGS) --target test_widget
+ @if [ "$(abspath $(DEST))" != "$(abspath $(OUTPUT_DIR))" ]; then \
+ mkdir -p $(DEST) && cp $(OUTPUT_DIR)/*.wgt $(DEST); \
+ fi
+
+package: package-release
+
+package-all: package-release package-test package-coverage package-debug
+
+update: configure
+ @cmake --build $(BUILD_DIR) --target autobuild
+
+install: build
+ @cmake --build $(BUILD_DIR) $(INSTALL_ARGS) --target install
{
"id": "VA-001",
"active": true,
"name": "Alexa",
"api": "alexa-voiceagent",
"wakewords": [
"alexa",
"computer",
"echo"
],
"activewakeword": "alexa",
"description": "Alexa voice assistant by Amazon.",
"vendor": "Amazon.com Services Inc"
}
SUMMARY = "Alexa voice agent binding"
DESCRIPTION = "alexa-voiceagent-service is an Alexa Auto SDK based voiceagent binding"
HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/apps/agl-service-voice-high"
SECTION = "apps"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://License.txt;md5=3b83ef96387f14655fc854ddc3c6bd57"
DEPENDS = " \
libafb-helpers \
libappcontroller \
avs-device-sdk \
aac-module-core \
aac-module-alexa \
aac-module-address-book \
aac-module-car-control \
aac-module-cbl \
aac-module-contact-uploader \
aac-module-navigation \
aac-module-phone-control \
aac-module-system-audio \
${@bb.utils.contains("ALEXA_WAKEWORD", "true", "aac-module-amazonlite pryon-lite", "", d)} \
"
SRC_URI = "git://github.com/alexa/alexa-auto-sdk.git;protocol=https;branch=2.3 \
file://alexa.json \
file://0001-remove-library-dependency-copying.patch \
file://0007-add-autobuild-scripts.patch \
"
SRCREV = "d46f22b453f528868b483e39bc7a057ca68a5199"
PV = "2.3+git${SRCPV}"
S = "${WORKDIR}/git/platforms/agl/alexa-voiceagent-service"
inherit cmake aglwgt
EXTRA_OECMAKE += "-DAAC_HOME=${RECIPE_SYSROOT}/${AAC_PREFIX}"
ALEXA_WAKEWORD ??= "false"
do_install:append() {
install -D -m 0644 ${WORKDIR}/alexa.json ${D}${sysconfdir}/xdg/AGL/voiceagents/alexa.json
}
PACKAGES =+ "${PN}-conf"
FILES:${PN}-conf = "${sysconfdir}/xdg/AGL/voiceagents/*"
# NOTE: curl and opus are from the base SDK libraries, sqlite3 from the
# core module
RDEPENDS:${PN} += " \
libcurl \
libopus \
libsqlite3 \
${PN}-conf \
${@bb.utils.contains("ALEXA_WAKEWORD", "true", "pryon-lite", "", d)} \
gstreamer1.0-plugins-bad-hls \
"
Workaround for connection deadlock
Change the maximum (effectively infinite) delay in HTTP2Transport's
connecting state handling code to use the inactivity timeout value,
which is currently 5 minutes. This seems to avoid triggering a
deadlock between the condition variable checking in the
monitorSharedQueueWhileWaiting method and use of the object's m_mutex
member in sendPostConnectMessage and onActivity methods.
At present, my theory is this issue stems from some change or bug
in the newer g++/libstdc++ coming with dunfell versus the thud release
that Amazon supports.
Upstream-Status: Inappropriate [other]
Signed-off-by: Scott Murray <scott.murray@konsulko.com>
diff --git a/ACL/src/Transport/HTTP2Transport.cpp b/ACL/src/Transport/HTTP2Transport.cpp
index f1b5c03..dec7424 100644
--- a/ACL/src/Transport/HTTP2Transport.cpp
+++ b/ACL/src/Transport/HTTP2Transport.cpp
@@ -618,7 +618,13 @@ HTTP2Transport::State HTTP2Transport::handleConnecting() {
return m_state;
}
- return monitorSharedQueueWhileWaiting(State::CONNECTING);
+ // Wait for connection for the same length of time as the post-connection
+ // inactivity monitor timeout (currently 5 minutes).
+ // This seems to avoid triggering an issue where connecting deadlocks when
+ // using the maximum timeout of std::chrono:steady_clock.
+ std::chrono::time_point<std::chrono::steady_clock> timeout =
+ std::chrono::steady_clock::now() + INACTIVITY_TIMEOUT;
+ return monitorSharedQueueWhileWaiting(State::CONNECTING, timeout);
}
HTTP2Transport::State HTTP2Transport::handleWaitingToRetryConnecting() {
FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
SRC_URI += "file://0001-connection-deadlock-workaround.patch"
# Fix nlohmann dependency to pick up newer nlohmann-json recipe in meta-oe
DEPENDS:remove = "nlohmann"
DEPENDS:append = " nlohmann-json"
# Fix nlohmann dependency to pick up newer nlohmann-json recipe in meta-oe
DEPENDS:remove = "nlohmann"
DEPENDS:append = " nlohmann-json"
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
# Needed for the required gstreamer-app-1.0 pkgconfig bits
DEPENDS += "gstreamer1.0-plugins-base"
AAC_PATCHES += "file://0001-update-pipewire-gstreamer-plugins.patch"
# Need to enable PipeWire support
EXTRA_OECMAKE += "-DUSE_PIPEWIRE=1"
# Pull static library into appropriate package to avoid a QA error
FILES:${PN}-staticdev += "${AAC_PREFIX}/lib/libaal.a"
Update PipeWire gstreamer plugins
Update PipeWire sink and source to handle drop of pwaudiosink and
pwaudiosrc in favor of pipewire* replacements. However, testing
has found that Alexa does not work with pipewiresrc (input hangs
after first interaction), so for now use "alsasrc device=pipewire"
as a workaround as recommended by upstream.
Given that Amazon has dropped AGL support, this patch will need to
be carried locally.
Upstream-Status: Inappropriate [no upstream]
Signed-off-by: Scott Murray <scott.murray@konsulko.com>
---
lib/aal/src/gstreamer/player.c | 2 +-
lib/aal/src/gstreamer/recorder.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/aal/src/gstreamer/player.c b/lib/aal/src/gstreamer/player.c
index 5dd6627..5ff9402 100644
--- a/lib/aal/src/gstreamer/player.c
+++ b/lib/aal/src/gstreamer/player.c
@@ -142,7 +142,7 @@ static aal_handle_t gstreamer_player_create(const aal_attributes_t* attr, aal_au
} else {
#ifdef USE_PIPEWIRE
g_info("Using Pipewire device: %s\n", attr->device);
- sink = gstreamer_create_and_add_element(bin, "pwaudiosink", "sink");
+ sink = gstreamer_create_and_add_element(bin, "pipewiresink", "sink");
if (sink) {
GstStructure* s = gst_structure_new("properties", "media.role", G_TYPE_STRING, attr->device, NULL);
g_object_set(G_OBJECT(sink), "stream-properties", s, NULL);
diff --git a/lib/aal/src/gstreamer/recorder.c b/lib/aal/src/gstreamer/recorder.c
index ff6d464..a13b000 100644
--- a/lib/aal/src/gstreamer/recorder.c
+++ b/lib/aal/src/gstreamer/recorder.c
@@ -69,7 +69,7 @@ static aal_handle_t gstreamer_recorder_create(const aal_attributes_t* attr, aal_
strncpy(src_desc, "autoaudiosrc", sizeof(src_desc) - 1);
} else {
#ifdef USE_PIPEWIRE
- snprintf(src_desc, sizeof(src_desc), "pwaudiosrc stream-properties=\"properties,media.role=%s\"", attr->device);
+ snprintf(src_desc, sizeof(src_desc), "alsasrc device=pipewire");
#else
g_info("Using ALSA device: %s\n", attr->device);
snprintf(src_desc, sizeof(src_desc), "alsasrc device=%s", attr->device);
SUMMARY = "The software for the AGL Alexa voiceagent feature"
DESCRIPTION = "The software for the AGL Alexa voiceagent feature"
LICENSE = "MIT"
inherit packagegroup
PACKAGES = "\
packagegroup-agl-voiceagent-alexa \
"
RDEPENDS:${PN} = " \
alexa-voiceagent-service \
"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment