Adapter hierarchy
=================

Service		org.neard
Interface	org.neard.Adapter
Object path	[variable prefix]/{nfc0,nfc1,...}

Methods:	dict GetProperties()

			Returns all properties for the device. See the
			properties section for available properties.

			Possible Errors: org.neard.Error.DoesNotExist

		void SetProperty(string name, variant value)

			Changes the value of the specified property. Only
			properties that are listed a read-write are changeable.
			On success this will emit a PropertyChanged signal.

			Possible Errors: org.neard.Error.DoesNotExist
					 org.neard.Error.InvalidArguments

		void StartPollLoop(string mode)

			Starts the adapter polling loop. Depending on the mode,
			the adapter will start polling for targets, listening
			for NFC devices or both.
			The mode parameter can have the following values:
			"Initiator", "Target" or "Dual". For any other value
			the adapter will fall back to initiator mode.
			Dual mode will have the adapter alternate between target
			and initiator modes during the polling loop.

			This process will start emitting TagFound and
			PropertyChanged "Polling" signals.

			Possible errors: org.neard.Error.NotReady
					 org.neard.Error.Failed
					 org.neard.Error.NotSupported

		void StopPollLoop()

			The adapter polling loop will stop.

			Possible errors: org.neard.Error.NotReady
					 org.neard.Error.Failed
					 org.neard.Error.NotSupported

		object StartEmulation(dict attributes)

			Starts tag emulation mode.

			Adapters can only emulate one target at a time, so
			subsequent calls to this method will always return
			the same object path.

			The attributes dictionary is described by the
			Record properties.
			For example, one would add a type, a Language, an
			Encoding and a Representation for emulating a text
			NDEF record.

			Returns the object path for the emulated target.

			Possible errors: org.neard.Error.NotReady
					 org.neard.Error.Failed
					 org.neard.Error.NotSupported

		void StopEmulation()

			Stops tag emulation mode.

			Possible errors: org.neard.Error.NotReady
					 org.neard.Error.Failed
					 org.neard.Error.NotSupported


Signals		PropertyChanged(string name, variant value)

			This signal indicates a changed value of the given
			property.

		TagFound(string address, dict values)

			This signal is sent whenever an NFC tag is found,
			as a result of a probe response reception.

			The dictionary contains basically the same values
			that are returned by the GetProperties method
			from the org.neard.Tag interface.

		TagLost(string address)

			This signal is sent whenever the NFC tag is no longer
			in sight, or when it's been de-activated.


Properties	string Mode [readonly]

			The adapter NFC radio mode.

			Valid types are "Initiator", "Target" and "Idle"

		boolean Powered [readwrite]

			Switch an adapter on or off.

		boolean Polling [readonly]

			Indicates that the adapter is currently polling for
			targets. This is only valid when the adapter is in
			initiator mode.

		array{string} Protocols [readonly]

			The adapter supported protocols.
			Possible values are "Felica", "MIFARE", "Jewel",
			"ISO-DEP" and "NFC-DEP".
