| 
							- /**
 - @page discovering_blocks Discovering BLOCKS
 - 
 - Any BLOCKS application would be pretty limited without the ability to discover the BLOCKS that are connected to your computer.
 - This page gives an overview of the classes and methods available to aid BLOCKS discovery and provides sample code for getting notifications of any connections or disconnections.
 - 
 - @section the_block_topology_object The BlockTopology object
 - 
 - Groups of connected Lightpad and Control Blocks are described by a BlockTopology.
 - 
 - A %BlockTopology contains an array of references to Block objects, which provide access to Lightpad and Control %Block functionality, and an array of BlockDeviceConnection objects, which describe the connections between devices.
 - Once you have a %BlockTopology you have all the information required to visualise and interact with your Lightpads and Control Blocks.
 - For more information about using %Block objects see the @ref the_block_object section.
 - 
 - For Lightpads and Control Blocks a %BlockTopology can be obtained from a PhysicalTopologySource.
 - 
 - @section the_physical_topology_source_object The PhysicalTopologySource object
 - 
 - The current topology is provided by a %PhysicalTopologySource.
 - When instantiated, a %PhysicalTopologySource monitors for any connections from your computer to any Lightpad and Control Blocks and the PhysicalTopologySource::getCurrentTopology() method returns the current %BlockTopology.
 - 
 - In an environment where Lightpad and Control can be connected and disconnected dynamically it is convenient to register your code for <code>topologyChanged()</code> callbacks from a %PhysicalTopologySource.
 - Then, when the current %BlockTopology changes, your application is able to react to the new configuration.
 - You can do this by inheriting from the TopologySource::Listener class and registering as a listener to a %PhysicalTopologySource object.
 - When you inherit from %TopologySource::Listener you must override the pure virtual method TopologySource::Listener::topologyChanged(), which is then called by a %PhysicalTopologySource on topology changes when you register as a listener.
 - A simple example is shown below.
 - 
 - BlockFinder.h:
 - @include BlockFinder/BlockFinder.h
 - 
 - BlockFinder.cpp:
 - @include BlockFinder/BlockFinder.cpp
 - 
 - When instantiated this class simply monitors for changes to the connected Lightpad and Control Blocks and prints some information about them to stdout.
 - Once you have the current %BlockTopology object you have access to the available %Block objects and can start to interact with them.
 - A more complex application would probably do much more in the <tt>topologyChanged()</tt> method---see the @ref example_applications page.
 - 
 - @section the_block_object The Block object
 - 
 - A Block object is the main entry point for communicating between your application and any Lightpad and Control Blocks that are connected to your computer.
 - 
 - All the different %Block types are subclasses of %Block so they provide the same interface (see the %Block class documentation).
 - About half of the %Block public member functions return information about the physical device it represents.
 - In the example code above you can see that we use some of these methods to query each %Block about its current status.
 - The more interesting %Block methods return pointers to objects you can use to control and receive events from individual BLOCKS.
 - More detail about these methods can be obtained from the following pages:
 - 
 - @ref getting_touch_events
 - 
 - @ref getting_control_button_events
 - 
 - @ref controlling_led_grids
 - 
 - @ref controlling_led_strips
 - */
 
 
  |