List of the api required by the widget.
-Each required api must be explicited using a `<param>` entry.
+Each required api must be explicit using a `<param>` entry.
Example:
```xml
<feature name="urn:AGL:widget:required-api">
- <param name="#target" value="main" />>
+ <param name="#target" value="main" />
<param name="gps" value="auto" />
<param name="afm-main" value="link" />
</feature>
The value describes how to connect to the required api.
It is either:
-- local:
+- local: OBSOLETE SINCE FF (AGL6), PROVIDED FOR COMPATIBILITY
+ Use the feature **urn:AGL:widget:required-binding** instead.
The binding is a local shared object.
In that case, the name is the relative path of the
shared object to be loaded.
- dbus:
The framework connect using internal dbus
-- link:
- The framework connect in memory by dynamically linking
-
- cloud: [PROPOSAL - NOT IMPLEMENTED]
The framework connect externally using websock.
In that case, the name includes data to access the service.
Example: `<param name="log:https://oic@agl.iot.bzh/cloud/log" value="cloud" />`
+### required-binding: feature name="urn:AGL:widget:required-binding"
+
+List of the bindings required by the widget.
+
+Note: Since AGL 6 (FF - Funky Flounder),
+the binder implements bindings version 3 that allow the declaration
+of 0, 1 or more APIs by one binding. In other words, the equivalency
+one binding = one API is lost. At the same time the framework added
+the ability to use bindings exported by other widgets.
+
+Each required binding must be explicit using a `<param>` entry.
+
+Example:
+
+```xml
+<feature name="urn:AGL:widget:required-binding">
+ <param name="libexec/binding-gps.so" value="local" />
+ <param name="extra" value="extern" />
+</feature>
+```
+
+This will be *virtually* translated for mustaches to the JSON
+
+```json
+"required-binding": [
+ { "name": "libexec/binding-gps.so", "value": "local" },
+ { "name": "extra", "value": "extern" }
+ ]
+```
+
+#### required-binding: param name=[name or path]
+
+The name or the path of the required BINDING.
+
+The value describes how to connect to the required binding.
+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.
+
+- extern:
+ The binding is external. The name is the exported binding name.
+ See provided-binding.
+
+### provided-binding: feature name="urn:AGL:widget:provided-binding"
+
+This feature allows to export a binding to other binders.
+The bindings whose relative name is given as value is exported to
+other binders under the given name.
+
+Each provided binding must be explicit using a `<param>` entry.
+
+Example:
+
+```xml
+<feature name="urn:AGL:widget:provided-binding">
+ <param name="extra" value="export/binding-gps.so" />
+</feature>
+```
+
+This will be *virtually* translated for mustaches to the JSON
+
+```json
+"provided-binding": [
+ { "name": "extra", "value": "export/binding-gps.so" }
+ ]
+```
+
+#### provided-binding: param name=[exported name]
+
+Exports a local binding to other applications.
+
+The value must contain the path to the exported binding.
+
### required-permission: feature name="urn:AGL:widget:required-permission"
List of the permissions required by the unit.
-Each required permission must be explicited using a `<param>` entry.
+Each required permission must be explicit using a `<param>` entry.
Example:
- auto:
export the api using the default method(s).
+### file-properties: feature name="urn:AGL:widget:file-properties"
+
+Use this feature for setting properties to files of the widget.
+At this time, this feature only allows to set executable flag
+for making companion program executable explicitly.
+
+Example:
+
+```xml
+ <feature name="urn:AGL:widget:file-properties">
+ <param name="flite" value="executable" />
+ <param name="jtalk" value="executable" />
+ </feature>
+```
+
+#### file-properties: param name="path"
+
+The name is the relative path of the file whose property
+must be set.
+
+The value must be "executable" to make the file executable.
+
## Known content types
The configuration file ***/etc/afm/afm-unit.conf*** defines