Hi Everyone<br><br>I'd like to announce that i've begun work on a libhal C++ wrapper, first starting with the core libhal, and next will be libhal-storage. The API is very similar to e.g. cairomm or glibmm, using RefPtrs, etc.
<br><br>So far we have 2 basic first-class objects,  HAL::Context and HAL::Device,&nbsp; HAL::Device being a &quot;virtual&quot; class in the sense that it has no direct representation in the C API (rather the context can be used to acquire information about devices); HAL::Device is basically just a convenience class to bundle methods and manage state related to a device.
<br><br>(I'd also like to put attention onto the fact that the API is mostly/solely geared towards applications, and hence does not implement, for now at least, things that e.g. hald-addon daemons would use, since these are likely to be just written in C anyway).
<br><br>The PS/PSI system is also wrapped in an STL like fashion and can be quite well integrated with standard C++ code.<br><br><br>Here's an usage example, it is included in the halcc-0.1.tar.gz tarball:<br><br><br><span style="font-family: courier new,monospace;">
</span><span style="font-family: courier new,monospace;">#include &lt;iostream&gt;</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"></span><span style="font-family: courier new,monospace;">
#include &lt;dbus/dbus.h&gt;</span><br><span style="font-family: courier new,monospace;">#include &lt;hal++/hal++-types.hh&gt;</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">
#include &lt;hal++/hal++-context.hh&gt;</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">#include &lt;hal++/hal++-device.hh&gt;</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"></span><span style="font-family: courier new,monospace;">int main (int argc, char** argv)</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">{</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp; DBusError error;</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp; dbus_error_init (&amp;error);</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp; DBusConnection * c = dbus_bus_get (DBUS_BUS_SYSTEM, &amp;error);
</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp; HAL::RefPtr&lt;HAL::Context&gt; context =&nbsp; HAL::Context::create (c);</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"><br>&nbsp; HAL::StrV list (context-&gt;find_device_by_capability (&quot;volume&quot;));</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">
&nbsp; for (HAL::StrV::const_iterator i = list.begin (); i != list.end (); ++i)</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp; {</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; HAL::RefPtr&lt;HAL::Device&gt; device = HAL::Device::create (context, *i);</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">
&nbsp;&nbsp;&nbsp; if (device-&gt;get_property &lt;bool&gt; (&quot;volume.is_mounted&quot;))</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; {</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"></span><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot;Volume with UDI '&quot; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt; *i &lt;&lt; &quot;' is mounted on '&quot; 
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt; </span><span style="font-family: courier new,monospace;">device-&gt;get_property &lt;std::string&gt; (&quot;volume.mount_point&quot;)</span><br><span style="font-family: courier new,monospace;">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt; &quot;'&quot; &lt;&lt; std::endl;</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; }</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp; }</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">}</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;">
<br>I've set up a small website on our project wiki here: <br><a href="http://projects.beep-media-player.org/index.php/Main/HAL">http://projects.beep-media-player.org/index.php/Main/HAL</a><br><br>Regards,<br>Milosz<br><br>