Difference between revisions of "Development/Tutorials/Solid/Introduction"

Jump to: navigation, search
(Searching for specific devices)
 
(11 intermediate revisions by 8 users not shown)
Line 2: Line 2:
 
Solid is the new hardware device framework for KDE 4 that features, among other things, a hardware discovery layer which allows you to detect and use devices regardless of operating system or architecture. You can learn more about the Solid project at [http://solid.kde.org solid.kde.org].
 
Solid is the new hardware device framework for KDE 4 that features, among other things, a hardware discovery layer which allows you to detect and use devices regardless of operating system or architecture. You can learn more about the Solid project at [http://solid.kde.org solid.kde.org].
  
== Who is this tutorial for? ==
+
For a more detailed (still not complete!) description, read [[Development/Architecture/KDE4/Solid|here]].
 +
 
 +
== Who are those tutorials for? ==
 
This tutorial is written for developers looking to use the Solid hardware discovery layer within their applications.  It can also serve as a good starting point for developers looking to start working on the Solid framework.
 
This tutorial is written for developers looking to use the Solid hardware discovery layer within their applications.  It can also serve as a good starting point for developers looking to start working on the Solid framework.
  
== Prerequisites ==
+
== Solid core library tutorials ==
* A working KDE4 development environment. Documentation on setting up a KDE environment can be found [[Getting_Started|here]].
+
 
+
== Listing Devices ==
+
Our first program will be a simple console based app that gets a list of all the hardware devices and prints them out to the screen.
+
 
+
<code cppqt>
+
    Solid::DeviceNotifier *notifier = Solid::DeviceNotifier::instance();
+
</code>
+
 
+
This gets us the device manager.  All the devices are queried through and returned from the device manager.  Once we have the list of devices we can interact with them as follows:
+
 
+
<code cppqt>foreach( Solid::Device device, Solid::Device::allDevices() )
+
{
+
    //print the name of device
+
    kDebug() << device.udi() << endl;
+
}
+
</code>
+
 
+
device.udi() returns the Unique Device Identifier for the device as a QString. Even if you have more than one identical device, the UDI is guaranteed to be unique.  For example if you have a MythTV box with two PVR-250 T.V. capture cards in it, you will be able to refer to card #1 and #2 by their respective UDI.
+
 
+
The complete program along with the CMake files necessary to build it can be found under "[http://websvn.kde.org/trunk/KDE/kdelibs/solid/examples/tutorial1/ kdelibs/solid/examples/tutorial1/]".
+
 
+
== Searching for specific devices ==
+
This second program makes uses of filters built into the solid framework.  Using these filters you can list only devices according to supported capabilities, sub-devices of a given parent, and various predicates.  In our example we'll be limiting our list to only audio hardware.  A full list of capabilities can be viewed under the Solid::Capability namespace.
+
 
+
<code cppqt>
+
Solid::DeviceNotifier *notifier = Solid::DeviceNotifier::instance();
+
   
+
//get a list of all devices that are AudioHw
+
foreach (Solid::Device device, Solid::Device::listFromType(Solid::DeviceInterface::AudioInterface, QString()))
+
{
+
  kDebug() << device.udi().toLatin1().constData() << endl;
+
}
+
</code>
+
 
+
In this example Solid::DeviceManager::findDevicesFromQuery looks for a device with any parent and the Solid::Capability::AudioHw capability.  If we had wanted to specify an AudioHw device with the parent "real_specific_parent" it would look like this:
+
   
+
<code cppqt>Solid::Device::listFromType(Solid::Capability::AudioHw,"real_specific_parent" )</code>
+
The complete program along with the CMake files required to build it can be found under "[http://websvn.kde.org/trunk/KDE/kdelibs/solid/examples/tutorial2/ kdelibs/solid/examples/tutorial2/]".
+
 
+
== What do we do with a device once we get it? ==
+
Now that we got a device, what do we do with it?  First let's look at the relationship between the Solid::Device and Solid::Capability. A Solid::Device can contain many Solid::Capability.  A device can be tested to have a capability in the following way:
+
<code cppqt>
+
Solid::DeviceManager &manager = Solid::DeviceManager::self();
+
 
+
//get a Processor
+
Solid::DeviceList list = manager.findDevicesFromQuery(Solid::Capability::Processor, QString());
+
 
+
//take the first processor
+
Solid::Device device = list[0];
+
if(device.is<Solid::Processor>() ) kDebug() << "We've got a processor!" << endl;
+
else kDebug() << "Device is not a processor." << endl;
+
  
Solid::Processor *processor = device.as<Solid::Processor>();
+
;[[Development/Tutorials/Solid/Device_Discovery|Listing Devices]]
kDebug() << "This processors maximum speed is: " << processor->maxSpeed() << endl;
+
:''How to use the Solid core library to discover the hardware and interact with the system.''
  
</code>
+
;[[Development/Tutorials/Solid/Network_Management|Accessing Network Information]]
 +
:''How to use the Solid system to get information about the network''
  
To actually use this device as a processor we need to do the following:
+
;[[Development/Tutorials/Solid/Device_Actions|Creating a Device Action]]
<code cppqt>
+
:''When your application is interested in registering actions with the system for removable hardware''
    Solid::Processor *processor = device.as<Solid::Processor>();
+
</code>
+
The complete program along with the CMake files required to build it can be found under "[http://websvn.kde.org/trunk/KDE/kdelibs/solid/examples/tutorial3/ kdelibs/solid/examples/tutorial3/]".
+
  
 
[[Category:Tutorial]]
 
[[Category:Tutorial]]

Latest revision as of 15:41, 30 September 2011

[edit] What is Solid

Solid is the new hardware device framework for KDE 4 that features, among other things, a hardware discovery layer which allows you to detect and use devices regardless of operating system or architecture. You can learn more about the Solid project at solid.kde.org.

For a more detailed (still not complete!) description, read here.

[edit] Who are those tutorials for?

This tutorial is written for developers looking to use the Solid hardware discovery layer within their applications. It can also serve as a good starting point for developers looking to start working on the Solid framework.

[edit] Solid core library tutorials

Listing Devices
How to use the Solid core library to discover the hardware and interact with the system.
Accessing Network Information
How to use the Solid system to get information about the network
Creating a Device Action
When your application is interested in registering actions with the system for removable hardware

This page was last modified on 30 September 2011, at 15:41. This page has been accessed 29,114 times. Content is available under Creative Commons License SA 3.0 as well as the GNU Free Documentation License 1.2.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V.Legal