aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTai Vuong <tvuong@audiokinetic.com>2017-11-02 16:31:15 -0400
committerTai Vuong <tvuong@audiokinetic.com>2017-11-02 16:31:15 -0400
commit5d2ee4455d95771d12cc6058bc19c0d6f7fe43d1 (patch)
treeb4cbc2be7475641edf71ae42c6ce117dba27b91d
parente92aade201ec131c3eb7430305f60a0a4c9c44c1 (diff)
parentab6e470190f2cc410b1f6fa8f146317a3c3b08b5 (diff)
merge dev branch with master
-rw-r--r--.gitmodules6
m---------afb-utilities0
-rw-r--r--afb-utilities/LICENSE201
-rw-r--r--afb-utilities/README.md11
-rw-r--r--afb-utilities/filescan-utils.c122
-rw-r--r--afb-utilities/filescan-utils.h45
-rw-r--r--afb-utilities/wrap-json.c939
-rw-r--r--afb-utilities/wrap-json.h46
-rw-r--r--afb-utilities/wrap-json.md305
-rw-r--r--ahl-binding/CMakeLists.txt (renamed from src/CMakeLists.txt)31
-rw-r--r--ahl-binding/ahl-apidef.h237
-rw-r--r--ahl-binding/ahl-apidef.json (renamed from src/ahl-apidef.json)2
-rw-r--r--ahl-binding/ahl-binding.c (renamed from src/ahl-binding.c)0
-rw-r--r--ahl-binding/ahl-binding.h (renamed from src/ahl-binding.h)0
-rw-r--r--ahl-binding/ahl-config.c (renamed from src/ahl-config.c)62
-rw-r--r--ahl-binding/ahl-deviceenum.c (renamed from src/ahl-deviceenum.c)0
-rw-r--r--ahl-binding/ahl-json.c (renamed from src/ahl-json.c)0
-rw-r--r--ahl-binding/ahl-json.h (renamed from src/ahl-json.h)0
-rw-r--r--ahl-policy/CMakeLists.txt (renamed from conf.d/app-templates/samples.d/CMakeLists.txt.sample)25
-rw-r--r--ahl-policy/ahl-interface.h (renamed from src/ahl-interface.h)0
-rw-r--r--ahl-policy/ahl-policy.c (renamed from src/ahl-policy.c)0
-rw-r--r--ahl-policy/ahl-policy.h (renamed from src/ahl-policy.h)0
-rw-r--r--ahl-utilities/CMakeLists.txt (renamed from afb-utilities/CMakeLists.txt)24
-rwxr-xr-xahl-utilities/ahl-policy-utils.c (renamed from src/ahl-policy-utils.c)0
-rwxr-xr-xahl-utilities/ahl-policy-utils.h (renamed from src/ahl-policy-utils.h)0
m---------conf.d/app-templates0
-rw-r--r--conf.d/app-templates/LICENSE201
-rw-r--r--conf.d/app-templates/README.md382
-rw-r--r--conf.d/app-templates/book.json94
-rw-r--r--conf.d/app-templates/cmake/cmake.d/01-build_options.cmake113
-rw-r--r--conf.d/app-templates/cmake/cmake.d/02-variables.cmake174
-rw-r--r--conf.d/app-templates/cmake/cmake.d/03-macros.cmake501
-rw-r--r--conf.d/app-templates/cmake/cmake.d/04-extra_targets.cmake162
-rw-r--r--conf.d/app-templates/cmake/common.cmake63
-rw-r--r--conf.d/app-templates/cmake/configure_file.cmake2
-rw-r--r--conf.d/app-templates/cmake/export.map1
-rw-r--r--conf.d/app-templates/docs/0-Doc-Revisions.md6
-rw-r--r--conf.d/app-templates/docs/README.md22
-rw-r--r--conf.d/app-templates/docs/SUMMARY.md10
-rw-r--r--conf.d/app-templates/docs/_layouts/ebook/page.html36
-rw-r--r--conf.d/app-templates/docs/_layouts/ebook/pdf_footer.html13
-rw-r--r--conf.d/app-templates/docs/_layouts/ebook/pdf_header.html13
-rw-r--r--conf.d/app-templates/docs/_layouts/ebook/summary.html58
-rw-r--r--conf.d/app-templates/docs/_layouts/layout.html28
-rw-r--r--conf.d/app-templates/docs/cover.jpgbin237964 -> 0 bytes
-rw-r--r--conf.d/app-templates/docs/cover_small.jpgbin12433 -> 0 bytes
-rw-r--r--conf.d/app-templates/docs/dev_guide/0_Abstract.md21
-rw-r--r--conf.d/app-templates/docs/dev_guide/1_Quickstart.md81
-rw-r--r--conf.d/app-templates/docs/dev_guide/2_project_architecture.md98
-rw-r--r--conf.d/app-templates/docs/dev_guide/3_advanced_usage.md102
-rw-r--r--conf.d/app-templates/docs/dev_guide/4_advanced_customization.md42
-rw-r--r--conf.d/app-templates/docs/dev_guide/5_autobuild.md41
-rw-r--r--conf.d/app-templates/docs/dev_guide/pictures/iotbzh_logo_small.pngbin6989 -> 0 bytes
-rw-r--r--conf.d/app-templates/docs/resources/cover.svg210
-rw-r--r--conf.d/app-templates/docs/resources/ebook.css386
-rwxr-xr-xconf.d/app-templates/docs/resources/make_cover.sh27
-rwxr-xr-xconf.d/app-templates/gendocs.sh79
-rw-r--r--conf.d/app-templates/samples.d/config.cmake.sample203
-rw-r--r--conf.d/app-templates/samples.d/config.xml.in.sample142
-rw-r--r--conf.d/app-templates/samples.d/xds-config.env.sample10
-rwxr-xr-xconf.d/app-templates/template.d/autobuild/agl/autobuild.in63
-rwxr-xr-xconf.d/app-templates/template.d/autobuild/linux/autobuild.in65
-rw-r--r--conf.d/app-templates/template.d/config.xml.in9
-rw-r--r--conf.d/app-templates/template.d/deb-config.dsc.in15
-rw-r--r--conf.d/app-templates/template.d/deb-config.install.in2
-rw-r--r--conf.d/app-templates/template.d/debian.changelog.in5
-rw-r--r--conf.d/app-templates/template.d/debian.compat.in1
-rw-r--r--conf.d/app-templates/template.d/debian.control.in16
-rw-r--r--conf.d/app-templates/template.d/debian.rules.in87
-rw-r--r--conf.d/app-templates/template.d/gdb-native-target.ini.in35
-rwxr-xr-xconf.d/app-templates/template.d/install-wgt-on-target.sh.in19
-rw-r--r--conf.d/app-templates/template.d/rpm-config.spec.in62
-rwxr-xr-xconf.d/app-templates/template.d/start-on-target.sh.in25
-rw-r--r--conf.d/app-templates/wgt/icon-default.pngbin10651 -> 0 bytes
-rw-r--r--conf.d/app-templates/wgt/icon-html5.pngbin6848 -> 0 bytes
-rw-r--r--conf.d/app-templates/wgt/icon-native.pngbin5276 -> 0 bytes
-rw-r--r--conf.d/app-templates/wgt/icon-qml.pngbin4971 -> 0 bytes
-rw-r--r--conf.d/app-templates/wgt/icon-service.pngbin13273 -> 0 bytes
-rwxr-xr-xconf.d/autobuild/agl/autobuild8
-rwxr-xr-xconf.d/autobuild/linux/autobuild8
-rw-r--r--conf.d/cmake/config.cmake4
-rw-r--r--conf.d/project/.asoundrc-audiok (renamed from conf.d/project/.asoundrc)0
-rw-r--r--conf.d/project/.asounrc-fulup198
-rw-r--r--conf.d/project/README.md15
-rw-r--r--conf.d/project/ahl-audiok4a-config.json (renamed from conf.d/project/agl-ahl-config.json)0
-rw-r--r--conf.d/project/ahl-fulup4a-config.json39
-rw-r--r--htdocs/audiohl.html44
-rw-r--r--nbproject/configurations.xml109
-rw-r--r--nbproject/project.xml26
-rw-r--r--src/ahl-apidef.h237
-rw-r--r--src/ahl-policyJSON.c307
-rw-r--r--src/ahl-policyJSON.h30
92 files changed, 764 insertions, 6042 deletions
diff --git a/.gitmodules b/.gitmodules
index e69de29..501cfbb 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -0,0 +1,6 @@
+[submodule "conf.d/app-templates"]
+ path = conf.d/app-templates
+ url = https://gerrit.automotivelinux.org/gerrit/p/apps/app-templates.git
+[submodule "afb-utilities"]
+ path = afb-utilities
+ url = https://github.com/iotbzh/afb-utilities.git
diff --git a/afb-utilities b/afb-utilities
new file mode 160000
+Subproject 77c12fc3a44ce4fd1f4a83019547190d0f44549
diff --git a/afb-utilities/LICENSE b/afb-utilities/LICENSE
deleted file mode 100644
index 8dada3e..0000000
--- a/afb-utilities/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "{}"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright {yyyy} {name of copyright owner}
-
- 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.
diff --git a/afb-utilities/README.md b/afb-utilities/README.md
deleted file mode 100644
index 03a0bcc..0000000
--- a/afb-utilities/README.md
+++ /dev/null
@@ -1,11 +0,0 @@
-AFB Utilities
-=============
-
-You should find useful utilities to integrates as submodule in your bindings
-development.
-
-From your AFB apps repository do the following to integrates this repo:
-
-```bash
-git submodule add git@github.com:iotbzh/afb-utilities
-```
diff --git a/afb-utilities/filescan-utils.c b/afb-utilities/filescan-utils.c
deleted file mode 100644
index 46e461b..0000000
--- a/afb-utilities/filescan-utils.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (C) 2016 "IoT.bzh"
- * Author Fulup Ar Foll <fulup@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.
- */
-
-#define _GNU_SOURCE
-#include <stdio.h>
-#include <string.h>
-#include <time.h>
-#include <sys/prctl.h>
-#include <dirent.h>
-
-#include "filescan-utils.h"
-
-// List Avaliable Configuration Files
-PUBLIC json_object* ScanForConfig (const char* searchPath, CtlScanDirModeT mode, const char *pre, const char *ext) {
- json_object *responseJ;
- char *dirPath;
- char* dirList= strdup(searchPath);
- size_t extLen=0;
-
- void ScanDir (char *searchPath) {
- DIR *dirHandle;
- struct dirent *dirEnt;
- dirHandle = opendir (searchPath);
- if (!dirHandle) {
- AFB_DEBUG ("CONFIG-SCANNING dir=%s not readable", searchPath);
- return;
- }
-
- //AFB_NOTICE ("CONFIG-SCANNING:ctl_listconfig scanning: %s", searchPath);
- while ((dirEnt = readdir(dirHandle)) != NULL) {
-
- // recursively search embedded directories ignoring any directory starting by '.' or '_'
- if (dirEnt->d_type == DT_DIR && mode == CTL_SCAN_RECURSIVE) {
- char newpath[CONTROL_MAXPATH_LEN];
- if (dirEnt->d_name[0]=='.' || dirEnt->d_name[0]=='_') continue;
-
- strncpy(newpath, searchPath, sizeof(newpath));
- strncat(newpath, "/", sizeof(newpath));
- strncat(newpath, dirEnt->d_name, sizeof(newpath));
- ScanDir(newpath);
- continue;
- }
-
- // Unknown type is accepted to support dump filesystems
- if (dirEnt->d_type == DT_REG || dirEnt->d_type == DT_UNKNOWN) {
-
- // check prefix and extention
- size_t extIdx=strlen(dirEnt->d_name)-extLen;
- if (extIdx <= 0) continue;
- if (pre && !strcasestr (dirEnt->d_name, pre)) continue;
- if (ext && strcasecmp (ext, &dirEnt->d_name[extIdx])) continue;
-
- struct json_object *pathJ = json_object_new_object();
- json_object_object_add(pathJ, "fullpath", json_object_new_string(searchPath));
- json_object_object_add(pathJ, "filename", json_object_new_string(dirEnt->d_name));
- json_object_array_add(responseJ, pathJ);
- }
- }
- closedir(dirHandle);
- }
-
- if (ext) extLen=strlen(ext);
- responseJ = json_object_new_array();
-
- // loop recursively on dir
- for (dirPath= strtok(dirList, ":"); dirPath && *dirPath; dirPath=strtok(NULL,":")) {
- ScanDir (dirPath);
- }
-
- free (dirList);
- return (responseJ);
-}
-
-PUBLIC const char *GetMidleName(const char*name) {
- char *fullname = strdup(name);
-
- for (int idx = 0; fullname[idx] != '\0'; idx++) {
- int start;
- if (fullname[idx] == '-') {
- start = idx + 1;
- for (int jdx = start; ; jdx++) {
- if (fullname[jdx] == '-' || fullname[jdx] == '.' || fullname[jdx] == '\0') {
- fullname[jdx] = '\0';
- return &fullname[start];
- break;
- }
- }
- break;
- }
- }
- return "";
-}
-
-PUBLIC const char *GetBinderName() {
- char psName[17];
- static char *binderName=NULL;
-
- if (binderName) return binderName;
-
- binderName= getenv("AFB_BINDER_NAME");
- if (!binderName) {
- // retrieve binder name from process name afb-name-trailer
- prctl(PR_GET_NAME, psName,NULL,NULL,NULL);
- binderName=(char*)GetMidleName(psName);
- }
-
- return binderName;
-}
diff --git a/afb-utilities/filescan-utils.h b/afb-utilities/filescan-utils.h
deleted file mode 100644
index a97d030..0000000
--- a/afb-utilities/filescan-utils.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2016 "IoT.bzh"
- * Author Fulup Ar Foll <fulup@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.
- *
- * reference:
- * amixer contents; amixer controls;
- * http://www.tldp.org/HOWTO/Alsa-sound-6.html
- */
-
-#ifndef FILESCAN_UTILS_H
-#define FILESCAN_UTILS_H
-
-#define AFB_BINDING_VERSION 2
-#include <afb/afb-binding.h>
-#include <json-c/json.h>
-
-#ifndef PUBLIC
- #define PUBLIC
-#endif
-#define STATIC static
-
-// ctl-misc.c
-typedef enum {
- CTL_SCAN_FLAT=0,
- CTL_SCAN_RECURSIVE=1,
-} CtlScanDirModeT;
-
-PUBLIC const char *GetMidleName(const char*name);
-PUBLIC const char *GetBinderName();
-PUBLIC json_object* ScanForConfig (const char* searchPath, CtlScanDirModeT mode, const char *pre, const char *ext);
-
-#endif /* FILESCAN_UTILS_H */
-
diff --git a/afb-utilities/wrap-json.c b/afb-utilities/wrap-json.c
deleted file mode 100644
index 164e127..0000000
--- a/afb-utilities/wrap-json.c
+++ /dev/null
@@ -1,939 +0,0 @@
-/*
- Copyright (C) 2016, 2017 "IoT.bzh"
-
- author: José Bollo <jose.bollo@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.
-*/
-
-#include <string.h>
-
-#include "wrap-json.h"
-
-#define STACKCOUNT 32
-#define STRCOUNT 8
-
-enum {
- wrap_json_error_none,
- wrap_json_error_null_object,
- wrap_json_error_truncated,
- wrap_json_error_internal_error,
- wrap_json_error_out_of_memory,
- wrap_json_error_invalid_character,
- wrap_json_error_too_long,
- wrap_json_error_too_deep,
- wrap_json_error_null_spec,
- wrap_json_error_null_key,
- wrap_json_error_null_string,
- wrap_json_error_out_of_range,
- wrap_json_error_incomplete,
- wrap_json_error_missfit_type,
- wrap_json_error_key_not_found,
- _wrap_json_error_count_
-};
-
-static const char ignore_all[] = " \t\n\r,:";
-static const char pack_accept_arr[] = "][{snbiIfoO";
-static const char pack_accept_key[] = "s}";
-#define pack_accept_any (&pack_accept_arr[1])
-
-static const char unpack_accept_arr[] = "*!][{snbiIfFoO";
-static const char unpack_accept_key[] = "*!s}";
-#define unpack_accept_any (&unpack_accept_arr[3])
-
-static const char *pack_errors[_wrap_json_error_count_] =
-{
- [wrap_json_error_none] = "unknown error",
- [wrap_json_error_null_object] = "null object",
- [wrap_json_error_truncated] = "truncated",
- [wrap_json_error_internal_error] = "internal error",
- [wrap_json_error_out_of_memory] = "out of memory",
- [wrap_json_error_invalid_character] = "invalid character",
- [wrap_json_error_too_long] = "too long",
- [wrap_json_error_too_deep] = "too deep",
- [wrap_json_error_null_spec] = "spec is NULL",
- [wrap_json_error_null_key] = "key is NULL",
- [wrap_json_error_null_string] = "string is NULL",
- [wrap_json_error_out_of_range] = "array too small",
- [wrap_json_error_incomplete] = "incomplete container",
- [wrap_json_error_missfit_type] = "missfit of type",
- [wrap_json_error_key_not_found] = "key not found"
-};
-
-int wrap_json_get_error_position(int rc)
-{
- if (rc < 0)
- rc = -rc;
- return (rc >> 4) + 1;
-}
-
-int wrap_json_get_error_code(int rc)
-{
- if (rc < 0)
- rc = -rc;
- return rc & 15;
-}
-
-const char *wrap_json_get_error_string(int rc)
-{
- rc = wrap_json_get_error_code(rc);
- if (rc >= sizeof pack_errors / sizeof *pack_errors)
- rc = 0;
- return pack_errors[rc];
-}
-
-
-
-static inline const char *skip(const char *d)
-{
- while (*d && strchr(ignore_all, *d))
- d++;
- return d;
-}
-
-int wrap_json_vpack(struct json_object **result, const char *desc, va_list args)
-{
- /* TODO: the case of structs with key being single char should be optimized */
- int nstr, notnull, nullable, rc;
- size_t sz, dsz, ssz;
- char *s;
- char c;
- const char *d;
- char buffer[256];
- struct { const char *str; size_t sz; } strs[STRCOUNT];
- struct { struct json_object *cont, *key; const char *acc; char type; } stack[STACKCOUNT], *top;
- struct json_object *obj;
-
- ssz = sizeof buffer;
- s = buffer;
- top = stack;
- top->key = NULL;
- top->cont = NULL;
- top->acc = pack_accept_any;
- top->type = 0;
- d = desc;
- if (!d)
- goto null_spec;
- d = skip(d);
- for(;;) {
- c = *d;
- if (!c)
- goto truncated;
- if (!strchr(top->acc, c))
- goto invalid_character;
- d = skip(++d);
- switch(c) {
- case 's':
- nullable = 0;
- notnull = 0;
- nstr = 0;
- sz = 0;
- for (;;) {
- strs[nstr].str = va_arg(args, const char*);
- if (strs[nstr].str)
- notnull = 1;
- if (*d == '?') {
- d = skip(++d);
- nullable = 1;
- }
- switch(*d) {
- case '%': strs[nstr].sz = va_arg(args, size_t); d = skip(++d); break;
- case '#': strs[nstr].sz = (size_t)va_arg(args, int); d = skip(++d); break;
- default: strs[nstr].sz = strs[nstr].str ? strlen(strs[nstr].str) : 0; break;
- }
- sz += strs[nstr++].sz;
- if (*d == '?') {
- d = skip(++d);
- nullable = 1;
- }
- if (*d != '+')
- break;
- if (nstr >= STRCOUNT)
- goto too_long;
- d = skip(++d);
- }
- if (*d == '*')
- nullable = 1;
- if (notnull) {
- if (sz > ssz) {
- ssz += ssz;
- if (ssz < sz)
- ssz = sz;
- s = alloca(sz);
- }
- dsz = sz;
- while (nstr) {
- nstr--;
- dsz -= strs[nstr].sz;
- memcpy(&s[dsz], strs[nstr].str, strs[nstr].sz);
- }
- obj = json_object_new_string_len(s, (int)sz);
- if (!obj)
- goto out_of_memory;
- } else if (nullable)
- obj = NULL;
- else
- goto null_string;
- break;
- case 'n':
- obj = NULL;
- break;
- case 'b':
- obj = json_object_new_boolean(va_arg(args, int));
- if (!obj)
- goto out_of_memory;
- break;
- case 'i':
- obj = json_object_new_int(va_arg(args, int));
- if (!obj)
- goto out_of_memory;
- break;
- case 'I':
- obj = json_object_new_int64(va_arg(args, int64_t));
- if (!obj)
- goto out_of_memory;
- break;
- case 'f':
- obj = json_object_new_double(va_arg(args, double));
- if (!obj)
- goto out_of_memory;
- break;
- case 'o':
- case 'O':
- obj = va_arg(args, struct json_object*);
- if (*d == '?')
- d = skip(++d);
- else if (*d != '*' && !obj)
- goto null_object;
- if (c == 'O')
- json_object_get(obj);
- break;
- case '[':
- case '{':
- if (++top >= &stack[STACKCOUNT])
- goto too_deep;
- top->key = NULL;
- if (c == '[') {
- top->type = ']';
- top->acc = pack_accept_arr;
- top->cont = json_object_new_array();
- } else {
- top->type = '}';
- top->acc = pack_accept_key;
- top->cont = json_object_new_object();
- }
- if (!top->cont)
- goto out_of_memory;
- continue;
- case '}':
- case ']':
- if (c != top->type || top <= stack)
- goto internal_error;
- obj = (top--)->cont;
- if (*d == '*' && !(c == '}' ? json_object_object_length(obj) : json_object_array_length(obj))) {
- json_object_put(obj);
- obj = NULL;
- }
- break;
- default:
- goto internal_error;
- }
- switch (top->type) {
- case 0:
- if (top != stack)
- goto internal_error;
- if (*d)
- goto invalid_character;
- *result = obj;
- return 0;
- case ']':
- if (obj || *d != '*')
- json_object_array_add(top->cont, obj);
- if (*d == '*')
- d = skip(++d);
- break;
- case '}':
- if (!obj)
- goto null_key;
- top->key = obj;
- top->acc = pack_accept_any;
- top->type = ':';
- break;
- case ':':
- if (obj || *d != '*')
- json_object_object_add(top->cont, json_object_get_string(top->key), obj);
- if (*d == '*')
- d = skip(++d);
- json_object_put(top->key);
- top->key = NULL;
- top->acc = pack_accept_key;
- top->type = '}';
- break;
- default:
- goto internal_error;
- }
- }
-
-null_object:
- rc = wrap_json_error_null_object;
- goto error;
-truncated:
- rc = wrap_json_error_truncated;
- goto error;
-internal_error:
- rc = wrap_json_error_internal_error;
- goto error;
-out_of_memory:
- rc = wrap_json_error_out_of_memory;
- goto error;
-invalid_character:
- rc = wrap_json_error_invalid_character;
- goto error;
-too_long:
- rc = wrap_json_error_too_long;
- goto error;
-too_deep:
- rc = wrap_json_error_too_deep;
- goto error;
-null_spec:
- rc = wrap_json_error_null_spec;
- goto error;
-null_key:
- rc = wrap_json_error_null_key;
- goto error;
-null_string:
- rc = wrap_json_error_null_string;
- goto error;
-error:
- do {
- json_object_put(top->key);
- json_object_put(top->cont);
- } while (--top >= stack);
- *result = NULL;
- rc = rc | (int)((d - desc) << 4);
- return -rc;
-}
-
-int wrap_json_pack(struct json_object **result, const char *desc, ...)
-{
- int rc;
- va_list args;
-
- va_start(args, desc);
- rc = wrap_json_vpack(result, desc, args);
- va_end(args);
- return rc;
-}
-
-static int vunpack(struct json_object *object, const char *desc, va_list args, int store)
-{
- int rc = 0, optionnal, ignore;
- char c, xacc[2] = { 0, 0 };
- const char *acc;
- const char *d, *fit = NULL;
- const char *key = NULL;
- const char **ps = NULL;
- double *pf = NULL;
- int *pi = NULL;
- int64_t *pI = NULL;
- size_t *pz = NULL;
- struct { struct json_object *parent; const char *acc; int index, count; char type; } stack[STACKCOUNT], *top;
- struct json_object *obj;
- struct json_object **po;
-
- xacc[0] = 0;
- ignore = 0;
- top = NULL;
- acc = unpack_accept_any;
- d = desc;
- if (!d)
- goto null_spec;
- d = skip(d);
- obj = object;
- for(;;) {
- fit = d;
- c = *d;
- if (!c)
- goto truncated;
- if (!strchr(acc, c))
- goto invalid_character;
- d = skip(++d);
- switch(c) {
- case 's':
- if (xacc[0] == '}') {
- /* expects a key */
- key = va_arg(args, const char *);
- if (!key)
- goto null_key;
- if (*d != '?')
- optionnal = 0;
- else {
- optionnal = 1;
- d = skip(++d);
- }
- if (ignore)
- ignore++;
- else {
- if (json_object_object_get_ex(top->parent, key, &obj)) {
- /* found */
- top->index++;
- } else {
- /* not found */
- if (!optionnal)
- goto key_not_found;
- ignore = 1;
- obj = NULL;
- }
- }
- xacc[0] = ':';
- acc = unpack_accept_any;
- continue;
- }
- /* get a string */
- if (store)
- ps = va_arg(args, const char **);
- if (!ignore) {
- if (!json_object_is_type(obj, json_type_string))
- goto missfit;
- if (store && ps)
- *ps = json_object_get_string(obj);
- }
- if (*d == '%') {
- d = skip(++d);
- if (store) {
- pz = va_arg(args, size_t *);
- if (!ignore && pz)
- *pz = (size_t)json_object_get_string_len(obj);
- }
- }
- break;
- case 'n':
- if (!ignore && !json_object_is_type(obj, json_type_null))
- goto missfit;
- break;
- case 'b':
- if (store)
- pi = va_arg(args, int *);
-
- if (!ignore) {
- if (!json_object_is_type(obj, json_type_boolean))
- goto missfit;
- if (store && pi)
- *pi = json_object_get_boolean(obj);
- }
- break;
- case 'i':
- if (store)
- pi = va_arg(args, int *);
-
- if (!ignore) {
- if (!json_object_is_type(obj, json_type_int))
- goto missfit;
- if (store && pi)
- *pi = json_object_get_int(obj);
- }
- break;
- case 'I':
- if (store)
- pI = va_arg(args, int64_t *);
-
- if (!ignore) {
- if (!json_object_is_type(obj, json_type_int))
- goto missfit;
- if (store && pI)
- *pI = json_object_get_int64(obj);
- }
- break;
- case 'f':
- case 'F':
- if (store)
- pf = va_arg(args, double *);
-
- if (!ignore) {
- if (!(json_object_is_type(obj, json_type_double) || (c == 'F' && json_object_is_type(obj, json_type_int))))
- goto missfit;
- if (store && pf)
- *pf = json_object_get_double(obj);
- }
- break;
- case 'o':
- case 'O':
- if (store) {
- po = va_arg(args, struct json_object **);
- if (!ignore && po) {
- if (c == 'O')
- obj = json_object_get(obj);
- *po = obj;
- }
- }
- break;
-
- case '[':
- case '{':
- if (!top)
- top = stack;
- else if (++top >= &stack[STACKCOUNT])
- goto too_deep;
-
- top->acc = acc;
- top->type = xacc[0];
- top->index = 0;
- top->parent = obj;
- if (ignore)
- ignore++;
- if (c == '[') {
- if (!ignore) {
- if (!json_object_is_type(obj, json_type_array))
- goto missfit;
- top->count = json_object_array_length(obj);
- }
- xacc[0] = ']';
- acc = unpack_accept_arr;
- } else {
- if (!ignore) {
- if (!json_object_is_type(obj, json_type_object))
- goto missfit;
- top->count = json_object_object_length(obj);
- }
- xacc[0] = '}';
- acc = unpack_accept_key;
- continue;
- }
- break;
- case '}':
- case ']':
- if (!top || c != xacc[0])
- goto internal_error;
- acc = top->acc;
- xacc[0] = top->type;
- top = top == stack ? NULL : top - 1;
- if (ignore)
- ignore--;
- break;
- case '!':
- if (*d != xacc[0])
- goto invalid_character;
- if (!ignore && top->index != top->count)
- goto incomplete;
- /*@fallthrough@*/
- case '*':
- acc = xacc;
- continue;
- default:
- goto internal_error;
- }
- switch (xacc[0]) {
- case 0:
- if (top)
- goto internal_error;
- if (*d)
- goto invalid_character;
- return 0;
- case ']':
- if (!ignore) {
- key = strchr(unpack_accept_arr, *d);
- if (key && key >= unpack_accept_any) {
- if (top->index >= top->count)
- goto out_of_range;
- obj = json_object_array_get_idx(top->parent, top->index++);
- }
- }
- break;
- case ':':
- acc = unpack_accept_key;
- xacc[0] = '}';
- if (ignore)
- ignore--;
- break;
- default:
- goto internal_error;
- }
- }
-truncated:
- rc = wrap_json_error_truncated;
- goto error;
-internal_error:
- rc = wrap_json_error_internal_error;
- goto error;
-invalid_character:
- rc = wrap_json_error_invalid_character;
- goto error;
-too_deep:
- rc = wrap_json_error_too_deep;
- goto error;
-null_spec:
- rc = wrap_json_error_null_spec;
- goto error;
-null_key:
- rc = wrap_json_error_null_key;
- goto error;
-out_of_range:
- rc = wrap_json_error_out_of_range;
- goto error;
-incomplete:
- rc = wrap_json_error_incomplete;
- goto error;
-missfit:
- rc = wrap_json_error_missfit_type;
- goto errorfit;
-key_not_found:
- rc = wrap_json_error_key_not_found;
- goto error;
-errorfit:
- d = fit;
-error:
- rc = rc | (int)((d - desc) << 4);
- return -rc;
-}
-
-int wrap_json_vcheck(struct json_object *object, const char *desc, va_list args)
-{
- return vunpack(object, desc, args, 0);
-}
-
-int wrap_json_check(struct json_object *object, const char *desc, ...)
-{
- int rc;
- va_list args;
-
- va_start(args, desc);
- rc = vunpack(object, desc, args, 0);
- va_end(args);
- return rc;
-}
-
-int wrap_json_vmatch(struct json_object *object, const char *desc, va_list args)
-{
- return !vunpack(object, desc, args, 0);
-}
-
-int wrap_json_match(struct json_object *object, const char *desc, ...)
-{
- int rc;
- va_list args;
-
- va_start(args, desc);
- rc = vunpack(object, desc, args, 0);
- va_end(args);
- return !rc;
-}
-
-int wrap_json_vunpack(struct json_object *object, const char *desc, va_list args)
-{
- return vunpack(object, desc, args, 1);
-}
-
-int wrap_json_unpack(struct json_object *object, const char *desc, ...)
-{
- int rc;
- va_list args;
-
- va_start(args, desc);
- rc = vunpack(object, desc, args, 1);
- va_end(args);
- return rc;
-}
-
-static void object_for_all(struct json_object *object, void (*callback)(void*,struct json_object*,const char*), void *closure)
-{
- struct json_object_iterator it = json_object_iter_begin(object);
- struct json_object_iterator end = json_object_iter_end(object);
- while (!json_object_iter_equal(&it, &end)) {
- callback(closure, json_object_iter_peek_value(&it), json_object_iter_peek_name(&it));
- json_object_iter_next(&it);
- }
-}
-
-static void array_for_all(struct json_object *object, void (*callback)(void*,struct json_object*), void *closure)
-{
- int n = json_object_array_length(object);
- int i = 0;
- while(i < n)
- callback(closure, json_object_array_get_idx(object, i++));
-}
-
-void wrap_json_optarray_for_all(struct json_object *object, void (*callback)(void*,struct json_object*), void *closure)
-{
- if (json_object_is_type(object, json_type_array))
- array_for_all(object, callback, closure);
- else
- callback(closure, object);
-}
-
-void wrap_json_array_for_all(struct json_object *object, void (*callback)(void*,struct json_object*), void *closure)
-{
- if (json_object_is_type(object, json_type_array))
- array_for_all(object, callback, closure);
-}
-
-void wrap_json_object_for_all(struct json_object *object, void (*callback)(void*,struct json_object*,const char*), void *closure)
-{
- if (json_object_is_type(object, json_type_object))
- object_for_all(object, callback, closure);
-}
-
-void wrap_json_optobject_for_all(struct json_object *object, void (*callback)(void*,struct json_object*,const char*), void *closure)
-{
- if (json_object_is_type(object, json_type_object))
- object_for_all(object, callback, closure);
- else
- callback(closure, object, NULL);
-}
-
-void wrap_json_for_all(struct json_object *object, void (*callback)(void*,struct json_object*,const char*), void *closure)
-{
- if (!object)
- /* do nothing */;
- else if (json_object_is_type(object, json_type_object))
- object_for_all(object, callback, closure);
- else if (!json_object_is_type(object, json_type_array))
- callback(closure, object, NULL);
- else {
- int n = json_object_array_length(object);
- int i = 0;
- while(i < n)
- callback(closure, json_object_array_get_idx(object, i++), NULL);
- }
-}
-
-#if defined(WRAP_JSON_TEST)
-#include <stdio.h>
-
-void p(const char *desc, ...)
-{
- int rc;
- va_list args;
- struct json_object *result;
-
- va_start(args, desc);
- rc = wrap_json_vpack(&result, desc, args);
- va_end(args);
- if (!rc)
- printf(" SUCCESS %s\n\n", json_object_to_json_string(result));
- else
- printf(" ERROR[char %d err %d] %s\n\n", wrap_json_get_error_position(rc), wrap_json_get_error_code(rc), wrap_json_get_error_string(rc));
- json_object_put(result);
-}
-
-const char *xs[10];
-int *xi[10];
-int64_t *xI[10];
-double *xf[10];
-struct json_object *xo[10];
-size_t xz[10];
-
-void u(const char *value, const char *desc, ...)
-{
- unsigned m, k;
- int rc;
- va_list args;
- struct json_object *obj, *o;
-
- memset(xs, 0, sizeof xs);
- memset(xi, 0, sizeof xi);
- memset(xI, 0, sizeof xI);
- memset(xf, 0, sizeof xf);
- memset(xo, 0, sizeof xo);
- memset(xz, 0, sizeof xz);
- obj = json_tokener_parse(value);
- va_start(args, desc);
- rc = wrap_json_vunpack(obj, desc, args);
- va_end(args);
- if (rc)
- printf(" ERROR[char %d err %d] %s\n\n", wrap_json_get_error_position(rc), wrap_json_get_error_code(rc), wrap_json_get_error_string(rc));
- else {
- value = NULL;
- printf(" SUCCESS");
- va_start(args, desc);
- k = m = 0;
- while(*desc) {
- switch(*desc) {
- case '{': m = (m << 1) | 1; k = 1; break;
- case '}': m = m >> 1; k = m&1; break;
- case '[': m = m << 1; k = 0; break;
- case ']': m = m >> 1; k = m&1; break;
- case 's': printf(" s:%s", k ? va_arg(args, const char*) : *(va_arg(args, const char**)?:&value)); k ^= m&1; break;
- case '%': printf(" %%:%zu", *va_arg(args, size_t*)); k = m&1; break;
- case 'n': printf(" n"); k = m&1; break;
- case 'b': printf(" b:%d", *va_arg(args, int*)); k = m&1; break;
- case 'i': printf(" i:%d", *va_arg(args, int*)); k = m&1; break;
- case 'I': printf(" I:%lld", *va_arg(args, int64_t*)); k = m&1; break;
- case 'f': printf(" f:%f", *va_arg(args, double*)); k = m&1; break;
- case 'F': printf(" F:%f", *va_arg(args, double*)); k = m&1; break;
- case 'o': printf(" o:%s", json_object_to_json_string(*va_arg(args, struct json_object**))); k = m&1; break;
- case 'O': o = *va_arg(args, struct json_object**); printf(" O:%s", json_object_to_json_string(o)); json_object_put(o); k = m&1; break;
- default: break;
- }
- desc++;
- }
- va_end(args);
- printf("\n\n");
- }
- json_object_put(obj);
-}
-
-#define P(...) do{ printf("pack(%s)\n",#__VA_ARGS__); p(__VA_ARGS__); } while(0)
-#define U(...) do{ printf("unpack(%s)\n",#__VA_ARGS__); u(__VA_ARGS__); } while(0)
-
-int main()
-{
- char buffer[4] = {'t', 'e', 's', 't'};
-
- P("n");
- P("b", 1);
- P("b", 0);
- P("i", 1);
- P("I", (uint64_t)0x123456789abcdef);
- P("f", 3.14);
- P("s", "test");
- P("s?", "test");
- P("s?", NULL);
- P("s#", "test asdf", 4);
- P("s%", "test asdf", (size_t)4);
- P("s#", buffer, 4);
- P("s%", buffer, (size_t)4);
- P("s++", "te", "st", "ing");
- P("s#+#+", "test", 1, "test", 2, "test");
- P("s%+%+", "test", (size_t)1, "test", (size_t)2, "test");
- P("{}", 1.0);
- P("[]", 1.0);
- P("o", json_object_new_int(1));
- P("o?", json_object_new_int(1));
- P("o?", NULL);
- P("O", json_object_new_int(1));
- P("O?", json_object_new_int(1));
- P("O?", NULL);
- P("{s:[]}", "foo");
- P("{s+#+: []}", "foo", "barbar", 3, "baz");
- P("{s:s,s:o,s:O}", "a", NULL, "b", NULL, "c", NULL);
- P("{s:**}", "a", NULL);
- P("{s:s*,s:o*,s:O*}", "a", NULL, "b", NULL, "c", NULL);
- P("[i,i,i]", 0, 1, 2);
- P("[s,o,O]", NULL, NULL, NULL);
- P("[**]", NULL);
- P("[s*,o*,O*]", NULL, NULL, NULL);
- P(" s ", "test");
- P("[ ]");
- P("[ i , i, i ] ", 1, 2, 3);
- P("{\n\n1");
- P("[}");
- P("{]");
- P("[");
- P("{");
- P("[i]a", 42);
- P("ia", 42);
- P("s", NULL);
- P("+", NULL);
- P(NULL);
- P("{s:i}", NULL, 1);
- P("{ {}: s }", "foo");
- P("{ s: {}, s:[ii{} }", "foo", "bar", 12, 13);
- P("[[[[[ [[[[[ [[[[ }]]]] ]]]] ]]]]]");
-
- U("true", "b", &xi[0]);
- U("false", "b", &xi[0]);
- U("null", "n");
- U("42", "i", &xi[0]);
- U("123456789", "I", &xI[0]);
- U("3.14", "f", &xf[0]);
- U("12345", "F", &xf[0]);
- U("3.14", "F", &xf[0]);
- U("\"foo\"", "s", &xs[0]);
- U("\"foo\"", "s%", &xs[0], &xz[0]);
- U("{}", "{}");
- U("[]", "[]");
- U("{}", "o", &xo[0]);
- U("{}", "O", &xo[0]);
- U("{\"foo\":42}", "{si}", "foo", &xi[0]);
- U("[1,2,3]", "[i,i,i]", &xi[0], &xi[1], &xi[2]);
- U("{\"a\":1,\"b\":2,\"c\":3}", "{s:i, s:i, s:i}", "a", &xi[0], "b", &xi[1], "c", &xi[2]);
- U("42", "z");
- U("null", "[i]");
- U("[]", "[}");
- U("{}", "{]");
- U("[]", "[");
- U("{}", "{");
- U("[42]", "[i]a", &xi[0]);
- U("42", "ia", &xi[0]);
- U("[]", NULL);
- U("\"foo\"", "s", NULL);
- U("42", "s", NULL);
- U("42", "n");
- U("42", "b", NULL);
- U("42", "f", NULL);
- U("42", "[i]", NULL);
- U("42", "{si}", "foo", NULL);
- U("\"foo\"", "n");
- U("\"foo\"", "b", NULL);
- U("\"foo\"", "i", NULL);
- U("\"foo\"", "I", NULL);
- U("\"foo\"", "f", NULL);
- U("\"foo\"", "F", NULL);
- U("true", "s", NULL);
- U("true", "n");
- U("true", "i", NULL);
- U("true", "I", NULL);
- U("true", "f", NULL);
- U("true", "F", NULL);
- U("[42]", "[ii]", &xi[0], &xi[1]);
- U("{\"foo\":42}", "{si}", NULL, &xi[0]);
- U("{\"foo\":42}", "{si}", "baz", &xi[0]);
- U("[1,2,3]", "[iii!]", &xi[0], &xi[1], &xi[2]);
- U("[1,2,3]", "[ii!]", &xi[0], &xi[1]);
- U("[1,2,3]", "[ii]", &xi[0], &xi[1]);
- U("[1,2,3]", "[ii*]", &xi[0], &xi[1]);
- U("{\"foo\":42,\"baz\":45}", "{sisi}", "baz", &xi[0], "foo", &xi[1]);
- U("{\"foo\":42,\"baz\":45}", "{sisi*}", "baz", &xi[0], "foo", &xi[1]);
- U("{\"foo\":42,\"baz\":45}", "{sisi!}", "baz", &xi[0], "foo", &xi[1]);
- U("{\"foo\":42,\"baz\":45}", "{si}", "baz", &xi[0], "foo", &xi[1]);
- U("{\"foo\":42,\"baz\":45}", "{si*}", "baz", &xi[0], "foo", &xi[1]);
- U("{\"foo\":42,\"baz\":45}", "{si!}", "baz", &xi[0], "foo", &xi[1]);
- U("[1,{\"foo\":2,\"bar\":null},[3,4]]", "[i{sisn}[ii]]", &xi[0], "foo", &xi[1], "bar", &xi[2], &xi[3]);
- U("[1,2,3]", "[ii!i]", &xi[0], &xi[1], &xi[2]);
- U("[1,2,3]", "[ii*i]", &xi[0], &xi[1], &xi[2]);
- U("{\"foo\":1,\"bar\":2}", "{si!si}", "foo", &xi[1], "bar", &xi[2]);
- U("{\"foo\":1,\"bar\":2}", "{si*si}", "foo", &xi[1], "bar", &xi[2]);
- U("{\"foo\":{\"baz\":null,\"bar\":null}}", "{s{sn!}}", "foo", "bar");
- U("[[1,2,3]]", "[[ii!]]", &xi[0], &xi[1]);
- U("{}", "{s?i}", "foo", &xi[0]);
- U("{\"foo\":1}", "{s?i}", "foo", &xi[0]);
- U("{}", "{s?[ii]s?{s{si!}}}", "foo", &xi[0], &xi[1], "bar", "baz", "quux", &xi[2]);
- U("{\"foo\":[1,2]}", "{s?[ii]s?{s{si!}}}", "foo", &xi[0], &xi[1], "bar", "baz", "quux", &xi[2]);
- U("{\"bar\":{\"baz\":{\"quux\":15}}}", "{s?[ii]s?{s{si!}}}", "foo", &xi[0], &xi[1], "bar", "baz", "quux", &xi[2]);
- U("{\"foo\":{\"bar\":4}}", "{s?{s?i}}", "foo", "bar", &xi[0]);
- U("{\"foo\":{}}", "{s?{s?i}}", "foo", "bar", &xi[0]);
- U("{}", "{s?{s?i}}", "foo", "bar", &xi[0]);
- U("{\"foo\":42,\"baz\":45}", "{s?isi!}", "baz", &xi[0], "foo", &xi[1]);
- U("{\"foo\":42}", "{s?isi!}", "baz", &xi[0], "foo", &xi[1]);
- return 0;
-}
-
-#endif
-
-#if 0
-
-
- /* Unpack the same item twice */
- j = json_pack("{s:s, s:i, s:b}", "foo", "bar", "baz", 42, "quux", 1);
- if(!json_unpack_ex(j, &error, 0, "{s:s,s:s!}", "foo", &s, "foo", &s))
- fail("json_unpack object with strict validation failed");
- {
- const char *possible_errors[] = {
- "2 object item(s) left unpacked: baz, quux",
- "2 object item(s) left unpacked: quux, baz"
- };
- check_errors(possible_errors, 2, "<validation>", 1, 10, 10);
- }
- json_decref(j);
-
-#endif
diff --git a/afb-utilities/wrap-json.h b/afb-utilities/wrap-json.h
deleted file mode 100644
index cb2d0bf..0000000
--- a/afb-utilities/wrap-json.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- Copyright (C) 2016, 2017 "IoT.bzh"
-
- author: José Bollo <jose.bollo@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.
-*/
-
-#pragma once
-
-#include <stdarg.h>
-#include <json-c/json.h>
-
-extern int wrap_json_get_error_position(int rc);
-extern int wrap_json_get_error_code(int rc);
-extern const char *wrap_json_get_error_string(int rc);
-
-extern int wrap_json_vpack(struct json_object **result, const char *desc, va_list args);
-extern int wrap_json_pack(struct json_object **result, const char *desc, ...);
-
-extern int wrap_json_vunpack(struct json_object *object, const char *desc, va_list args);
-extern int wrap_json_unpack(struct json_object *object, const char *desc, ...);
-extern int wrap_json_vcheck(struct json_object *object, const char *desc, va_list args);
-extern int wrap_json_check(struct json_object *object, const char *desc, ...);
-extern int wrap_json_vmatch(struct json_object *object, const char *desc, va_list args);
-extern int wrap_json_match(struct json_object *object, const char *desc, ...);
-
-extern void wrap_json_optarray_for_all(struct json_object *object, void (*callback)(void*,struct json_object*), void *closure);
-extern void wrap_json_array_for_all(struct json_object *object, void (*callback)(void*,struct json_object*), void *closure);
-
-extern void wrap_json_optarray_for_all(struct json_object *object, void (*callback)(void*,struct json_object*), void *closure);
-extern void wrap_json_array_for_all(struct json_object *object, void (*callback)(void*,struct json_object*), void *closure);
-extern void wrap_json_object_for_all(struct json_object *object, void (*callback)(void*,struct json_object*,const char*), void *closure);
-extern void wrap_json_optobject_for_all(struct json_object *object, void (*callback)(void*,struct json_object*,const char*), void *closure);
-extern void wrap_json_for_all(struct json_object *object, void (*callback)(void*,struct json_object*,const char*), void *closure);
-
diff --git a/afb-utilities/wrap-json.md b/afb-utilities/wrap-json.md
deleted file mode 100644
index 92940f1..0000000
--- a/afb-utilities/wrap-json.md
+++ /dev/null
@@ -1,305 +0,0 @@
-WRAP-JSON facility
-==================
-
-The facility wrap-json is based on the pack/unpack API on the
-libray jansson. The two chapters below are copied from the
-documentation of jansson library copyrighted by Petri Lehtinen
-(see at end).
-
-Building Values
----------------
-
-This section describes functions that help to create, or *pack*, complex
-JSON values, especially nested objects and arrays. Value building is
-based on a *format string* that is used to tell the functions about the
-expected arguments.
-
-For example, the format string `"i"` specifies a single integer value,
-while the format string `"[ssb]"` or the equivalent `"[s, s, b]"`
-specifies an array value with two strings and a boolean as its items:
-
- /* Create the JSON integer 42 */
- wrap_json_pack(&result, "i", 42);
-
- /* Create the JSON array ["foo", "bar", true] */
- wrap_json_pack(&result, "[ssb]", "foo", "bar", 1);
-
-Here's the full list of format specifiers. The type in parentheses
-denotes the resulting JSON type, and the type in brackets (if any)
-denotes the C type that is expected as the corresponding argument or
-arguments.
-
-`s` (string) \[const char \*\]
-
-: Convert a null terminated UTF-8 string to a JSON string.
-
-`s?` (string) \[const char \*\]
-
-: Like `s`, but if the argument is *NULL*, output a JSON null value.
-
-`s*` (string) \[const char \*\]
-
-: Like `s`, but if the argument is *NULL*, do not output any value.
- This format can only be used inside an object or an array. If used
- inside an object, the corresponding key is additionally suppressed
- when the value is omitted. See below for an example.
-
-`s#` (string) \[const char \*, int\]
-
-: Convert a UTF-8 buffer of a given length to a JSON string.
-
-`s%` (string) \[const char \*, size\_t\]
-
-: Like `s#` but the length argument is of type size\_t.
-
-`+` \[const char \*\]
-
-: Like `s`, but concatenate to the previous string. Only valid after
- `s`, `s#`, `+` or `+#`.
-
-`+#` \[const char \*, int\]
-
-: Like `s#`, but concatenate to the previous string. Only valid after
- `s`, `s#`, `+` or `+#`.
-
-`+%` (string) \[const char \*, size\_t\]
-
-: Like `+#` but the length argument is of type size\_t.
-
-`n` (null)
-
-: Output a JSON null value. No argument is consumed.
-
-`b` (boolean) \[int\]
-
-: Convert a C int to JSON boolean value. Zero is converted to `false`
- and non-zero to `true`.
-
-`i` (integer) \[int\]
-
-: Convert a C int to JSON integer.
-
-`I` (integer) \[json\_int\_t\]
-
-: Convert a C json\_int\_t to JSON integer.
-
-`f` (real) \[double\]
-
-: Convert a C double to JSON real.
-
-`o` (any value) \[json\_t \*\]
-
-: Output any given JSON value as-is. If the value is added to an array
- or object, the reference to the value passed to `o` is stolen by the
- container.
-
-`O` (any value) \[json\_t \*\]
-
-: Like `o`, but the argument's reference count is incremented. This is
- useful if you pack into an array or object and want to keep the
- reference for the JSON value consumed by `O` to yourself.
-
-`o?`, `O?` (any value) \[json\_t \*\]
-
-: Like `o` and `O`, respectively, but if the argument is *NULL*,
- output a JSON null value.
-
-`o*`, `O*` (any value) \[json\_t \*\]
-
-: Like `o` and `O`, respectively, but if the argument is *NULL*, do
- not output any value. This format can only be used inside an object
- or an array. If used inside an object, the corresponding key is
- additionally suppressed. See below for an example.
-
-`[fmt]` (array)
-
-: Build an array with contents from the inner format string. `fmt` may
- contain objects and arrays, i.e. recursive value building is
- supported.
-
-`{fmt}` (object)
-
-: Build an object with contents from the inner format string `fmt`.
- The first, third, etc. format specifier represent a key, and must be
- a string (see `s`, `s#`, `+` and `+#` above), as object keys are
- always strings. The second, fourth, etc. format specifier represent
- a value. Any value may be an object or array, i.e. recursive value
- building is supported.
-
-Whitespace, `:` and `,` are ignored.
-
-More examples:
-
- /* Build an empty JSON object */
- wrap_json_pack(&result, "{}");
-
- /* Build the JSON object {"foo": 42, "bar": 7} */
- wrap_json_pack(&result, "{sisi}", "foo", 42, "bar", 7);
-
- /* Like above, ':', ',' and whitespace are ignored */
- wrap_json_pack(&result, "{s:i, s:i}", "foo", 42, "bar", 7);
-
- /* Build the JSON array [[1, 2], {"cool": true}] */
- wrap_json_pack(&result, "[[i,i],{s:b}]", 1, 2, "cool", 1);
-
- /* Build a string from a non-null terminated buffer */
- char buffer[4] = {'t', 'e', 's', 't'};
- wrap_json_pack(&result, "s#", buffer, 4);
-
- /* Concatenate strings together to build the JSON string "foobarbaz" */
- wrap_json_pack(&result, "s++", "foo", "bar", "baz");
-
- /* Create an empty object or array when optional members are missing */
- wrap_json_pack(&result, "{s:s*,s:o*,s:O*}", "foo", NULL, "bar", NULL, "baz", NULL);
- wrap_json_pack(&result, "[s*,o*,O*]", NULL, NULL, NULL);
-
-Parsing and Validating Values
------------------------------
-
-This section describes functions that help to validate complex values
-and extract, or *unpack*, data from them. Like building values
-&lt;apiref-pack&gt;, this is also based on format strings.
-
-While a JSON value is unpacked, the type specified in the format string
-is checked to match that of the JSON value. This is the validation part
-of the process. In addition to this, the unpacking functions can also
-check that all items of arrays and objects are unpacked. This check be
-enabled with the format specifier `!` or by using the flag
-`JSON_STRICT`. See below for details.
-
-Here's the full list of format specifiers. The type in parentheses
-denotes the JSON type, and the type in brackets (if any) denotes the C
-type whose address should be passed.
-
-`s` (string) \[const char \*\]
-
-: Convert a JSON string to a pointer to a null terminated UTF-8
- string. The resulting string is extracted by using
- json\_string\_value() internally, so it exists as long as there are
- still references to the corresponding JSON string.
-
-`s%` (string) \[const char \*, size\_t \*\]
-
-: Convert a JSON string to a pointer to a null terminated UTF-8 string
- and its length.
-
-`n` (null)
-
-: Expect a JSON null value. Nothing is extracted.
-
-`b` (boolean) \[int\]
-
-: Convert a JSON boolean value to a C int, so that `true` is converted
- to 1 and `false` to 0.
-
-`i` (integer) \[int\]
-
-: Convert a JSON integer to C int.
-
-`I` (integer) \[json\_int\_t\]
-
-: Convert a JSON integer to C json\_int\_t.
-
-`f` (real) \[double\]
-
-: Convert a JSON real to C double.
-
-`F` (integer or real) \[double\]
-
-: Convert a JSON number (integer or real) to C double.
-
-`o` (any value) \[json\_t \*\]
-
-: Store a JSON value with no conversion to a json\_t pointer.
-
-`O` (any value) \[json\_t \*\]
-
-: Like `O`, but the JSON value's reference count is incremented.
-
-`[fmt]` (array)
-
-: Convert each item in the JSON array according to the inner format
- string. `fmt` may contain objects and arrays, i.e. recursive value
- extraction is supported.
-
-`{fmt}` (object)
-
-: Convert each item in the JSON object according to the inner format
- string `fmt`. The first, third, etc. format specifier represent a
- key, and must be `s`. The corresponding argument to unpack functions
- is read as the object key. The second fourth, etc. format specifier
- represent a value and is written to the address given as the
- corresponding argument. **Note** that every other argument is read
- from and every other is written to.
-
- `fmt` may contain objects and arrays as values, i.e. recursive value
- extraction is supported.
-
-`!`
-
-: This special format specifier is used to enable the check that all
- object and array items are accessed, on a per-value basis. It must
- appear inside an array or object as the last format specifier before
- the closing bracket or brace.
-
-`*`
-
-: This special format specifier is the opposite of `!`. This is the default.
- It must appear inside an array or object as the last format specifier
- before the closing bracket or brace.
-
-Whitespace, `:` and `,` are ignored.
-
-Examples:
-
- /* root is the JSON integer 42 */
- int myint;
- wrap_json_unpack(root, "i", &myint);
- assert(myint == 42);
-
- /* root is the JSON object {"foo": "bar", "quux": true} */
- const char *str;
- int boolean;
- wrap_json_unpack(root, "{s:s, s:b}", "foo", &str, "quux", &boolean);
- assert(strcmp(str, "bar") == 0 && boolean == 1);
-
- /* root is the JSON array [[1, 2], {"baz": null} */
- wrap_json_check(root, "[[i,i], {s:n}]", "baz");
- /* returns 0 for validation success, nothing is extracted */
-
- /* root is the JSON array [1, 2, 3, 4, 5] */
- int myint1, myint2;
- wrap_json_unpack(root, "[ii!]", &myint1, &myint2);
- /* returns -1 for failed validation */
-
- /* root is an empty JSON object */
- int myint = 0, myint2 = 0, myint3 = 0;
- wrap_json_unpack(root, "{s?i, s?[ii]}",
- "foo", &myint1,
- "bar", &myint2, &myint3);
- /* myint1, myint2 or myint3 is no touched as "foo" and "bar" don't exist */
-
-
-Copyright
----------
-
-Copyright (c) 2009-2016 Petri Lehtinen <petri@digip.org>
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
diff --git a/src/CMakeLists.txt b/ahl-binding/CMakeLists.txt
index 0bb3986..0dee304 100644
--- a/src/CMakeLists.txt
+++ b/ahl-binding/CMakeLists.txt
@@ -15,43 +15,24 @@
# See the License for the specific language governing permissions and
# limitations under the License.
###########################################################################
-# Generate API-v2 hat from OpenAPI json definition
-macro(SET_TARGET_GENSKEL TARGET_NAME API_DEF_NAME)
- add_custom_command(OUTPUT ${API_DEF_NAME}.h
- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
- DEPENDS ${API_DEF_NAME}.json
- COMMAND afb-genskel ${API_DEF_NAME}.json >${API_DEF_NAME}.h
- )
- add_custom_target(${API_DEF_NAME}_OPENAPI DEPENDS ${API_DEF_NAME}.h)
- add_dependencies(${TARGET_NAME} ${API_DEF_NAME}_OPENAPI)
-
-endmacro(SET_TARGET_GENSKEL)
-
-FIND_PACKAGE(PkgConfig REQUIRED)
-PKG_CHECK_MODULES(GLIB_PKG REQUIRED glib-2.0)
-
-# get_cmake_property(_variableNames VARIABLES)
-# foreach (_variableName ${_variableNames})
-# message(STATUS "${_variableName}=${${_variableName}}")
-# endforeach()
# Add target to project dependency list
PROJECT_TARGET_ADD(audiohighlevel)
# Define project Targets
- ADD_LIBRARY(${TARGET_NAME} MODULE ahl-binding.c ahl-deviceenum.c ahl-config.c ahl-policy-utils.c ahl-policy.c ahl-json.c)
-
- # Generate API-v2 hat from OpenAPI json definition
- SET_TARGET_GENSKEL(${TARGET_NAME} ahl-apidef)
+ ADD_LIBRARY(${TARGET_NAME} MODULE ahl-binding.c ahl-deviceenum.c ahl-config.c ahl-json.c)
# Binder exposes a unique public entry point
SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES
PREFIX "afb-"
- LABELS "BINDING"
+ LABELS "BINDINGV2"
LINK_FLAGS ${BINDINGS_LINK_FLAG}
OUTPUT_NAME ${TARGET_NAME}
)
+ # Change default OPenAPI file
+ SET_OPENAPI_FILENAME("ahl-apidef")
+
# Define target includes
TARGET_INCLUDE_DIRECTORIES(${TARGET_NAME}
PUBLIC ${GLIB_PKG_INCLUDE_DIRS}
@@ -60,6 +41,8 @@ PROJECT_TARGET_ADD(audiohighlevel)
# Library dependencies (include updates automatically)
# Find package for GLIB does not seem to export
TARGET_LINK_LIBRARIES(${TARGET_NAME}
+ ahl-policy
+ ahl-utilities
afb-utilities
${GLIB_PKG_LIBRARIES}
${link_libraries}
diff --git a/ahl-binding/ahl-apidef.h b/ahl-binding/ahl-apidef.h
new file mode 100644
index 0000000..2c77827
--- /dev/null
+++ b/ahl-binding/ahl-apidef.h
@@ -0,0 +1,237 @@
+
+static const char _afb_description_v2_ahl_4a[] =
+ "{\"openapi\":\"3.0.0\",\"info\":{\"description\":\"Audio high level API "
+ "for AGL applications\",\"title\":\"audiohighlevel\",\"version\":\"1.0\","
+ "\"x-binding-c-generator\":{\"api\":\"ahl-4a\",\"version\":2,\"prefix\":\""
+ "audiohlapi_\",\"postfix\":\"\",\"start\":null,\"onevent\":\"AhlOnEvent\""
+ ",\"init\":\"AhlBindingInit\",\"scope\":\"\",\"private\":false}},\"server"
+ "s\":[{\"url\":\"ws://{host}:{port}/api/audiohl\",\"description\":\"Audio"
+ " high level API for AGL applications.\",\"variables\":{\"host\":{\"defau"
+ "lt\":\"localhost\"},\"port\":{\"default\":\"1234\"}},\"x-afb-events\":[{"
+ "\"$ref\":\"#/components/schemas/afb-event\"}]}],\"components\":{\"schema"
+ "s\":{\"afb-reply\":{\"$ref\":\"#/components/schemas/afb-reply-v2\"},\"af"
+ "b-event\":{\"$ref\":\"#/components/schemas/afb-event-v2\"},\"afb-reply-v"
+ "2\":{\"title\":\"Generic response.\",\"type\":\"object\",\"required\":[\""
+ "jtype\",\"request\"],\"properties\":{\"jtype\":{\"type\":\"string\",\"co"
+ "nst\":\"afb-reply\"},\"request\":{\"type\":\"object\",\"required\":[\"st"
+ "atus\"],\"properties\":{\"status\":{\"type\":\"string\"},\"info\":{\"typ"
+ "e\":\"string\"},\"token\":{\"type\":\"string\"},\"uuid\":{\"type\":\"str"
+ "ing\"},\"reqid\":{\"type\":\"string\"}}},\"response\":{\"type\":\"object"
+ "\"}}},\"afb-event-v2\":{\"type\":\"object\",\"required\":[\"jtype\",\"ev"
+ "ent\"],\"properties\":{\"jtype\":{\"type\":\"string\",\"const\":\"afb-ev"
+ "ent\"},\"event\":{\"type\":\"string\"},\"data\":{\"type\":\"object\"}}},"
+ "\"endpoint_info\":{\"type\":\"object\",\"required\":[\"endpoint_id\",\"t"
+ "ype\",\"device_name\",\"device_uri\"],\"properties\":{\"endpoint_id\":{\""
+ "type\":\"int\"},\"type\":{\"type\":\"enum\"},\"device_name\":{\"type\":\""
+ "string\"},\"device_uri_type\":{\"type\":\"string\"}}},\"stream_info\":{\""
+ "type\":\"object\",\"required\":[\"stream_id\",\"state\",\"mute\",\"endpo"
+ "int_info\"],\"properties\":{\"stream_id\":{\"type\":\"int\"},\"state\":{"
+ "\"type\":\"int\"},\"mute\":{\"type\":\"int\"},\"device_uri\":{\"type\":\""
+ "string\"},\"$ref\":\"#/components/schemas/endpoint_info\"}}},\"x-permiss"
+ "ions\":{\"streamcontrol\":{\"permission\":\"urn:AGL:permission:audio:pub"
+ "lic:streamcontrol\"},\"endpointcontrol\":{\"permission\":\"urn:AGL:permi"
+ "ssion:audio:public:endpointcontrol\"},\"audiostream\":{\"permission\":\""
+ "urn:AGL:permission:audio:public:audiostream\"},\"soundevent\":{\"permiss"
+ "ion\":\"urn:AGL:permission:audio:public:soundevent\"}},\"responses\":{\""
+ "200\":{\"description\":\"A complex object array response\",\"content\":{"
+ "\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/afb-re"
+ "ply\"}}}},\"400\":{\"description\":\"Invalid arguments\"}}},\"paths\":{\""
+ "/get_endpoints\":{\"description\":\"Retrieve array of available audio en"
+ "dpoints\",\"get\":{\"parameters\":[{\"in\":\"query\",\"name\":\"audio_ro"
+ "le\",\"required\":true,\"schema\":{\"type\":\"string\"}},{\"in\":\"query"
+ "\",\"name\":\"endpoint_type\",\"required\":true,\"schema\":{\"type\":\"e"
+ "num\"}}],\"responses\":{\"200\":{\"$ref\":\"#/components/responses/200\""
+ ",\"response\":{\"description\":\"Array of endpoint info structures\",\"t"
+ "ype\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/endpoint_info"
+ "\"}}},\"400\":{\"$ref\":\"#/components/responses/400\"}}}},\"/stream_ope"
+ "n\":{\"description\":\"Request opening a stream\",\"get\":{\"x-permissio"
+ "ns\":{\"$ref\":\"#/components/x-permissions/audiostream\"},\"parameters\""
+ ":[{\"in\":\"query\",\"name\":\"audio_role\",\"required\":true,\"schema\""
+ ":{\"type\":\"string\"}},{\"in\":\"query\",\"name\":\"endpoint_type\",\"r"
+ "equired\":true,\"schema\":{\"type\":\"enum\"}},{\"in\":\"query\",\"name\""
+ ":\"endpoint_id\",\"required\":false,\"schema\":{\"type\":\"int\"}}],\"re"
+ "sponses\":{\"200\":{\"$ref\":\"#/components/responses/200\",\"response\""
+ ":{\"description\":\"Stream information structure\",\"$ref\":\"#/componen"
+ "ts/schemas/stream_info\"}},\"400\":{\"$ref\":\"#/components/responses/40"
+ "0\"}}}},\"/stream_close\":{\"description\":\"Request closing a stream\","
+ "\"get\":{\"x-permissions\":{\"$ref\":\"#/components/x-permissions/audios"
+ "tream\"},\"parameters\":[{\"in\":\"query\",\"name\":\"stream_id\",\"requ"
+ "ired\":false,\"schema\":{\"type\":\"int\"}}],\"responses\":{\"200\":{\"$"
+ "ref\":\"#/components/responses/200\"},\"400\":{\"$ref\":\"#/components/r"
+ "esponses/400\"}}}},\"/set_stream_state\":{\"description\":\"Change strea"
+ "m active and/or mute state\",\"get\":{\"x-permissions\":{\"$ref\":\"#/co"
+ "mponents/x-permissions/streamcontrol\"},\"parameters\":[{\"in\":\"query\""
+ ",\"name\":\"stream_id\",\"required\":false,\"schema\":{\"type\":\"int\"}"
+ "},{\"in\":\"query\",\"name\":\"state\",\"required\":false,\"schema\":{\""
+ "type\":\"int\"}},{\"in\":\"query\",\"name\":\"mute\",\"required\":false,"
+ "\"schema\":{\"type\":\"int\"}}],\"responses\":{\"200\":{\"$ref\":\"#/com"
+ "ponents/responses/200\"},\"400\":{\"$ref\":\"#/components/responses/400\""
+ "}}}},\"/get_stream_info\":{\"description\":\"Retrieve stream information"
+ "\",\"get\":{\"parameters\":[{\"in\":\"query\",\"name\":\"stream_id\",\"r"
+ "equired\":true,\"schema\":{\"type\":\"int\"}}],\"responses\":{\"200\":{\""
+ "$ref\":\"#/components/responses/200\",\"response\":{\"description\":\"St"
+ "ream information structure\",\"$ref\":\"#/components/schemas/stream_info"
+ "\"}},\"400\":{\"$ref\":\"#/components/responses/400\"}}}},\"/volume\":{\""
+ "description\":\"Set or get volume on endpoint\",\"get\":{\"x-permissions"
+ "\":{\"$ref\":\"#/components/x-permissions/endpointcontrol\"},\"parameter"
+ "s\":[{\"in\":\"query\",\"name\":\"endpoint_type\",\"required\":true,\"sc"
+ "hema\":{\"type\":\"enum\"}},{\"in\":\"query\",\"name\":\"endpoint_id\",\""
+ "required\":true,\"schema\":{\"type\":\"int\"}},{\"in\":\"query\",\"name\""
+ ":\"volume\",\"required\":false,\"schema\":{\"type\":\"string\"}}],\"resp"
+ "onses\":{\"200\":{\"$ref\":\"#/components/responses/200\"},\"400\":{\"$r"
+ "ef\":\"#/components/responses/400\"}}}},\"/get_endpoint_info\":{\"descri"
+ "ption\":\"Retrieve endpoint information including its properties\",\"get"
+ "\":{\"parameters\":[{\"in\":\"query\",\"name\":\"endpoint_type\",\"requi"
+ "red\":true,\"schema\":{\"type\":\"enum\"}},{\"in\":\"query\",\"name\":\""
+ "endpoint_id\",\"required\":true,\"schema\":{\"type\":\"int\"}}],\"respon"
+ "ses\":{\"200\":{\"$ref\":\"#/components/responses/200\"},\"400\":{\"$ref"
+ "\":\"#/components/responses/400\"}}}},\"/property\":{\"description\":\"S"
+ "et/get endpoint property value\",\"get\":{\"x-permissions\":{\"$ref\":\""
+ "#/components/x-permissions/endpointcontrol\"},\"parameters\":[{\"in\":\""
+ "query\",\"name\":\"endpoint_type\",\"required\":true,\"schema\":{\"type\""
+ ":\"enum\"}},{\"in\":\"query\",\"name\":\"endpoint_id\",\"required\":true"
+ ",\"schema\":{\"type\":\"int\"}},{\"in\":\"query\",\"name\":\"property_na"
+ "me\",\"required\":true,\"schema\":{\"type\":\"string\"}},{\"in\":\"query"
+ "\",\"name\":\"value\",\"required\":false,\"schema\":{\"type\":\"string\""
+ "}}],\"responses\":{\"200\":{\"$ref\":\"#/components/responses/200\"},\"4"
+ "00\":{\"$ref\":\"#/components/responses/400\"}}}},\"/get_list_actions\":"
+ "{\"description\":\"Retrieve a list of supported actions for a particular"
+ " audio role\",\"get\":{\"parameters\":[{\"in\":\"query\",\"name\":\"audi"
+ "o_role\",\"required\":true,\"schema\":{\"type\":\"string\"}}],\"response"
+ "s\":{\"200\":{\"$ref\":\"#/components/responses/200\"},\"400\":{\"$ref\""
+ ":\"#/components/responses/400\"}}}},\"/post_action\":{\"description\":\""
+ "Post sound or audio device related action event (extendable mechanism)\""
+ ",\"get\":{\"x-permissions\":{\"$ref\":\"#/components/x-permissions/sound"
+ "event\"},\"parameters\":[{\"in\":\"query\",\"name\":\"action_name\",\"re"
+ "quired\":true,\"schema\":{\"type\":\"string\"}},{\"in\":\"query\",\"name"
+ "\":\"audio_role\",\"required\":true,\"schema\":{\"type\":\"string\"}},{\""
+ "in\":\"query\",\"name\":\"media_name\",\"required\":false,\"schema\":{\""
+ "type\":\"string\"}},{\"in\":\"query\",\"name\":\"action_context\",\"requ"
+ "ired\":false,\"schema\":{\"type\":\"object\"}}],\"responses\":{\"200\":{"
+ "\"$ref\":\"#/components/responses/200\"},\"400\":{\"$ref\":\"#/component"
+ "s/responses/400\"}}}},\"/event_subscription\":{\"description\":\"Subscri"
+ "be to audio high level events\",\"get\":{\"parameters\":[{\"in\":\"query"
+ "\",\"name\":\"events\",\"required\":true,\"schema\":{\"type\":\"array\","
+ "\"items\":{\"type\":\"string\"}}},{\"in\":\"query\",\"name\":\"subscribe"
+ "\",\"required\":true,\"schema\":{\"type\":\"int\"}}],\"responses\":{\"20"
+ "0\":{\"$ref\":\"#/components/responses/200\"},\"400\":{\"$ref\":\"#/comp"
+ "onents/responses/400\"}}}}}}"
+;
+
+static const struct afb_auth _afb_auths_v2_ahl_4a[] = {
+ { .type = afb_auth_Permission, .text = "urn:AGL:permission:audio:public:audiostream" },
+ { .type = afb_auth_Permission, .text = "urn:AGL:permission:audio:public:streamcontrol" },
+ { .type = afb_auth_Permission, .text = "urn:AGL:permission:audio:public:endpointcontrol" },
+ { .type = afb_auth_Permission, .text = "urn:AGL:permission:audio:public:soundevent" }
+};
+
+ void audiohlapi_get_endpoints(struct afb_req req);
+ void audiohlapi_stream_open(struct afb_req req);
+ void audiohlapi_stream_close(struct afb_req req);
+ void audiohlapi_set_stream_state(struct afb_req req);
+ void audiohlapi_get_stream_info(struct afb_req req);
+ void audiohlapi_volume(struct afb_req req);
+ void audiohlapi_get_endpoint_info(struct afb_req req);
+ void audiohlapi_property(struct afb_req req);
+ void audiohlapi_get_list_actions(struct afb_req req);
+ void audiohlapi_post_action(struct afb_req req);
+ void audiohlapi_event_subscription(struct afb_req req);
+
+static const struct afb_verb_v2 _afb_verbs_v2_ahl_4a[] = {
+ {
+ .verb = "get_endpoints",
+ .callback = audiohlapi_get_endpoints,
+ .auth = NULL,
+ .info = "Retrieve array of available audio endpoints",
+ .session = AFB_SESSION_NONE_V2
+ },
+ {
+ .verb = "stream_open",
+ .callback = audiohlapi_stream_open,
+ .auth = &_afb_auths_v2_ahl_4a[0],
+ .info = "Request opening a stream",
+ .session = AFB_SESSION_NONE_V2
+ },
+ {
+ .verb = "stream_close",
+ .callback = audiohlapi_stream_close,
+ .auth = &_afb_auths_v2_ahl_4a[0],
+ .info = "Request closing a stream",
+ .session = AFB_SESSION_NONE_V2
+ },
+ {
+ .verb = "set_stream_state",
+ .callback = audiohlapi_set_stream_state,
+ .auth = &_afb_auths_v2_ahl_4a[1],
+ .info = "Change stream active and/or mute state",
+ .session = AFB_SESSION_NONE_V2
+ },
+ {
+ .verb = "get_stream_info",
+ .callback = audiohlapi_get_stream_info,
+ .auth = NULL,
+ .info = "Retrieve stream information",
+ .session = AFB_SESSION_NONE_V2
+ },
+ {
+ .verb = "volume",
+ .callback = audiohlapi_volume,
+ .auth = &_afb_auths_v2_ahl_4a[2],
+ .info = "Set or get volume on endpoint",
+ .session = AFB_SESSION_NONE_V2
+ },
+ {
+ .verb = "get_endpoint_info",
+ .callback = audiohlapi_get_endpoint_info,
+ .auth = NULL,
+ .info = "Retrieve endpoint information including its properties",
+ .session = AFB_SESSION_NONE_V2
+ },
+ {
+ .verb = "property",
+ .callback = audiohlapi_property,
+ .auth = &_afb_auths_v2_ahl_4a[2],
+ .info = "Set/get endpoint property value",
+ .session = AFB_SESSION_NONE_V2
+ },
+ {
+ .verb = "get_list_actions",
+ .callback = audiohlapi_get_list_actions,
+ .auth = NULL,
+ .info = "Retrieve a list of supported actions for a particular audio role",
+ .session = AFB_SESSION_NONE_V2
+ },
+ {
+ .verb = "post_action",
+ .callback = audiohlapi_post_action,
+ .auth = &_afb_auths_v2_ahl_4a[3],
+ .info = "Post sound or audio device related action event (extendable mechanism)",
+ .session = AFB_SESSION_NONE_V2
+ },
+ {
+ .verb = "event_subscription",
+ .callback = audiohlapi_event_subscription,
+ .auth = NULL,
+ .info = "Subscribe to audio high level events",
+ .session = AFB_SESSION_NONE_V2
+ },
+ {
+ .verb = NULL,
+ .callback = NULL,
+ .auth = NULL,
+ .info = NULL,
+ .session = 0
+ }
+};
+
+const struct afb_binding_v2 afbBindingV2 = {
+ .api = "ahl-4a",
+ .specification = _afb_description_v2_ahl_4a,
+ .info = "Audio high level API for AGL applications",
+ .verbs = _afb_verbs_v2_ahl_4a,
+ .preinit = NULL,
+ .init = AhlBindingInit,
+ .onevent = AhlOnEvent,
+ .noconcurrency = 0
+};
+
diff --git a/src/ahl-apidef.json b/ahl-binding/ahl-apidef.json
index 15ee186..59f7a32 100644
--- a/src/ahl-apidef.json
+++ b/ahl-binding/ahl-apidef.json
@@ -5,7 +5,7 @@
"title": "audiohighlevel",
"version": "1.0",
"x-binding-c-generator": {
- "api": "audiohl",
+ "api": "ahl-4a",
"version": 2,
"prefix": "audiohlapi_",
"postfix": "",
diff --git a/src/ahl-binding.c b/ahl-binding/ahl-binding.c
index c205c8e..c205c8e 100644
--- a/src/ahl-binding.c
+++ b/ahl-binding/ahl-binding.c
diff --git a/src/ahl-binding.h b/ahl-binding/ahl-binding.h
index 405144d..405144d 100644
--- a/src/ahl-binding.h
+++ b/ahl-binding/ahl-binding.h
diff --git a/src/ahl-config.c b/ahl-binding/ahl-config.c
index f076d14..c60cb9c 100644
--- a/src/ahl-config.c
+++ b/ahl-binding/ahl-config.c
@@ -18,6 +18,8 @@
#include <string.h>
#include <json-c/json.h>
#include "wrap-json.h"
+#include "filescan-utils.h"
+
#include "ahl-binding.h"
extern AHLCtxT g_AHLCtx;
@@ -38,21 +40,63 @@ static InterruptBehaviorT InterruptBehaviorToEnum(char * in_pInterruptBehaviorSt
return INTERRUPTBEHAVIOR_MAXVALUE;
}
+static json_object* CtlConfigScan(const char *dirList, const char *prefix) {
+ char controlFile [CONTROL_MAXPATH_LEN];
+ strncpy(controlFile, prefix, CONTROL_MAXPATH_LEN);
+ strncat(controlFile, GetBinderName(), CONTROL_MAXPATH_LEN);
+
+ // search for default dispatch config file
+ json_object* responseJ = ScanForConfig(dirList, CTL_SCAN_RECURSIVE, controlFile, ".json");
+
+ return responseJ;
+}
+
+static char* CtlConfigSearch(const char *dirList, const char *prefix) {
+ int index, err;
+
+ // search for default dispatch config file
+ json_object* responseJ = CtlConfigScan (dirList, prefix);
+ if (!responseJ) return NULL;
+
+ // We load 1st file others are just warnings
+ for (index = 0; index < json_object_array_length(responseJ); index++) {
+ json_object *entryJ = json_object_array_get_idx(responseJ, index);
+
+ char *filename;
+ char*fullpath;
+ err = wrap_json_unpack(entryJ, "{s:s, s:s !}", "fullpath", &fullpath, "filename", &filename);
+ if (err) {
+ AFB_ERROR("CTL-INIT HOOPs invalid JSON entry= %s", json_object_get_string(entryJ));
+ return NULL;
+ }
+
+ if (index == 0) {
+ char filepath[CONTROL_MAXPATH_LEN];
+ strncpy(filepath, fullpath, sizeof (filepath));
+ strncat(filepath, "/", sizeof (filepath));
+ strncat(filepath, filename, sizeof (filepath));
+ return (strdup(filepath));
+ }
+ }
+ // no config found
+ return NULL;
+}
+
int ParseHLBConfig() {
char * versionStr = NULL;
- json_object * jAudioRoles = NULL;
+ json_object * jAudioRoles = NUL L;
json_object * jHALList = NULL;
char * policyModule = NULL;
- // TODO: This should be retrieved from binding startup arguments
- char configfile_path[256];
- if(getenv("AHL_CONFIG_FILE") == NULL)
- {
- AFB_ERROR("Please Set Environnement Variable AHL_CONFIG_FILE");
- return AHL_FAIL;
- }
+ const char *dirList=getenv("AAAA_CONFIG_PATH");
+ if (!dirList) dirList=CONTROL_CONFIG_PATH;
- sprintf(configfile_path, "%s", getenv("AHL_CONFIG_FILE"));
+ const char *configfile_path =CtlConfigSearch(dirList, "ahl-");
+ if (!configfile_path) {
+ AFB_ERROR("Error: No control-* config found invalid JSON %s ", dirList);
+ return 1;
+ }
+
AFB_INFO("High-level config file -> %s\n", configfile_path);
// Open configuration file
diff --git a/src/ahl-deviceenum.c b/ahl-binding/ahl-deviceenum.c
index 763b2ca..763b2ca 100644
--- a/src/ahl-deviceenum.c
+++ b/ahl-binding/ahl-deviceenum.c
diff --git a/src/ahl-json.c b/ahl-binding/ahl-json.c
index 5e8bf97..5e8bf97 100644
--- a/src/ahl-json.c
+++ b/ahl-binding/ahl-json.c
diff --git a/src/ahl-json.h b/ahl-binding/ahl-json.h
index ffd683a..ffd683a 100644
--- a/src/ahl-json.h
+++ b/ahl-binding/ahl-json.h
diff --git a/conf.d/app-templates/samples.d/CMakeLists.txt.sample b/ahl-policy/CMakeLists.txt
index b485097..aa3ab9c 100644
--- a/conf.d/app-templates/samples.d/CMakeLists.txt.sample
+++ b/ahl-policy/CMakeLists.txt
@@ -1,7 +1,7 @@
###########################################################################
# Copyright 2015, 2016, 2017 IoT.bzh
#
-# author: Romain Forlot <romain.forlot@iot.bzh>
+# author: Fulup Ar Foll <fulup@iot.bzh>
#
# 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,25 @@
# limitations under the License.
###########################################################################
-CMAKE_MINIMUM_REQUIRED(VERSION 3.3)
-include(${CMAKE_CURRENT_SOURCE_DIR}/conf.d/cmake/config.cmake)
+# Add target to project dependency list
+PROJECT_TARGET_ADD(ahl-policy)
+
+ # Define project Targets
+ ADD_LIBRARY(${TARGET_NAME} STATIC ahl-policy.c)
+
+ # Define target includes
+ TARGET_INCLUDE_DIRECTORIES(${TARGET_NAME}
+ PUBLIC ${GLIB_PKG_INCLUDE_DIRS}
+ )
+
+ # Library dependencies (include updates automatically)
+ TARGET_LINK_LIBRARIES(${TARGET_NAME}
+ ahl-utilities
+ afb-utilities
+ )
+
+ # Define target includes for this target client
+ TARGET_INCLUDE_DIRECTORIES(${TARGET_NAME}
+ PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
+ )
diff --git a/src/ahl-interface.h b/ahl-policy/ahl-interface.h
index fc0ac68..fc0ac68 100644
--- a/src/ahl-interface.h
+++ b/ahl-policy/ahl-interface.h
diff --git a/src/ahl-policy.c b/ahl-policy/ahl-policy.c
index 4a34ed8..4a34ed8 100644
--- a/src/ahl-policy.c
+++ b/ahl-policy/ahl-policy.c
diff --git a/src/ahl-policy.h b/ahl-policy/ahl-policy.h
index 0200973..0200973 100644
--- a/src/ahl-policy.h
+++ b/ahl-policy/ahl-policy.h
diff --git a/afb-utilities/CMakeLists.txt b/ahl-utilities/CMakeLists.txt
index fe260fa..1ef3bfa 100644
--- a/afb-utilities/CMakeLists.txt
+++ b/ahl-utilities/CMakeLists.txt
@@ -1,7 +1,7 @@
###########################################################################
# Copyright 2015, 2016, 2017 IoT.bzh
#
-# author: Fulup Ar Foll <rfulup@iot.bzh>
+# author: Fulup Ar Foll <fulup@iot.bzh>
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -16,22 +16,24 @@
# limitations under the License.
###########################################################################
-# This is a CMakeLists.txt file meant to be included as submodule into an AGL
-# app using app-templates subdmodules
# Add target to project dependency list
-PROJECT_TARGET_ADD(afb-utilities)
+PROJECT_TARGET_ADD(ahl-utilities)
- # Define targets
- ADD_LIBRARY(${TARGET_NAME} STATIC wrap-json.c filescan-utils.c)
+ # Define project Targets
+ ADD_LIBRARY(${TARGET_NAME} STATIC ahl-policy-utils.c)
- # Library properties
- SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES
- OUTPUT_NAME ${TARGET_NAME}
+ # Define target includes
+ TARGET_INCLUDE_DIRECTORIES(${TARGET_NAME}
+ PUBLIC ${GLIB_PKG_INCLUDE_DIRS}
)
- # Define target includes
+ # Library dependencies (include updates automatically)
+ TARGET_LINK_LIBRARIES(${TARGET_NAME}
+ afb-utilities
+ )
+
+ # Define target includes for this target client
TARGET_INCLUDE_DIRECTORIES(${TARGET_NAME}
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
)
-
diff --git a/src/ahl-policy-utils.c b/ahl-utilities/ahl-policy-utils.c
index 195c591..195c591 100755
--- a/src/ahl-policy-utils.c
+++ b/ahl-utilities/ahl-policy-utils.c
diff --git a/src/ahl-policy-utils.h b/ahl-utilities/ahl-policy-utils.h
index 3c20020..3c20020 100755
--- a/src/ahl-policy-utils.h
+++ b/ahl-utilities/ahl-policy-utils.h
diff --git a/conf.d/app-templates b/conf.d/app-templates
new file mode 160000
+Subproject c881d86fc8852a2b2215856d3503aba192c0f4e
diff --git a/conf.d/app-templates/LICENSE b/conf.d/app-templates/LICENSE
deleted file mode 100644
index 93b07d3..0000000
--- a/conf.d/app-templates/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "{}"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright 2017 claneys
-
- 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.
diff --git a/conf.d/app-templates/README.md b/conf.d/app-templates/README.md
deleted file mode 100644
index 96dfb3c..0000000
--- a/conf.d/app-templates/README.md
+++ /dev/null
@@ -1,382 +0,0 @@
-# AGL CMake template
-
-Files used to build an application, or binding, project with the
-AGL Application Framework.
-
-To build your AGL project using these templates, you have to install
-them within your project and adjust compilation option in `config.cmake`.
-For technical reasons, you also have to specify **cmake** target in
-sub CMakeLists.txt installed. Make a globbing search to find source files
-isn't recommended now to handle project build especially in a multiuser
-project because CMake will not be aware of new or removed source files.
-
-You'll find usage samples here:
-
-- [helloworld-service](https://github.com/iotbzh/helloworld-service)
-- [low-level-can-service](https://gerrit.automotivelinux.org/gerrit/apps/low-level-can-service)
-- [high-level-viwi-service](https://github.com/iotbzh/high-level-viwi-service)
-- [audio-binding](https://github.com/iotbzh/audio-binding)
-- [unicens2-binding](https://github.com/iotbzh/unicens2-binding)
-
-## Quickstart
-
-### Initialization
-
-To use these templates files on your project just install the reference files using
-**git submodule** then use `config.cmake` file to configure your project specificities :
-
-```bash
-git submodule add https://gerrit.automotivelinux.org/gerrit/p/apps/app-templates.git conf.d/app-templates
-mkdir conf.d/cmake
-cp conf.d/app-templates/cmake/config.cmake.sample conf.d/cmake/config.cmake
-```
-
-Edit the copied config.cmake file to fit your needs.
-
-Now, create your top CMakeLists.txt file which include `config.cmake` file.
-
-An example is available in **app-templates** submodule that you can copy and
-use:
-
-```bash
-cp conf.d/app-templates/cmake/CMakeLists.txt.sample CMakeLists.txt
-```
-
-### Create your CMake targets
-
-For each target part of your project, you need to use ***PROJECT_TARGET_ADD***
-to include this target to your project.
-
-Using it, make available the cmake variable ***TARGET_NAME*** until the next
-***PROJECT_TARGET_ADD*** is invoked with a new target name.
-
-So, typical usage defining a target is:
-
-```cmake
-PROJECT_TARGET_ADD(SuperExampleName) --> Adding target to your project
-
-add_executable/add_library(${TARGET_NAME}.... --> defining your target sources
-
-SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES.... --> fit target properties
-for macros usage
-
-INSTALL(TARGETS ${TARGET_NAME}....
-```
-
-### Targets PROPERTIES
-
-You should set properties on your targets that will be used to package your
-apps in a widget file that could be installed on an AGL system.
-
-Specify what is the type of your targets that you want to be included in the
-widget package with the property **LABELS**:
-
-Choose between:
-
-- **BINDING**: Shared library that be loaded by the AGL Application Framework
-- **BINDINGV2**: Shared library that be loaded by the AGL Application Framework.
- This has to be accompagnied with a JSON file named like the *${OUTPUT_NAME}-apidef* of
- the target that describe the API with OpenAPI syntax (e.g: *mybinding-apidef*).
- Or you can choose the name by setting the *CACHE* cmake variable *OPENAPI_DEF*
- (***CAUTION***: setting a CACHE variable is needed, or set a normal variable
- with the *PARENT_SCOPE* option to make it visible for the parent scope
- where the target is defined) JSON file will be used to generate header file
- using `afb-genskel` tool.
-- **HTDOCS**: Root directory of a web app. This target has to build its
- directory and puts its files in the ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}
-- **DATA**: Resources used by your application. This target has to build its
- directory and puts its files in the ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}
-- **EXECUTABLE**: Entry point of your application executed by the AGL
- Application Framework
-
-```cmake
-SET_TARGET_PROPERTIES(${TARGET_NAME}
- PREFIX "afb-"
- LABELS "BINDING"
- OUTPUT_NAME "file_output_name")
-```
-
-> **TIP** you should use the prefix _afb-_ with your **BINDING* targets which
-> stand for **Application Framework Binding**.
-
-## More details: Typical project architecture
-
-A typical project architecture would be :
-
-```tree
-<project-root-path>
-│
-├── conf.d/
-│ ├── autobuild/
-│ │ ├── agl
-│ │ │ └── autobuild
-│ │ ├── linux
-│ │ │ └── autobuild
-│ │ └── windows
-│ │ └── autobuild
-│ ├── app-templates/
-│ │ ├── README.md
-│ │ ├── autobuild/
-│ │ │ ├── agl
-│ │ │ │ └── autobuild.in
-│ │ │ ├── linux
-│ │ │ │ └── autobuild.in
-│ │ │ └── windows
-│ │ │ └── autobuild.in
-│ │ ├── cmake/
-│ │ │ ├── config.cmake.sample
-│ │ │ ├── export.map
-│ │ │ └── macros.cmake
-│ │ ├── deb/
-│ │ │ └── config.deb.in
-│ │ ├── rpm/
-│ │ │ └── config.spec.in
-│ │ └── wgt/
-│ │ ├── config.xml.in
-│ │ ├── config.xml.in.sample
-│ │ ├── icon-default.png
-│ │ ├── icon-html5.png
-│ │ ├── icon-native.png
-│ │ ├── icon-qml.png
-│ │ └── icon-service.png
-│ ├── packaging/
-│ │ ├── config.spec
-│ │ └── config.deb
-│ ├── cmake
-│ │ └── config.cmake
-│ └── wgt
-│ └── config.xml.in
-├── <libs>
-├── <target>
-│ └── <files>
-├── <target>
-│ └── <file>
-└── <target>
- └── <files>
-```
-
-| # | Parent | Description |
-| - | -------| ----------- |
-| \<root-path\> | - | Path to your project. Hold master CMakeLists.txt and general files of your projects. |
-| conf.d | \<root-path\> | Holds needed files to build, install, debug, package an AGL app project |
-| app-templates | conf.d | Git submodule to app-templates AGL repository which provides CMake helpers macros library, and build scripts. config.cmake is a copy of config.cmake.sample configured for the projects. SHOULD NOT BE MODIFIED MANUALLY !|
-| autobuild | conf.d | Scripts generated from app-templates to build packages the same way for differents platforms.|
-| cmake | conf.d | Contains at least config.cmake file modified from the sample provided in app-templates submodule. |
-| wgt | conf.d | Contains at least config.xml.in template file modified from the sample provided in app-templates submodule for the needs of project (See config.xml.in.sample file for more details). |
-| packaging | conf.d | Contains output files used to build packages. |
-| \<libs\> | \<root-path\> | External dependencies libraries. This isn't to be used to include header file but build and link statically specifics libraries. | Library sources files. Can be a decompressed library archive file or project fork. |
-| \<target\> | \<root-path\> | A target to build, typically library, executable, etc. |
-
-### Update app-templates submodule
-
-You may have some news bug fixes or features available from app-templates
-repository that you want. To update your submodule proceed like the following:
-
-```bash
-git submodule update --remote
-git commit -s conf.d/app-templates
-```
-
-This will update the submodule to the HEAD of master branch repository.
-
-You could just want to update at a specified repository tag or branch or commit
-, here are the method to do so:
-
-```bash
-cd conf.d/app-templates
-# Choose one of the following depending what you want
-git checkout <tag_name>
-git checkout --detach <branch_name>
-git checkout --detach <commit_id>
-# Then commit
-cd ../..
-git commit -s conf.d/app-templates
-```
-
-### Build a widget
-
-#### config.xml.in file
-
-To build a widget you need a _config.xml_ file describing what is your apps and
-how Application Framework would launch it. This repo provide a simple default
-file _config.xml.in_ that should work for simple application without
-interactions with others bindings.
-
-It is recommanded that you use the sample one which is more complete. You can
-find it at the same location under the name _config.xml.in.sample_ (stunning
-isn't it). Just copy the sample file to your _conf.d/wgt_ directory and name it
-_config.xml.in_, then edit it to fit your needs.
-
-> ***CAUTION*** : The default file is only meant to be use for a
-> simple widget app, more complicated ones which needed to export
-> their api, or ship several app in one widget need to use the provided
-> _config.xml.in.sample_ which had all new Application Framework
-> features explained and examples.
-
-#### Using cmake template macros
-
-To leverage all cmake templates features, you have to specify ***properties***
-on your targets. Some macros will not works without specifying which is the
-target type.
-
-As the type is not always specified for some custom targets, like an ***HTML5***
-application, macros make the difference using ***LABELS*** property.
-
-Choose between:
-
-- **BINDING**: Shared library that be loaded by the AGL Application Framework
-- **BINDINGV2**: Shared library that be loaded by the AGL Application Framework.
- This has to be accompagnied with a JSON file named like the *${OUTPUT_NAME}-apidef* of
- the target that describe the API with OpenAPI syntax (e.g: *mybinding-apidef*).
- Or you can choose the name by setting the *CACHE* cmake variable *OPENAPI_DEF*
- (***CAUTION***: setting a CACHE variable is needed, or set a normal variable
- with the *PARENT_SCOPE* option to make it visible for the parent scope
- where the target is defined) JSON file will be used to generate header file
- using `afb-genskel` tool.
-- **HTDOCS**: Root directory of a web app. This target has to build its
- directory and puts its files in the ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}
-- **DATA**: Resources used by your application. This target has to build its
- directory and puts its files in the ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}
-- **EXECUTABLE**: Entry point of your application executed by the AGL
- Application Framework
-
-Example:
-
-```cmake
-SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES
- LABELS "HTDOCS"
- OUTPUT_NAME dist.prod
- )
-```
-
-If your target output is not named as the ***TARGET_NAME***, you need to specify
-***OUTPUT_NAME*** property that will be used by the ***populate_widget*** macro.
-
-Use the ***populate_widget*** macro as latest statement of your target
-definition. Then at the end of your project definition you should use the macro
-***build_widget*** that make an archive from the populated widget tree using the
-`wgtpkg-pack` Application Framework tools.
-
-## Macro reference
-
-### PROJECT_TARGET_ADD
-
-Typical usage would be to add the target to your project using macro
-`PROJECT_TARGET_ADD` with the name of your target as parameter.
-
-Example:
-
-```cmake
-PROJECT_TARGET_ADD(low-can-demo)
-```
-
-> ***NOTE***: This will make available the variable `${TARGET_NAME}`
-> set with the specificied name. This variable will change at the next call
-> to this macros.
-
-### project_subdirs_add
-
-This macro will search in all subfolder any `CMakeLists.txt` file. If found then
-it will be added to your project. This could be use in an hybrid application by
-example where the binding lay in a sub directory.
-
-Usage :
-
-```cmake
-project_subdirs_add()
-```
-
-You also can specify a globbing pattern as argument to filter which folders
-will be looked for.
-
-To filter all directories that begin with a number followed by a dash the
-anything:
-
-```cmake
-project_subdirs_add("[0-9]-*")
-```
-
-## Advanced customization
-
-### Including additionnals cmake files
-
-Advanced tuning is possible using addionnals cmake files that are included
-automatically from some specifics locations. They are included in that order:
-
-- Project CMake files normaly located in _<project-root-path>/conf.d/app-templates/cmake/cmake.d_
-- Home CMake files located in _$HOME/.config/app-templates/cmake.d_
-- System CMake files located in _/etc/app-templates/cmake.d_
-
-CMake files has to be named using the following convention: `XX-common-*.cmake`
-or `XX-${PROJECT_NAME}-*.cmake`, where `XX` are numbers, `*` file name
-(ie. `99-common-my_customs.cmake`).
-
-> **NOTE** You need to specify after numbers that indicate include order, to
-which project that file applies, if it applies to all project then use keyword
-`common`.
-
-So, saying that you should be aware that every normal cmake variables used at
-project level could be overwrited by home or system located cmake files if
-variables got the same name. Exceptions are cached variables set using
-**CACHE** keyword:
-
-Example:
-
-```cmake
-set(VARIABLE_NAME 'value string random' CACHE STRING 'docstring')
-```
-
-### Include customs templated scripts
-
-As well as for additionnals cmake files you can include your own templated
-scripts that will be passed to cmake command `configure_file`.
-
-Just create your own script to the following directories:
-
-- Home location in _$HOME/.config/app-templates/scripts_
-- System location in _/etc/app-templates/scripts_
-
-Scripts only needs to use the extension `.in` to be parsed and configured by
-CMake command.
-
-## Autobuild script usage
-
-### Generation
-
-To be integrated in the Yocto build workflow you have to generate `autobuild`
-scripts using _autobuild_ target.
-
-To generate those scripts proceeds:
-
-```bash
-mkdir -p build
-cd build
-cmake .. && make autobuild
-```
-
-You should see _conf.d/autobuild/agl/autobuild_ file now.
-
-### Available targets
-
-Here are the available targets available from _autobuild_ scripts:
-
-- **clean** : clean build directory from object file and targets results.
-- **distclean** : delete build directory
-- **configure** : generate project Makefile from CMakeLists.txt files.
-- **build** : compile all project targets.
-- **package** : build and output a wgt package.
-
-You can specify variables that modify the behavior of compilation using
-the following variables:
-
-- **CONFIGURE_ARGS** : Variable used at **configure** time.
-- **BUILD_ARGS** : Variable used at **build** time.
-- **DEST** : Directory where to output ***wgt*** file.
-
-Variable as to be in CMake format. (ie: BUILD_ARGS="-DC_FLAGS='-g -O2'")
-
-Usage example:
-
-```bash
-./conf.d/autobuild/wgt/autobuild package DEST=/tmp
-```
diff --git a/conf.d/app-templates/book.json b/conf.d/app-templates/book.json
deleted file mode 100644
index dafc6ae..0000000
--- a/conf.d/app-templates/book.json
+++ /dev/null
@@ -1,94 +0,0 @@
-{
- "title": "CMake Application templates",
- "subtitle": "Developer Documentation",
- "description": "CMake templates used to build an AGL apps and widget",
- "keywords": "AGL, Development, Iotbzh",
- "author": "IoT.Bzh Team",
- "website": "http://iot.bzh",
- "published": "July 2017",
- "version": "1.0",
-
- "gitbook": "3.2.2",
- "root": "docs",
- "pdf": {
- "fontFamily": "Verdana",
- "fontSize": 12,
- "paperSize": "a4",
- "pageBreaksBefore": "//h:div[@class=\"page-break\"]"
- },
- "styles": {
- "website": "resources/ebook.css",
- "ebook": "resources/ebook.css",
- "pdf": "resources/ebook.css"
- },
-
- "hidepageheaders": [2, 3],
- "hidepagefooters": [2, 3],
-
- "plugins": [
- "regexplace"
- ],
- "pluginsConfig": {
- "regexplace": {
- "removeFirstPartsInSectionNumber": true,
- "substitutes": [{
- "pattern": "<!-- pagebreak -->",
- "flags": "g",
- "substitute": "<div class=\"page-break\"></div>"
- },
- {
- "pattern": "<!-- clear -->",
- "flags": "g",
- "substitute": "<div class=\"clear\"></div>"
- },
- {
- "pattern": "<!-- nopagebreak -->",
- "flags": "g",
- "substitute": "<div class=\"nopb\">"
- },
- {
- "pattern": "<!-- endnopagebreak -->",
- "flags": "g",
- "substitute": "</div>"
- },
- {
- "pattern": "<!-- note -->",
- "flags": "g",
- "substitute": "<div class=\"note\">"
- },
- {
- "pattern": "<!-- endnote -->",
- "flags": "g",
- "substitute": "</div>"
- },
- {
- "pattern": "!\\[(.*?)\\]\\((.*?)(?:\\s+\"(.*)\")?\\){0,}{caption=1([^\\}]*)}",
- "flags": "gmi",
- "substitute": "<figure id=\"fig_PAGE_LEVEL_._INDEX_\"><img $3 alt=\"$1\" title=\"$1\" href=\"$2\"><figcaption></figcaption></figure>",
- "decode": true
- },
- {
- "pattern": "<img ([^>]*) {0,}\/{0,}> {0,}{caption=1([^\\}]*)}",
- "flags": "g",
- "substitute": "<figure id=\"fig_PAGE_LEVEL_._INDEX_\"><img $2 $1><figcaption></figcaption></figure>",
- "decode": true
- },
- {
- "pattern": "<img (.*)alt=\"([^\"]*)\"(.*) {0,1}\/{0,1}><figcaption></figcaption>",
- "flags": "g",
- "substitute": "<img$1alt=\"$2\"$3><figcaption><span>Picture _PAGE_LEVEL_._INDEX_</span>: $2</figcaption>",
- "store": {
- "substitute": "<a href=\"_PAGE_PATH_#fig_PAGE_LEVEL_._INDEX_\">Pic. _PAGE_LEVEL_._INDEX_</a> <span>$2</span>",
- "variable_name": "pictures"
- }
- },
- {
- "pattern": "<img ([^>]*)> {0,}{style {1,}([^}]*)}",
- "flags": "g",
- "substitute": "<img $1 style=\"$2\">",
- "decode": true
- }
- ]
- }
- }
-}
diff --git a/conf.d/app-templates/cmake/cmake.d/01-build_options.cmake b/conf.d/app-templates/cmake/cmake.d/01-build_options.cmake
deleted file mode 100644
index 4fb10ef..0000000
--- a/conf.d/app-templates/cmake/cmake.d/01-build_options.cmake
+++ /dev/null
@@ -1,113 +0,0 @@
-###########################################################################
-# Copyright 2015, 2016, 2017 IoT.bzh
-#
-# author: Fulup Ar Foll <fulup@iot.bzh>
-# contrib: 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.
-###########################################################################
-
-
-#--------------------------------------------------------------------------
-# WARNING:
-# Do not change this cmake template
-# Customise your preferences in "./conf.d/cmake/config.cmake"
-#--------------------------------------------------------------------------
-
-# (BUG!!!) as PKG_CONFIG_PATH does not work [should be en env variable]
-set(PKG_CONFIG_USE_CMAKE_PREFIX_PATH ON CACHE BOOLEAN "Flag for using prefix path")
-
-INCLUDE(FindPkgConfig)
-INCLUDE(CheckIncludeFiles)
-INCLUDE(CheckLibraryExists)
-INCLUDE(GNUInstallDirs)
-
-set(CMAKE_BUILD_TYPE Debug CACHE STRING "the type of build")
-set(CMAKE_POSITION_INDEPENDENT_CODE ON)
-set(CMP0048 1)
-
-# Default compilation options
-############################################################################
-link_libraries(-Wl,--as-needed -Wl,--gc-sections)
-set(COMPILE_OPTIONS -Wall -Wextra -Wconversion -Wno-unused-parameter -Wno-sign-compare -Wno-sign-conversion -Werror=maybe-uninitialized -Werror=implicit-function-declaration -ffunction-sections -fdata-sections -fPIC CACHE STRING "Compilation flags")
-foreach(option ${COMPILE_OPTIONS})
- add_compile_options($<$<CONFIG:PROFILING>:${option}>)
-endforeach()
-
-# Compilation OPTIONS depending on language
-#########################################
-foreach(option ${COMPILE_OPTIONS})
- add_compile_options(${option})
-endforeach()
-foreach(option ${C_COMPILE_OPTIONS})
- add_compile_options($<$<COMPILE_LANGUAGE:C>:${option}>)
-endforeach()
-foreach(option ${CXX_COMPILE_OPTIONS})
- add_compile_options($<$<COMPILE_LANGUAGE:CXX>:${option}>)
-endforeach()
-
-# Compilation option depending on CMAKE_BUILD_TYPE
-##################################################
-set(PROFILING_COMPILE_OPTIONS -g -O0 -pg -Wp,-U_FORTIFY_SOURCE CACHE STRING "Compilation flags for PROFILING build type.")
-set(DEBUG_COMPILE_OPTIONS -g -ggdb -Wp,-U_FORTIFY_SOURCE CACHE STRING "Compilation flags for DEBUG build type.")
-set(CCOV_COMPILE_OPTIONS -g -O2 --coverage CACHE STRING "Compilation flags for CCOV build type.")
-set(RELEASE_COMPILE_OPTIONS -g -O2 CACHE STRING "Compilation flags for RELEASE build type.")
-foreach(option ${PROFILING_COMPILE_OPTIONS})
- add_compile_options($<$<CONFIG:PROFILING>:${option}>)
-endforeach()
-foreach(option ${DEBUG_COMPILE_OPTIONS})
- add_compile_options($<$<CONFIG:PROFILING>:${option}>)
-endforeach()
-foreach(option ${CCOV_COMPILE_OPTIONS})
- add_compile_options($<$<CONFIG:PROFILING>:${option}>)
-endforeach()
-foreach(option ${RELEASE_COMPILE_OPTIONS})
- add_compile_options($<$<CONFIG:PROFILING>:${option}>)
-endforeach()
-
-# Env variable overload default
-if(DEFINED ENV{INSTALL_PREFIX})
- set(INSTALL_PREFIX $ENV{INSTALL_PREFIX} CACHE PATH "The path where to install")
-else()
- set(INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/Install" CACHE PATH "The path where to install")
-endif()
-set(CMAKE_INSTALL_PREFIX ${INSTALL_PREFIX} CACHE STRING "Installation Prefix")
-
-# Loop on required package and add options
-foreach (PKG_CONFIG ${PKG_REQUIRED_LIST})
- string(REGEX REPLACE "[<>]?=.*$" "" XPREFIX ${PKG_CONFIG})
- PKG_CHECK_MODULES(${XPREFIX} REQUIRED ${PKG_CONFIG})
-
- INCLUDE_DIRECTORIES(${${XPREFIX}_INCLUDE_DIRS})
- list(APPEND link_libraries ${${XPREFIX}_LDFLAGS})
- add_compile_options (${${XPREFIX}_CFLAGS})
-endforeach(PKG_CONFIG)
-
-# Optional LibEfence Malloc debug library
-IF(CMAKE_BUILD_TYPE MATCHES DEBUG)
-CHECK_LIBRARY_EXISTS(efence malloc "" HAVE_LIBEFENCE)
-IF(HAVE_LIBEFENCE)
- MESSAGE(STATUS "Linking with ElectricFence for debugging purposes...")
- SET(libefence_LIBRARIES "-lefence")
- list (APPEND link_libraries ${libefence_LIBRARIES})
-ENDIF(HAVE_LIBEFENCE)
-ENDIF(CMAKE_BUILD_TYPE MATCHES DEBUG)
-
-# set default include directories
-INCLUDE_DIRECTORIES(${EXTRA_INCLUDE_DIRS})
-
-# Default Linkflag
-set (PKG_TEMPLATE_PREFIX ${CMAKE_SOURCE_DIR}/${PROJECT_APP_TEMPLATES_DIR} CACHE PATH "Default Package Templates Directory")
-if(NOT BINDINGS_LINK_FLAG)
- set(BINDINGS_LINK_FLAG "-Wl,--version-script=${PKG_TEMPLATE_PREFIX}/cmake/export.map")
-endif()
diff --git a/conf.d/app-templates/cmake/cmake.d/02-variables.cmake b/conf.d/app-templates/cmake/cmake.d/02-variables.cmake
deleted file mode 100644
index 2491473..0000000
--- a/conf.d/app-templates/cmake/cmake.d/02-variables.cmake
+++ /dev/null
@@ -1,174 +0,0 @@
-###########################################################################
-# Copyright 2015, 2016, 2017 IoT.bzh
-#
-# author: Fulup Ar Foll <fulup@iot.bzh>
-# contrib: 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.
-###########################################################################
-
-
-#--------------------------------------------------------------------------
-# WARNING:
-# Do not change this cmake template
-# Customise your preferences in "./etc/config.cmake"
-#--------------------------------------------------------------------------
-
-# Get colorized message output non Windows OS. You know bash ? :)
-if(NOT WIN32)
- string(ASCII 27 Esc)
- set(ColourReset "${Esc}[m")
- set(ColourBold "${Esc}[1m")
- set(Red "${Esc}[31m")
- set(Green "${Esc}[32m")
- set(Yellow "${Esc}[33m")
- set(Blue "${Esc}[34m")
- set(Magenta "${Esc}[35m")
- set(Cyan "${Esc}[36m")
- set(White "${Esc}[37m")
- set(BoldRed "${Esc}[1;31m")
- set(BoldGreen "${Esc}[1;32m")
- set(BoldYellow "${Esc}[1;33m")
- set(BoldBlue "${Esc}[1;34m")
- set(BoldMagenta "${Esc}[1;35m")
- set(BoldCyan "${Esc}[1;36m")
- set(BoldWhite "${Esc}[1;37m")
-endif()
-
-# Native packaging name
-set(NPKG_PROJECT_NAME agl-${PROJECT_NAME})
-
-if(DEFINED ENV{SDKTARGETSYSROOT})
-file(STRINGS $ENV{SDKTARGETSYSROOT}/usr/include/linux/version.h LINUX_VERSION_CODE_LINE REGEX "LINUX_VERSION_CODE")
-set(BUILD_ENV_SYSROOT $ENV{SDKTARGETSYSROOT})
-elseif(DEFINED ENV{PKG_CONFIG_SYSROOT_DIR})
-file(STRINGS $ENV{PKG_CONFIG_SYSROOT_DIR}/usr/include/linux/version.h LINUX_VERSION_CODE_LINE REGEX "LINUX_VERSION_CODE")
-set(BUILD_ENV_SYSROOT $ENV{PKG_CONFIG_SYSROOT_DIR})
-else()
-file(STRINGS /usr/include/linux/version.h LINUX_VERSION_CODE_LINE REGEX "LINUX_VERSION_CODE")
-set(BUILD_ENV_SYSROOT "")
-endif()
-
-string(REGEX MATCH "[0-9]+" LINUX_VERSION_CODE ${LINUX_VERSION_CODE_LINE})
-math(EXPR a "${LINUX_VERSION_CODE} >> 16")
-math(EXPR b "(${LINUX_VERSION_CODE} >> 8) & 255")
-math(EXPR c "(${LINUX_VERSION_CODE} & 255)")
-
-set(KERNEL_VERSION "${a}.${b}.${c}")
-
-# Get the os type
-# Used to package .deb
-set(OS_RELEASE_PATH "${BUILD_ENV_SYSROOT}/etc/os-release")
-if(EXISTS ${OS_RELEASE_PATH})
- execute_process(COMMAND bash "-c" "grep -E '^ID(_LIKE)?=' ${OS_RELEASE_PATH} | tail -n 1"
- OUTPUT_VARIABLE TMP_OSRELEASE
- )
-
- if (NOT TMP_OSRELEASE STREQUAL "")
- string(REGEX REPLACE ".*=\"?([0-9a-z\._-]*)\"?\n" "\\1" OSRELEASE ${TMP_OSRELEASE})
- else()
- set(OSRELEASE "NOT COMPATIBLE !")
- endif()
-
-else()
- set(OSRELEASE "NOT COMPATIBLE ! Missing ${OS_RELEASE_PATH} file.")
-endif()
-message(STATUS "Distribution used ${OSRELEASE}")
-
-# Include project configuration
-# ------------------------------
-project(${PROJECT_NAME} VERSION ${PROJECT_VERSION} LANGUAGES ${PROJECT_LANGUAGES})
-set(PROJECT_LIBDIR "${CMAKE_SOURCE_DIR}/libs" CACHE PATH "Subpath to libraries")
-set(PROJECT_RESOURCES "${CMAKE_SOURCE_DIR}/data" CACHE PATH "Subpath to data")
-
-set(AFB_TOKEN "" CACHE PATH "Default AFB_TOKEN")
-set(AFB_REMPORT "1234" CACHE PATH "Default AFB_TOKEN")
-
-# Check GCC minimal version
-if (gcc_minimal_version)
-message (STATUS "${Cyan}-- Check gcc_minimal_version (found gcc version ${CMAKE_C_COMPILER_VERSION}) \
-(found g++ version ${CMAKE_CXX_COMPILER_VERSION})${ColourReset}")
-if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${gcc_minimal_version} OR CMAKE_C_COMPILER_VERSION VERSION_LESS ${gcc_minimal_version})
-message(FATAL_ERROR "${Red}**** FATAL: Require at least gcc-${gcc_minimal_version} please set CMAKE_C[XX]_COMPILER")
-endif()
-endif(gcc_minimal_version)
-
-# Check Kernel mandatory version, will fail the configuration if required version not matched.
-if (kernel_mandatory_version)
-message (STATUS "${Cyan}-- Check kernel_mandatory_version (found kernel version ${KERNEL_VERSION})${ColourReset}")
-if (KERNEL_VERSION VERSION_LESS ${kernel_mandatory_version})
-message(FATAL_ERROR "${Red}**** FATAL: Require at least ${kernel_mandatory_version} please use a recent kernel or source your SDK environment then clean and reconfigure your CMake project.")
-endif (KERNEL_VERSION VERSION_LESS ${kernel_mandatory_version})
-endif(kernel_mandatory_version)
-
-# Check Kernel minimal version just print a Warning about missing features
-# and set a definition to be used as preprocessor condition in code to disable
-# incompatibles features.
-if (kernel_minimal_version)
-message (STATUS "${Cyan}-- Check kernel_minimal_version (found kernel version ${KERNEL_VERSION})${ColourReset}")
-if (KERNEL_VERSION VERSION_LESS ${kernel_minimal_version})
-message(WARNING "${Yellow}**** Warning: Some feature(s) require at least ${kernel_minimal_version}. Please use a recent kernel or source your SDK environment then clean and reconfigure your CMake project.${ColourReset}")
-else (KERNEL_VERSION VERSION_LESS ${kernel_minimal_version})
-add_definitions(-DKERNEL_MINIMAL_VERSION_OK)
-endif (KERNEL_VERSION VERSION_LESS ${kernel_minimal_version})
-endif(kernel_minimal_version)
-
-# Project path variables
-# ----------------------
-set(PKGOUT_DIR package CACHE PATH "Output directory for packages")
-
-# Define a default package directory
-if(PKG_PREFIX)
- set(PROJECT_PKG_BUILD_DIR ${PKG_PREFIX}/${PKGOUT_DIR} CACHE PATH "Application contents to be packaged")
-else()
- set(PROJECT_PKG_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/${PKGOUT_DIR} CACHE PATH "Application contents to be packaged")
-endif()
-
-# Paths to templates files
-set(TEMPLATE_DIR "${PKG_TEMPLATE_PREFIX}/template.d" CACHE PATH "Subpath to a directory where are stored needed files to launch on remote target to debuging purposes")
-
-string(REGEX REPLACE "^(.*)/.*$" "\\1" ENTRY_POINT "${PKG_TEMPLATE_PREFIX}")
-set(PROJECT_PKG_ENTRY_POINT ${ENTRY_POINT}/packaging CACHE PATH "Where package build files, like rpm.spec file or config.xml, are write.")
-
-set(WIDGET_ICON "${ENTRY_POINT}/wgt/${PROJECT_ICON}" CACHE PATH "Path to the widget icon")
-set(WIDGET_CONFIG_TEMPLATE ${TEMPLATE_DIR}/config.xml.in CACHE PATH "Path to widget config file template (config.xml.in)")
-
-# Path to autobuild template
-set(PROJECT_TEMPLATE_AGL_AUTOBUILD_DIR ${CMAKE_SOURCE_DIR}/conf.d/autobuild/agl CACHE PATH "Subpath to a directory where are stored autobuild script")
-set(PROJECT_TEMPLATE_LINUX_AUTOBUILD_DIR ${CMAKE_SOURCE_DIR}/conf.d/autobuild/linux CACHE PATH "Subpath to a directory where are stored autobuild script")
-
-# Archive target variables
-set(ARCHIVE_OUTPUT_ARCHIVE ${PROJECT_PKG_ENTRY_POINT}/${NPKG_PROJECT_NAME}_${PROJECT_VERSION}.orig.tar)
-set(ARCHIVE_OUTPUT ${ARCHIVE_OUTPUT_ARCHIVE}.gz)
-set(TMP_ARCHIVE_SUBMODULE ${PROJECT_PKG_ENTRY_POINT}/${NPKG_PROJECT_NAME}-sub)
-set(CMD_ARCHIVE_SUBMODULE \'git archive --verbose --prefix=${NPKG_PROJECT_NAME}-${PROJECT_VERSION}/$$path/ --format tar HEAD --output ${TMP_ARCHIVE_SUBMODULE}-$$sha1.tar\' )
-
-if(OSRELEASE MATCHES "debian" AND NOT DEFINED ENV{SDKTARGETSYSROOT} AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)
- # build deb spec file from template
- set(PACKAGING_DEB_OUTPUT_DSC ${PROJECT_PKG_ENTRY_POINT}/${NPKG_PROJECT_NAME}.dsc)
- set(PACKAGING_DEB_OUTPUT_INSTALL ${PROJECT_PKG_ENTRY_POINT}/debian.${NPKG_PROJECT_NAME}.install)
- set(PACKAGING_DEB_OUTPUT_CHANGELOG ${PROJECT_PKG_ENTRY_POINT}/debian.changelog)
- set(PACKAGING_DEB_OUTPUT_COMPAT ${PROJECT_PKG_ENTRY_POINT}/debian.compat)
- set(PACKAGING_DEB_OUTPUT_CONTROL ${PROJECT_PKG_ENTRY_POINT}/debian.control)
- set(PACKAGING_DEB_OUTPUT_RULES ${PROJECT_PKG_ENTRY_POINT}/debian.rules)
-endif()
-
-# Break After Binding are loaded but before they get initialised
-set(GDB_INITIAL_BREAK "personality" CACHE STRING "Initial Break Point for GDB remote")
-
-# Define some checker binaries to verify input DATA files
-# to be included in package. Schema aren't checked for now.
-# Dummy checker about JSON.
-set(LUA_CHECKER "luac" "-p" CACHE STRING "LUA compiler")
-set(XML_CHECKER "xmllint" CACHE STRING "XML linter")
-set(JSON_CHECKER "echo" CACHE STRING "JSON linter")
diff --git a/conf.d/app-templates/cmake/cmake.d/03-macros.cmake b/conf.d/app-templates/cmake/cmake.d/03-macros.cmake
deleted file mode 100644
index 45d1ef5..0000000
--- a/conf.d/app-templates/cmake/cmake.d/03-macros.cmake
+++ /dev/null
@@ -1,501 +0,0 @@
-###########################################################################
-# Copyright 2015, 2016, 2017 IoT.bzh
-#
-# author: Fulup Ar Foll <fulup@iot.bzh>
-# contrib: 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.
-###########################################################################
-
-#--------------------------------------------------------------------------
-# WARNING:
-# Do not change this cmake template
-# Customise your preferences in "./conf.d/cmake/config.cmake"
-#--------------------------------------------------------------------------
-# CMake 3.6 imported macros to simulate list(FILTER ...) subcommand
-# -----------------------
-MACRO(PARSE_ARGUMENTS prefix arg_names option_names)
-SET(DEFAULT_ARGS)
-FOREACH(arg_name ${arg_names})
- SET(${prefix}_${arg_name})
-ENDFOREACH(arg_name)
-FOREACH(option ${option_names})
- SET(${prefix}_${option} FALSE)
-ENDFOREACH(option)
-
-SET(current_arg_name DEFAULT_ARGS)
-SET(current_arg_list)
-FOREACH(arg ${ARGN})
- LIST_CONTAINS(is_arg_name ${arg} ${arg_names})
- IF (is_arg_name)
- SET(${prefix}_${current_arg_name} ${current_arg_list})
- SET(current_arg_name ${arg})
- SET(current_arg_list)
- ELSE (is_arg_name)
- LIST_CONTAINS(is_option ${arg} ${option_names})
- IF (is_option)
- SET(${prefix}_${arg} TRUE)
- ELSE (is_option)
- SET(current_arg_list ${current_arg_list} ${arg})
- ENDIF (is_option)
- ENDIF (is_arg_name)
-ENDFOREACH(arg)
-SET(${prefix}_${current_arg_name} ${current_arg_list})
-ENDMACRO(PARSE_ARGUMENTS)
-
-MACRO(LIST_CONTAINS var value)
-SET(${var})
-FOREACH (value2 ${ARGN})
- IF (${value} STREQUAL ${value2})
- SET(${var} TRUE)
- ENDIF (${value} STREQUAL ${value2})
-ENDFOREACH (value2)
-ENDMACRO(LIST_CONTAINS)
-
-MACRO(LIST_FILTER)
-PARSE_ARGUMENTS(LIST_FILTER "OUTPUT_VARIABLE" "" ${ARGV})
-# Check arguments.
-LIST(LENGTH LIST_FILTER_DEFAULT_ARGS LIST_FILTER_default_length)
-IF(${LIST_FILTER_default_length} EQUAL 0)
- MESSAGE(FATAL_ERROR "LIST_FILTER: missing list variable.")
-ENDIF(${LIST_FILTER_default_length} EQUAL 0)
-IF(${LIST_FILTER_default_length} EQUAL 1)
- MESSAGE(FATAL_ERROR "LIST_FILTER: missing regular expression variable.")
-ENDIF(${LIST_FILTER_default_length} EQUAL 1)
-# Reset output variable
-IF(NOT LIST_FILTER_OUTPUT_VARIABLE)
- SET(LIST_FILTER_OUTPUT_VARIABLE "LIST_FILTER_internal_output")
-ENDIF(NOT LIST_FILTER_OUTPUT_VARIABLE)
-SET(${LIST_FILTER_OUTPUT_VARIABLE})
-# Extract input list from arguments
-LIST(GET LIST_FILTER_DEFAULT_ARGS 0 LIST_FILTER_input_list)
-LIST(REMOVE_AT LIST_FILTER_DEFAULT_ARGS 0)
-FOREACH(LIST_FILTER_item ${${LIST_FILTER_input_list}})
- FOREACH(LIST_FILTER_regexp_var ${LIST_FILTER_DEFAULT_ARGS})
- FOREACH(LIST_FILTER_regexp ${${LIST_FILTER_regexp_var}})
- IF(${LIST_FILTER_item} MATCHES ${LIST_FILTER_regexp})
- LIST(APPEND ${LIST_FILTER_OUTPUT_VARIABLE} ${LIST_FILTER_item})
- ENDIF(${LIST_FILTER_item} MATCHES ${LIST_FILTER_regexp})
- ENDFOREACH(LIST_FILTER_regexp ${${LIST_FILTER_regexp_var}})
- ENDFOREACH(LIST_FILTER_regexp_var)
-ENDFOREACH(LIST_FILTER_item)
-# If OUTPUT_VARIABLE is not specified, overwrite the input list.
-IF(${LIST_FILTER_OUTPUT_VARIABLE} STREQUAL "LIST_FILTER_internal_output")
- SET(${LIST_FILTER_input_list} ${${LIST_FILTER_OUTPUT_VARIABLE}})
-ENDIF(${LIST_FILTER_OUTPUT_VARIABLE} STREQUAL "LIST_FILTER_internal_output")
-ENDMACRO(LIST_FILTER)
-
-# Generic useful macro
-# -----------------------
-macro(PROJECT_TARGET_ADD TARGET_NAME)
- set_property(GLOBAL APPEND PROPERTY PROJECT_TARGETS ${TARGET_NAME})
- set(TARGET_NAME ${TARGET_NAME})
-endmacro(PROJECT_TARGET_ADD)
-
-macro(PROJECT_PKGDEP_ADD PKG_NAME)
- set_property(GLOBAL APPEND PROPERTY PROJECT_PKG_DEPS ${PKG_NAME})
-endmacro(PROJECT_PKGDEP_ADD)
-
-macro(defstr name value)
- add_definitions(-D${name}=${value})
-endmacro(defstr)
-
-macro(configure_files_in_dir dir)
- file(GLOB filelist "${dir}/*in")
- foreach(file ${filelist})
- get_filename_component(filename ${file} NAME)
- string(REGEX REPLACE "target" "${RSYNC_TARGET}" destinationfile ${filename})
- string(REGEX REPLACE ".in$" "" destinationfile ${destinationfile})
- configure_file(${file} ${CMAKE_CURRENT_BINARY_DIR}/target/${destinationfile})
- set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${CMAKE_CURRENT_BINARY_DIR}/target/${destinationfile}")
- endforeach()
-endmacro(configure_files_in_dir)
-
-macro(add_required_module PKG_CONFIG)
- string(REGEX REPLACE "[<>]?=.*$" "" XPREFIX ${PKG_CONFIG})
- PKG_CHECK_MODULES(${XPREFIX} REQUIRED ${PKG_CONFIG})
-
- INCLUDE_DIRECTORIES(${${XPREFIX}_INCLUDE_DIRS})
- list(APPEND link_libraries ${${XPREFIX}_LDFLAGS})
- add_compile_options (${${XPREFIX}_CFLAGS})
-endmacro(add_required_module)
-
-# Create custom target dedicated for HTML5 and DATA AGL target type
-macro(add_input_files INPUT_FILES)
- if(NOT DEFINED XML_FILES)
- set(ext_reg "xml$")
- set(XML_LIST ${INPUT_FILES})
- list_filter(XML_LIST ext_reg)
- endif()
- if(NOT DEFINED LUA_LIST)
- set(ext_reg "lua$")
- set(LUA_LIST ${INPUT_FILES})
- list_filter(LUA_LIST ext_reg)
- endif()
- if(NOT DEFINED JSON_FILES)
- set(ext_reg "json$")
- set(JSON_LIST ${INPUT_FILES})
- list_filter(JSON_LIST ext_reg)
- endif()
-
- # These are v3.6 subcommand. Not used as default for now as
- # many dev use Ubuntu 16.04 which have only 3.5 version
- #list(FILTER XML_LIST INCLUDE REGEX "xml$")
- #list(FILTER LUA_LIST INCLUDE REGEX "lua$")
- #list(FILTER JSON_LIST INCLUDE REGEX "json$")
-
- add_custom_target(${TARGET_NAME}
- DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}
- )
-
- foreach(file ${XML_LIST})
- add_custom_command(TARGET ${TARGET_NAME}
- PRE_BUILD
- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
- COMMAND ${XML_CHECKER} ${file}
- )
- endforeach()
- foreach(file ${LUA_LIST})
- add_custom_command(TARGET ${TARGET_NAME}
- PRE_BUILD
- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
- COMMAND ${LUA_CHECKER} ${file}
- )
- endforeach()
- foreach(file ${JSON_LIST})
- add_custom_command(TARGET ${TARGET_NAME}
- PRE_BUILD
- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
- COMMAND cat ${file} | ${JSON_CHECKER}
- )
- endforeach()
-
- add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}
- DEPENDS ${INPUT_FILES}
- COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}
- COMMAND touch ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}
- COMMAND cp -r ${INPUT_FILES} ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}
- )
-endmacro()
-
-# Set the name of the OPENAPI definition JSON file for binding v2
-macro(set_openapi_filename openapi_filename)
- set(OPENAPI_DEF ${openapi_filename} CACHE STRING "OpenAPI JSON file name used to generate binding header file before building a binding v2 target.")
-endmacro()
-
-# Pre-packaging
-macro(project_targets_populate)
- # Default Widget default directory
- set(BINDIR bin)
- set(ETCDIR etc)
- set(LIBDIR lib)
- set(HTTPDIR htdocs)
- set(DATADIR data)
- set(PACKAGE_BINDIR ${PROJECT_PKG_BUILD_DIR}/${BINDIR})
- set(PACKAGE_ETCDIR ${PROJECT_PKG_BUILD_DIR}/${ETCDIR})
- set(PACKAGE_LIBDIR ${PROJECT_PKG_BUILD_DIR}/${LIBDIR})
- set(PACKAGE_HTTPDIR ${PROJECT_PKG_BUILD_DIR}/${HTTPDIR})
- set(PACKAGE_DATADIR ${PROJECT_PKG_BUILD_DIR}/${DATADIR})
-
- add_custom_command(OUTPUT ${PACKAGE_BINDIR} ${PACKAGE_ETCDIR} ${PACKAGE_LIBDIR} ${PACKAGE_HTTPDIR} ${PACKAGE_DATADIR}
- COMMAND mkdir -p ${PACKAGE_BINDIR} ${PACKAGE_ETCDIR} ${PACKAGE_LIBDIR} ${PACKAGE_HTTPDIR} ${PACKAGE_DATADIR})
- add_custom_target(populate DEPENDS ${PACKAGE_BINDIR} ${PACKAGE_ETCDIR} ${PACKAGE_LIBDIR} ${PACKAGE_HTTPDIR} ${PACKAGE_DATADIR})
-
- INSTALL(CODE "execute_process(COMMAND make populate)")
- INSTALL(DIRECTORY ${PROJECT_PKG_BUILD_DIR}/
- DESTINATION ${CMAKE_INSTALL_PREFIX}/${PROJECT_NAME}
- )
-
- get_property(PROJECT_TARGETS GLOBAL PROPERTY PROJECT_TARGETS)
- foreach(TARGET ${PROJECT_TARGETS})
- get_target_property(T ${TARGET} LABELS)
- if(T)
- # Declaration of a custom command that will populate widget tree with the target
- set(POPULE_PACKAGE_TARGET "project_populate_${TARGET}")
-
- get_target_property(P ${TARGET} PREFIX)
- get_target_property(BD ${TARGET} BINARY_DIR)
- get_target_property(SD ${TARGET} SOURCE_DIR)
- get_target_property(OUT ${TARGET} OUTPUT_NAME)
-
- if(P MATCHES "NOTFOUND$")
- if (${T} STREQUAL "BINDING")
- set(P "lib")
- else()
- set(P "")
- endif()
- endif()
-
- if(${T} STREQUAL "BINDING")
- list(APPEND BINDINGS_LIST "${P}${OUT}")
- add_custom_command(OUTPUT ${PACKAGE_LIBDIR}/${P}${OUT}.so
- DEPENDS ${BD}/${P}${OUT}.so
- COMMAND mkdir -p ${PACKAGE_LIBDIR}
- COMMAND cp ${BD}/${P}${OUT}.so ${PACKAGE_LIBDIR}
- )
- add_custom_target(${POPULE_PACKAGE_TARGET} DEPENDS ${PACKAGE_LIBDIR}/${P}${OUT}.so)
- add_dependencies(populate ${POPULE_PACKAGE_TARGET})
- add_dependencies(${POPULE_PACKAGE_TARGET} ${TARGET})
- elseif(${T} STREQUAL "BINDINGV2")
- if (OPENAPI_DEF)
- add_custom_command(OUTPUT ${SD}/${OPENAPI_DEF}.h
- DEPENDS ${SD}/${OPENAPI_DEF}.json
- COMMAND afb-genskel ${SD}/${OPENAPI_DEF}.json > ${SD}/${OPENAPI_DEF}.h
- )
- add_custom_target("${TARGET}_GENSKEL" DEPENDS ${SD}/${OPENAPI_DEF}.h
- COMMENT "Generating OpenAPI header file ${OPENAPI_DEF}.h")
- add_dependencies(${TARGET} "${TARGET}_GENSKEL")
- else()
- add_custom_command(OUTPUT ${SD}/${OUT}-apidef.h
- DEPENDS ${SD}/${OUT}-apidef.json
- COMMAND afb-genskel ${SD}/${OUT}-apidef.json > ${SD}/${OUT}-apidef.h
- )
- add_custom_target("${TARGET}_GENSKEL" DEPENDS ${SD}/${OUT}-apidef.h
- COMMENT "Generating OpenAPI header file ${OUT}-apidef.h")
- add_dependencies(${TARGET} "${TARGET}_GENSKEL")
- endif()
-
- add_custom_command(OUTPUT ${PACKAGE_LIBDIR}/${P}${OUT}.so
- DEPENDS ${BD}/${P}${OUT}.so
- COMMAND mkdir -p ${PACKAGE_LIBDIR}
- COMMAND cp ${BD}/${P}${OUT}.so ${PACKAGE_LIBDIR}
- )
- add_custom_target(${POPULE_PACKAGE_TARGET} DEPENDS ${PACKAGE_LIBDIR}/${P}${OUT}.so)
- add_dependencies(populate ${POPULE_PACKAGE_TARGET})
- add_dependencies(${POPULE_PACKAGE_TARGET} ${TARGET})
- elseif(${T} STREQUAL "EXECUTABLE")
- add_custom_command(OUTPUT ${PACKAGE_BINDIR}/${P}${OUT}
- DEPENDS ${BD}/${P}${OUT}
- COMMAND mkdir -p ${PACKAGE_BINDIR}
- COMMAND cp ${BD}/${P}${OUT} ${PACKAGE_BINDIR}
- )
- add_custom_target(${POPULE_PACKAGE_TARGET} DEPENDS ${PACKAGE_BINDIR}/${P}${OUT})
- add_dependencies(populate ${POPULE_PACKAGE_TARGET})
- add_dependencies(${POPULE_PACKAGE_TARGET} ${TARGET})
- elseif(${T} STREQUAL "HTDOCS")
- add_custom_command(OUTPUT ${PACKAGE_HTTPDIR}-xx
- DEPENDS ${BD}/${P}${OUT}
- COMMAND mkdir -p ${PACKAGE_HTTPDIR}
- COMMAND touch ${PACKAGE_HTTPDIR}
- COMMAND cp -r ${BD}/${P}${OUT}/* ${PACKAGE_HTTPDIR}
- )
- add_custom_target(${POPULE_PACKAGE_TARGET} DEPENDS ${PACKAGE_HTTPDIR}-xx)
- add_dependencies(populate ${POPULE_PACKAGE_TARGET})
- add_dependencies(${POPULE_PACKAGE_TARGET} ${TARGET})
- elseif(${T} STREQUAL "DATA")
- # Generate list of output files instead of just one output directory
- get_target_property(SF ${TARGET} SOURCES)
- foreach(file ${SF})
- get_filename_component(JUST_FILENAME ${file} NAME)
- list(APPEND OUTPUT_FILES ${PACKAGE_DATADIR}/${JUST_FILENAME})
- endforeach()
- add_custom_target(${POPULE_PACKAGE_TARGET})
- add_custom_command(TARGET ${POPULE_PACKAGE_TARGET}
- POST_BUILD
- COMMAND mkdir -p ${PACKAGE_DATADIR}
- COMMAND touch ${PACKAGE_DATADIR}
- COMMAND cp -r ${BD}/${TARGET} ${PACKAGE_DATADIR}
- )
- add_dependencies(populate ${POPULE_PACKAGE_TARGET})
- add_dependencies(${POPULE_PACKAGE_TARGET} ${TARGET})
- endif(${T} STREQUAL "BINDING")
- elseif(${CMAKE_BUILD_TYPE} MATCHES "[Dd][Ee][Bb][Uu][Gg]")
- MESSAGE("${Yellow}.. Warning: ${TARGET} ignored when packaging.${ColourReset}")
- endif()
- endforeach()
-endmacro(project_targets_populate)
-
-macro(remote_targets_populate)
- if (DEFINED ENV{RSYNC_TARGET})
- set (RSYNC_TARGET $ENV{RSYNC_TARGET})
- endif()
- if (DEFINED ENV{RSYNC_PREFIX})
- set (RSYNC_PREFIX $ENV{RSYNC_PREFIX})
- endif()
-
- set(
- REMOTE_LAUNCH "Test on target with: ${CMAKE_CURRENT_BINARY_DIR}/target/start-on-${RSYNC_TARGET}.sh"
- CACHE STRING "Command to start ${PROJECT_NAME} on remote target ${RSYNC_TARGET}"
- )
-
- if(NOT RSYNC_TARGET OR NOT RSYNC_PREFIX)
- message ("${Yellow}.. Warning: RSYNC_TARGET RSYNC_PREFIX not defined 'make remote-target-populate' not instanciated${ColourReset}")
- add_custom_target(remote-target-populate
- COMMENT "${Red}*** Fatal: RSYNC_TARGET RSYNC_PREFIX environment variables required with 'make remote-target-populate'${ColourReset}"
- COMMAND exit -1
- )
- else()
- set(BINDINGS_REGEX "not_set")
- if(DEFINED BINDINGS_LIST)
- list(LENGTH BINDINGS_LIST BINDINGS_LIST_LENGTH)
- if(BINDINGS_LIST_LENGTH EQUAL 1)
- list(GET BINDINGS_LIST 0 BINDINGS_REGEX)
- string(APPEND BINDINGS_REGEX ".so")
- elseif(BINDINGS_LIST_LENGTH GREATER 1)
- foreach(B IN LISTS BINDINGS_LIST)
- STRING(APPEND BINDINGS_STR "${B}|")
- endforeach()
- STRING(REGEX REPLACE "^(.*)\\|$" "(\\1).so" BINDINGS_REGEX ${BINDINGS_STR})
- endif()
- endif()
-
- configure_files_in_dir(${TEMPLATE_DIR})
- configure_files_in_dir(${TEMPLATE_DIR})
-
- add_custom_target(remote-target-populate
- COMMAND chmod +x ${CMAKE_CURRENT_BINARY_DIR}/target/*.sh
- COMMAND rsync -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --archive --delete ${PROJECT_PKG_BUILD_DIR}/ ${RSYNC_TARGET}:${RSYNC_PREFIX}/${PROJECT_NAME}
- COMMENT "${REMOTE_LAUNCH}"
- )
- add_dependencies(remote-target-populate populate)
- endif()
-endmacro(remote_targets_populate)
-
-macro(wgt_package_build)
- if(NOT EXISTS ${WIDGET_CONFIG_TEMPLATE})
- MESSAGE(FATAL_ERROR "${Red}WARNING ! Missing mandatory files to build widget file.\nYou need a config.xml template: please specify WIDGET_CONFIG_TEMPLATE correctly.${ColourReset}")
- endif()
- if(NOT WIDGET_TYPE)
- MESSAGE(FATAL_ERROR "WIDGET_TYPE must be set in your config.cmake.\neg.: set(WIDGET_TYPE application/vnd.agl.service)")
- endif()
- if(NOT DEFINED PROJECT_ICON)
- if( ${WIDGET_TYPE} MATCHES "agl.native")
- set(ICON_PATH ${PKG_APP_TEMPLATE_DIR}/wgt/icon-native.png)
- elseif( ${WIDGET_TYPE} MATCHES "agl.service")
- set(ICON_PATH ${PKG_APP_TEMPLATE_DIR}/wgt/icon-service.png)
- elseif( ${WIDGET_TYPE} MATCHES "x-executable")
- set(ICON_PATH ${PKG_APP_TEMPLATE_DIR}/wgt/icon-qml.png)
- elseif( ${WIDGET_TYPE} MATCHES "text/html")
- set(ICON_PATH ${PKG_APP_TEMPLATE_DIR}/wgt/icon-html5.png)
- endif()
- elseif(EXISTS "${CMAKE_SOURCE_DIR}/${WIDGET_ICON}")
- set(ICON_PATH "${CMAKE_SOURCE_DIR}/${WIDGET_ICON}")
- elseif(EXISTS "${WIDGET_ICON}")
- set(ICON_PATH "${WIDGET_ICON}")
- else()
- set(ICON_PATH ${CMAKE_SOURCE_DIR}/${PROJECT_APP_TEMPLATES_DIR}/wgt/icon-default.png)
- endif()
-
- if(NOT WIDGET_ENTRY_POINT)
- set(WIDGET_ENTRY_POINT lib)
- endif()
-
- add_custom_command(OUTPUT ${PROJECT_PKG_BUILD_DIR}/config.xml
- COMMAND ${CMAKE_COMMAND} -DINFILE=${WIDGET_CONFIG_TEMPLATE} -DOUTFILE=${PROJECT_PKG_BUILD_DIR}/config.xml -DPROJECT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_APP_TEMPLATES_DIR}/cmake/configure_file.cmake
- COMMAND cp ${ICON_PATH} ${PROJECT_PKG_BUILD_DIR}/${PROJECT_ICON}
-
- )
- add_custom_target(packaging_wgt DEPENDS ${PROJECT_PKG_BUILD_DIR}/config.xml)
-
- # Fulup ??? copy any extra file in wgt/etc into populate package before building the widget
- file(GLOB PROJECT_CONF_FILES "${TEMPLATE_DIR}/etc/*")
- if(${PROJECT_CONF_FILES})
- file(COPY "${TEMPLATE_DIR}/etc/*" DESTINATION ${PROJECT_PKG_BUILD_DIR}/etc/)
- endif(${PROJECT_CONF_FILES})
-
- add_custom_command(OUTPUT ${PROJECT_NAME}.wgt
- DEPENDS ${PROJECT_TARGETS}
- COMMAND wgtpkg-pack -f -o ${PROJECT_NAME}.wgt ${PROJECT_PKG_BUILD_DIR}
- )
-
- add_custom_target(widget DEPENDS ${PROJECT_NAME}.wgt)
- add_dependencies(widget populate packaging_wgt)
- set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.wgt")
-
- if(NOT RSYNC_TARGET)
- message ("${Yellow}.. Warning: RSYNC_TARGET not defined 'make widget-target-install' not instanciated${ColourReset}")
- add_custom_target(widget-target-install
- COMMENT "${Red}*** Fatal: RSYNC_TARGET RSYNC_PREFIX environment variables required with 'make widget-target-install'${ColourReset}"
- COMMAND exit -1
- )
- else()
- configure_files_in_dir(${TEMPLATE_DIR})
- add_custom_target(widget-target-install
- DEPENDS widget
- COMMAND chmod +x ${CMAKE_CURRENT_BINARY_DIR}/target/install-wgt-on-${RSYNC_TARGET}.sh
- COMMAND ${CMAKE_CURRENT_BINARY_DIR}/target/install-wgt-on-${RSYNC_TARGET}.sh
- )
-endif()
-
- if(PACKAGE_MESSAGE)
- add_custom_command(TARGET widget
- POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --cyan "++ ${PACKAGE_MESSAGE}")
- endif()
-endmacro(wgt_package_build)
-
-macro(rpm_package_build)
- add_custom_command(OUTPUT ${NPKG_PROJECT_NAME}.spec
- DEPENDS ${PROJECT_TARGETS}
- archive
- packaging
- COMMAND rpmbuild --define=\"%_sourcedir ${PROJECT_PKG_ENTRY_POINT}\" -ba ${PROJECT_PKG_ENTRY_POINT}/${NPKG_PROJECT_NAME}.spec
- )
-
- add_custom_target(rpm DEPENDS ${NPKG_PROJECT_NAME}.spec)
- add_dependencies(rpm populate packaging)
-
- if(PACKAGE_MESSAGE)
- add_custom_command(TARGET rpm
- POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --cyan "++ ${PACKAGE_MESSAGE}")
- endif()
-endmacro(rpm_package_build)
-
-macro(deb_package_build)
-#TODO
-endmacro(deb_package_build)
-
-macro(project_package_build)
- if(EXISTS ${TEMPLATE_DIR})
- rpm_package_build()
- endif()
-
- if(EXISTS ${TEMPLATE_DIR})
- wgt_package_build()
- endif()
-
- if(EXISTS ${TEMPLATE_DIR})
- deb_package_build()
- endif()
-endmacro(project_package_build)
-
-macro(project_subdirs_add)
- set (ARGSLIST ${ARGN})
- list(LENGTH ARGSLIST ARGSNUM)
- if(${ARGSNUM} GREATER 0)
- file(GLOB filelist "${ARGV0}")
- else()
- file(GLOB filelist "*")
- endif()
-
- foreach(filename ${filelist})
- if(EXISTS "${filename}/CMakeLists.txt")
- add_subdirectory(${filename})
- endif(EXISTS "${filename}/CMakeLists.txt")
- endforeach()
-endmacro(project_subdirs_add)
-
-# Print developer helper message when build is done
-# -------------------------------------------------------
-macro(project_closing_msg)
- get_property(PROJECT_TARGETS_SET GLOBAL PROPERTY PROJECT_TARGETS SET)
- get_property(PROJECT_TARGETS GLOBAL PROPERTY PROJECT_TARGETS)
- if(CLOSING_MESSAGE AND ${PROJECT_TARGETS_SET})
- add_custom_target(${PROJECT_NAME}_build_done ALL
- COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --cyan "++ ${CLOSING_MESSAGE}"
- )
- add_dependencies(${PROJECT_NAME}_build_done
- ${DEPENDENCIES_TARGET} ${PROJECT_TARGETS})
- endif()
-endmacro()
diff --git a/conf.d/app-templates/cmake/cmake.d/04-extra_targets.cmake b/conf.d/app-templates/cmake/cmake.d/04-extra_targets.cmake
deleted file mode 100644
index d54e128..0000000
--- a/conf.d/app-templates/cmake/cmake.d/04-extra_targets.cmake
+++ /dev/null
@@ -1,162 +0,0 @@
-###########################################################################
-# Copyright 2015, 2016, 2017 IoT.bzh
-#
-# author: Fulup Ar Foll <fulup@iot.bzh>
-# contrib: 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.
-###########################################################################
-
-
-#--------------------------------------------------------------------------
-# WARNING:
-# Do not change this cmake template
-# Customise your preferences in "./conf.d/cmake/config.cmake"
-#--------------------------------------------------------------------------
-
-# Add a dummy target to enable global dependency order
-# -----------------------------------------------------
-if(EXTRA_DEPENDENCIES_ORDER)
- set(DEPENDENCIES_TARGET ${PROJECT_NAME}_extra_dependencies)
- add_custom_target(${DEPENDENCIES_TARGET} ALL
- DEPENDS ${EXTRA_DEPENDENCY_ORDER}
- )
-endif()
-
-# ----------------------------------------------------------------------------
-# Archive target
-# ----------------------------------------------------------------------------
-add_custom_command(OUTPUT ${ARCHIVE_OUTPUT}
- DEPENDS ${PROJECT_TARGETS}
- #Create git archive of the main project
- COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR}\; git --git-dir=${CMAKE_CURRENT_SOURCE_DIR}/.git archive --format=tar --prefix=${NPKG_PROJECT_NAME}-${PROJECT_VERSION}/ HEAD -o ${ARCHIVE_OUTPUT_ARCHIVE}
- #Create tmp git archive for each submodule
- COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR}\; git --git-dir=${CMAKE_CURRENT_SOURCE_DIR}/.git submodule foreach --recursive ${CMD_ARCHIVE_SUBMODULE}
- #Concatenate main archive and tmp submodule archive
- COMMAND for SUBTAR in ${TMP_ARCHIVE_SUBMODULE}-*.tar\; do tar --concatenate --file=${ARCHIVE_OUTPUT_ARCHIVE} $$SUBTAR\;done
- #Remove tmp submodule archive
- COMMAND rm -rf ${TMP_ARCHIVE_SUBMODULE}-*.tar
- #Compress main archive
- COMMAND gzip --force --verbose ${ARCHIVE_OUTPUT_ARCHIVE}
-)
-add_custom_target(archive DEPENDS ${ARCHIVE_OUTPUT})
-
-# ----------------------------------------------------------------------------
-# Packaging target
-# ----------------------------------------------------------------------------
-#Format Build require package
-foreach (PKG_CONFIG ${PKG_REQUIRED_LIST})
- #Unset TMP variable
- unset(XPREFIX)
- unset(XRULE)
- unset(RPM_EXTRA_DEP)
- unset(DEB_EXTRA_DEP)
- #For deb package,add EOL format only for a new line
- if(DEB_PKG_DEPS)
- set(DEB_PKG_DEPS "${DEB_PKG_DEPS},\n")
- endif()
- #Get pkg-config rule on version
- string(REGEX REPLACE "[<>]?=.*$" "" XPREFIX ${PKG_CONFIG})
- string(REGEX MATCH "[<>]?=" XRULE ${PKG_CONFIG})
- #Only if pkg-config has rule on version
- if(XRULE)
- string(REGEX REPLACE ".*[<>]?=" "" XVERS ${PKG_CONFIG})
- set(RPM_EXTRA_DEP " ${XRULE} ${XVERS}")
- set(DEB_EXTRA_DEP " (${XRULE} ${XVERS})")
- endif()
- # Format for rpm package
- set(RPM_PKG_DEPS "${RPM_PKG_DEPS}BuildRequires: pkgconfig(${XPREFIX})${RPM_EXTRA_DEP}\n")
-
- # Format for deb package
- # Because the tool "dpkg" is used on the packages db to find the
- # package providing the pkg-cong file ${XPREFIX}.pc, we need
- # to test the OS release package type
- # Only doable within a native environment not under SDK
- if( OSRELEASE MATCHES "debian" AND NOT DEFINED ENV{SDKTARGETSYSROOT} AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)
- execute_process(
- COMMAND pkg-config --print-provides ${XPREFIX}
- OUTPUT_VARIABLE TMP_PKG_BIN
- )
- if(TMP_PKG_BIN)
- string(REGEX REPLACE " *=.*$" "" PKG_BIN ${TMP_PKG_BIN})
- set(DEB_PKG_DEPS "${DEB_PKG_DEPS} ${PKG_BIN} ${DEB_EXTRA_DEP}")
- else()
- message(FATAL_ERROR "-- ${Red}${XPREFIX} development files not installed. Abort.${ColourReset}")
- endif()
- endif()
-endforeach()
-
-if(NOT EXISTS ${TEMPLATE_DIR}/rpm-config.spec.in)
- MESSAGE(FATAL_ERROR "${Red}Missing mandatory files: you need rpm-config.spec.in in ${TEMPLATE_DIR} folder.${ColourReset}")
-endif()
-
-# Because the tool "dpkg" is used on the packages db to find the
-# package providing the pkg-cong file ${XPREFIX}.pc, we need
-# to test the OS release package type
-# Only doable within a native environment not under SDK
-if(OSRELEASE MATCHES "debian" AND NOT DEFINED ENV{SDKTARGETSYSROOT} AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)
- add_custom_target(packaging_deb DEPENDS ${TEMPLATE_DIR}/debian.compat.in
- ${TEMPLATE_DIR}/debian.changelog.in
- ${TEMPLATE_DIR}/deb-config.dsc.in
- ${TEMPLATE_DIR}/deb-config.install.in
- ${TEMPLATE_DIR}/debian.control.in
- ${TEMPLATE_DIR}/debian.rules.in
- COMMAND ${CMAKE_COMMAND} -DINFILE=${TEMPLATE_DIR}/debian.compat.in -DOUTFILE=${PACKAGING_DEB_OUTPUT_COMPAT} -DPROJECT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_APP_TEMPLATES_DIR}/cmake/configure_file.cmake
- COMMAND ${CMAKE_COMMAND} -DINFILE=${TEMPLATE_DIR}/debian.changelog.in -DOUTFILE=${PACKAGING_DEB_OUTPUT_CHANGELOG} -DPROJECT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_APP_TEMPLATES_DIR}/cmake/configure_file.cmake
- COMMAND ${CMAKE_COMMAND} -DINFILE=${TEMPLATE_DIR}/deb-config.dsc.in -DOUTFILE=${PACKAGING_DEB_OUTPUT_DSC} -DPROJECT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_APP_TEMPLATES_DIR}/cmake/configure_file.cmake
- COMMAND ${CMAKE_COMMAND} -DINFILE=${TEMPLATE_DIR}/deb-config.install.in -DOUTFILE=${PACKAGING_DEB_OUTPUT_INSTALL} -DPROJECT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_APP_TEMPLATES_DIR}/cmake/configure_file.cmake
- COMMAND ${CMAKE_COMMAND} -DINFILE=${TEMPLATE_DIR}/debian.control.in -DOUTFILE=${PACKAGING_DEB_OUTPUT_CONTROL} -DPROJECT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_APP_TEMPLATES_DIR}/cmake/configure_file.cmake
- COMMAND ${CMAKE_COMMAND} -DINFILE=${TEMPLATE_DIR}/debian.rules.in -DOUTFILE=${PACKAGING_DEB_OUTPUT_RULES} -DPROJECT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_APP_TEMPLATES_DIR}/cmake/configure_file.cmake
- )
-endif()
-
-add_custom_target(packaging)
-set(PACKAGING_SPEC_OUTPUT ${PROJECT_PKG_ENTRY_POINT}/${NPKG_PROJECT_NAME}.spec)
-add_custom_target(packaging_rpm DEPENDS ${TEMPLATE_DIR}/rpm-config.spec.in
- COMMAND ${CMAKE_COMMAND} -DINFILE=${TEMPLATE_DIR}/rpm-config.spec.in -DOUTFILE=${PACKAGING_SPEC_OUTPUT} -DPROJECT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_APP_TEMPLATES_DIR}/cmake/configure_file.cmake
-)
-add_dependencies(packaging packaging_rpm)
-if(TARGET packaging_wgt)
- add_dependencies(packaging packaging_wgt)
-endif()
-if(OSRELEASE MATCHES "debian" AND NOT DEFINED ENV{SDKTARGETSYSROOT} AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)
- # Target to add dependencies indirectly to "packaging" target.
- add_dependencies(packaging packaging_deb)
-endif()
-
-#Generate a cmake cache file usable by cmake script.
-set(CacheForScript ${CMAKE_BINARY_DIR}/CMakeCacheForScript.cmake)
-#Create a tmp cmake file.
-file(WRITE ${CacheForScript} "")
-
-get_cmake_property(Vars VARIABLES)
-foreach(Var ${Vars})
- if(${Var})
- #Replace unwanted char.
- string(REPLACE "\\" "\\\\" VALUE ${${Var}})
- string(REPLACE "\n" "\\n" VALUE ${VALUE})
- string(REPLACE "\r" "\\n" VALUE ${VALUE})
- string(REPLACE "\"" "\\\"" VALUE ${VALUE})
- endif()
- file(APPEND ${CacheForScript} "set(${Var} \"${VALUE}\")\n")
-endforeach()
-
-# ----------------------------------------------------------------------------
-# Autobuild target
-# ----------------------------------------------------------------------------
-
-add_custom_target(autobuild ALL DEPENDS ${CMAKE_SOURCE_DIR}/${PROJECT_APP_TEMPLATES_DIR}/template.d/autobuild/agl/autobuild.in
- ${CMAKE_SOURCE_DIR}/${PROJECT_APP_TEMPLATES_DIR}/template.d/autobuild/linux/autobuild.in
- COMMAND ${CMAKE_COMMAND} -DINFILE=${CMAKE_SOURCE_DIR}/${PROJECT_APP_TEMPLATES_DIR}/template.d/autobuild/agl/autobuild.in -DOUTFILE=${PROJECT_TEMPLATE_AGL_AUTOBUILD_DIR}/autobuild -DPROJECT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_APP_TEMPLATES_DIR}/cmake/configure_file.cmake
- COMMAND ${CMAKE_COMMAND} -DINFILE=${CMAKE_SOURCE_DIR}/${PROJECT_APP_TEMPLATES_DIR}/template.d/autobuild/agl/autobuild.in -DOUTFILE=${PROJECT_TEMPLATE_LINUX_AUTOBUILD_DIR}/autobuild -DPROJECT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_APP_TEMPLATES_DIR}/cmake/configure_file.cmake
-)
diff --git a/conf.d/app-templates/cmake/common.cmake b/conf.d/app-templates/cmake/common.cmake
deleted file mode 100644
index d0ec12e..0000000
--- a/conf.d/app-templates/cmake/common.cmake
+++ /dev/null
@@ -1,63 +0,0 @@
-###########################################################################
-# Copyright 2015, 2016, 2017 IoT.bzh
-#
-# author: Fulup Ar Foll <fulup@iot.bzh>
-# contrib: 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.
-###########################################################################
-
-
-#--------------------------------------------------------------------------
-# WARNING:
-# Do not change this cmake template
-# Customise your preferences in "./conf.d/cmake/config.cmake"
-#--------------------------------------------------------------------------
-
-file(GLOB project_cmakefiles ${PROJECT_APP_TEMPLATES_DIR}/cmake/cmake.d/[0-9][0-9]-*.cmake)
-list(SORT project_cmakefiles)
-file(GLOB home_cmakefiles $ENV{HOME}/.config/app-templates/cmake.d/[0-9][0-9]-common*.cmake $ENV{HOME}/.config/app-templates/cmake.d/[0-9][0-9]-${PROJECT_NAME}*.cmake)
-list(SORT home_cmakefiles)
-file(GLOB system_cmakefiles /etc/app-templates/cmake.d/[0-9][0-9]-common*.cmake /etc/app-templates/cmake.d/[0-9][0-9]-${PROJECT_NAME}*.cmake)
-list(SORT system_cmakefiles)
-
-foreach(file ${system_cmakefiles} ${home_cmakefiles} ${project_cmakefiles})
- message(STATUS "Include: ${file}")
- include(${file})
-endforeach()
-
-file(GLOB project_cmakefiles ${ENTRY_POINT}/cmake/[0-9][0-9]-${OSRELEASE}*.cmake )
-list(SORT project_cmakefiles)
-if(NOT project_cmakefiles)
- file(GLOB project_cmakefiles ${ENTRY_POINT}/cmake/[0-9][0-9]-default*.cmake)
-endif()
-
-foreach(file ${project_cmakefiles})
- message(STATUS "Include: ${file}")
- include(${file})
-endforeach()
-
-if(DEFINED PROJECT_SRC_DIR_PATTERN)
- project_subdirs_add(${PROJECT_SRC_DIR_PATTERN})
-else()
- project_subdirs_add()
-endif(DEFINED PROJECT_SRC_DIR_PATTERN)
-
-configure_files_in_dir(${PROJECT_APP_TEMPLATES_DIR}/${ENTRY_POINT}/template.d)
-configure_files_in_dir($ENV{HOME}/.config/app-templates/scripts)
-configure_files_in_dir(/etc/app-templates/scripts)
-
-project_targets_populate()
-remote_targets_populate()
-project_package_build()
-project_closing_msg()
diff --git a/conf.d/app-templates/cmake/configure_file.cmake b/conf.d/app-templates/cmake/configure_file.cmake
deleted file mode 100644
index 2028388..0000000
--- a/conf.d/app-templates/cmake/configure_file.cmake
+++ /dev/null
@@ -1,2 +0,0 @@
-include(${CMAKE_BINARY_DIR}/CMakeCacheForScript.cmake)
-configure_file(${INFILE} ${OUTFILE} @ONLY)
diff --git a/conf.d/app-templates/cmake/export.map b/conf.d/app-templates/cmake/export.map
deleted file mode 100644
index ee2f413..0000000
--- a/conf.d/app-templates/cmake/export.map
+++ /dev/null
@@ -1 +0,0 @@
-{ global: afbBindingV*; local: *; };
diff --git a/conf.d/app-templates/docs/0-Doc-Revisions.md b/conf.d/app-templates/docs/0-Doc-Revisions.md
deleted file mode 100644
index 38b6e74..0000000
--- a/conf.d/app-templates/docs/0-Doc-Revisions.md
+++ /dev/null
@@ -1,6 +0,0 @@
-Document revisions
-==================
-
-| Date | Version | Designation  | Author |
-|-------------|---------|--------------------------------------|-------------------------|
-| 4 Jul 2017 | 1.0 | Initial release | R. Forlot [ Iot.bzh ] |
diff --git a/conf.d/app-templates/docs/README.md b/conf.d/app-templates/docs/README.md
deleted file mode 100644
index 39f9209..0000000
--- a/conf.d/app-templates/docs/README.md
+++ /dev/null
@@ -1,22 +0,0 @@
-# Introduction
-
-This document explain how to use the CMake templates files and associated
-files to ease developement of AGL application.
-
-<br>
-<br>
-<br>
-<br>
-<br>
-
-| *Meta* | *Data* |
-| -- | -- |
-| **Title** | {{ config.title }} |
-| **Author** | {{ config.author }} |
-| **Description** | {{ config.description }} |
-| **Keywords** | {{ config.keywords }} |
-| **Language** | English |
-| **Published** | Published {{ config.published }} as an electronic book |
-| **Updated** | {{ gitbook.time }} |
-| **Collection** | Open-source |
-| **Website** | [{{ config.website }}]({{ config.website }}) |
diff --git a/conf.d/app-templates/docs/SUMMARY.md b/conf.d/app-templates/docs/SUMMARY.md
deleted file mode 100644
index f475678..0000000
--- a/conf.d/app-templates/docs/SUMMARY.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# Summary
-
-* [Document revisions](0-Doc-Revisions.md)
-
-* [Developper guide](dev_guide/0_Abstract.md)
- * [Quickstart](dev_guide/1_Quickstart.md)
- * [Project architecture](dev_guide/2_project_architecture.md)
- * [Advanced usage](dev_guide/3_advanced_usage.md)
- * [Customization](dev_guide/4_advanced_customization.md)
- * [Autobuild](dev_guide/5_autobuild.md)
diff --git a/conf.d/app-templates/docs/_layouts/ebook/page.html b/conf.d/app-templates/docs/_layouts/ebook/page.html
deleted file mode 100644
index bf325e9..0000000
--- a/conf.d/app-templates/docs/_layouts/ebook/page.html
+++ /dev/null
@@ -1,36 +0,0 @@
-{% extends "layout.html" %}
-
-{% block title %}{{ page.title }}{% endblock %}
-{% block description %}{{ page.description }}{% endblock %}
-
-{% block style %}
- {### Include theme css before plugins css ###}
- {% if not fileExists(config.styles.print) %}
- {% if options.format %}
- <link rel="stylesheet" href="{{ (options.format + ".css")|resolveAsset }}">
- {% else %}
- <link rel="stylesheet" href="{{ "ebook.css"|resolveAsset }}">
- {% endif %}
- {% endif %}
-
- {{ super() }}
-
- {### Custom stylesheets for the book ###}
-
- {% for type, style in config.styles %}
- {% if fileExists(style) and (type == "ebook" or type == "print" or type == options.format) %}
- <link rel="stylesheet" href="{{ style|resolveFile }}">
- {% endif %}
- {% endfor %}
-{% endblock %}
-
-{% block body %}
-<div class="page">
- {% block page %}
- <h1 class="book-chapter book-chapter-{{ page.depth }}">{{ page.title }}</h1>
- <div class="section">
- {{ page.content|safe }}
- </div>
- {% endblock %}
-</div>
-{% endblock %}
diff --git a/conf.d/app-templates/docs/_layouts/ebook/pdf_footer.html b/conf.d/app-templates/docs/_layouts/ebook/pdf_footer.html
deleted file mode 100644
index 679e562..0000000
--- a/conf.d/app-templates/docs/_layouts/ebook/pdf_footer.html
+++ /dev/null
@@ -1,13 +0,0 @@
-{% extends "./page.html" %}
-{% block body %}
-<div id="pdf-footer" class="pdf-footer">
- <span class="footer-left">Version {{ config.version }}</span>
- <span class="footer-right">{{ page.num }}</span>
- <span class="footer-center">{{ config.published }}</span>
-</div>
-
-<!-- Allow to hide footer for some pages using hidepagefooters config in book.json -->
-<script>
- if (({% for num in config.hidepagefooters %}{{ page.num }} == {{ num }} || {% endfor %}false)) document.getElementById('pdf-footer').style.display = 'none'
-</script>
-{% endblock %}
diff --git a/conf.d/app-templates/docs/_layouts/ebook/pdf_header.html b/conf.d/app-templates/docs/_layouts/ebook/pdf_header.html
deleted file mode 100644
index ef49641..0000000
--- a/conf.d/app-templates/docs/_layouts/ebook/pdf_header.html
+++ /dev/null
@@ -1,13 +0,0 @@
-{% extends "./page.html" %}
-{% block body %}
-<div id="pdf-header" class="pdf-header">
- <span class="header-left">IoT.Bzh</span>
- <span class="header-right">{{ config.title }}</span>
-</div>
-
-<!-- Allow to hide header for some pages using hidepageheaders config in book.json -->
-<script>
- if (({% for num in config.hidepageheaders %}{{ page.num }} == {{ num }} || {% endfor %}false)) document.getElementById('pdf-header').style.display = 'none'
-</script>
-
-{% endblock %} \ No newline at end of file
diff --git a/conf.d/app-templates/docs/_layouts/ebook/summary.html b/conf.d/app-templates/docs/_layouts/ebook/summary.html
deleted file mode 100644
index be328a4..0000000
--- a/conf.d/app-templates/docs/_layouts/ebook/summary.html
+++ /dev/null
@@ -1,58 +0,0 @@
-{% extends "./page.html" %}
-
-{% block title %}{{ "SUMMARY"|t }}{% endblock %}
-
-{% macro articles(_articles) %}
- {% for article in _articles %}
- <li>
- <span class="inner">
- {% if article.path or article.url %}
- {% if article.path %}
- <a href="{{ article.path|contentURL }}{{ article.anchor }}">{{ article.title }}</a>
- {% else %}
- <a target="_blank" href="{{ article.url }}">{{ article.title }}</a>
- {% endif %}
- {% else %}
- <span>{{ article.title }}</span>
- {% endif %}
- {% if 1 %}
- <span class="page">{{ article.level }}</span>
- {% endif %}
- </span>
- {% if article.articles.length > 0 %}
- <ol>
- {{ articles(article.articles) }}
- </ol>
- {% endif %}
- </li>
- {% endfor %}
-{% endmacro %}
-
-{% block page %}
-<div class="section toc">
- <h1>{{ "SUMMARY"|t }}</h1>
- <ol>
- {% for part in summary.parts %}
- {% if part.title %}
- <li class="part-title">
- <h2>{{ part.title }}</h2>
- </li>
- {% endif %}
- {{ articles(part.articles) }}
-
- {% if not loop.last %}
- <li class="divider"></li>
- {% endif %}
- {% endfor %}
-
- {% if glossary.path %}
- <li>
- <span class="inner">
- <a href="{{ ('/' + glossary.path)|contentURL }}">{{ "GLOSSARY"|t }}</a>
- </span>
- </li>
- {% endif %}
- </ol>
-</div>
-{% endblock %}
-
diff --git a/conf.d/app-templates/docs/_layouts/layout.html b/conf.d/app-templates/docs/_layouts/layout.html
deleted file mode 100644
index 3d5aca6..0000000
--- a/conf.d/app-templates/docs/_layouts/layout.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!DOCTYPE HTML>
-<html lang="{{ config.language }}" {% if page.dir == "rtl" %}dir="rtl"{% endif %}>
- <head>
- <meta charset="UTF-8">
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
- <title>{% block title %}{{ config.title|d("GitBook", true) }}{% endblock %}</title>
- <meta http-equiv="X-UA-Compatible" content="IE=edge" />
- <meta name="description" content="{% block description %}{% endblock %}">
- <meta name="generator" content="GitBook {{ gitbook.version }}">
- {% if config.author %}<meta name="author" content="{{ config.author }}">{% endif %}
- {% if config.isbn %}<meta name="identifier" content="{{ config.isbn }}" scheme="ISBN">{% endif %}
- {% block style %}
- {% for resource in plugins.resources.css %}
- {% if resource.url %}
- <link rel="stylesheet" href="{{ resource.url }}">
- {% else %}
- <link rel="stylesheet" href="{{ resource.path|resolveAsset }}">
- {% endif %}
- {% endfor %}
- {% endblock %}
-
- {% block head %}{% endblock %}
- </head>
- <body>
- {% block body %}{% endblock %}
- {% block javascript %}{% endblock %}
- </body>
-</html>
diff --git a/conf.d/app-templates/docs/cover.jpg b/conf.d/app-templates/docs/cover.jpg
deleted file mode 100644
index 4e04b0c..0000000
--- a/conf.d/app-templates/docs/cover.jpg
+++ /dev/null
Binary files differ
diff --git a/conf.d/app-templates/docs/cover_small.jpg b/conf.d/app-templates/docs/cover_small.jpg
deleted file mode 100644
index 315816b..0000000
--- a/conf.d/app-templates/docs/cover_small.jpg
+++ /dev/null
Binary files differ
diff --git a/conf.d/app-templates/docs/dev_guide/0_Abstract.md b/conf.d/app-templates/docs/dev_guide/0_Abstract.md
deleted file mode 100644
index a04cc87..0000000
--- a/conf.d/app-templates/docs/dev_guide/0_Abstract.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# Developper Guide: use AGL CMake Templates
-
-## Abstract
-
-Files used to build an application, or binding, project with the
-AGL Application Framework.
-
-To build your AGL project using these templates, you have to install
-them within your project and adjust compilation option in `config.cmake`.
-For technical reasons, you also have to specify **cmake** target in
-sub CMakeLists.txt installed. Make a globbing search to find source files
-isn't recommended now to handle project build especially in a multiuser
-project because CMake will not be aware of new or removed source files.
-
-You'll find usage samples here:
-
-- [helloworld-service](https://github.com/iotbzh/helloworld-service)
-- [low-level-can-service](https://gerrit.automotivelinux.org/gerrit/apps/low-level-can-service)
-- [high-level-viwi-service](https://github.com/iotbzh/high-level-viwi-service)
-- [audio-binding](https://github.com/iotbzh/audio-binding)
-- [unicens2-binding](https://github.com/iotbzh/unicens2-binding)
diff --git a/conf.d/app-templates/docs/dev_guide/1_Quickstart.md b/conf.d/app-templates/docs/dev_guide/1_Quickstart.md
deleted file mode 100644
index 9aad1ef..0000000
--- a/conf.d/app-templates/docs/dev_guide/1_Quickstart.md
+++ /dev/null
@@ -1,81 +0,0 @@
-
-# Quickstart
-
-## Initialization
-
-To use these templates files on your project just install the reference files using
-**git submodule** then use `config.cmake` file to configure your project specificities :
-
-```bash
-git submodule add https://gerrit.automotivelinux.org/gerrit/apps/app-templatesconf.d/app-templates conf.d/app-templates
-mkdir conf.d/cmake
-cp conf.d/app-templates/cmake/config.cmake.sample conf.d/cmake/config.cmake
-```
-
-Edit the copied config.cmake file to fit your needs.
-
-Now, create your top CMakeLists.txt file which include `config.cmake` file.
-
-An example is available in **app-templates** submodule that you can copy and
-use:
-
-```bash
-cp conf.d/app-templates/cmake/CMakeLists.txt CMakeLists.txt
-```
-
-## Create your CMake targets
-
-For each target part of your project, you need to use ***PROJECT_TARGET_ADD***
-to include this target to your project.
-
-Using it, make available the cmake variable ***TARGET_NAME*** until the next
-***PROJECT_TARGET_ADD*** is invoked with a new target name.
-
-So, typical usage defining a target is:
-
-```cmake
-PROJECT_TARGET_ADD(SuperExampleName) --> Adding target to your project
-
-add_executable/add_library(${TARGET_NAME}.... --> defining your target sources
-
-SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES.... --> fit target properties
-for macros usage
-
-INSTALL(TARGETS ${TARGET_NAME}....
-```
-
-## Targets PROPERTIES
-
-You should set properties on your targets that will be used to package your
-apps in a widget file that could be installed on an AGL system.
-
-Specify what is the type of your targets that you want to be included in the
-widget package with the property **LABELS**:
-
-Choose between:
-
-- **BINDING**: Shared library that be loaded by the AGL Application Framework
-- **BINDINGV2**: Shared library that be loaded by the AGL Application Framework.
- This has to be accompagnied with a JSON file named like the *${OUTPUT_NAME}-apidef* of
- the target that describe the API with OpenAPI syntax (e.g: *mybinding-apidef*).
- Or you can choose the name by setting the *CACHE* cmake variable *OPENAPI_DEF*
- (***CAUTION***: setting a CACHE variable is needed, or set a normal variable
- with the *PARENT_SCOPE* option to make it visible for the parent scope
- where the target is defined) JSON file will be used to generate header file
- using `afb-genskel` tool.
-- **HTDOCS**: Root directory of a web app. This target has to build its
- directory and puts its files in the ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}
-- **DATA**: Resources used by your application. This target has to build its
- directory and puts its files in the ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}
-- **EXECUTABLE**: Entry point of your application executed by the AGL
- Application Framework
-
-```cmake
-SET_TARGET_PROPERTIES(${TARGET_NAME}
- PREFIX "afb-"
- LABELS "BINDING"
- OUTPUT_NAME "file_output_name")
-```
-
-> **TIP** you should use the prefix _afb-_ with your **BINDING* targets which
-> stand for **Application Framework Binding**.
diff --git a/conf.d/app-templates/docs/dev_guide/2_project_architecture.md b/conf.d/app-templates/docs/dev_guide/2_project_architecture.md
deleted file mode 100644
index 0cae607..0000000
--- a/conf.d/app-templates/docs/dev_guide/2_project_architecture.md
+++ /dev/null
@@ -1,98 +0,0 @@
-# Project architecture
-
-A typical project architecture would be :
-
-```tree
-<project-root-path>
-│
-├── conf.d/
-│ ├── autobuild/
-│ │ ├── agl
-│ │ │ └── autobuild
-│ │ ├── linux
-│ │ │ └── autobuild
-│ │ └── windows
-│ │ └── autobuild
-│ ├── app-templates/
-│ │ ├── README.md
-│ │ ├── autobuild/
-│ │ │ ├── agl
-│ │ │ │ └── autobuild.in
-│ │ │ ├── linux
-│ │ │ │ └── autobuild.in
-│ │ │ └── windows
-│ │ │ └── autobuild.in
-│ │ ├── cmake/
-│ │ │ ├── config.cmake.sample
-│ │ │ ├── export.map
-│ │ │ └── macros.cmake
-│ │ ├── deb/
-│ │ │ └── config.deb.in
-│ │ ├── rpm/
-│ │ │ └── config.spec.in
-│ │ └── wgt/
-│ │ ├── config.xml.in
-│ │ ├── config.xml.in.sample
-│ │ ├── icon-default.png
-│ │ ├── icon-html5.png
-│ │ ├── icon-native.png
-│ │ ├── icon-qml.png
-│ │ └── icon-service.png
-│ ├── packaging/
-│ │ ├── config.spec
-│ │ └── config.deb
-│ ├── cmake
-│ │ └── config.cmake
-│ └── wgt
-│ └── config.xml.in
-├── <libs>
-├── <target>
-│ └── <files>
-├── <target>
-│ └── <file>
-└── <target>
- └── <files>
-```
-
-| # | Parent | Description |
-| - | -------| ----------- |
-| \<root-path\> | - | Path to your project. Hold master CMakeLists.txt and general files of your projects. |
-| conf.d | \<root-path\> | Holds needed files to build, install, debug, package an AGL app project |
-| app-templates | conf.d | Git submodule to app-templates AGL repository which provides CMake helpers macros library, and build scripts. config.cmake is a copy of config.cmake.sample configured for the projects. SHOULD NOT BE MODIFIED MANUALLY !|
-| autobuild | conf.d | Scripts generated from app-templates to build packages the same way for differents platforms.|
-| cmake | conf.d | Contains at least config.cmake file modified from the sample provided in app-templates submodule. |
-| wgt | conf.d | Contains at least config.xml.in template file modified from the sample provided in app-templates submodule for the needs of project (See config.xml.in.sample file for more details). |
-| packaging | conf.d | Contains output files used to build packages. |
-| \<libs\> | \<root-path\> | External dependencies libraries. This isn't to be used to include header file but build and link statically specifics libraries. | Library sources files. Can be a decompressed library archive file or project fork. |
-| \<target\> | \<root-path\> | A target to build, typically library, executable, etc. |
-
-## Manage app-templates submodule
-
-### Update
-
-You may have some news bug fixes or features available from app-templates
-repository that you want. To update your submodule proceed like the following:
-
-```bash
-git submodule update --remote
-git commit -s conf.d/app-templates
-```
-
-This will update the submodule to the HEAD of master branch repository. Save
-the modification by commiting it in your master git project.
-
-### Checkout submodule to a git tag
-
-You could just want to update at a specified repository tag or branch or commit
-, here are the method to do so:
-
-```bash
-cd conf.d/app-templates
-# Choose one of the following depending what you want
-git checkout <tag_name>
-git checkout --detach <branch_name>
-git checkout --detach <commit_id>
-# Then commit
-cd ../..
-git commit -s conf.d/app-templates
-```
diff --git a/conf.d/app-templates/docs/dev_guide/3_advanced_usage.md b/conf.d/app-templates/docs/dev_guide/3_advanced_usage.md
deleted file mode 100644
index cf85986..0000000
--- a/conf.d/app-templates/docs/dev_guide/3_advanced_usage.md
+++ /dev/null
@@ -1,102 +0,0 @@
-# Build a widget
-
-## config.xml.in file
-
-To build a widget you need a _config.xml_ file describing what is your apps and
-how Application Framework would launch it. This repo provide a simple default
-file _config.xml.in_ that should work for simple application without
-interactions with others bindings.
-
-It is recommanded that you use the sample one which is more complete. You can
-find it at the same location under the name _config.xml.in.sample_ (stunning
-isn't it). Just copy the sample file to your _conf.d/wgt_ directory and name it
-_config.xml.in_, then edit it to fit your needs.
-
-> ***CAUTION*** : The default file is only meant to be use for a
-> simple widget app, more complicated ones which needed to export
-> their api, or ship several app in one widget need to use the provided
-> _config.xml.in.sample_ which had all new Application Framework
-> features explained and examples.
-
-## Using cmake template macros
-
-To leverage all cmake templates features, you have to specify ***properties***
-on your targets. Some macros will not works without specifying which is the
-target type.
-
-As the type is not always specified for some custom targets, like an ***HTML5***
-application, macros make the difference using ***LABELS*** property.
-
-Choose between:
-
-- **BINDING**: Shared library that be loaded by the AGL Application Framework
-- **BINDINGV2**: Shared library that be loaded by the AGL Application Framework.
- This has to be accompagnied with a JSON file named like the *${OUTPUT_NAME}-apidef* of
- the target that describe the API with OpenAPI syntax (e.g: *mybinding-apidef*).
- Or you can choose the name by setting the *CACHE* cmake variable *OPENAPI_DEF*
- (***CAUTION***: setting a CACHE variable is needed, or set a normal variable
- with the *PARENT_SCOPE* option to make it visible for the parent scope
- where the target is defined) JSON file will be used to generate header file
- using `afb-genskel` tool.
-- **HTDOCS**: Root directory of a web app. This target has to build its
- directory and puts its files in the ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}
-- **DATA**: Resources used by your application. This target has to build its
- directory and puts its files in the ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}
-- **EXECUTABLE**: Entry point of your application executed by the AGL
- Application Framework
-
-Example:
-
-```cmake
-SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES
- LABELS "HTDOCS"
- OUTPUT_NAME dist.prod
- )
-```
-
-If your target output is not named as the ***TARGET_NAME***, you need to specify
-***OUTPUT_NAME*** property that will be used by the ***populate_widget*** macro.
-
-Use the ***populate_widget*** macro as latest statement of your target
-definition. Then at the end of your project definition you should use the macro
-***build_widget*** that make an archive from the populated widget tree using the
-`wgtpkg-pack` Application Framework tools.
-
-## Macro reference
-
-### PROJECT_TARGET_ADD
-
-Typical usage would be to add the target to your project using macro
-`PROJECT_TARGET_ADD` with the name of your target as parameter.
-
-Example:
-
-```cmake
-PROJECT_TARGET_ADD(low-can-demo)
-```
-
-> ***NOTE***: This will make available the variable `${TARGET_NAME}`
-> set with the specificied name. This variable will change at the next call
-> to this macros.
-
-### project_subdirs_add
-
-This macro will search in all subfolder any `CMakeLists.txt` file. If found then
-it will be added to your project. This could be use in an hybrid application by
-example where the binding lay in a sub directory.
-
-Usage :
-
-```cmake
-project_subdirs_add()
-```
-
-You also can specify a globbing pattern as argument to filter which folders
-will be looked for.
-
-To filter all directories that begin with a number followed by a dash the
-anything:
-
-```cmake
-project_subdirs_add("[0-9]-*")
-```
diff --git a/conf.d/app-templates/docs/dev_guide/4_advanced_customization.md b/conf.d/app-templates/docs/dev_guide/4_advanced_customization.md
deleted file mode 100644
index 0d8957e..0000000
--- a/conf.d/app-templates/docs/dev_guide/4_advanced_customization.md
+++ /dev/null
@@ -1,42 +0,0 @@
-# Advanced customization
-
-## Including additionnals cmake files
-
-Advanced tuning is possible using addionnals cmake files that are included
-automatically from some specifics locations. They are included in that order:
-
-- Project CMake files normaly located in _<project-root-path>/conf.d/app-templates/cmake/cmake.d_
-- Home CMake files located in _$HOME/.config/app-templates/cmake.d_
-- System CMake files located in _/etc/app-templates/cmake.d_
-
-CMake files has to be named using the following convention: `XX-common-*.cmake`
-or `XX-${PROJECT_NAME}-*.cmake`, where `XX` are numbers, `*` file name
-(ie. `99-common-my_customs.cmake`).
-
-> **NOTE** You need to specify after numbers that indicate include order, to
-which project that file applies, if it applies to all project then use keyword
-`common`.
-
-So, saying that you should be aware that every normal cmake variables used at
-project level could be overwrited by home or system located cmake files if
-variables got the same name. Exceptions are cached variables set using
-**CACHE** keyword:
-
-Example:
-
-```cmake
-set(VARIABLE_NAME 'value string random' CACHE STRING 'docstring')
-```
-
-## Include customs templated scripts
-
-As well as for additionnals cmake files you can include your own templated
-scripts that will be passed to cmake command `configure_file`.
-
-Just create your own script to the following directories:
-
-- Home location in _$HOME/.config/app-templates/scripts_
-- System location in _/etc/app-templates/scripts_
-
-Scripts only needs to use the extension `.in` to be parsed and configured by
-CMake command.
diff --git a/conf.d/app-templates/docs/dev_guide/5_autobuild.md b/conf.d/app-templates/docs/dev_guide/5_autobuild.md
deleted file mode 100644
index fe1c63d..0000000
--- a/conf.d/app-templates/docs/dev_guide/5_autobuild.md
+++ /dev/null
@@ -1,41 +0,0 @@
-# Autobuild script usage
-
-## Generation
-
-To be integrated in the Yocto build workflow you have to generate `autobuild`
-scripts using _autobuild_ target.
-
-To generate those scripts proceeds:
-
-```bash
-mkdir -p build
-cd build
-cmake .. && make autobuild
-```
-
-You should see _conf.d/autobuild/agl/autobuild_ file now.
-
-## Available targets
-
-Here are the available targets available from _autobuild_ scripts:
-
-- **clean** : clean build directory from object file and targets results.
-- **distclean** : delete build directory
-- **configure** : generate project Makefile from CMakeLists.txt files.
-- **build** : compile all project targets.
-- **package** : build and output a wgt package.
-
-You can specify variables that modify the behavior of compilation using
-the following variables:
-
-- **CONFIGURE_ARGS** : Variable used at **configure** time.
-- **BUILD_ARGS** : Variable used at **build** time.
-- **DEST** : Directory where to output ***wgt*** file.
-
-Variable as to be in CMake format. (ie: BUILD_ARGS="-DC_FLAGS='-g -O2'")
-
-Usage example:
-
-```bash
-./conf.d/autobuild/wgt/autobuild package DEST=/tmp
-```
diff --git a/conf.d/app-templates/docs/dev_guide/pictures/iotbzh_logo_small.png b/conf.d/app-templates/docs/dev_guide/pictures/iotbzh_logo_small.png
deleted file mode 100644
index 6a98c60..0000000
--- a/conf.d/app-templates/docs/dev_guide/pictures/iotbzh_logo_small.png
+++ /dev/null
Binary files differ
diff --git a/conf.d/app-templates/docs/resources/cover.svg b/conf.d/app-templates/docs/resources/cover.svg
deleted file mode 100644
index 6726de7..0000000
--- a/conf.d/app-templates/docs/resources/cover.svg
+++ /dev/null
@@ -1,210 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="1800"
- height="2360"
- viewBox="0 0 1800 2360"
- id="svg2"
- version="1.1"
- inkscape:version="0.91 r13725"
- sodipodi:docname="cover.svg">
- <defs
- id="defs4175">
- <filter
- style="color-interpolation-filters:sRGB"
- inkscape:label="Drop Shadow"
- id="filter4000">
- <feFlood
- result="flood"
- flood-color="rgb(0,0,0)"
- flood-opacity="0.475"
- id="feFlood4002" />
- <feComposite
- result="composite1"
- operator="in"
- in="flood"
- in2="SourceGraphic"
- id="feComposite4004" />
- <feGaussianBlur
- result="blur"
- stdDeviation="5"
- id="feGaussianBlur4006" />
- <feOffset
- result="offset"
- dy="8"
- dx="8"
- id="feOffset4008" />
- <feComposite
- result="composite2"
- operator="over"
- in="SourceGraphic"
- in2="offset"
- id="feComposite4010" />
- </filter>
- <filter
- style="color-interpolation-filters:sRGB"
- id="filter4000-6"
- inkscape:label="Drop Shadow">
- <feFlood
- id="feFlood4002-4"
- flood-opacity="0.475"
- flood-color="rgb(0,0,0)"
- result="flood" />
- <feComposite
- id="feComposite4004-6"
- in2="SourceGraphic"
- in="flood"
- operator="in"
- result="composite1" />
- <feGaussianBlur
- id="feGaussianBlur4006-2"
- stdDeviation="5"
- result="blur" />
- <feOffset
- id="feOffset4008-8"
- dx="8"
- dy="8"
- result="offset" />
- <feComposite
- id="feComposite4010-9"
- in2="offset"
- in="SourceGraphic"
- operator="over"
- result="composite2" />
- </filter>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="0.24748737"
- inkscape:cx="928.3577"
- inkscape:cy="404.58117"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- inkscape:snap-text-baseline="false"
- units="px"
- inkscape:window-width="1920"
- inkscape:window-height="1171"
- inkscape:window-x="1920"
- inkscape:window-y="0"
- inkscape:window-maximized="1"
- showguides="false" />
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(0,1307.6379)">
- <g
- id="iotbzh-logo"
- transform="matrix(2.3917866,0,0,2.3917866,216.6324,-1946.4393)"
- inkscape:export-filename="/home/sdx/Pictures/Logo/logo_iot_bzh_100dpi.png"
- inkscape:export-xdpi="100.22011"
- inkscape:export-ydpi="100.22011"
- style="display:inline;filter:url(#filter4000-6)">
- <text
- sodipodi:linespacing="125%"
- id="text3557-5-3-7-0-7-3"
- y="519.50671"
- x="27.886671"
- style="font-style:normal;font-weight:normal;font-size:97.09867096px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
- xml:space="preserve"><tspan
- style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:97.09867096px;line-height:125%;font-family:FreeEuro;-inkscape-font-specification:'FreeEuro Bold';text-align:start;writing-mode:lr-tb;text-anchor:start"
- y="519.50671"
- x="27.886671"
- id="tspan3559-5-4-1-5-0-6"
- sodipodi:role="line">IOT</tspan></text>
- <path
- inkscape:connector-curvature="0"
- d="m 286.73007,473.23356 c 28.21686,16.29102 28.75566,58.73779 0.99693,78.53831 -7.67688,5.47598 -8.77935,4.91028 -1.99529,-1.0238 17.47377,-15.28453 17.98492,-42.17775 1.08522,-57.09786 l -3.91266,-3.45435 0.72312,-3.71053 c 0.39771,-2.04076 0.5997,-5.73115 0.44885,-8.20083 -0.33876,-5.54623 0.15803,-6.49185 2.65383,-5.05094 z m -64.76568,11.40332 c 7.06047,-7.74198 18.64659,-14.16089 29.04027,-16.08874 l 6.87489,-1.27521 0.87404,2.89709 c 0.4807,1.59343 0.67439,5.2245 0.43037,8.06906 l -0.44364,5.17195 -6.13887,1.6918 c -10.91241,3.00731 -20.4022,10.85909 -25.4533,21.05979 l -2.41633,4.87984 -2.74281,-0.41238 c -5.14252,-0.77316 -12.72985,-3.97645 -12.79123,-5.40033 -0.092,-2.13451 8.34659,-15.74625 12.76661,-20.59287 z m 33.20546,36.39493 c -28.21687,16.29101 -65.24624,-4.46574 -68.51461,-38.40577 -0.9039,-9.38637 0.13723,-10.0583 1.88428,-1.21608 4.49989,22.77499 27.53453,36.66428 48.90556,29.48876 l 4.94788,-1.66128 2.85184,2.48149 c 1.56852,1.36481 4.66349,3.38493 6.87772,4.48914 4.97257,2.47973 5.54308,3.38282 3.04733,4.82374 z m 22.50729,-61.79039 c 3.17451,9.98553 2.94038,23.22889 -0.58688,33.19399 l -2.33309,6.59143 -2.94597,-0.69161 c -1.6203,-0.38041 -4.86173,-2.02821 -7.2032,-3.6618 l -4.25721,-2.97018 1.60429,-6.16234 c 2.85178,-10.95404 0.79685,-23.09833 -5.51167,-32.57307 l -3.01788,-4.53253 1.72854,-2.16916 c 3.24083,-4.06698 9.80863,-9.03614 11.07242,-8.37738 1.89457,0.98756 9.46336,15.1015 11.45065,21.35265 z m -48.80223,10.31437 c 0,-32.58201 36.49058,-54.27201 67.51771,-40.1325 8.58077,3.9104 8.6421,5.148 0.11108,2.23988 -21.97368,-7.49048 -45.51946,5.51348 -49.99082,27.6091 l -1.03521,5.11561 -3.57498,1.22902 c -1.96621,0.67596 -5.26316,2.34622 -7.32655,3.71171 -4.63379,3.06649 -5.70115,3.10904 -5.70115,0.22718 z m 42.25842,50.3871 c -10.23499,-2.24356 -21.58699,-9.06801 -28.45341,-17.10525 l -4.5418,-5.31622 2.07194,-2.20549 c 1.13957,-1.21302 4.18733,-3.19628 6.77282,-4.40726 l 4.70085,-2.20176 4.53458,4.47053 c 8.06061,7.94674 19.60535,12.23927 30.96496,11.51329 l 5.43422,-0.34731 1.01427,2.58154 c 1.90169,4.84014 2.92124,13.01261 1.71883,13.77769 -1.80254,1.14695 -17.80995,0.64475 -24.21726,-0.75976 z"
- style="display:inline;fill:#5a2ca0"
- id="path3415-4-2-2-5-0-3-7-4-4-1-5" />
- <text
- sodipodi:linespacing="125%"
- id="text3557-5-3-7-46-7-3-7"
- y="519.50671"
- x="317.95816"
- style="font-style:normal;font-weight:normal;font-size:97.09867096px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
- xml:space="preserve"><tspan
- style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:97.09867096px;line-height:125%;font-family:FreeEuro;-inkscape-font-specification:'FreeEuro Bold';text-align:start;writing-mode:lr-tb;text-anchor:start"
- y="519.50671"
- x="317.95816"
- id="tspan3559-5-4-1-90-0-2-9"
- sodipodi:role="line">BZH</tspan></text>
- </g>
- <flowRoot
- xml:space="preserve"
- id="root-title"
- transform="matrix(2.3469382,0,0,2.3469382,464.13874,-1200)"><flowRegion
- id="flowRegion4303"><rect
- id="rect4305"
- width="679.99994"
- height="141.42853"
- x="-154.28572"
- y="400"/>
- </flowRegion>
- <flowPara
- id="title"
- style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:87.5px;line-height:125%;font-family:Verdana;-inkscape-font-specification:'Verdana, Bold';text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1">{title}</flowPara></flowRoot> <flowRoot
- xml:space="preserve"
- id="root-subtitle"
- transform="matrix(1.8523279,0,0,1.8523279,553.97647,-380)"><flowRegion
- id="flowRegion4303-6"><rect
- id="rect4305-0"
- width="852.32806"
- height="154.51677"
- x="-239.3591"
- y="290"/>
- </flowRegion>
- <flowPara
- id="subtitle"
- style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:62.5px;line-height:125%;font-family:Verdana;-inkscape-font-specification:'Verdana, Bold';text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1">{subtitle}</flowPara>
- </flowRoot>
- <flowRoot
- id="root-version"
- xml:space="preserve"
- transform="translate(-2.0185547,164)"><flowRegion
- id="flowRegion4169"><rect
- y="501.68909"
- x="343.32947"
- height="99.591171"
- width="1117.3768"
- id="rect4171" /></flowRegion><flowPara
- style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:50px;line-height:125%;font-family:Verdana;-inkscape-font-specification:'Verdana, Bold';text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1"
- id="version">{version}</flowPara></flowRoot> <flowRoot
- transform="translate(-2.0185547,238)"
- xml:space="preserve"
- id="root-date"><flowRegion
- id="flowRegion4170"><rect
- id="rect4172"
- width="1117.3768"
- height="99.591171"
- x="343.32947"
- y="501.68909" /></flowRegion><flowPara
- id="date"
- style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:50px;line-height:125%;font-family:Verdana;-inkscape-font-specification:'Verdana, Bold';text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1">{date}</flowPara></flowRoot> </g>
-</svg>
diff --git a/conf.d/app-templates/docs/resources/ebook.css b/conf.d/app-templates/docs/resources/ebook.css
deleted file mode 100644
index 39f126c..0000000
--- a/conf.d/app-templates/docs/resources/ebook.css
+++ /dev/null
@@ -1,386 +0,0 @@
-/* IoT.Bzh theaming */
-
-h1 {
- color: #330066;
- border-bottom: 2px solid #330066;
-}
-
-h2 {
- color: #330066;
-}
-
-h3 {
- color: #330066;
-}
-
-h4 {
- color: #330066;
-}
-
-
-/* GENERAL ELEMENTS */
-
-/* clear both */
-
-.clear {
- clear: both;
-}
-
-.section> :last-child {
- margin-bottom: 0 !important;
-}
-
-.section> :first-child {
- margin-top: 0 !important;
-}
-
-
-/* SPECIAL ELEMENTS */
-
-
-/* page break always after element on pdf/print definition */
-
-div.pagebreak {
- page-break-after: always;
-}
-
-
-/* no page break inside element on pdf/print definition */
-
-div.nopb {
- page-break-inside: avoid !important;
- margin: 4px 0 4px 0;
-}
-
-
-/* note blocks */
-
-div.note {
- background: #FCF8E3 none repeat scroll 0% 0%;
- color: #8A6D3B;
- padding: 15px;
- margin-bottom: 10px;
- border-bottom: 5px solid #DDD;
- border-color: #FAEBCC;
- page-break-inside: avoid;
-}
-
-div.note p {
- padding-bottom: 0;
- margin-bottom: 0;
-}
-
-
-/* images, figures and captions */
-
-p img {
- /* center all images */
- display: block;
- margin: 0 auto;
- padding: 10px 0;
-}
-
-figure {
- margin: 1.0em 0px;
- padding: 10px 0;
- text-align: center;
- page-break-inside: avoid;
- display: block;
-}
-
-figure img {
- display: block;
- margin: 0 auto;
-}
-
-figcaption {
- clear: left;
- margin: 1.0em 0 0 0;
- text-align: center;
- font-style: italic;
- line-height: 1.5em;
- font-size: 80%;
- color: #666;
- display: block;
-}
-
-.page .section p img {
- margin-top: 10px;
-}
-
-
-/* ul, ol list margin fix */
-
-.page .section ol,
-.page .section ul {
- margin-bottom: 10px;
-}
-
-
-/* blockquotes */
-
-.page .section blockquote {
- margin: 0 0 0 5%;
- font-style: italic;
-}
-
-
-/* PAGE SPECIFIC */
-
-
-/* set summary page to right side of the paper */
-
-.page .toc h1 {
- page-break-before: right;
-}
-
-.page .section.toc {
- page-break-inside: always;
-}
-
-/* table headers */
-
-div#README\.md table {
- margin-top: 30px;
- font-size: 95%;
-}
-
-div#README\.md table thead {
- display: none;
-}
-
-
-
-/* CITATION AND IMAGES */
-
-
-/* math image styles */
-
-.page .section p img.svg,
-.page .section p img.png {
- margin-top: 0px;
- margin-bottom: -2px;
-}
-
-.page .section p img.math {
- vertical-align: middle;
- height: auto;
- width: auto;
- margin-top: -4px;
- max-height: 15px;
-}
-
-.page .section p img.math.line1 {
- margin-top: -7px;
- max-height: 19px;
-}
-
-.page .section p img.math.line2 {
- margin-top: -1px;
- max-height: 30px;
-}
-
-
-/* credits page */
-
-.page .section ul.pictures {
- margin-left: -30px;
-}
-
-.page .section ul.pictures li {
- list-style: outside none none;
-}
-
-.page .section ul.pictures li a {
- float: left;
-}
-
-.page .section ul.pictures li span {
- display: block;
- margin-left: 100px;
-}
-
-
-
-/* sub and super script */
-
-.page .section sub {
- font-size: 80%;
- margin-left: 1px;
-}
-
-
-/* citations and references */
-
-.page .section sup {
- margin-left: -1px;
- margin-right: 2px;
- font-size: 80%;
-}
-
-.page .section sup:before {
- content: " ";
-}
-
-.page .section ul.citations,
-.page .section ul.references {
- margin-left: -30px;
-}
-
-
-.page .section ul.citations li:nth-child(1) {
- margin-top: 20px;
- padding-top: 20px;
- border-top: 1px solid #BBB;
-}
-
-.page .section ul.citations li,
-.page .section ul.references li {
- list-style: outside none none;
-}
-
-.page .section ul.citations li {
- font-size: 80%;
-}
-
-.page .section ul.citations li>span:nth-child(1),
-.page .section ul.references li>span:nth-child(1) {
- display: block;
- float: left;
- text-align: left;
- width: 70px
-}
-
-.page .section ul.citations li>span:nth-child(1) {
- width: 50px
-}
-
-.page .section ul.references li div {
- margin-left: 70px;
-}
-
-.page .section ul.citations li div {
- margin-left: 50px;
-}
-
-.page .section a[href="#"],
-.page .section a[href="#"]:link,
-.page .section a[href="#"]:visited,
-.page .section a[href="#"]:hover,
-.page .section a[href="#"]:focus {
- text-decoration: none;
- color: inherit;
- cursor: text;
- font-style: italic;
-}
-
-
-/* self referential footnotes */
-
-.page .section div[type="selfref"] a[href="#"],
-.page .section div[type="selfref"] a[href="#"]:link,
-.page .section div[type="selfref"] a[href="#"]:visited,
-.page .section div[type="selfref"] a[href="#"]:hover,
-.page .section div[type="selfref"] a[href="#"]:focus {
- font-style: normal;
-}
-
-.page .section div[type="selfref"] span:nth-child(1) {
- display: none;
-}
-
-
-/* page break always after element on pdf/print definition */
-
-div.page-break {
- page-break-inside: always;
-}
-
-div.page-break:before {
- content: ' ';
-}
-
-
-/* no page break inside element on pdf/print definition */
-
-div.nopb {
- page-break-inside: avoid;
-}
-
-/* justify text */
-p {
- text-align: justify;
-}
-
-/* page header and footer */
-
-.pdf-footer,
-.pdf-header {
- margin-top: 20px;
- color: #aaa;
-}
-
-.pdf-header .header-left {
- float: left;
- margin-left: 2em;
- margin-right: auto;
-}
-
-.pdf-header .header-right {
- display: table;
- margin-left: auto;
- margin-right: 2em;
-}
-
-.pdf-footer .sub {
- padding-top: 8px;
- font-size: 70%;
-}
-
-.pdf-header .sub {
- padding-top: 2px;
- font-size: 70%;
-}
-
-.pdf-footer {
- padding-top: 10px;
- border-top: 1px solid #eee;
-}
-
-.pdf-footer .footer-left {
- float: left;
- margin-left: 2em;
- margin-right: auto;
-}
-
-.pdf-footer .footer-center {
- display: table;
- margin-left: auto;
- margin-right: auto;
-}
-
-.pdf-footer .footer-right {
- float: right;
- margin-left: auto;
- margin-right: 2em;
-}
-
-.pdf-header {
- padding-bottom: 10px;
- border-bottom: 1px solid #eee;
-}
-
-.pdf-header .header-pages-count {
- float: right;
- text-align: right;
-}
-
-.pdf-header .header-pages-count a,
-.pdf-header .header-pages-count a:visited,
-.pdf-header .header-pages-count a:active,
-.pdf-header .header-pages-count a:focus,
-.pdf-header .header-pages-count a:link {
- text-decoration: none;
- color: #aaa;
- cursor: text;
-}
diff --git a/conf.d/app-templates/docs/resources/make_cover.sh b/conf.d/app-templates/docs/resources/make_cover.sh
deleted file mode 100755
index 1026ecb..0000000
--- a/conf.d/app-templates/docs/resources/make_cover.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/bin/bash
-DOCS_DIR=$(cd $(dirname $0)/.. && pwd)
-BOOKFILE=$DOCS_DIR/../book.json
-
-TITLE=$(grep '"title":' $BOOKFILE | cut -d'"' -f 4)
-SUBTITLE=$(grep '"subtitle":' $BOOKFILE | cut -d'"' -f 4)
-VERSION="Version $(grep '"version":' $BOOKFILE | cut -d'"' -f 4)"
-DATE=$(grep '"published":' $BOOKFILE | cut -d'"' -f 4)
-
-[ -z "$TITLE" ] && { echo "Error TITLE not set!" ; exit 1; }
-[ -z "$VERSION" ] && { echo "Error VERSION not set!" ; exit 1; }
-[ -z "$DATE" ] && { echo "Error DATE not set!" ; exit 1; }
-
-
-cat $(dirname $0)/cover.svg | sed -e "s/{title}/$TITLE/g" \
- -e "s/font-size:87.5px/font-size:54px/g" \
- -e "s/{subtitle}/$SUBTITLE/g" \
- -e "s/font-size:62.5px/font-size:40px/g" \
- -e "s/{version}/$VERSION/g" \
- -e "s/{date}/$DATE/g" \
- > /tmp/cover.svg
-
-# use imagemagick convert tool (cover size must be 1800x2360)
-convert -resize "1600x2160!" -border 100 -bordercolor white -background white \
- -flatten -quality 100 /tmp/cover.svg $DOCS_DIR/cover.jpg
-
-convert -resize "200x262!" $DOCS_DIR/cover.jpg $DOCS_DIR/cover_small.jpg
diff --git a/conf.d/app-templates/gendocs.sh b/conf.d/app-templates/gendocs.sh
deleted file mode 100755
index ea9400a..0000000
--- a/conf.d/app-templates/gendocs.sh
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/bin/bash
-
-OUTFILENAME="Gitbook-Iotbzh-template"
-
-SCRIPT=$(basename $BASH_SOURCE)
-
-function usage() {
- cat <<EOF >&2
-Usage: $SCRIPT [options] [pdf|serve|doxygen]
-
-Options:
- --debug
- enable debug when generating pdf or html documentation
- -d|--dry
- dry run
- -h|--help
- get this help
-
-Example:
- $SCRIPT pdf
-
-EOF
- exit 1
-}
-
-function info() {
- echo "$@" >&2
-}
-
-#default values
-DEBUG_FLAG=""
-DRY=""
-DO_ACTION=""
-OUT_DIR=./build
-
-[[ $? != 0 ]] && usage
-while [ $# -gt 0 ]; do
- case "$1" in
- --debug) DEBUG_FLAG="--log=debug --debug";;
- -d|--dry) DRY=echo;;
- -h|--help) usage;;
- pdf | serve | doxygen) DO_ACTION=$1;;
- --) break;;
- esac
- shift
-done
-
-cd $(dirname $0)
-ROOTDIR=`pwd -P`
-
-# Create out dir if needed
-[ -d $OUT_DIR ] || mkdir -p $OUT_DIR
-
-if [ "$DO_ACTION" = "pdf" -o "$DO_ACTION" = "serve" ]; then
- GITBOOK=`which gitbook`
- [ "$?" = "1" ] && { echo "You must install gitbook first, using: sudo npm install -g gitbook-cli"; exit 1; }
-
- EBCONV=`which ebook-convert`
- [ "$?" = "1" ] && { echo "You must install calibre first, using: 'sudo apt install calibre' or refer to https://calibre-ebook.com/download"; exit 1; }
-
- if [ "$DO_ACTION" = "pdf" ]; then
-
- # Update cover when book.json has been changed
- [[ $ROOTDIR/book.json -nt $ROOTDIR/docs/cover.jpg ]] && { echo "Update cover files"; $ROOTDIR/docs/resources/make_cover.sh || exit 1; }
-
- OUTFILE=$OUT_DIR/$OUTFILENAME.pdf
- $DRY $GITBOOK pdf $ROOTDIR $OUTFILE $DEBUG_FLAG
- [ "$?" = "0" ] && echo "PDF has been successfully generated in $OUTFILE"
- else
- $DRY $GITBOOK serve $DEBUG_FLAG
- fi
-
-elif [ "$DO_ACTION" = "doxygen" ]; then
- $DRY cd $OUT_DIR && cmake .. && make doxygen $ROOTDIR/Doxyfile
-
-else
- echo "Unknown action !"
- usage
-fi
diff --git a/conf.d/app-templates/samples.d/config.cmake.sample b/conf.d/app-templates/samples.d/config.cmake.sample
deleted file mode 100644
index 393c893..0000000
--- a/conf.d/app-templates/samples.d/config.cmake.sample
+++ /dev/null
@@ -1,203 +0,0 @@
-###########################################################################
-# Copyright 2015, 2016, 2017 IoT.bzh
-#
-# author: Fulup Ar Foll <fulup@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.
-###########################################################################
-
-# Project Info
-# ------------------
-set(PROJECT_NAME example)
-set(PROJECT_VERSION "0.0")
-set(PROJECT_PRETTY_NAME "Example")
-set(PROJECT_DESCRIPTION "AGL application example")
-set(PROJECT_URL "https://gerrit.automotivelinux.org/gerrit/apps/app-templates")
-set(PROJECT_ICON "icon.png")
-set(PROJECT_AUTHOR "Last Name, First Name")
-set(PROJECT_AUTHOR_MAIL "example.man@bigouden.bzh")
-set(PROJECT_LICENSE "APL2.0")
-set(PROJECT_LANGUAGES,"C")
-
-# Where are stored default templates files from submodule or subtree app-templates in your project tree
-# relative to the root project directory
-set(PROJECT_APP_TEMPLATES_DIR "conf.d/app-templates")
-
-# Where are stored your external libraries for your project. This is 3rd party library that you don't maintain
-# but used and must be built and linked.
-# set(PROJECT_LIBDIR "libs")
-
-# Where are stored data for your application. Pictures, static resources must be placed in that folder.
-# set(PROJECT_RESOURCES "data")
-
-# Which directories inspect to find CMakeLists.txt target files
-# set(PROJECT_SRC_DIR_PATTERN "*")
-
-# Compilation Mode (DEBUG, RELEASE)
-# ----------------------------------
-set(CMAKE_BUILD_TYPE "DEBUG")
-
-# Kernel selection if needed. You can choose between a
-# mandatory version to impose a minimal version.
-# Or check Kernel minimal version and just print a Warning
-# about missing features and define a preprocessor variable
-# to be used as preprocessor condition in code to disable
-# incompatibles features. Preprocessor define is named
-# KERNEL_MINIMAL_VERSION_OK.
-#
-# NOTE*** FOR NOW IT CHECKS KERNEL Yocto environment and
-# Yocto SDK Kernel version.
-# -----------------------------------------------
-#set (kernel_mandatory_version 4.8)
-#set (kernel_minimal_version 4.8)
-
-# Compiler selection if needed. Impose a minimal version.
-# -----------------------------------------------
-set (gcc_minimal_version 4.9)
-
-# PKG_CONFIG required packages
-# -----------------------------
-set (PKG_REQUIRED_LIST
- json-c
- libsystemd>=222
- afb-daemon
- libmicrohttpd>=0.9.55
-)
-
-# Customize link option
-# -----------------------------
-#list(APPEND link_libraries -an-option)
-
-# Compilation options definition
-# Use CMake generator expressions to specify only for a specific language
-# Values are prefilled with default options that is currently used.
-# Either separate options with ";", or each options must be quoted separately
-# DO NOT PUT ALL OPTION QUOTED AT ONCE , COMPILATION COULD FAILED !
-# ----------------------------------------------------------------------------
-#set(COMPILE_OPTIONS
-# -Wall
-# -Wextra
-# -Wconversion
-# -Wno-unused-parameter
-# -Wno-sign-compare
-# -Wno-sign-conversion
-# -Werror=maybe-uninitialized
-# -Werror=implicit-function-declaration
-# -ffunction-sections
-# -fdata-sections
-# -fPIC
-# CACHE STRING "Compilation flags")
-#set(C_COMPILE_OPTIONS "" CACHE STRING "Compilation flags for C language.")
-#set(CXX_COMPILE_OPTIONS "" CACHE STRING "Compilation flags for C++ language.")
-#set(PROFILING_COMPILE_OPTIONS
-# -g
-# -O0
-# -pg
-# -Wp,-U_FORTIFY_SOURCE
-# CACHE STRING "Compilation flags for PROFILING build type.")
-#set(DEBUG_COMPILE_OPTIONS
-# -g
-# -ggdb
-# -Wp,-U_FORTIFY_SOURCE
-# CACHE STRING "Compilation flags for DEBUG build type.")
-#set(CCOV_COMPILE_OPTIONS
-# -g
-# -O2
-# --coverage
-# CACHE STRING "Compilation flags for CCOV build type.")
-#set(RELEASE_COMPILE_OPTIONS
-# -g
-# -O2
-# CACHE STRING "Compilation flags for RELEASE build type.")
-
-# Print a helper message when every thing is finished
-# ----------------------------------------------------
-#set(CLOSING_MESSAGE "")
-#set(PACKAGE_MESSAGE "Install widget file using in the target : afm-util install ${PROJECT_NAME}.wgt")
-
-# Prefix path where will be installed the files
-# Default: /usr/local (need root permission to write in)
-# ------------------------------------------------------
-#set(CMAKE_INSTALL_PREFIX $ENV{HOME}/opt)
-
-# (BUG!!!) as PKG_CONFIG_PATH does not work [should be an env variable]
-# ---------------------------------------------------------------------
-set(CMAKE_PREFIX_PATH ${CMAKE_INSTALL_PREFIX}/lib64/pkgconfig ${CMAKE_INSTALL_PREFIX}/lib/pkgconfig)
-set(LD_LIBRARY_PATH ${CMAKE_INSTALL_PREFIX}/lib64 ${CMAKE_INSTALL_PREFIX}/lib)
-
-# Optional location for config.xml.in
-# -----------------------------------
-#set(WIDGET_ICON conf.d/wgt/${PROJECT_ICON} CACHE PATH "Path to the widget icon")
-#set(WIDGET_CONFIG_TEMPLATE ${CMAKE_CURRENT_SOURCE_DIR}/conf.d/wgt/config.xml.in CACHE PATH "Path to widget config file template (config.xml.in)")
-
-# Mandatory widget Mimetype specification of the main unit
-# --------------------------------------------------------------------------
-# Choose between :
-#- text/html : HTML application,
-# content.src designates the home page of the application
-#
-#- application/vnd.agl.native : AGL compatible native,
-# content.src designates the relative path of the binary.
-#
-# - application/vnd.agl.service: AGL service, content.src is not used.
-#
-#- ***application/x-executable***: Native application,
-# content.src designates the relative path of the binary.
-# For such application, only security setup is made.
-#
-set(WIDGET_TYPE MimeType_Not_Set)
-
-# Mandatory Widget entry point file of the main unit
-# --------------------------------------------------------------
-# This is the file that will be executed, loaded,
-# at launch time by the application framework.
-#
-set(WIDGET_ENTRY_POINT EntryPoint_Path_Not_Set)
-
-# Optional dependencies order
-# ---------------------------
-#set(EXTRA_DEPENDENCIES_ORDER)
-
-# Optional Extra global include path
-# -----------------------------------
-#set(EXTRA_INCLUDE_DIRS)
-
-# Optional extra libraries
-# -------------------------
-#set(EXTRA_LINK_LIBRARIES)
-
-# Optional force binding Linking flag
-# ------------------------------------
-# set(BINDINGS_LINK_FLAG LinkOptions )
-
-# Optional force package prefix generation, like widget
-# -----------------------------------------------------
-# set(PKG_PREFIX DestinationPath)
-
-# Optional Application Framework security token
-# and port use for remote debugging.
-#------------------------------------------------------------
-#set(AFB_TOKEN "" CACHE PATH "Default AFB_TOKEN")
-#set(AFB_REMPORT "1234" CACHE PATH "Default AFB_TOKEN")
-
-# Optional schema validator about now only XML, LUA and JSON
-# are supported
-#------------------------------------------------------------
-#set(LUA_CHECKER "luac -o /dev/null" CACHE STRING "LUA compiler")
-#set(XML_CHECKER "xmllint" CACHE STRING "XML linter")
-#set(JSON_CHECKER "json_verify" CACHE STRING "JSON linter")
-
-# This include is mandatory and MUST happens at the end
-# of this file, else you expose you to unexpected behavior
-# -----------------------------------------------------------
-include(${PROJECT_APP_TEMPLATES_DIR}/cmake/common.cmake)
diff --git a/conf.d/app-templates/samples.d/config.xml.in.sample b/conf.d/app-templates/samples.d/config.xml.in.sample
deleted file mode 100644
index b93f3d9..0000000
--- a/conf.d/app-templates/samples.d/config.xml.in.sample
+++ /dev/null
@@ -1,142 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" id="@PROJECT_NAME@" version="@PROJECT_VERSION@">
- <name>@PROJECT_NAME@</name>
- <icon src="@PROJECT_ICON@"/>
- <content src="@WIDGET_ENTRY_POINT@" type="@WIDGET_TYPE@"/>
- <description>@PROJECT_DESCRIPTION@</description>
- <author>@PROJECT_AUTHOR@ &lt;@PROJECT_AUTHOR_MAIL@&gt;</author>
- <license>@PROJECT_LICENSE@</license>
-
-<!-- Feature : required-api ------------------------------------------------------
-#### param name="#target" OPTIONAL
-
-Declares the name of the unit requiring the listed apis.
-Only one instance of the param "#target" is allowed.
-When there is not instance of this param, it behave as if
-the target main was specified.
-
-#### param name=[required api name]
-
-The name is the name of the required API.
-The value describes how to connect to the required api.
-It is either:
-
- - local: The binding is a local shared object.
- In that case, the name is the relative path of the
- shared object to be loaded.
- - auto: The framework set automatically the kind of
- the connection to the API
- - ws: The framework connect using internal websockets
- - dbus: The framework connect using internal dbus
- - link: The framework connect in memory by dinamically linking
-
-Example:
- <feature name="urn:AGL:widget:required-api">
- <param name="#target" value="low-can" />
- <param name="<a-required-api>" value="auto" />
- <param name="<another-required-api>" value="auto" />
- </feature>
---------------------------------------------------------------------------------->
-
-<!-- Feature : required-permission ------------------------------------------
-
-List of the permissions required by the unit.
-Each required permission must be explicited using a <param> entry.
-
-#### param name="#target" OPTIONAL
-
-Declares the name of the unit requiring the listed permissions.
-Only one instance of the param "#target" is allowed.
-When there is not instance of this param, it behave as if
-the target main was specified.
-
-#### param name=[required permission name]
-
-The value is either:
-- required: the permission is mandatorily needed except if the feature
-isn't required (required="false") and in that case it is optional.
-- optional: the permission is optional
-
-Example:
-<feature name="urn:AGL:widget:required-permission">
- <param name="#target" value="geoloc" />
- <param name="urn:AGL:permission:real-time" value="required" />
- <param name="urn:AGL:permission:syscall:*" value="required" />
-</feature>
---------------------------------------------------------------------------------->
-
-<!-- Feature : provided-unit -------------------------------------------------
-This feature is made for declaring new units
-for the widget. Using this feature, a software publisher
-can provide more than one application in the same widget.
-
-#### param name="#target" REQUIRED
-
-Declares the name of the unit. The default unit, the unit
-of the main of the widget, has the name "main". The value
-given here must be unique within the widget file. It will
-be used in other places of the widget config.xml file to
-designate the unit.
-
-Only one instance of the param "#target" is allowed.
-The value can't be "main".
-
-#### param name="content.type" REQUIRED
-
-The mimetype of the provided unit.
-
-#### param name="content.src"
-
-A path to the file (subject to localisation), this is the entry point
-to that unit.
-
-#### other parameters
-
-The items that can be set for the main unit
-can also be set using the params if needed.
-
- - description
- - name.content
- - name.short
- - ...
-
-Example:
-<feature name="urn:AGL:widget:provided-unit">
- <param name="#target" value="geoloc" />
- <param name="description" value="binding of name geoloc" />
- <param name="content.src" value="index.html" />
- <param name="content.type" value="application/vnd.agl.service" />
-</feature>
---------------------------------------------------------------------------------->
-
-<!-- Feature: provided-api ---------------------------------------------------
-Use this feature for exporting one or more API of a unit
-to other widgets of the platform.
-
-This feature is an important feature of the framework.
-
-#### param name="#target" OPTIONAL
-
-Declares the name of the unit exporting the listed apis.
-Only one instance of the param "#target" is allowed.
-When there is not instance of this param, it behave as if
-the target main was specified.
-
-#### param name=[name of exported api]
-
-The name give the name of the api that is exported.
-
-The value is one of the following values:
-
-- ws: export the api using UNIX websocket
-- dbus: export the API using dbus
-- auto: export the api using the default method(s).
-
-Example:
-<feature name="urn:AGL:widget:provided-api">
- <param name="#target" value="geoloc" />
- <param name="geoloc" value="auto" />
- <param name="moonloc" value="auto" />
-</feature>
---------------------------------------------------------------------------------->
-</widget>
diff --git a/conf.d/app-templates/samples.d/xds-config.env.sample b/conf.d/app-templates/samples.d/xds-config.env.sample
deleted file mode 100644
index a4c51b1..0000000
--- a/conf.d/app-templates/samples.d/xds-config.env.sample
+++ /dev/null
@@ -1,10 +0,0 @@
-XDS_PROJECT_ID=W2EAQBA-HQI75XA_unicens2-binding
-XDS_SDK_ID=poky-agl_aarch64_3.99.1+snapshot
-XDS_SERVER_URL=localhost:8000
-
-DOCKER_TARGET=docker-sdk
-
-RSYNC_TARGET=root@192.168.168.11
-RSYNC_PREFIX=./opt
-PROJECT_DIR=/home/seb/tmp/unicens2-binding
-
diff --git a/conf.d/app-templates/template.d/autobuild/agl/autobuild.in b/conf.d/app-templates/template.d/autobuild/agl/autobuild.in
deleted file mode 100755
index 4811441..0000000
--- a/conf.d/app-templates/template.d/autobuild/agl/autobuild.in
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/usr/bin/make -f
-# Copyright (C) 2015, 2016 "IoT.bzh"
-# 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))
-BUILD_DIR := $(abspath $(dir $(THISFILE)/../../../../..)/build)
-DEST := ${BUILD_DIR}/target
-
-.PHONY: all clean distclean configure build package help update
-
-all: help
-
-help:
- @echo "List of targets available:"
- @echo ""
- @echo "- all"
- @echo "- clean"
- @echo "- distclean"
- @echo "- configure"
- @echo "- build"
- @echo "- package"
- @echo ""
- @echo "Usage: ./conf.d/autobuild/agl/autobuild package DEST=${HOME}/opt"
- @echo "Don't use your build dir as DEST as wgt file is generated at this location"
-
-update: configure
- @cmake --build ${BUILD_DIR} --target autobuild
-
-clean:
- @([ -d ${BUILD_DIR} ] && make -C ${BUILD_DIR} clean) || echo Nothing to clean
-
-distclean:
- @rm -rf ${BUILD_DIR}
-
-configure: ${BUILD_DIR}/Makefile
-
-build: configure
- @cmake --build ${BUILD_DIR} ${BUILD_ARGS} --target all
-
-package: build
- @mkdir -p ${BUILD_DIR}/$@/bin
- @mkdir -p ${BUILD_DIR}/$@/etc
- @mkdir -p ${BUILD_DIR}/$@/lib
- @mkdir -p ${BUILD_DIR}/$@/htdocs
- @mkdir -p ${BUILD_DIR}/$@/data
- @cmake --build ${BUILD_DIR} --target widget
- @mkdir -p ${DEST} && cp ${BUILD_DIR}/*wgt ${DEST}
-
-${BUILD_DIR}/Makefile:
- @[ -d ${BUILD_DIR} ] || mkdir -p ${BUILD_DIR}
- @[ -f ${BUILD_DIR}/Makefile ] || (cd ${BUILD_DIR} && cmake ${CONFIGURE_ARGS} ..)
diff --git a/conf.d/app-templates/template.d/autobuild/linux/autobuild.in b/conf.d/app-templates/template.d/autobuild/linux/autobuild.in
deleted file mode 100755
index 0b6f06c..0000000
--- a/conf.d/app-templates/template.d/autobuild/linux/autobuild.in
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/usr/bin/make -f
-# Copyright (C) 2015, 2016 "IoT.bzh"
-# 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))
-BUILD_DIR := $(abspath $(dir $(THISFILE)/../../../../..)/build)
-DEST := ${BUILD_DIR}/target
-
-.PHONY: all clean distclean configure build package help update
-
-all: help
-
-help:
- @echo "List of targets available:"
- @echo ""
- @echo "- all"
- @echo "- clean"
- @echo "- distclean"
- @echo "- configure"
- @echo "- build"
- @echo "- package"
- @echo ""
- @echo "Usage: ./conf.d/autobuild/agl/autobuild package DEST=${HOME}/opt"
- @echo "Don't use your build dir as DEST as wgt file is generated at this location"
-
-update: configure
- @cmake --build ${BUILD_DIR} --target autobuild
-
-clean:
- @([ -d ${BUILD_DIR} ] && make -C ${BUILD_DIR} clean) || echo Nothing to clean
-
-distclean:
- @rm -rf ${BUILD_DIR}
-
-configure: ${BUILD_DIR}/Makefile
-
-build: configure
- @cmake --build ${BUILD_DIR} ${BUILD_ARGS} --target all
-
-package: build
- @mkdir -p ${BUILD_DIR}/$@/bin
- @mkdir -p ${BUILD_DIR}/$@/etc
- @mkdir -p ${BUILD_DIR}/$@/lib
- @mkdir -p ${BUILD_DIR}/$@/htdocs
- @mkdir -p ${BUILD_DIR}/$@/data
- @cmake --build ${BUILD_DIR} --target packaging
- @cmake --build ${BUILD_DIR} --target widget
- @mkdir -p ${DEST} && cp ${BUILD_DIR}/*wgt ${DEST}
-
-
-${BUILD_DIR}/Makefile:
- @[ -d ${BUILD_DIR} ] || mkdir -p ${BUILD_DIR}
- @[ -f ${BUILD_DIR}/Makefile ] || (cd ${BUILD_DIR} && cmake ${CONFIGURE_ARGS} ..)
diff --git a/conf.d/app-templates/template.d/config.xml.in b/conf.d/app-templates/template.d/config.xml.in
deleted file mode 100644
index 35d20b8..0000000
--- a/conf.d/app-templates/template.d/config.xml.in
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets" id="@PROJECT_NAME@" version="@PROJECT_VERSION@">
- <name>@PROJECT_NAME@</name>
- <icon src="@PROJECT_ICON@"/>
- <content src="@WIDGET_ENTRY_POINT@" type="@WIDGET_TYPE@"/>
- <description>@PROJECT_DESCRIPTION@</description>
- <author>@PROJECT_AUTHOR@ &lt;@PROJECT_AUTHOR_MAIL@&gt;</author>
- <license>@PROJECT_LICENSE@</license>
-</widget>
diff --git a/conf.d/app-templates/template.d/deb-config.dsc.in b/conf.d/app-templates/template.d/deb-config.dsc.in
deleted file mode 100644
index 28a4835..0000000
--- a/conf.d/app-templates/template.d/deb-config.dsc.in
+++ /dev/null
@@ -1,15 +0,0 @@
-Format: @PROJECT_VERSION@
-Source: @NPKG_PROJECT_NAME@
-Binary: @NPKG_PROJECT_NAME@-bin
-Architecture: any
-Version: 2.0-0
-Maintainer: @PROJECT_AUTHOR@ <@PROJECT_AUTHOR_MAIL@>
-Standards-Version: 3.8.2
-Homepage: @PROJECT_URL@
-Build-Depends: debhelper (>= 5),
- pkg-config,
- cmake,
- gcc,
- g++,
-@DEB_PKG_DEPS@
-Debtransform-Tar: @NPKG_PROJECT_NAME@_@PROJECT_VERSION@.orig.tar.gz
diff --git a/conf.d/app-templates/template.d/deb-config.install.in b/conf.d/app-templates/template.d/deb-config.install.in
deleted file mode 100644
index 5858efd..0000000
--- a/conf.d/app-templates/template.d/deb-config.install.in
+++ /dev/null
@@ -1,2 +0,0 @@
-/opt/AGL/*
-/etc/profile.d/*
diff --git a/conf.d/app-templates/template.d/debian.changelog.in b/conf.d/app-templates/template.d/debian.changelog.in
deleted file mode 100644
index f72c717..0000000
--- a/conf.d/app-templates/template.d/debian.changelog.in
+++ /dev/null
@@ -1,5 +0,0 @@
-@NPKG_PROJECT_NAME@ (@PROJECT_VERSION@-0) UNRELEASED; urgency=low
-
- * init build
-
- -- @PROJECT_AUTHOR@ <@PROJECT_AUTHOR_MAIL@> Mon, 25 Dec 2007 10:50:38 +0100
diff --git a/conf.d/app-templates/template.d/debian.compat.in b/conf.d/app-templates/template.d/debian.compat.in
deleted file mode 100644
index 45a4fb7..0000000
--- a/conf.d/app-templates/template.d/debian.compat.in
+++ /dev/null
@@ -1 +0,0 @@
-8
diff --git a/conf.d/app-templates/template.d/debian.control.in b/conf.d/app-templates/template.d/debian.control.in
deleted file mode 100644
index ea4ad8a..0000000
--- a/conf.d/app-templates/template.d/debian.control.in
+++ /dev/null
@@ -1,16 +0,0 @@
-Priority: optional
-Maintainer: @PROJECT_AUTHOR@ <@PROJECT_AUTHOR_MAIL@>
-Source: @NPKG_PROJECT_NAME@
-Build-Depends: debhelper (>= 5),
- pkg-config,
- cmake,
- gcc,
- g++,
-@DEB_PKG_DEPS@
-Standards-Version: 3.8.2
-Homepage: @PROJECT_URL@
-
-Package: @NPKG_PROJECT_NAME@
-Section: libs
-Architecture: any
-Description: @PROJECT_DESCRIPTION@
diff --git a/conf.d/app-templates/template.d/debian.rules.in b/conf.d/app-templates/template.d/debian.rules.in
deleted file mode 100644
index 6bb2825..0000000
--- a/conf.d/app-templates/template.d/debian.rules.in
+++ /dev/null
@@ -1,87 +0,0 @@
-#!/usr/bin/make -f
-# -*- makefile -*-
-# Uncomment this to turn on verbose mode.
-export DH_VERBOSE=1
-
-# These are used for cross-compiling and for saving the configure script
-# from having to guess our platform (since we know it already)
-DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
-DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
-
-
-CFLAGS = -Wall -g
-
-ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
- CFLAGS += -O0
-else
- CFLAGS += -O2
-endif
-ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
- INSTALL_PROGRAM += -s
-endif
-
-configure: configure-stamp
-configure-stamp:
- dh_testdir
- #
- touch configure-stamp
-
-build: build-stamp
-build-stamp: configure-stamp
- dh_testdir
- mkdir -p build
- cd build;cmake ../ -DCMAKE_INSTALL_PREFIX:PATH=/opt/AGL/@PROJECT_NAME@ -DCMAKE_INSTALL_LIBDIR:PATH=lib/$(DEB_HOST_MULTIARCH);$(MAKE)
- #
- touch build-stamp
-
-clean:
- #dh_testdir
- dh_testroot
- rm -f configure-stamp build-stamp
- [ ! -f Makefile ] || $(MAKE) distclean
- #dh_clean
-
-install: build
- dh_testdir
- dh_testroot
- dh_prep
- dh_installdirs
- # Add here commands to install the package into debian/tmp
- mkdir -p debian/tmp/opt/AGL/@PROJECT_NAME@;cd build;make populate;cp -r package/* ../debian/tmp/opt/AGL/@PROJECT_NAME@/
- mkdir -p debian/tmp/etc/profile.d
- echo '#---------- AGL @PROJECT_NAME@ options Start ---------" ' > debian/tmp/etc/profile.d/AGL_@PROJECT_NAME@.sh
- echo '# Object: AGL cmake option for binder/bindings' >> debian/tmp/etc/profile.d/AGL_@PROJECT_NAME@.sh
- echo 'export LD_LIBRARY_PATH=/opt/AGL/@PROJECT_NAME@/lib/$(DEB_HOST_MULTIARCH):$$LD_LIBRARY_PATH' >> debian/tmp/etc/profile.d/AGL_@PROJECT_NAME@.sh
- echo 'export LIBRARY_PATH=/opt/AGL/@PROJECT_NAME@/lib/$(DEB_HOST_MULTIARCH):$$LIBRARY_PATH' >> debian/tmp/etc/profile.d/AGL_@PROJECT_NAME@.sh
- echo 'export PATH=/opt/AGL/@PROJECT_NAME@/bin:$$PATH' >> debian/tmp/etc/profile.d/AGL_@PROJECT_NAME@.sh
- echo '#---------- AGL options End ---------' >> debian/tmp/etc/profile.d/AGL_@PROJECT_NAME@.sh
- # Move all files in their corresponding package
- dh_install --list-missing -s --sourcedir=debian/tmp
- # empty dependency_libs in .la files
- #sed -i "/dependency_libs/ s/'.*'/''/" `find debian/ -name '*.la'`
-
-# Build architecture-independent files here.
-binary-indep: build install
-# We have nothing to do by default.
-
-# Build architecture-dependent files here.
-binary-arch: build install
- dh_testdir
- dh_testroot
- dh_installchangelogs
- dh_installdocs
- dh_installexamples
- dh_installman
- dh_link
- dh_strip
- dh_compress
- dh_fixperms
- dh_makeshlibs -V
- dh_installdeb
- dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info
- dh_gencontrol
- dh_md5sums
- dh_builddeb
-
-binary: binary-indep binary-arch
-.PHONY: build clean binary-indep binary-arch binary install
diff --git a/conf.d/app-templates/template.d/gdb-native-target.ini.in b/conf.d/app-templates/template.d/gdb-native-target.ini.in
deleted file mode 100644
index 1ba6bdb..0000000
--- a/conf.d/app-templates/template.d/gdb-native-target.ini.in
+++ /dev/null
@@ -1,35 +0,0 @@
-# gdb-remote.init file for IDE
-# Object: allow to use standard gdb to remote debug a target
-# Usage: remote-target-populate update script under ./build directory
-# Author: Fulup Ar Foll (IoT.bzh)
-# Reference: https://blog.flameeyes.eu/2010/02/remote-debugging-with-gdb-part-2-gdb/
-#
-# Warning: In remote native mode netbeans impose debug-command to point on a local instance of afb-daemon binary
-
-# Fulup Hoops: --ldpath should be absolute as solib-search-path refuse to work as documented
-
-# Start gdbserver on target and connect through SSH link WARNING:
-target remote | ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null @RSYNC_TARGET@ gdbserver - afb-daemon --port=@AFB_REMPORT@ --workdir=$HOME/@RSYNC_PREFIX@/@PROJECT_NAME@ --roothttp=htdocs --ldpaths=$HOME/@RSYNC_PREFIX@/@PROJECT_NAME@/lib --verbose --token=@AFB_TOKEN@
-
-# Disable auto answer no on questions and to set breakpoint
-set confirm off
-
-# Disable auto load of libraries to improved perf
-set auto-solib-add off
-
-# Define path for project libraries
-set solib-search-path ${PROJECT_PKG_BUILD_DIR}
-
-# Replace run by continue (gdb use 'run' when gdbserver wants 'continue')
-define run
-continue
-end
-
-# Manually load project libraries when loaded by afb-daemon
-tbreak @GDB_INITIAL_BREAK@
-commands
-sharedlibrary @RSYNC_PREFIX@/@PROJECT_NAME@
-continue
-end
-
-
diff --git a/conf.d/app-templates/template.d/install-wgt-on-target.sh.in b/conf.d/app-templates/template.d/install-wgt-on-target.sh.in
deleted file mode 100755
index 39a69d5..0000000
--- a/conf.d/app-templates/template.d/install-wgt-on-target.sh.in
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/sh
-#
-# File: install-wgt-on-target.sh
-# Author: Sebastien Douheret @ IoT.bzh
-# Object: install widget on target
-# Created on 24-May-2017, 09:23:37
-# Usage:
-
-# Do not change manually use 'make remote-target-populate'
-export RSYNC_TARGET=@RSYNC_TARGET@
-export WGT_FILE_L=@CMAKE_CURRENT_BINARY_DIR@/@PROJECT_NAME@.wgt
-export WGT_FILE_T=/tmp/@PROJECT_NAME@.wgt
-
-scp $WGT_FILE_L $RSYNC_TARGET:$WGT_FILE_T \
- && ssh -o "StrictHostKeyChecking no" -tt $RSYNC_TARGET -- \
- afm-util install $WGT_FILE_T
-
-# && rm -f $WGT_FILE_T
-
diff --git a/conf.d/app-templates/template.d/rpm-config.spec.in b/conf.d/app-templates/template.d/rpm-config.spec.in
deleted file mode 100644
index 34a605d..0000000
--- a/conf.d/app-templates/template.d/rpm-config.spec.in
+++ /dev/null
@@ -1,62 +0,0 @@
-###########################################################################
-# Copyright 2015, 2016, 2017 IoT.bzh
-#
-# author: @PROJECT_AUTHOR@ <@PROJECT_AUTHOR_MAIL@>
-#
-# 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.
-###########################################################################
-
-
-Name: @NPKG_PROJECT_NAME@
-Version: @PROJECT_VERSION@
-Release: 1
-Group: AGL
-License: @PROJECT_LICENSE@
-Summary: @PROJECT_DESCRIPTION@
-Url: @PROJECT_URL@
-Source0: %{name}_%{version}.orig.tar.gz
-
-BuildRequires: cmake
-BuildRequires: gcc gcc-c++
-@RPM_PKG_DEPS@
-
-BuildRoot: %{_tmppath}/%{name}-%{version}-build
-
-%define _prefix /opt/AGL/@PROJECT_NAME@
-%define __cmake cmake
-
-%description
-@PROJECT_DESCRIPTION@
-
-%prep
-%setup -q
-
-%build
-%cmake -DCMAKE_INSTALL_PREFIX:PATH=%{_libdir}
-make %{?_smp_mflags}
-
-%install
-CURDIR=$(pwd)
-[ -d build ] && cd build
-make populate
-mkdir -p %{?buildroot}%{_prefix}
-cp -r package/* %{?buildroot}%{_prefix}
-
-cd $CURDIR
-find %{?buildroot}%{_prefix} -type d -exec echo "%dir {}" \;>> pkg_file
-find %{?buildroot}%{_prefix} -type f -exec echo "{}" \;>> pkg_file
-sed -i 's@%{?buildroot}@@g' pkg_file
-
-
-%files -f pkg_file
-%defattr(-,root,root)
diff --git a/conf.d/app-templates/template.d/start-on-target.sh.in b/conf.d/app-templates/template.d/start-on-target.sh.in
deleted file mode 100755
index d5426ed..0000000
--- a/conf.d/app-templates/template.d/start-on-target.sh.in
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/sh
-#
-# File: start-on-target.sh
-# Author: Fulup Ar Foll @ IoT.bzh
-# Object: Forward signal (SIGTERM) to remote process
-# Created on 24-May-2017, 09:23:37
-# Usage: remote-target-populate update script under ./build directory
-
-# Do not change manually use 'make remote-target-populate'
-export RSYNC_TARGET=@RSYNC_TARGET@
-export PROJECT_NAME=@PROJECT_NAME@
-export RSYNC_PREFIX=@RSYNC_PREFIX@/@PROJECT_NAME@
-export AFB_REMPORT=@AFB_REMPORT@
-export AFB_TOKEN=@AFB_TOKEN@
-
-exec ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -tt $RSYNC_TARGET << EOF
- afb-daemon --workdir=$RSYNC_PREFIX --port=$AFB_REMPORT --roothttp=./htdocs --ldpath=./lib --verbose --token=$AFB_TOKEN &
- PID_DAEMON=\$!
-
- trap "echo REMOTE-SIGNAL TRAP; kill -15 \$PID_DAEMON" INT QUIT TERM EXIT
-
- # wait for daemon to finish
- wait \$PID_DAEMON
- exit
-EOF
diff --git a/conf.d/app-templates/wgt/icon-default.png b/conf.d/app-templates/wgt/icon-default.png
deleted file mode 100644
index def888b..0000000
--- a/conf.d/app-templates/wgt/icon-default.png
+++ /dev/null
Binary files differ
diff --git a/conf.d/app-templates/wgt/icon-html5.png b/conf.d/app-templates/wgt/icon-html5.png
deleted file mode 100644
index a3573ef..0000000
--- a/conf.d/app-templates/wgt/icon-html5.png
+++ /dev/null
Binary files differ
diff --git a/conf.d/app-templates/wgt/icon-native.png b/conf.d/app-templates/wgt/icon-native.png
deleted file mode 100644
index fcb5d35..0000000
--- a/conf.d/app-templates/wgt/icon-native.png
+++ /dev/null
Binary files differ
diff --git a/conf.d/app-templates/wgt/icon-qml.png b/conf.d/app-templates/wgt/icon-qml.png
deleted file mode 100644
index ba248ea..0000000
--- a/conf.d/app-templates/wgt/icon-qml.png
+++ /dev/null
Binary files differ
diff --git a/conf.d/app-templates/wgt/icon-service.png b/conf.d/app-templates/wgt/icon-service.png
deleted file mode 100644
index 3aeb6f0..0000000
--- a/conf.d/app-templates/wgt/icon-service.png
+++ /dev/null
Binary files differ
diff --git a/conf.d/autobuild/agl/autobuild b/conf.d/autobuild/agl/autobuild
index 4811441..3a1ba5f 100755
--- a/conf.d/autobuild/agl/autobuild
+++ b/conf.d/autobuild/agl/autobuild
@@ -29,8 +29,9 @@ help:
@echo "- clean"
@echo "- distclean"
@echo "- configure"
- @echo "- build"
- @echo "- package"
+ @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: ./conf.d/autobuild/agl/autobuild package DEST=${HOME}/opt"
@echo "Don't use your build dir as DEST as wgt file is generated at this location"
@@ -58,6 +59,9 @@ package: build
@cmake --build ${BUILD_DIR} --target widget
@mkdir -p ${DEST} && cp ${BUILD_DIR}/*wgt ${DEST}
+install: build
+ @cmake --build ${BUILD_DIR} --target install
+
${BUILD_DIR}/Makefile:
@[ -d ${BUILD_DIR} ] || mkdir -p ${BUILD_DIR}
@[ -f ${BUILD_DIR}/Makefile ] || (cd ${BUILD_DIR} && cmake ${CONFIGURE_ARGS} ..)
diff --git a/conf.d/autobuild/linux/autobuild b/conf.d/autobuild/linux/autobuild
index 4811441..3a1ba5f 100755
--- a/conf.d/autobuild/linux/autobuild
+++ b/conf.d/autobuild/linux/autobuild
@@ -29,8 +29,9 @@ help:
@echo "- clean"
@echo "- distclean"
@echo "- configure"
- @echo "- build"
- @echo "- package"
+ @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: ./conf.d/autobuild/agl/autobuild package DEST=${HOME}/opt"
@echo "Don't use your build dir as DEST as wgt file is generated at this location"
@@ -58,6 +59,9 @@ package: build
@cmake --build ${BUILD_DIR} --target widget
@mkdir -p ${DEST} && cp ${BUILD_DIR}/*wgt ${DEST}
+install: build
+ @cmake --build ${BUILD_DIR} --target install
+
${BUILD_DIR}/Makefile:
@[ -d ${BUILD_DIR} ] || mkdir -p ${BUILD_DIR}
@[ -f ${BUILD_DIR}/Makefile ] || (cd ${BUILD_DIR} && cmake ${CONFIGURE_ARGS} ..)
diff --git a/conf.d/cmake/config.cmake b/conf.d/cmake/config.cmake
index 08e79fc..ff824cf 100644
--- a/conf.d/cmake/config.cmake
+++ b/conf.d/cmake/config.cmake
@@ -54,12 +54,14 @@ set(CONTROL_SUPPORT_LUA 1 CACHE BOOL "Active or not LUA Support")
# PKG_CONFIG required packages
# -----------------------------
set (PKG_REQUIRED_LIST
+ glib-2.0
alsa>=1.1.2
libsystemd>=222
libmicrohttpd>=0.9.55
afb-daemon
json-c
libafbwsc
+ glib-2.0
)
# Compilation options definition
@@ -85,6 +87,7 @@ set(COMPILE_OPTIONS
-DMAX_LINEAR_DB_SCALE=24 # until 24db volume normalisation use a simple linear scale
-DTLV_BYTE_SIZE=256 # Alsa use 4096 as default but 256 should fit most sndcards
-DCONTROL_MAXPATH_LEN=255
+-DCONTROL_CONFIG_PATH="${CMAKE_SOURCE_DIR}/conf.d/project:${CMAKE_INSTALL_PREFIX}/${PROJECT_NAME}"
CACHE STRING "Compilation flags")
#set(C_COMPILE_OPTIONS "" CACHE STRING "Compilation flags for C language.")
#set(CXX_COMPILE_OPTIONS "" CACHE STRING "Compilation flags for C++ language.")
@@ -99,6 +102,7 @@ if(IS_DIRECTORY $ENV{HOME}/opt/afb-monitoring)
set(MONITORING_ALIAS "--alias=/monitoring:$ENV{HOME}/opt/afb-monitoring")
endif()
+set(CLOSING_MESSAGE "Debug: afb-daemon --name=afb-audiok4a --port=1234 --ws-server=unix:/var/tmp/ahl-4a --cntxtimeout=1 ${MONITORING_ALIAS} --binding=package/lib/afb-audiohighlevel.so --ldpaths=../../alsa-4a/build/package/lib:../../hal-sample-4a/build/package/lib --workdir=. --roothttp=../htdocs --token= --verbose ")
# Optional location for config.xml.in
diff --git a/conf.d/project/.asoundrc b/conf.d/project/.asoundrc-audiok
index cba88e5..cba88e5 100644
--- a/conf.d/project/.asoundrc
+++ b/conf.d/project/.asoundrc-audiok
diff --git a/conf.d/project/.asounrc-fulup b/conf.d/project/.asounrc-fulup
new file mode 100644
index 0000000..c98d5a8
--- /dev/null
+++ b/conf.d/project/.asounrc-fulup
@@ -0,0 +1,198 @@
+#
+# Author: Fulup Ar Foll
+# Object: PCM hook type
+#
+# Test : Note: Jabra_USB=hw:v1340
+# Check SoundCard ==> speaker-test -Dhw:v1340 -c2 -twav
+# Check MixerPCM ==> speaker-test -DSpeakers -c2 -twav
+# Check SoftVol ==> speaker-test -DMusicPCM -c2 -twav
+# Check Plugin ==> speaker-test -DMultimedia -c2 -twav
+# Check Plugin ==> speaker-test -DNavigation -c2 -twav
+#
+# MultiMedia aplay -DDMyNavPCM /usr/share/sounds/alsa/test.wav
+#
+# Bug/Feature: when softvol control is initialised from plugin and not
+# from AGL binding. At 1st run ctl has invalid TLV and cannot be
+# use. Bypass Solution:
+# * start audio-binder before playing sound (binding create control before softvol plugin)
+# * run a dummy aplay -DMyNavPCM "" to get a clean control
+#
+# References: https://www.spinics.net/lists/alsa-devel/msg54235.html
+# --------------------------------------------------------------------
+
+# ------------------------------------------------------
+# Mixer PCM allow to play multiple stream simultaneously
+# ------------------------------------------------------
+pcm.Speakers {
+ type dmix
+ slave {pcm "hw:v1340"} #Jabra Solmate 1
+ ipc_key 1001 # ipc_key should be unique to each dmix
+}
+
+# -----------------------------------------------------
+# Register ControllerHookPlugin (ToiBeFix fullpath)
+# -----------------------------------------------------
+pcm_hook_type.CtlHookPlugin {
+ install "AlsaInstallHook"
+ lib "/home/fulup/Workspace/Audio-4a/alsa-4a/build/alsa-hook/policy_alsa_hook.so"
+}
+
+
+# -------------------------------------------------------
+# Define one Audio Virtual Channel per Audio Roles
+# -------------------------------------------------------
+pcm.MusicPCM {
+ type softvol
+
+ # Point Slave on HOOK for policies control
+ slave.pcm "Speakers"
+
+ # name should match with HAL definition
+ control.name "Playback Multimedia"
+}
+
+pcm.NaviPCM {
+ type softvol
+
+ # Point Slave on HOOK for policies control
+ slave.pcm "Speakers"
+
+ # name should match with HAL definition
+ control.name "Playback Navigation"
+}
+
+pcm.UrgentPCM {
+ type softvol
+
+ # Point Slave on HOOK for policies control
+ slave.pcm "Speakers"
+
+ # name should match with HAL definition
+ control.name "Playback Emergency"
+}
+
+# ----------------------------------------------------
+# Define one hooked PCM channel per Audio Roles
+# ----------------------------------------------------
+pcm.Multimedia {
+ type hooks
+ slave {pcm "MusicPCM"}
+ hooks.0 {
+ comment "Defined used hook sharelib and provide arguments/config to install func"
+ type "CtlHookPlugin"
+ hook_args {
+
+ # print few log messages (default false)
+ verbose true
+
+ # uri to audio-4a policy engine
+ uri="unix:/var/tmp/ahl-4a"
+
+ # timeout in ms (default 500)
+ timeout 5000
+
+ # force API synchronous mode
+ synchronous true
+
+ # api subcall to request a role
+ request {
+ stream_open "{'audio_role':'Entertainment', 'endpoint_type': 'sink'}"
+ set_stream_state "{'state': 'running'}"
+ }
+
+ # api subcall to request a role
+ release {
+ stream_close "{}"
+ }
+
+ # map AGL event on Unix signal. Search in event for json key=value
+ events {
+ sig-02 {search music, value quit}
+ sig-31 {search event, value start}
+ sig-32 {search event, value start}
+ }
+ }
+ }
+}
+
+pcm.Navigation {
+ type hooks
+ slave {pcm "NaviPCM"}
+ hooks.0 {
+ comment "Defined used hook sharelib and provide arguments/config to install func"
+ type "CtlHookPlugin"
+ hook_args {
+
+ # print few log messages (default false)
+ verbose true
+
+ # uri to audio-4a policy engine
+ uri="unix:/var/tmp/ahl-4a"
+
+ # timeout in ms (default 500)
+ timeout 5000
+
+ # force API synchronous mode
+ synchronous true
+
+ # api subcall to request a role
+ request {
+ stream_open "{'audio_role':'Guidance', 'endpoint_type': 'sink'}"
+ set_stream_state "{'state': 'running'}"
+ }
+
+ # api subcall to request a role
+ release {
+ release-role "{'uid':'alsa-hook-client'}"
+ }
+
+ # map AGL event on Unix signal. Search in event for json key=value
+ events {
+ sig-02 {search navi, value quit}
+ sig-31 {search event, value start}
+ sig-32 {search event, value start}
+ }
+ }
+ }
+}
+
+pcm.Emergency {
+ type hooks
+ slave {pcm "UrgentPCM"}
+ hooks.0 {
+ comment "Defined used hook sharelib and provide arguments/config to install func"
+ type "CtlHookPlugin"
+ hook_args {
+
+ # print few log messages (default false)
+ verbose true
+
+ # uri to audio-4a policy engine
+ uri="unix:/var/tmp/ahl-4a"
+
+ # timeout in ms (default 500)
+ timeout 5000
+
+ # force API synchronous mode
+ synchronous true
+
+ # api subcall to request a role
+ request {
+ stream_open "{'audio_role':'Emergency', 'endpoint_type': 'sink'}"
+ set_stream_state "{'state': 'running'}"
+ }
+
+ # api subcall to request a role
+ release {
+ release-role "{'uid':'alsa-hook-client'}"
+ }
+
+ # map AGL event on Unix signal. Search in event for json key=value
+ events {
+ sig-02 {search navi, value quit}
+ sig-31 {search event, value start}
+ sig-32 {search event, value start}
+ }
+ }
+ }
+}
diff --git a/conf.d/project/README.md b/conf.d/project/README.md
new file mode 100644
index 0000000..00e3c2f
--- /dev/null
+++ b/conf.d/project/README.md
@@ -0,0 +1,15 @@
+
+1) $HOME/.asoundrc or /etc/asound.conf should match you hardware audio configuration.
+2) ahl-xxxxxx-config.json should match your .asoundrc config
+
+Note: config file is search within with following rules:
+ - default search path is $PROJECT_ROOT/conf.d/project:${CMAKE_INSTALL_PREFIX}/${PROJECT_NAME}
+ - if environment variable "AAAA_CONFIG_PATH" is defined that it is used as search path
+ - config file should match "ahl-BINDERNAME-config.json" where BINDERNAME is provided through "--name=BINDERNAME" in afb-daemon commande line.
+
+Note: you may debug Audio-4A from your development tree with:
+
+ afb-daemon --name=afb-audio4a --port=1234 --ws-server=unix:/var/tmp/ahl-4a --cntxtimeout=1 \
+ --alias=/monitoring:/home/fulup/opt/afb-monitoring --binding=package/lib/afb-audiohighlevel.so \
+ --ldpaths=../../alsa-4a/build/package/lib:../../hal-sample-4a/build/package/lib --workdir=. \
+ --roothttp=../htdocs --token= --verbose --verbose \ No newline at end of file
diff --git a/conf.d/project/agl-ahl-config.json b/conf.d/project/ahl-audiok4a-config.json
index 74ab251..74ab251 100644
--- a/conf.d/project/agl-ahl-config.json
+++ b/conf.d/project/ahl-audiok4a-config.json
diff --git a/conf.d/project/ahl-fulup4a-config.json b/conf.d/project/ahl-fulup4a-config.json
new file mode 100644
index 0000000..1a851a5
--- /dev/null
+++ b/conf.d/project/ahl-fulup4a-config.json
@@ -0,0 +1,39 @@
+{
+ "version": "0.2.0",
+ "policy_module": "AudioPolicy_v1",
+ "description": "High-level binding configuration file",
+ "note": "Devices and routings are always listed in order of priority (for device selection rules)",
+ "hal_list": ["jabra-usb"],
+ "audio_roles": [
+ {
+ "name": "Guidance",
+ "id": 1,
+ "description": "Important user information where user action is expected (e.g. navigation instruction)",
+ "priority": 25,
+ "output": [
+ "alsa.plug:NaviPCM"
+ ],
+ "interupt_behavior": "continue"
+ },
+ {
+ "name": "Emergency",
+ "id": 2,
+ "description": "HMI or else notifications (e.g. touchscreen events, speech recognition on/off,...)",
+ "priority": 100,
+ "output": [
+ "alsa.plug:UrgentPCM"
+ ],
+ "interupt_behavior": "pause"
+ },
+ {
+ "name": "Entertainment",
+ "id": 3,
+ "description": "Multimedia content (e.g. tuner, media player, etc.)",
+ "priority": 0,
+ "output": [
+ "alsa.plug:MusicPCM"
+ ],
+ "interupt_behavior": "pause"
+ }
+ ]
+}
diff --git a/htdocs/audiohl.html b/htdocs/audiohl.html
index b59e404..0e153f5 100644
--- a/htdocs/audiohl.html
+++ b/htdocs/audiohl.html
@@ -8,9 +8,9 @@
<script type="text/javascript" src="AudioBinding.js"></script>
</head>
-<body onload="init('audiohl'); ep_type='sink' ; ar='Entertainment' ; ep_id=0 ; s_id=0 ; prop_val=0 ; vol_val='0' ; p_name='balance' ; st_state='idle' ; st_mute='off'">
+<body onload="init('ahl-4a'); ep_type='sink' ; ar='Entertainment' ; ep_id=0 ; s_id=0 ; prop_val=0 ; vol_val='0' ; p_name='balance' ; st_state='idle' ; st_mute='off'">
- <button id="connected" onclick="init('audiohl');">Binder WS Fail</button> <br><br>
+ <button id="connected" onclick="init('ahl-4a');">Binder WS Fail</button> <br><br>
<button id="monitoring" onclick="window.open('/monitoring/monitor.html','_monitor_audio')">Debug/Monitoring</a></button>
<b>Audio Role</b>
@@ -59,26 +59,26 @@
<br>
<ol>
- <li><button onclick="callbinder('audiohl','get_endpoints', {audio_role:ar,endpoint_type:ep_type})">get_endpoints(audio_role,endpoint_type)</button></li>
- <li><button onclick="callbinder('audiohl','stream_open', {audio_role:ar,endpoint_type:ep_type})">stream_open(audio_role,endpoint_type)</button></li>
- <li><button onclick="callbinder('audiohl','stream_open', {audio_role:ar,endpoint_type:ep_type,endpoint_id:ep_id})">stream_open(audio_role,enpoint_type,endpoint_id)</button></li>
- <li><button onclick="callbinder('audiohl','stream_close', {stream_id:s_id})">stream_close(stream_id)</button></li>
- <li><button onclick="callbinder('audiohl','stream_close', {})">stream_close()</button></li>
- <li><button onclick="callbinder('audiohl','get_stream_info', {stream_id:s_id})">get_stream_info(stream_id)</button></li>
- <li><button onclick="callbinder('audiohl','set_stream_state', {stream_id:s_id})">set_stream_state(stream_id)</button></li>
- <li><button onclick="callbinder('audiohl','set_stream_state', {stream_id:s_id,state:st_state})">set_stream_state(stream_id,stream_state)</button></li>
- <li><button onclick="callbinder('audiohl','set_stream_state', {stream_id:s_id,mute:st_mute})">set_stream_state(stream_id,mute)</button></li>
- <li><button onclick="callbinder('audiohl','set_stream_state', {stream_id:s_id,state:st_state,mute:st_mute})">set_stream_state(stream_id,stream_state,mute)</button></li>
- <li><button onclick="callbinder('audiohl','set_stream_state', {state:st_state,mute:st_mute})">set_stream_state(stream_state,mute)</button></li>
- <li><button onclick="callbinder('audiohl','volume', {endpoint_type:ep_type,endpoint_id:ep_id,volume:vol_val})">volume(endpoint_type,endpoint_id,value)</button></li>
- <li><button onclick="callbinder('audiohl','volume', {endpoint_type:ep_type,endpoint_id:ep_id})">volume(endpoint_type,endpoint_id)</button></li>
- <li><button onclick="callbinder('audiohl','property', {endpoint_type:ep_type,endpoint_id:ep_id,property_name:p_name,value:prop_val})">property(endpoint_type,endpoint_id,property,value)</button></li>
- <li><button onclick="callbinder('audiohl','property', {endpoint_type:ep_type,endpoint_id:ep_id,property_name:p_name})">property(endpoint_type,endpoint_id,property)</button></li>
- <li><button onclick="callbinder('audiohl','get_endpoint_info', {endpoint_type:ep_type,endpoint_id:ep_id})">get_endpoint_info(endpoint_type,endpoint_id)</button></li>
- <li><button onclick="callbinder('audiohl','get_list_actions', {audio_role:ar})">get_list_actions(audio_role)</button></li>
- <li><button onclick="callbinder('audiohl','post_action', {action_name:'emergency_brake',audio_role:ar,media_name:'Warning.wav'})">post_action(emergency_brake,audio_role,'Warning.wav')</button></li>
- <li><button onclick="callbinder('audiohl','event_subscription', {events:['ahl_endpoint_property_event','ahl_endpoint_volume_event','ahl_post_action'],subscribe:1})">subscribe(['ahl_endpoint_property_event','ahl_endpoint_volume_event','ahl_post_action'])</button>
- <li><button onclick="callbinder('audiohl','event_subscription', {events:['ahl_endpoint_property_event','ahl_endpoint_volume_event','ahl_post_action'],subscribe:0})">unsubscribe(['ahl_endpoint_property_event','ahl_endpoint_volume_event','ahl_post_action'])</button></li>
+ <li><button onclick="callbinder('ahl-4a','get_endpoints', {audio_role:ar,endpoint_type:ep_type})">get_endpoints(audio_role,endpoint_type)</button></li>
+ <li><button onclick="callbinder('ahl-4a','stream_open', {audio_role:ar,endpoint_type:ep_type})">stream_open(audio_role,endpoint_type)</button></li>
+ <li><button onclick="callbinder('ahl-4a','stream_open', {audio_role:ar,endpoint_type:ep_type,endpoint_id:ep_id})">stream_open(audio_role,enpoint_type,endpoint_id)</button></li>
+ <li><button onclick="callbinder('ahl-4a','stream_close', {stream_id:s_id})">stream_close(stream_id)</button></li>
+ <li><button onclick="callbinder('ahl-4a','stream_close', {})">stream_close()</button></li>
+ <li><button onclick="callbinder('ahl-4a','get_stream_info', {stream_id:s_id})">get_stream_info(stream_id)</button></li>
+ <li><button onclick="callbinder('ahl-4a','set_stream_state', {stream_id:s_id})">set_stream_state(stream_id)</button></li>
+ <li><button onclick="callbinder('ahl-4a','set_stream_state', {stream_id:s_id,state:st_state})">set_stream_state(stream_id,stream_state)</button></li>
+ <li><button onclick="callbinder('ahl-4a','set_stream_state', {stream_id:s_id,mute:st_mute})">set_stream_state(stream_id,mute)</button></li>
+ <li><button onclick="callbinder('ahl-4a','set_stream_state', {stream_id:s_id,state:st_state,mute:st_mute})">set_stream_state(stream_id,stream_state,mute)</button></li>
+ <li><button onclick="callbinder('ahl-4a','set_stream_state', {state:st_state,mute:st_mute})">set_stream_state(stream_state,mute)</button></li>
+ <li><button onclick="callbinder('ahl-4a','volume', {endpoint_type:ep_type,endpoint_id:ep_id,volume:vol_val})">volume(endpoint_type,endpoint_id,value)</button></li>
+ <li><button onclick="callbinder('ahl-4a','volume', {endpoint_type:ep_type,endpoint_id:ep_id})">volume(endpoint_type,endpoint_id)</button></li>
+ <li><button onclick="callbinder('ahl-4a','property', {endpoint_type:ep_type,endpoint_id:ep_id,property_name:p_name,value:prop_val})">property(endpoint_type,endpoint_id,property,value)</button></li>
+ <li><button onclick="callbinder('ahl-4a','property', {endpoint_type:ep_type,endpoint_id:ep_id,property_name:p_name})">property(endpoint_type,endpoint_id,property)</button></li>
+ <li><button onclick="callbinder('ahl-4a','get_endpoint_info', {endpoint_type:ep_type,endpoint_id:ep_id})">get_endpoint_info(endpoint_type,endpoint_id)</button></li>
+ <li><button onclick="callbinder('ahl-4a','get_list_actions', {audio_role:ar})">get_list_actions(audio_role)</button></li>
+ <li><button onclick="callbinder('ahl-4a','post_action', {action_name:'emergency_brake',audio_role:ar,media_name:'Warning.wav'})">post_action(emergency_brake,audio_role,'Warning.wav')</button></li>
+ <li><button onclick="callbinder('ahl-4a','event_subscription', {events:['ahl_endpoint_property_event','ahl_endpoint_volume_event','ahl_post_action'],subscribe:1})">subscribe(['ahl_endpoint_property_event','ahl_endpoint_volume_event','ahl_post_action'])</button>
+ <li><button onclick="callbinder('ahl-4a','event_subscription', {events:['ahl_endpoint_property_event','ahl_endpoint_volume_event','ahl_post_action'],subscribe:0})">unsubscribe(['ahl_endpoint_property_event','ahl_endpoint_volume_event','ahl_post_action'])</button></li>
</ol>
<div id="main" style="visibility:hidden">
diff --git a/nbproject/configurations.xml b/nbproject/configurations.xml
new file mode 100644
index 0000000..93a17f5
--- /dev/null
+++ b/nbproject/configurations.xml
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configurationDescriptor version="100">
+ <logicalFolder name="root" displayName="root" projectFiles="true" kind="ROOT">
+ <df root="." name="0">
+ <df name="afb-utilities">
+ <in>filescan-utils.c</in>
+ <in>wrap-json.c</in>
+ </df>
+ <df name="ahl-binding">
+ <in>ahl-binding.c</in>
+ <in>ahl-config.c</in>
+ <in>ahl-deviceenum.c</in>
+ </df>
+ <df name="ahl-utilities">
+ <in>ahl-policy-utils.c</in>
+ <in>ahl-policy-utils.h</in>
+ </df>
+ <df name="build">
+ <df name="CMakeFiles">
+ <df name="3.5.2">
+ <df name="CompilerIdC">
+ <in>CMakeCCompilerId.c</in>
+ </df>
+ <df name="CompilerIdCXX">
+ <in>CMakeCXXCompilerId.cpp</in>
+ </df>
+ </df>
+ <in>feature_tests.c</in>
+ <in>feature_tests.cxx</in>
+ </df>
+ </df>
+ </df>
+ <logicalFolder name="ExternalFiles"
+ displayName="Important Files"
+ projectFiles="false"
+ kind="IMPORTANT_FILES_FOLDER">
+ <itemPath>build/Makefile</itemPath>
+ <itemPath>nbproject/private/launcher.properties</itemPath>
+ </logicalFolder>
+ </logicalFolder>
+ <sourceFolderFilter>^(nbproject)$</sourceFolderFilter>
+ <sourceRootList>
+ <Elem>.</Elem>
+ </sourceRootList>
+ <projectmakefile>build/Makefile</projectmakefile>
+ <confs>
+ <conf name="Default" type="0">
+ <toolsSet>
+ <compilerSet>default</compilerSet>
+ <dependencyChecking>false</dependencyChecking>
+ <rebuildPropChanged>false</rebuildPropChanged>
+ </toolsSet>
+ <codeAssistance>
+ <buildAnalyzer>false</buildAnalyzer>
+ </codeAssistance>
+ <makefileType>
+ <makeTool>
+ <buildCommandWorkingDir>build</buildCommandWorkingDir>
+ <buildCommand>${MAKE} -f Makefile</buildCommand>
+ <cleanCommand>${MAKE} -f Makefile clean</cleanCommand>
+ <executablePath></executablePath>
+ <cTool>
+ <incDir>
+ <pElem>.</pElem>
+ </incDir>
+ </cTool>
+ <ccTool>
+ <incDir>
+ <pElem>.</pElem>
+ </incDir>
+ </ccTool>
+ </makeTool>
+ <preBuild>
+ <preBuildCommandWorkingDir>build</preBuildCommandWorkingDir>
+ <preBuildCommand>cmake ..</preBuildCommand>
+ <preBuildFirst>true</preBuildFirst>
+ </preBuild>
+ </makefileType>
+ <item path="afb-utilities/filescan-utils.c" ex="false" tool="0" flavor2="0">
+ </item>
+ <item path="afb-utilities/wrap-json.c" ex="false" tool="0" flavor2="0">
+ </item>
+ <item path="ahl-binding/ahl-binding.c" ex="false" tool="0" flavor2="0">
+ </item>
+ <item path="ahl-binding/ahl-config.c" ex="false" tool="0" flavor2="0">
+ </item>
+ <item path="ahl-binding/ahl-deviceenum.c" ex="false" tool="0" flavor2="0">
+ </item>
+ <item path="ahl-utilities/ahl-policy-utils.c" ex="false" tool="0" flavor2="0">
+ </item>
+ <item path="ahl-utilities/ahl-policy-utils.h" ex="false" tool="3" flavor2="0">
+ </item>
+ <item path="build/CMakeFiles/3.5.2/CompilerIdC/CMakeCCompilerId.c"
+ ex="false"
+ tool="0"
+ flavor2="0">
+ </item>
+ <item path="build/CMakeFiles/3.5.2/CompilerIdCXX/CMakeCXXCompilerId.cpp"
+ ex="false"
+ tool="1"
+ flavor2="0">
+ </item>
+ <item path="build/CMakeFiles/feature_tests.c" ex="false" tool="0" flavor2="0">
+ </item>
+ <item path="build/CMakeFiles/feature_tests.cxx" ex="false" tool="1" flavor2="0">
+ </item>
+ </conf>
+ </confs>
+</configurationDescriptor>
diff --git a/nbproject/project.xml b/nbproject/project.xml
new file mode 100644
index 0000000..3e0cffd
--- /dev/null
+++ b/nbproject/project.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://www.netbeans.org/ns/project/1">
+ <type>org.netbeans.modules.cnd.makeproject</type>
+ <configuration>
+ <data xmlns="http://www.netbeans.org/ns/make-project/1">
+ <name>afb-audiohighlevel</name>
+ <c-extensions>c</c-extensions>
+ <cpp-extensions>cpp,cxx</cpp-extensions>
+ <header-extensions>h,hpp</header-extensions>
+ <sourceEncoding>UTF-8</sourceEncoding>
+ <make-dep-projects/>
+ <sourceRootList>
+ <sourceRootElem>.</sourceRootElem>
+ </sourceRootList>
+ <confList>
+ <confElem>
+ <name>Default</name>
+ <type>0</type>
+ </confElem>
+ </confList>
+ <formatting>
+ <project-formatting-style>false</project-formatting-style>
+ </formatting>
+ </data>
+ </configuration>
+</project>
diff --git a/src/ahl-apidef.h b/src/ahl-apidef.h
deleted file mode 100644
index 97f8de7..0000000
--- a/src/ahl-apidef.h
+++ /dev/null
@@ -1,237 +0,0 @@
-
-static const char _afb_description_v2_audiohl[] =
- "{\"openapi\":\"3.0.0\",\"info\":{\"description\":\"Audio high level API "
- "for AGL applications\",\"title\":\"audiohighlevel\",\"version\":\"1.0\","
- "\"x-binding-c-generator\":{\"api\":\"audiohl\",\"version\":2,\"prefix\":"
- "\"audiohlapi_\",\"postfix\":\"\",\"start\":null,\"onevent\":\"AhlOnEvent"
- "\",\"init\":\"AhlBindingInit\",\"scope\":\"\",\"private\":false}},\"serv"
- "ers\":[{\"url\":\"ws://{host}:{port}/api/audiohl\",\"description\":\"Aud"
- "io high level API for AGL applications.\",\"variables\":{\"host\":{\"def"
- "ault\":\"localhost\"},\"port\":{\"default\":\"1234\"}},\"x-afb-events\":"
- "[{\"$ref\":\"#/components/schemas/afb-event\"}]}],\"components\":{\"sche"
- "mas\":{\"afb-reply\":{\"$ref\":\"#/components/schemas/afb-reply-v2\"},\""
- "afb-event\":{\"$ref\":\"#/components/schemas/afb-event-v2\"},\"afb-reply"
- "-v2\":{\"title\":\"Generic response.\",\"type\":\"object\",\"required\":"
- "[\"jtype\",\"request\"],\"properties\":{\"jtype\":{\"type\":\"string\",\""
- "const\":\"afb-reply\"},\"request\":{\"type\":\"object\",\"required\":[\""
- "status\"],\"properties\":{\"status\":{\"type\":\"string\"},\"info\":{\"t"
- "ype\":\"string\"},\"token\":{\"type\":\"string\"},\"uuid\":{\"type\":\"s"
- "tring\"},\"reqid\":{\"type\":\"string\"}}},\"response\":{\"type\":\"obje"
- "ct\"}}},\"afb-event-v2\":{\"type\":\"object\",\"required\":[\"jtype\",\""
- "event\"],\"properties\":{\"jtype\":{\"type\":\"string\",\"const\":\"afb-"
- "event\"},\"event\":{\"type\":\"string\"},\"data\":{\"type\":\"object\"}}"
- "},\"endpoint_info\":{\"type\":\"object\",\"required\":[\"endpoint_id\",\""
- "type\",\"device_name\",\"device_uri\"],\"properties\":{\"endpoint_id\":{"
- "\"type\":\"int\"},\"type\":{\"type\":\"enum\"},\"device_name\":{\"type\""
- ":\"string\"},\"device_uri_type\":{\"type\":\"string\"}}},\"stream_info\""
- ":{\"type\":\"object\",\"required\":[\"stream_id\",\"state\",\"mute\",\"e"
- "ndpoint_info\"],\"properties\":{\"stream_id\":{\"type\":\"int\"},\"state"
- "\":{\"type\":\"int\"},\"mute\":{\"type\":\"int\"},\"device_uri\":{\"type"
- "\":\"string\"},\"$ref\":\"#/components/schemas/endpoint_info\"}}},\"x-pe"
- "rmissions\":{\"streamcontrol\":{\"permission\":\"urn:AGL:permission:audi"
- "o:public:streamcontrol\"},\"endpointcontrol\":{\"permission\":\"urn:AGL:"
- "permission:audio:public:endpointcontrol\"},\"audiostream\":{\"permission"
- "\":\"urn:AGL:permission:audio:public:audiostream\"},\"soundevent\":{\"pe"
- "rmission\":\"urn:AGL:permission:audio:public:soundevent\"}},\"responses\""
- ":{\"200\":{\"description\":\"A complex object array response\",\"content"
- "\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/af"
- "b-reply\"}}}},\"400\":{\"description\":\"Invalid arguments\"}}},\"paths\""
- ":{\"/get_endpoints\":{\"description\":\"Retrieve array of available audi"
- "o endpoints\",\"get\":{\"parameters\":[{\"in\":\"query\",\"name\":\"audi"
- "o_role\",\"required\":true,\"schema\":{\"type\":\"string\"}},{\"in\":\"q"
- "uery\",\"name\":\"endpoint_type\",\"required\":true,\"schema\":{\"type\""
- ":\"enum\"}}],\"responses\":{\"200\":{\"$ref\":\"#/components/responses/2"
- "00\",\"response\":{\"description\":\"Array of endpoint info structures\""
- ",\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/endpoint_"
- "info\"}}},\"400\":{\"$ref\":\"#/components/responses/400\"}}}},\"/stream"
- "_open\":{\"description\":\"Request opening a stream\",\"get\":{\"x-permi"
- "ssions\":{\"$ref\":\"#/components/x-permissions/audiostream\"},\"paramet"
- "ers\":[{\"in\":\"query\",\"name\":\"audio_role\",\"required\":true,\"sch"
- "ema\":{\"type\":\"string\"}},{\"in\":\"query\",\"name\":\"endpoint_type\""
- ",\"required\":true,\"schema\":{\"type\":\"enum\"}},{\"in\":\"query\",\"n"
- "ame\":\"endpoint_id\",\"required\":false,\"schema\":{\"type\":\"int\"}}]"
- ",\"responses\":{\"200\":{\"$ref\":\"#/components/responses/200\",\"respo"
- "nse\":{\"description\":\"Stream information structure\",\"$ref\":\"#/com"
- "ponents/schemas/stream_info\"}},\"400\":{\"$ref\":\"#/components/respons"
- "es/400\"}}}},\"/stream_close\":{\"description\":\"Request closing a stre"
- "am\",\"get\":{\"x-permissions\":{\"$ref\":\"#/components/x-permissions/a"
- "udiostream\"},\"parameters\":[{\"in\":\"query\",\"name\":\"stream_id\",\""
- "required\":false,\"schema\":{\"type\":\"int\"}}],\"responses\":{\"200\":"
- "{\"$ref\":\"#/components/responses/200\"},\"400\":{\"$ref\":\"#/componen"
- "ts/responses/400\"}}}},\"/set_stream_state\":{\"description\":\"Change s"
- "tream active and/or mute state\",\"get\":{\"x-permissions\":{\"$ref\":\""
- "#/components/x-permissions/streamcontrol\"},\"parameters\":[{\"in\":\"qu"
- "ery\",\"name\":\"stream_id\",\"required\":false,\"schema\":{\"type\":\"i"
- "nt\"}},{\"in\":\"query\",\"name\":\"state\",\"required\":false,\"schema\""
- ":{\"type\":\"int\"}},{\"in\":\"query\",\"name\":\"mute\",\"required\":fa"
- "lse,\"schema\":{\"type\":\"int\"}}],\"responses\":{\"200\":{\"$ref\":\"#"
- "/components/responses/200\"},\"400\":{\"$ref\":\"#/components/responses/"
- "400\"}}}},\"/get_stream_info\":{\"description\":\"Retrieve stream inform"
- "ation\",\"get\":{\"parameters\":[{\"in\":\"query\",\"name\":\"stream_id\""
- ",\"required\":true,\"schema\":{\"type\":\"int\"}}],\"responses\":{\"200\""
- ":{\"$ref\":\"#/components/responses/200\",\"response\":{\"description\":"
- "\"Stream information structure\",\"$ref\":\"#/components/schemas/stream_"
- "info\"}},\"400\":{\"$ref\":\"#/components/responses/400\"}}}},\"/volume\""
- ":{\"description\":\"Set or get volume on endpoint\",\"get\":{\"x-permiss"
- "ions\":{\"$ref\":\"#/components/x-permissions/endpointcontrol\"},\"param"
- "eters\":[{\"in\":\"query\",\"name\":\"endpoint_type\",\"required\":true,"
- "\"schema\":{\"type\":\"enum\"}},{\"in\":\"query\",\"name\":\"endpoint_id"
- "\",\"required\":true,\"schema\":{\"type\":\"int\"}},{\"in\":\"query\",\""
- "name\":\"volume\",\"required\":false,\"schema\":{\"type\":\"string\"}}],"
- "\"responses\":{\"200\":{\"$ref\":\"#/components/responses/200\"},\"400\""
- ":{\"$ref\":\"#/components/responses/400\"}}}},\"/get_endpoint_info\":{\""
- "description\":\"Retrieve endpoint information including its properties\""
- ",\"get\":{\"parameters\":[{\"in\":\"query\",\"name\":\"endpoint_type\",\""
- "required\":true,\"schema\":{\"type\":\"enum\"}},{\"in\":\"query\",\"name"
- "\":\"endpoint_id\",\"required\":true,\"schema\":{\"type\":\"int\"}}],\"r"
- "esponses\":{\"200\":{\"$ref\":\"#/components/responses/200\"},\"400\":{\""
- "$ref\":\"#/components/responses/400\"}}}},\"/property\":{\"description\""
- ":\"Set/get endpoint property value\",\"get\":{\"x-permissions\":{\"$ref\""
- ":\"#/components/x-permissions/endpointcontrol\"},\"parameters\":[{\"in\""
- ":\"query\",\"name\":\"endpoint_type\",\"required\":true,\"schema\":{\"ty"
- "pe\":\"enum\"}},{\"in\":\"query\",\"name\":\"endpoint_id\",\"required\":"
- "true,\"schema\":{\"type\":\"int\"}},{\"in\":\"query\",\"name\":\"propert"
- "y_name\",\"required\":true,\"schema\":{\"type\":\"string\"}},{\"in\":\"q"
- "uery\",\"name\":\"value\",\"required\":false,\"schema\":{\"type\":\"stri"
- "ng\"}}],\"responses\":{\"200\":{\"$ref\":\"#/components/responses/200\"}"
- ",\"400\":{\"$ref\":\"#/components/responses/400\"}}}},\"/get_list_action"
- "s\":{\"description\":\"Retrieve a list of supported actions for a partic"
- "ular audio role\",\"get\":{\"parameters\":[{\"in\":\"query\",\"name\":\""
- "audio_role\",\"required\":true,\"schema\":{\"type\":\"string\"}}],\"resp"
- "onses\":{\"200\":{\"$ref\":\"#/components/responses/200\"},\"400\":{\"$r"
- "ef\":\"#/components/responses/400\"}}}},\"/post_action\":{\"description\""
- ":\"Post sound or audio device related action event (extendable mechanism"
- ")\",\"get\":{\"x-permissions\":{\"$ref\":\"#/components/x-permissions/so"
- "undevent\"},\"parameters\":[{\"in\":\"query\",\"name\":\"action_name\",\""
- "required\":true,\"schema\":{\"type\":\"string\"}},{\"in\":\"query\",\"na"
- "me\":\"audio_role\",\"required\":true,\"schema\":{\"type\":\"string\"}},"
- "{\"in\":\"query\",\"name\":\"media_name\",\"required\":false,\"schema\":"
- "{\"type\":\"string\"}},{\"in\":\"query\",\"name\":\"action_context\",\"r"
- "equired\":false,\"schema\":{\"type\":\"object\"}}],\"responses\":{\"200\""
- ":{\"$ref\":\"#/components/responses/200\"},\"400\":{\"$ref\":\"#/compone"
- "nts/responses/400\"}}}},\"/event_subscription\":{\"description\":\"Subsc"
- "ribe to audio high level events\",\"get\":{\"parameters\":[{\"in\":\"que"
- "ry\",\"name\":\"events\",\"required\":true,\"schema\":{\"type\":\"array\""
- ",\"items\":{\"type\":\"string\"}}},{\"in\":\"query\",\"name\":\"subscrib"
- "e\",\"required\":true,\"schema\":{\"type\":\"int\"}}],\"responses\":{\"2"
- "00\":{\"$ref\":\"#/components/responses/200\"},\"400\":{\"$ref\":\"#/com"
- "ponents/responses/400\"}}}}}}"
-;
-
-static const struct afb_auth _afb_auths_v2_audiohl[] = {
- { .type = afb_auth_Permission, .text = "urn:AGL:permission:audio:public:audiostream" },
- { .type = afb_auth_Permission, .text = "urn:AGL:permission:audio:public:streamcontrol" },
- { .type = afb_auth_Permission, .text = "urn:AGL:permission:audio:public:endpointcontrol" },
- { .type = afb_auth_Permission, .text = "urn:AGL:permission:audio:public:soundevent" }
-};
-
- void audiohlapi_get_endpoints(struct afb_req req);
- void audiohlapi_stream_open(struct afb_req req);
- void audiohlapi_stream_close(struct afb_req req);
- void audiohlapi_set_stream_state(struct afb_req req);
- void audiohlapi_get_stream_info(struct afb_req req);
- void audiohlapi_volume(struct afb_req req);
- void audiohlapi_get_endpoint_info(struct afb_req req);
- void audiohlapi_property(struct afb_req req);
- void audiohlapi_get_list_actions(struct afb_req req);
- void audiohlapi_post_action(struct afb_req req);
- void audiohlapi_event_subscription(struct afb_req req);
-
-static const struct afb_verb_v2 _afb_verbs_v2_audiohl[] = {
- {
- .verb = "get_endpoints",
- .callback = audiohlapi_get_endpoints,
- .auth = NULL,
- .info = "Retrieve array of available audio endpoints",
- .session = AFB_SESSION_NONE_V2
- },
- {
- .verb = "stream_open",
- .callback = audiohlapi_stream_open,
- .auth = &_afb_auths_v2_audiohl[0],
- .info = "Request opening a stream",
- .session = AFB_SESSION_NONE_V2
- },
- {
- .verb = "stream_close",
- .callback = audiohlapi_stream_close,
- .auth = &_afb_auths_v2_audiohl[0],
- .info = "Request closing a stream",
- .session = AFB_SESSION_NONE_V2
- },
- {
- .verb = "set_stream_state",
- .callback = audiohlapi_set_stream_state,
- .auth = &_afb_auths_v2_audiohl[1],
- .info = "Change stream active and/or mute state",
- .session = AFB_SESSION_NONE_V2
- },
- {
- .verb = "get_stream_info",
- .callback = audiohlapi_get_stream_info,
- .auth = NULL,
- .info = "Retrieve stream information",
- .session = AFB_SESSION_NONE_V2
- },
- {
- .verb = "volume",
- .callback = audiohlapi_volume,
- .auth = &_afb_auths_v2_audiohl[2],
- .info = "Set or get volume on endpoint",
- .session = AFB_SESSION_NONE_V2
- },
- {
- .verb = "get_endpoint_info",
- .callback = audiohlapi_get_endpoint_info,
- .auth = NULL,
- .info = "Retrieve endpoint information including its properties",
- .session = AFB_SESSION_NONE_V2
- },
- {
- .verb = "property",
- .callback = audiohlapi_property,
- .auth = &_afb_auths_v2_audiohl[2],
- .info = "Set/get endpoint property value",
- .session = AFB_SESSION_NONE_V2
- },
- {
- .verb = "get_list_actions",
- .callback = audiohlapi_get_list_actions,
- .auth = NULL,
- .info = "Retrieve a list of supported actions for a particular audio role",
- .session = AFB_SESSION_NONE_V2
- },
- {
- .verb = "post_action",
- .callback = audiohlapi_post_action,
- .auth = &_afb_auths_v2_audiohl[3],
- .info = "Post sound or audio device related action event (extendable mechanism)",
- .session = AFB_SESSION_NONE_V2
- },
- {
- .verb = "event_subscription",
- .callback = audiohlapi_event_subscription,
- .auth = NULL,
- .info = "Subscribe to audio high level events",
- .session = AFB_SESSION_NONE_V2
- },
- {
- .verb = NULL,
- .callback = NULL,
- .auth = NULL,
- .info = NULL,
- .session = 0
- }
-};
-
-const struct afb_binding_v2 afbBindingV2 = {
- .api = "audiohl",
- .specification = _afb_description_v2_audiohl,
- .info = "Audio high level API for AGL applications",
- .verbs = _afb_verbs_v2_audiohl,
- .preinit = NULL,
- .init = AhlBindingInit,
- .onevent = AhlOnEvent,
- .noconcurrency = 0
-};
-
diff --git a/src/ahl-policyJSON.c b/src/ahl-policyJSON.c
deleted file mode 100644
index 1fdf2d9..0000000
--- a/src/ahl-policyJSON.c
+++ /dev/null
@@ -1,307 +0,0 @@
-/*
- * Copyright (C) 2017 "Audiokinetic Inc"
- *
- * 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 "wrap-json.h"
-#include <json-c/json.h>
-#include <glib.h>
-#include "ahl-policy-utils.h"
-#include "ahl-interface.h"
-#include "ahl-binding.h"
-
-static char * DeviceURITypeEnumToStr(DeviceURITypeT in_eDeviceURIType) {
- switch(in_eDeviceURIType) {
- case DEVICEURITYPE_ALSA_HW: // Alsa hardware device URI
- return AHL_DEVICEURITYPE_ALSA_HW;
- case DEVICEURITYPE_ALSA_DMIX: // Alsa Dmix device URI (only for playback devices)
- return AHL_DEVICEURITYPE_ALSA_DMIX;
- case DEVICEURITYPE_ALSA_DSNOOP: // Alsa DSnoop device URI (only for capture devices)
- return AHL_DEVICEURITYPE_ALSA_DSNOOP;
- case DEVICEURITYPE_ALSA_SOFTVOL: // Alsa softvol device URI
- return AHL_DEVICEURITYPE_ALSA_SOFTVOL;
- case DEVICEURITYPE_ALSA_PLUG: // Alsa plug device URI
- return AHL_DEVICEURITYPE_ALSA_PLUG;
- case DEVICEURITYPE_ALSA_OTHER: // Alsa domain URI device of unspecified type
- return AHL_DEVICEURITYPE_ALSA_OTHER;
- case DEVICEURITYPE_NOT_ALSA: // Unknown (not ALSA domain)
- return AHL_DEVICEURITYPE_NOT_ALSA;
- default:
- return "Unknown";
- }
-}
-
-static char * StreamStateEnumToStr(StreamStateT in_eStreamState) {
- switch(in_eStreamState) {
- case STREAM_STATE_IDLE:
- return AHL_STREAM_STATE_IDLE;
- case STREAM_STATE_RUNNING:
- return AHL_STREAM_STATE_RUNNING;
- case STREAM_STATE_PAUSED:
- return AHL_STREAM_STATE_PAUSED;
- default:
- return "Unknown";
- }
-}
-
-static char * StreamMuteEnumToStr(StreamMuteT in_eStreamMute) {
- switch(in_eStreamMute) {
- case STREAM_UNMUTED:
- return AHL_STREAM_UNMUTED;
- case STREAM_MUTED:
- return AHL_STREAM_MUTED;
- default:
- return "Unknown";
- }
-}
-
-static int EndpointPropTableToJSON(GHashTable * pPropTable, json_object **ppProptableJ)
-{
- if(pPropTable == NULL)
- {
- AFB_ERROR("Invalid EndpointPropTableToJSON arguments");
- return AHL_FAIL;
- }
-
- // Create json object for PropTable
- *ppProptableJ = json_object_new_array();
- GHashTableIter iter;
- gpointer key, value;
- g_hash_table_iter_init (&iter, pPropTable);
- while (g_hash_table_iter_next (&iter, &key, &value))
- {
- if ( key != NULL && value != NULL) {
- json_object *pPropertyJ = NULL;
- json_object_get(value);
- int err = wrap_json_pack(&pPropertyJ, "{s:s,s:o}",
- "property_name", (char*)key,
- "property_value", value
- );
- if(err)
- {
- AFB_ERROR("Unable to pack JSON endpoint, =%s", wrap_json_get_error_string(err));
- return AHL_FAIL;
- }
- json_object_array_add(*ppProptableJ, pPropertyJ);
- }
- }
-
- return AHL_SUCCESS;
-}
-
-int EndpointInfoToJSON(EndpointInfoT * pEndpointInfo, json_object **ppEndpointInfoJ)
-{
- if(pEndpointInfo == NULL || pEndpointInfo->pPropTable == NULL)
- {
- AFB_ERROR("Invalid EndpointInfoToJSON arguments");
- return AHL_FAIL;
- }
-
- json_object * pPropTableJ = NULL;
- int err = EndpointPropTableToJSON(pEndpointInfo->pPropTable,&pPropTableJ);
- if (err) {
- return AHL_FAIL;
- }
-
- // Create json object for EndpointInfo
- err = wrap_json_pack(ppEndpointInfoJ, "{s:i,s:i,s:s,s:s,s:s,s:s,s:s,s:i,s:s,s:i,s:i,s:i,s:i,s:i,s:i,s:i,s:o}",
- "endpoint_id", pEndpointInfo->endpointID,
- "endpoint_type", pEndpointInfo->type,
- "device_name", pEndpointInfo->gsDeviceName,
- "display_name", pEndpointInfo->gsDisplayName,
- "device_uri", pEndpointInfo->gsDeviceURI,
- "device_domain", pEndpointInfo->gsDeviceDomain,
- "audio_role",pEndpointInfo->pRoleName,
- "device_uri_type", pEndpointInfo->deviceURIType,
- "hal_api_name", pEndpointInfo->gsHALAPIName,
- "alsa_cardNum", pEndpointInfo->alsaInfo.cardNum,
- "alsa_deviceNum", pEndpointInfo->alsaInfo.deviceNum,
- "alsa_subDeviceNum", pEndpointInfo->alsaInfo.subDeviceNum,
- "format_samplerate", pEndpointInfo->format.sampleRate,
- "format_numchannels", pEndpointInfo->format.numChannels,
- "format_sampletype",pEndpointInfo->format.sampleType,
- "volume", pEndpointInfo->iVolume,
- "property_table", pPropTableJ
- );
- if (err) {
- AFB_ERROR("Unable to pack JSON endpoint, =%s", wrap_json_get_error_string(err));
- return AHL_FAIL;
- }
-
- return AHL_SUCCESS;
-}
-
-int StreamInfoToJSON(StreamInfoT * pStreamInfo, json_object **ppStreamInfoJ)
-{
- if(pStreamInfo == NULL)
- {
- AFB_ERROR("Invalid arguments to StreamInfoToJSON");
- return AHL_FAIL;
- }
-
- json_object * pEndpointInfoJ = NULL;
- int err = EndpointInfoToJSON(pStreamInfo->pEndpointInfo, &pEndpointInfoJ);
- if (err) {
- return AHL_FAIL;
- }
-
- // Create json object for stream
- err = wrap_json_pack(ppStreamInfoJ, "{s:i,s:i,s:i,s:I,s:i,s:s,s:i,s:i,s:o}",
- "stream_id", pStreamInfo->streamID,
- "stream_state", pStreamInfo->streamState,
- "stream_mute", pStreamInfo->streamMute,
- "stream_state_event", &pStreamInfo->streamStateEvent,
- "endpoint_sel_mod", pStreamInfo->endpointSelMode,
- "role_name", pStreamInfo->pRoleName,
- "priority", pStreamInfo->iPriority,
- "interrupt_behavior", pStreamInfo->eInterruptBehavior,
- "endpoint_info", pEndpointInfoJ
- );
- if (err) {
- AFB_ERROR("Unable to pack JSON endpoint, =%s", wrap_json_get_error_string(err));
- return AHL_FAIL;
- }
-
- return AHL_SUCCESS;
-}
-
-static int UpdatePropertyList(GHashTable * pPropTable, json_object * pPropTableJ) {
- if (pPropTable == NULL || pPropTableJ == NULL) {
- AFB_ERROR("Invalid arguments to UpdatePropertyList");
- return AHL_FAIL;
- }
- // Unpack prop table
- int nbProperties = json_object_array_length(pPropTableJ);
- for(int i = 0; i < nbProperties; i++)
- {
- json_object * propJ = json_object_array_get_idx(pPropTableJ,i);
- if (propJ) {
- char * pPropertyName = NULL;
- json_object * pPropertyValueJ = NULL;
- int err = wrap_json_unpack(propJ, "{s:s,s:o}",
- "property_name", &pPropertyName,
- "property_value", &pPropertyValueJ);
- if (err) {
- AFB_ERROR("Unable to unpack JSON property, = %s", wrap_json_get_error_string(err));
- return AHL_FAIL;
- }
-
- // Object type detection for property value (string = state, numeric = property)
- json_type jType = json_object_get_type(pPropertyValueJ);
- switch (jType) {
- case json_type_double:
- g_hash_table_insert(pPropTable, pPropertyName, json_object_new_double(json_object_get_double(pPropertyValueJ)));
- break;
- case json_type_int:
- g_hash_table_insert(pPropTable, pPropertyName, json_object_new_int(json_object_get_int(pPropertyValueJ)));
- break;
- case json_type_string:
- g_hash_table_insert(pPropTable, pPropertyName, json_object_new_string(json_object_get_string(pPropertyValueJ)));
- break;
- default:
- AFB_ERROR("Invalid property argument Property value not a valid json object query=%s", json_object_get_string(pPropertyValueJ));
- return AHL_FAIL;
- }
- }
- }
-
- return AHL_SUCCESS;
-}
-
-int UpdateEndpointInfo(EndpointInfoT * pEndpoint, json_object * pEndpointInfoJ) {
-
- if(pEndpoint == NULL || pEndpointInfoJ == NULL)
- {
- AFB_ERROR("Invalid arguments to UpdateEndpointInfo");
- return AHL_FAIL;
- }
-
- // Push information to endpoint info struct
- json_object * pPropTableJ = NULL;
- char * pDisplayName = NULL;
- char * pHALName = NULL;
- int err = wrap_json_unpack(pEndpointInfoJ,"{s:i,s:s,s:s,s:o}",
- "init_volume",&pEndpoint->iVolume,
- "display_name",&pDisplayName,
- "hal_name", &pHALName,
- "property_table",&pPropTableJ);
- if (err) {
- AFB_ERROR("Unable to create Endpoint Json object error:%s ",wrap_json_get_error_string(err));
- return AHL_FAIL;
- }
- g_strlcpy(pEndpoint->gsDisplayName,pDisplayName,AHL_STR_MAX_LENGTH);
- g_strlcpy(pEndpoint->gsHALAPIName,pHALName,AHL_STR_MAX_LENGTH);
-
- if (pEndpoint->pPropTable && pPropTableJ) {
- err = UpdatePropertyList(pEndpoint->pPropTable,pPropTableJ);
- if (err) {
- AFB_ERROR("Unable to update property table Json object error:%s ",wrap_json_get_error_string(err));
- return AHL_FAIL;
- }
- }
-
- return AHL_SUCCESS;
-}
-
-static void AudioFormatStructToJSON(json_object **audioFormatJ, AudioFormatT * pAudioFormat)
-{
- wrap_json_pack(audioFormatJ, "{s:i,s:i,s:i}",
- "sample_rate", pAudioFormat->sampleRate,
- "num_channels", pAudioFormat->numChannels,
- "sample_type", pAudioFormat->sampleType);
-}
-
-// Package only information that can useful to application clients when selecting endpoint
-void JSONPublicPackageEndpoint(EndpointInfoT * pEndpointInfo,json_object **endpointInfoJ)
-{
- json_object *formatInfoJ = NULL;
- int err = wrap_json_pack(endpointInfoJ, "{s:i,s:s,s:s,s:s,s:s,s:s,s:s}",
- "endpoint_id", pEndpointInfo->endpointID,
- "endpoint_type", (pEndpointInfo->type == ENDPOINTTYPE_SOURCE) ? AHL_ENDPOINTTYPE_SOURCE : AHL_ENDPOINTTYPE_SINK,
- "device_name", pEndpointInfo->gsDeviceName,
- "display_name", pEndpointInfo->gsDisplayName,
- "audio_role", pEndpointInfo->pRoleName,
- "device_domain",pEndpointInfo->gsDeviceDomain,
- "device_uri_type", DeviceURITypeEnumToStr(pEndpointInfo->deviceURIType));
- if(err)
- {
- AFB_NOTICE("Content object=%s", json_object_get_string(*endpointInfoJ));
- }
-
- AudioFormatStructToJSON(&formatInfoJ,&pEndpointInfo->format);
- json_object_object_add(*endpointInfoJ,"format",formatInfoJ);
-
- json_object *pPropTableJ = NULL;
- EndpointPropTableToJSON(pEndpointInfo->pPropTable,&pPropTableJ);
- json_object_object_add(*endpointInfoJ,"properties",pPropTableJ);
-}
-
-// Package only information that can useful to application clients when opening a stream
-void JSONPublicPackageStream(StreamInfoT * pStreamInfo,json_object **streamInfoJ)
-{
- json_object *endpointInfoJ = NULL;
- JSONPublicPackageEndpoint(pStreamInfo->pEndpointInfo,&endpointInfoJ);
- int err = wrap_json_pack(streamInfoJ, "{s:i,s:s,s:s,s:s}",
- "stream_id", pStreamInfo->streamID,
- "state", StreamStateEnumToStr(pStreamInfo->streamState),
- "mute", StreamMuteEnumToStr(pStreamInfo->streamMute),
- "device_uri",pStreamInfo->pEndpointInfo->gsDeviceURI); // Need to open a stream to have access to the device URI
-
- if(err)
- {
- AFB_NOTICE("Content object=%s", json_object_get_string(*streamInfoJ));
- }
-
- json_object_object_add(*streamInfoJ,"endpoint_info",endpointInfoJ);
-} \ No newline at end of file
diff --git a/src/ahl-policyJSON.h b/src/ahl-policyJSON.h
deleted file mode 100644
index c651f79..0000000
--- a/src/ahl-policyJSON.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2017 "Audiokinetic Inc"
- *
- * 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.
- */
-
-#ifndef AHL_POLICY_JSON_INCLUDE
-#define AHL_POLICY_JSON_INCLUDE
-
-#include <json-c/json.h>
-#include <afb/afb-binding.h>
-#include "ahl-policy-utils.h" // TODO: Should remigrate AHL structures to binding.h
-
-int EndpointInfoToJSON(EndpointInfoT * pEndpointInfo, json_object **ppEndpointInfoJ);
-int StreamInfoToJSON(StreamInfoT * pStreamInfo, json_object **ppStreamInfoJ);
-int UpdateEndpointInfo(EndpointInfoT * pEndpoint,json_object * pEndpointInfoJ);
-void JSONPublicPackageEndpoint(EndpointInfoT * pEndpointInfo,json_object **endpointInfoJ);
-void JSONPublicPackageStream(StreamInfoT * pStreamInfo,json_object **streamInfoJ);
-
-#endif // AHL_POLICY_JSON_INCLUDE