<?xml version="1.0" encoding="utf-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>
<channel>
	<title>Comments on: libusb-1.0 enters beta</title>
	<atom:link href="http://www.reactivated.net/weblog/archives/2008/05/libusb-10-enters-beta/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.reactivated.net/weblog/archives/2008/05/libusb-10-enters-beta/</link>
	<description>they got a skin and they put me in</description>
	<pubDate>Thu, 20 Nov 2008 11:16:32 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
		<item>
		<title>By: dsd&#8217;s weblog &#187; Blog Archive &#187; libusb-0.9.1 released</title>
		<link>http://www.reactivated.net/weblog/archives/2008/05/libusb-10-enters-beta/#comment-17075</link>
		<dc:creator>dsd&#8217;s weblog &#187; Blog Archive &#187; libusb-0.9.1 released</dc:creator>
		<pubDate>Sun, 29 Jun 2008 02:00:54 +0000</pubDate>
		<guid isPermaLink="false">http://www.reactivated.net/weblog/?p=182#comment-17075</guid>
		<description>[...] development version of libusb-1.0. It incorporates all the feedback I&#8217;ve received from the v0.9.0 release, and includes some API changes, so be sure to update and recompile your apps if you were previously [...]</description>
		<content:encoded><![CDATA[<p>[...] development version of libusb-1.0. It incorporates all the feedback I&#8217;ve received from the v0.9.0 release, and includes some API changes, so be sure to update and recompile your apps if you were previously [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jeff</title>
		<link>http://www.reactivated.net/weblog/archives/2008/05/libusb-10-enters-beta/#comment-17058</link>
		<dc:creator>Jeff</dc:creator>
		<pubDate>Tue, 17 Jun 2008 18:04:35 +0000</pubDate>
		<guid isPermaLink="false">http://www.reactivated.net/weblog/?p=182#comment-17058</guid>
		<description>Hi Daniel,

First off, thanks for taking up this project!  A fresh start seems sorely needed.

I am brand new to USB development, so I've been trying to figure out the best way to start playing with it, and libusb seemed like a good start (as opposed to kernel tinkering).

Unfortunately with libusb-0.1, documentation and examples are very, VERY weak.  While I understand that writing a device driver is going to be device-specific, it simply doesn't cut it for an API to not even explain its function parameters.  I found it fairly frustrating trying to find any useful information, and this coming from a young (read Internet savvy), professional engineer and general code hacker.

By contrast, your documentation (http://libusb.sourceforge.net/api-1.0/) looks fantastic so far!  Couple that with some great example code (maybe there are and I haven't found them yet?), and your adoption rate will be huge.

I have a couple ideas for possible example code (maybe they're not feasible - as I said, I'm just starting with this stuff):

- A "debug console", intended for toying with USB devices, enumerating the bus and allowing you to select a device to connect to, trying to read/write it's endpoints, etc.

- An example using a device that everybody is likely to have available, such as a mouse (HID) or USB thumb drive.  It wouldn't necessarily have to properly operate the device, but just perform some simple probing to show how to use the libusb-1.0 library.

I'd be willing to help in development of these examples, but I admit my C skills are so-so and my time limited.

Thanks again!
-Jeff</description>
		<content:encoded><![CDATA[<p>Hi Daniel,</p>
<p>First off, thanks for taking up this project!  A fresh start seems sorely needed.</p>
<p>I am brand new to USB development, so I&#8217;ve been trying to figure out the best way to start playing with it, and libusb seemed like a good start (as opposed to kernel tinkering).</p>
<p>Unfortunately with libusb-0.1, documentation and examples are very, VERY weak.  While I understand that writing a device driver is going to be device-specific, it simply doesn&#8217;t cut it for an API to not even explain its function parameters.  I found it fairly frustrating trying to find any useful information, and this coming from a young (read Internet savvy), professional engineer and general code hacker.</p>
<p>By contrast, your documentation (http://libusb.sourceforge.net/api-1.0/) looks fantastic so far!  Couple that with some great example code (maybe there are and I haven&#8217;t found them yet?), and your adoption rate will be huge.</p>
<p>I have a couple ideas for possible example code (maybe they&#8217;re not feasible - as I said, I&#8217;m just starting with this stuff):</p>
<p>- A &#8220;debug console&#8221;, intended for toying with USB devices, enumerating the bus and allowing you to select a device to connect to, trying to read/write it&#8217;s endpoints, etc.</p>
<p>- An example using a device that everybody is likely to have available, such as a mouse (HID) or USB thumb drive.  It wouldn&#8217;t necessarily have to properly operate the device, but just perform some simple probing to show how to use the libusb-1.0 library.</p>
<p>I&#8217;d be willing to help in development of these examples, but I admit my C skills are so-so and my time limited.</p>
<p>Thanks again!<br />
-Jeff</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: davidz</title>
		<link>http://www.reactivated.net/weblog/archives/2008/05/libusb-10-enters-beta/#comment-16941</link>
		<dc:creator>davidz</dc:creator>
		<pubDate>Mon, 02 Jun 2008 20:42:01 +0000</pubDate>
		<guid isPermaLink="false">http://www.reactivated.net/weblog/?p=182#comment-16941</guid>
		<description>Hi,

A number of libraries use this pattern; for example libgphoto2, gvfs file system backends, libhal, most GObject-based based libraries. One example of a pure C library that does this is libpolkit

http://hal.freedesktop.org/docs/PolicyKit/polkit-polkit-context.html

Hope this helps.</description>
		<content:encoded><![CDATA[<p>Hi,</p>
<p>A number of libraries use this pattern; for example libgphoto2, gvfs file system backends, libhal, most GObject-based based libraries. One example of a pure C library that does this is libpolkit</p>
<p><a href="http://hal.freedesktop.org/docs/PolicyKit/polkit-polkit-context.html" rel="nofollow">http://hal.freedesktop.org/docs/PolicyKit/polkit-polkit-context.html</a></p>
<p>Hope this helps.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Daniel Drake</title>
		<link>http://www.reactivated.net/weblog/archives/2008/05/libusb-10-enters-beta/#comment-16937</link>
		<dc:creator>Daniel Drake</dc:creator>
		<pubDate>Sun, 01 Jun 2008 10:34:23 +0000</pubDate>
		<guid isPermaLink="false">http://www.reactivated.net/weblog/?p=182#comment-16937</guid>
		<description>Hi David, thanks for the feedback.

Sounds like a sensible change to make. It should not have too much impact on the API: the session context could be stored inside the devices and handles and automatically inferred internally, so only a few function interfaces would need modifications. For convenience the user could also pass a NULL context, which would indicate the first initialized context, or something like that. I'll think more about the details then raise it on the mailing list.

For reference, could you give an example of an existing library that does this well?</description>
		<content:encoded><![CDATA[<p>Hi David, thanks for the feedback.</p>
<p>Sounds like a sensible change to make. It should not have too much impact on the API: the session context could be stored inside the devices and handles and automatically inferred internally, so only a few function interfaces would need modifications. For convenience the user could also pass a NULL context, which would indicate the first initialized context, or something like that. I&#8217;ll think more about the details then raise it on the mailing list.</p>
<p>For reference, could you give an example of an existing library that does this well?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: davidz</title>
		<link>http://www.reactivated.net/weblog/archives/2008/05/libusb-10-enters-beta/#comment-16936</link>
		<dc:creator>davidz</dc:creator>
		<pubDate>Sat, 31 May 2008 23:51:40 +0000</pubDate>
		<guid isPermaLink="false">http://www.reactivated.net/weblog/?p=182#comment-16936</guid>
		<description>eh, s/This is a theoretical example/This is not a theoretical example/.. sorry about that.</description>
		<content:encoded><![CDATA[<p>eh, s/This is a theoretical example/This is not a theoretical example/.. sorry about that.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: davidz</title>
		<link>http://www.reactivated.net/weblog/archives/2008/05/libusb-10-enters-beta/#comment-16935</link>
		<dc:creator>davidz</dc:creator>
		<pubDate>Sat, 31 May 2008 23:50:49 +0000</pubDate>
		<guid isPermaLink="false">http://www.reactivated.net/weblog/?p=182#comment-16935</guid>
		<description>Suppose I write a program that uses libraries libfoo and libbar. Suppose both libfoo and libbar wants to use libuse-1.0. What happens when libbar is unloaded and it calls libusb_exit()? This is a theoretical example; for example Nautilus and the gio/gvfs stack loads a bunch of plug-ins. And more than one plug-in might want to use libusb (for example different volume monitors; one for handling gphoto2 usb cameras, one for MTP usb devices).

Typically libraries provides a context object (e.g. LibUsbContext *libusb_init() or similar) and use this throughout the API. Under some circumstances you can get away with this. But since you have things like libusb_set_debug() it doesn't look like you can get away with it; this call would affect all users of libusb in the process space; which (typically) is not desired (even though it's probably not a big deal since it's just debugging.. just trying to make a point).

Either way, it would probably make sense to at least document if your library is usable in such situations. Ideally it would be.</description>
		<content:encoded><![CDATA[<p>Suppose I write a program that uses libraries libfoo and libbar. Suppose both libfoo and libbar wants to use libuse-1.0. What happens when libbar is unloaded and it calls libusb_exit()? This is a theoretical example; for example Nautilus and the gio/gvfs stack loads a bunch of plug-ins. And more than one plug-in might want to use libusb (for example different volume monitors; one for handling gphoto2 usb cameras, one for MTP usb devices).</p>
<p>Typically libraries provides a context object (e.g. LibUsbContext *libusb_init() or similar) and use this throughout the API. Under some circumstances you can get away with this. But since you have things like libusb_set_debug() it doesn&#8217;t look like you can get away with it; this call would affect all users of libusb in the process space; which (typically) is not desired (even though it&#8217;s probably not a big deal since it&#8217;s just debugging.. just trying to make a point).</p>
<p>Either way, it would probably make sense to at least document if your library is usable in such situations. Ideally it would be.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
