RE: [PATCH BlueZ v4] doc: Initial Bluetooth Mesh API

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Inga,

I approve of this API, and will be applying it shortly with the noted typo fix.

> -----Original Message-----
> From: linux-bluetooth-owner@xxxxxxxxxxxxxxx [mailto:linux-bluetooth-
> owner@xxxxxxxxxxxxxxx] On Behalf Of Inga Stotland
> Sent: Monday, November 19, 2018 11:29 PM
> To: linux-bluetooth@xxxxxxxxxxxxxxx
> Cc: marcel@xxxxxxxxxxxx; johan.hedberg@xxxxxxxxx;
> luiz.dentz@xxxxxxxxx; Gix, Brian <brian.gix@xxxxxxxxx>; Stotland, Inga
> <inga.stotland@xxxxxxxxx>
> Subject: [PATCH BlueZ v4] doc: Initial Bluetooth Mesh API
> 
> This decribes proposed D-Bus based API for Bluetooth Mesh
> implementation.
> ---
>  doc/mesh-api.txt | 512
> +++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 512 insertions(+)
>  create mode 100644 doc/mesh-api.txt
> 
> diff --git a/doc/mesh-api.txt b/doc/mesh-api.txt new file mode 100644 index
> 000000000..eed7ba653
> --- /dev/null
> +++ b/doc/mesh-api.txt
> @@ -0,0 +1,512 @@
> +BlueZ D-Bus Mesh API description
> +********************************
> +
> +Mesh Network Hierarchy
> +======================
> +Service		org.bluez.mesh
> +Interface	org.bluez.mesh.Network1
> +Object path	/org/bluez/mesh
> +
> +Methods:
> +		void Join(object app_defined_root, array{byte}[16] uuid)
> +
> +			This is the first method that an application has to call
> to become
> +			a provisioned node on a mesh network. The call will
> initiate
> +			broadcasting of Unprovisioned Device Beacon.
> +
> +			The app_defined_root parameter is a D-Bus object
> root path of the
> +			application that implements
> org.bluez.mesh.Application1 interface.
> +			The application represents a node where child mesh
> elements have
> +			their own objects that implement
> org.bluez.mesh.Element1 interface.
> +			The application hierarchy also contains a provision
> agent object
> +			that implements org.bluez.mesh.ProvisionAgent1
> interface.
> +			The standard DBus.ObjectManager interface must be
> available on the
> +			app_defined_root path.
> +
> +			The uuid parameter is a 16-byte array that contains
> Device UUID.
> +
> +			PossibleErrors:
> +				org.bluez.mesh.Error.InvalidArguments
> +
> +		void Cancel(void)
> +			Cancels an outstanding provisioning request initiated
> by Join()
> +			method.
> +
> +		(object node, array{byte, array{(uint16, dict}} configuration)
> +				Attach(object app_defined_root, uint64
> token)
> +
> +			This is the first method that an application must call to
> get access
> +			to mesh node functionalities.
> +
> +			The app_defined_root parameter is a D-Bus object
> root path of the
> +			application that implements
> org.bluez.mesh.Application1 interface.
> +			The application represents a node where child mesh
> elements have
> +			their own objects that implement
> org.bluez.mesh.Element1 interface.
> +			The standard DBus.ObjectManager interface must be
> available on the
> +			app_defined_root path.
> +
> +			The token parameter is a 64-bit number that has
> been assigned to the
> +			application when it first got provisioned/joined mesh
> network, i.e.
> +			upon receiving JoinComplete() method. The daemon
> uses the token to
> +			verify whether the application is authorized to
> assume the mesh
> +			node identity.
> +
> +			In case of success, the method call returns mesh
> node object (see
> +			Mesh Node Hierarchy section) and current
> configuration settings.
> +			The return value of configuration parameter is an
> array, where each
> +			entry is a structure that contains element
> configuration.
> +			The element configuration structure is organized as
> follows:
> +
> +				byte
> +
> +					Element index, identifies the
> element to which this
> +					configuration entry pertians.
> +
> +				array{struct}
> +
> +					Models array where each entry is a
> structure with the
> +					following members:
> +
> +						uint16
> +
> +							Either a SIG Model
> Identifier or, if Vendor key is
> +							present in model
> configuration dictionary, a 16-bit
> +							vendor-assigned
> Model Identifier
> +
> +						dict
> +
> +							A dictionary that
> contains model configuration with
> +							the following keys
> defined:
> +
> +								array{uint16}
> Bindings
> +
> +
> 	Indices of application keys bound to
> +									the
> model
> +
> +								uint32
> PublicationPeriod
> +
> +
> 	Model publication period in milliseconds
> +
> +								uint16
> Vendor
> +
> +									A 16-
> bit Bluetooth-assigned Company
> +
> 	Identifier of the vendor as defined by
> +
> 	Bluetooth SIG
> +
> +			PossibleErrors:
> +				org.bluez.mesh.Error.InvalidArguments
> +				org.bluez.mesh.Error.NotFound,
> +				org.bluez.mesh.Error.Failed
> +
> +		void Leave(uint64 token)
> +
> +			This removes the configuration information about
> the mesh node
> +			identified by the 64-bit token parameter. The token
> parameter
> +			has been obtained as a result of successful Join()
> method call.
> +
> +			PossibleErrors:
> +				org.bluez.mesh.Error.NotFound
> +
> +
> +Mesh Node Hierarchy
> +===================
> +Service		org.bluez.mesh
> +Interface	org.bluez.mesh.Node1
> +Object path	/org/bluez/mesh/node<xxxx>
> +		where xxxx is a 4-digit hexadecimal number generated by
> meshd daemon
> +
> +Methods:
> +		void Send(object element_path, uint16 destination, uint16
> key_index,
> +								array{byte}
> data)
> +
> +			This method is used to send a message originated by
> a local model.
> +
> +			The element_path parameter is the object path of an
> element from
> +			a collection of the application elements (see Mesh
> Application
> +			Hierarchy section).
> +
> +			The destination parameter contains the destination
> address. This
> +			destination must be a uint16 to a unicast address, or a
> well known
> +			group address.
> +
> +			The key_index parameter determines which
> application key to use for
> +			encrypting the message. The key_index must be
> valid for that
> +			element, i.e., the application key must be bound to a
> model on this
> +			element. Otherwise,
> org.bluez.mesh.Error.NotAuthorized will be
> +			returned.
> +
> +			The data parameter is an outgoing message to be
> encypted by the
> +			meshd daemon and sent on.
> +
> +			Possible errors:
> +				org.bluez.mesh.Error.NotAuthorized
> +				org.bluez.mesh.Error.InvalidArguments
> +				org.bluez.mesh.Error.NotFound
> +
> +		void Publish(object element_path, uint16 model, array{byte}
> data)
> +
> +			This method is used to send a publication originated
> by a local
> +			model. If the model does not exist, or it has no
> publication record,
> +			the method returns
> org.bluez.mesh.Error.DoesNotExist error.
> +
> +			The element_path parameter is the object path of an
> element from
> +			a collection of the application elements (see Mesh
> Application
> +			Hierarchy section).
> +
> +			The model parameter contains a model ID, as defined
> by the
> +			Bluetooth SIG.
> +
> +			Since only one Publish record may exist per element-
> model, the
> +			destination and key_index are obtained from the
> Publication
> +			record cached by the daemon.
> +
> +			Possible errors:
> +				org.bluez.mesh.Error.DoesNotExist
> +				org.bluez.mesh.Error.InvalidArguments
> +
> +		void VendorPublish(object element_path, uint16 vendor,
> uint16 model_id,
> +								array{byte}
> data)
> +
> +			This method is used to send a publication originated
> by a local
> +			vendor model. If the model does not exist, or it has
> no publication
> +			record, the method returns
> org.bluez.mesh.Error.DoesNotExist error.
> +
> +			The element_path parameter is the object path of an
> element from
> +			a collection of the application elements (see Mesh
> Application
> +			Hierarchy section).
> +
> +			The vendor parameter is a 16-bit Bluetooth-assigned
> Company
> +			Identifier.
> +
> +			The model_id parameter is a 16-bit vendor-assigned
> Model Identifier.
> +
> +			Since only one Publish record may exist per element-
> model, the
> +			destination and key_index are obtained from the
> Publication
> +			record cached by the daemon.
> +
> +			Possible errors:
> +				org.bluez.mesh.Error.DoesNotExist
> +				org.bluez.mesh.Error.InvalidArguments
> +
> +Properties:
> +		dict Features [read-only]
> +
> +			The dictionary that contains information about
> feature support.
> +			The following keys are defined:
> +
> +				boolean Friend
> +
> +					Indicates the ability to establish a
> friendship with a
> +					Low Power node
> +
> +				boolean LowPower
> +
> +					Indicates support for operating in
> Low Power node mode
> +
> +				boolean Proxy
> +
> +					Indicates support for GATT proxy
> +
> +				boolean Relay - indicates support for relaying
> messages
> +
> +			If the key is absent from the dictionary, the feature is
> not
> +			supported. Otherwise, true means that the feature is
> enabled and
> +			false means that the feature is disabled.
> +
> +		boolean Beacon [read-only]
> +
> +			This property indicates whether the periodic
> beaconing is enabled
> +			(true) or disabled (false).
> +
> +		uint32 SecondsSinceLastHeard [read-only]
> +
> +			This property may be read at any time to determine
> the number of
> +			seconds since mesh network layer traffic was last
> detected on this
> +			node's network.
> +
> +
> +Mesh Application Hierarchy
> +==========================
> +Service		unique name
> +Interface		org.bluez.mesh.Application1
> +Object path	<app_defined_root>
> +
> +An application is a collection of elements that host SIG defined and
> +vendor specific models. It is expected that an application implements
> +org.freedesktop.DBus.ObjectManager interface.
> +
> +An example mesh application hierarchy may look like this:
> +
> +		-> /com/example
> +			|   - org.freedesktop.DBus.ObjectManager
> +			|   - org.bluez.mesh.Application1
> +			|   - org.bluez.mesh.Attention1 (optional)
> +			|
> +			-> /com/example/agent
> +			| |   - org.bluez.mesh.ProvisionAgent1
> +			|
> +			-> /com/example/ele00
> +			| |   - org.bluez.mesh.Element1
> +			-> /com/example/ele01
> +			| |   - org.bluez.mesh.Element1
> +			...
> +			-> /com/example/elexx
> +			| |   - org.bluez.mesh.Element1
> +
> +Methods:
> +		void JoinComplete(uint64 token)
> +
> +			This method is called when the node provisioning
> initiated
> +			by a Join() method call successfully completed.
> +
> +			The token parameter serves as a unique identifier of
> the particular
> +			node. The token must be preserved by the
> application in order to
> +			authenticate itself to the mesh daemon and attach to
> the network
> +			as a mesh node by calling Attach() method or
> permanently remove the
> +			identity of the mesh node by calling Leave() method.
> +
> +		void JoinFailed(string reason)
> +
> +			This method is called when the node provisioning
> initiated
> +			by Join() has failed.
> +
> +			The reason parameter identifies the reason for
> provisioning failure.
> +			The defined values are: "timeout", "bad-pdu",
> "confirmation-failed",
> +			"out-of-resources", "decryption-error",
> "unexpected-error",
> +			"cannot-assign-addresses".
> +
> +Properties:
> +		uint16 CompanyID [read-only]
> +
> +			A 16-bit Bluetooth-assigned Company Identifier of
> the vendor as
> +			defined by Bluetooth SIG
> +
> +		uint16 ProductID [read-only]
> +
> +			A 16-bit vendor-assigned product identifier
> +
> +		uint16 VersionID [read-only]
> +
> +			A 16-bit vendor-assigned product version identifier
> +
> +
> +Mesh Element Hierarchy
> +======================
> +Service		unique name
> +Interface	org.bluez.mesh.Element1
> +Object path	<app_defined_element_path>
> +
> +Methods:
> +		void MessageReceived(uint16 source, uint16 key_index,
> +								boolean
> subscription, array{byte} data)
> +
> +			This method is called by meshd daemon when a
> message arrives
> +			addressed to the application.
> +
> +			The source parameter is unicast address of the
> remote node-element
> +			that sent the message.
> +
> +			The key_index parameter indicates which application
> key has been
> +			used to decode the incoming message. The same
> key_index should be
> +			used by the application when sending a response to
> this message
> +			(in case a response is expected).
> +
> +			The subscription parameter is a boolean that is set to
> true if
> +			the message is received as a part of the subscription
> (i.e., the
> +			destination is either a well known group address or a
> virtual
> +			label.
> +
> +			The data parameter is the incoming message.
> +
> +		void UpdateModelConfiguration(uint16 model_id, dict
> config)
> +
> +			This method is called by meshd daemon when a
> model's configuration
> +			is updated.
> +
> +			The model_id parameter contains BT SIG Model
> Identifier or, if
> +			Vendor key is present in config dictionary, a 16-bit
> +			vendor-assigned Model Identifier.
> +
> +			The config parameter is a dictionary with the
> following keys
> +			defined:
> +
> +				array{uint16} Bindings
> +
> +					Indices of application keys bound to
> the model
> +
> +				uint32 PublicationPeriod
> +
> +					Model publication period in
> milliseconds
> +
> +				uint16 Vendor
> +
> +					A 16-bit Bluetooth-assigned Company
> Identifier of the
> +					vendor as defined by Bluetooth SIG
> +
> +Properties:
> +			uint8 Index [read-only]
> +
> +				Element index. It is required that the
> application follows
> +				sequential numbering scheme for the
> elements, starting with 0.
> +
> +			array{uint16} Models [read-only]
> +
> +				An array of SIG Model Identifiers. The array
> may be empty.
> +
> +			array{(uint16, uint16)} VendorModels [read-only]
> +
> +				An array of pairs (vendor, model ID):
> +
> +					vendor is a 16-bit Bluetooth-assigned
> Company Identifier
> +					of the vendor as defined by
> Bluetooth SIG
> +
> +					model ID is a 16-bit vendor-assigned
> Model Identifier
> +
> +				The array may be empty.
> +
> +			uint16 Location [read-only, optional]
> +
> +				Location descriptor as defined in the GATT
> Bluetooth Namespace
> +				Descriptors section of the Bluetooth SIG
> Assigned Numbers
> +
> +
> +Mesh Attention Hierarchy
> +========================
> +Service		unique name
> +Interface	org.bluez.mesh.Attention1
> +Object path	freely definable
> +
> +This is an optional interface that implements health attention timer.
> +
> +Methods:
> +		void SetTimer(uint8 element_index,  uint16 time)
> +
> +			The element_index parameter is the element's index
> within the node
> +			where the health server model is hosted.
> +
> +			The time parameter indicates how many seconds the
> attention state
> +			shall be on.
> +
> +			PossibleErrors:
> +				org.bluez.mesh.Error.NotSupported
> +
> +		uint16 GetTimer(uint16 element)
> +
> +			The element parameter is the unicast address within
> the node
> +			where the health server model is hosted.
> +
> +			Returns the number of seconds for how long the
> attention action
> +			remains staying on.
> +
> +			PossibleErrors:
> +				org.bluez.mesh.Error.NotSupported
> +
> +
> +Provisioning Agent Hierarchy
> +============================
> +Service		unique name
> +Interface	org.bluez.mesh.ProvisionAgent

Interface name will be org.bluez.mesh.ProvisionAgent1

> +Object path	freely definable
> +
> +Methods:
> +		array{byte} PrivateKey()
> +
> +			This method is called during provisioning if the
> Provisioner
> +			has requested Out-Of-Band ECC key exchange. The
> Private key
> +			is returned to the Daemon, and the Public Key is
> delivered to
> +			the remote Provisioner using a method that does not
> involve
> +			the Bluetooth Mesh system. The Private Key
> returned must be
> +			32 octets in size, or the Provisioning procedure will
> fail
> +			and be canceled.
> +
> +			This function will only be called if the Provisioner has
> +			requested pre-determined keys to be exchanged
> Out-of-Band,
> +			and the local role is Unprovisioned device.
> +
> +		array{byte} PublicKey()
> +
> +			This method is called during provisioning if the local
> device
> +			is the Provisioner, and is requestng Out-Of-Band ECC
> key
> +			exchange. The Public key is returned to the Daemon
> +			that is the matched pair of the Private key of the
> remote
> +			device. The Public Key returned must be 64 octets in
> +			size, or the Provisioning procedure will fail and be
> canceled.
> +
> +			This function will only be called if the Provisioner has
> +			requested pre-determined keys to be exchanged
> Out-of-Band,
> +			and the local role is Provisioner.
> +
> +		void DisplayString(string display)
> +			This method is called when the Daemon has
> something important
> +			for the Agent to Display, but does not require any
> additional
> +			input locally. For instance: "Enter "ABCDE" on remote
> device".
> +
> +		void DisplayNumeric(uint8 type, uint32 number)
> +
> +			This method is called when the Daemon has
> something important
> +			for the Agent to Display, but does not require any
> additional
> +			input locally. For instance: "Enter 149264 on remote
> device".
> +
> +			The type parameter indicates the display method. An
> enumeration
> +			of "Blink", "Beep", "Vibrate", or "OutNumeric".
> +
> +			The number parameter is the specific value
> represented by
> +			the Prompt.
> +
> +		uint32 PromptNumeric(uint8 type)
> +
> +			This method is called when the Daemon has requires
> the user to
> +			enter a 1-9 digit decimal value.
> +
> +			The type parameter indicates the input method. An
> enumeration
> +			of "Push", "Twist", or "InNumeric".
> +
> +			This agent should prompt the user for specific input.
> For instance:
> +			"Enter value being displayed by remote device".
> +
> +		array{byte} PromptStatic(uint8 type)
> +
> +			This method is called when the Daemon requires a 16
> octet
> +			byte array, as an Out-of-Band authentication.
> +
> +			The type parameter indicates the input method. An
> enumeration
> +			of "Static", or "InAlpha".
> +
> +			The Static data returned must be 16 octets in size, or
> the
> +			Provisioning procedure will fail and be canceled. If
> input is
> +			an InAlpha String, the printable charactors should be
> left
> +			justified, with trailing 0x00 octets filling the remaining
> bytes.
> +
> +		void Cancel()
> +
> +			This method gets called by the daemon to cancel any
> existing
> +			Agent Requests. When called, any pending user input
> should be
> +			canceled.
> +
> +
> +Properties:
> +			array{string} Capabilities [read-only]
> +
> +				An array of strings with the following allowed
> values:
> +					"blink", "beep", "vibrate", "out-
> numeric", "out-alpha",
> +					"push", "twist", "in-numeric", "in-
> alpha", "public-oob",
> +					"static-oob".
> +
> +
> +			array{string} OutOfBandInfo [read-only, optional]
> +
> +				Indicates availability of OOB data.
> +				An array of strings with the following allowed
> values:
> +					"other", "uri", "machine-code-2d",
> "bar-code", "nfc",
> +					"number", "string", "on-box", "in-
> box", "on-paper",
> +					"in-manual", "on-device"
> +
> +			string URI [read-only, optional]
> +
> +				Uniform Resource Identifier points to out-of-
> band (OOB)
> +				information (e.g., a public key)
> +
> +
> +Mesh Provisioner Hierarchy
> +==========================
> +<TBD>
> --
> 2.17.2




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux