2010-10-12 27 views
10

Voy a estar escribiendo una aplicación en Qt que se ejecutará en los 3 sistemas operativos principales (Windows, Linux y Mac). Una de las características de esta aplicación es que necesita USB para comunicarse con un hardware externo personalizado. ¿Hay una biblioteca USB multiplataforma disponible?¿Hay una biblioteca de plataforma cruzada C++?

+0

¿El hardware personalizado habla HID a través de USB o utiliza la línea serie directamente? – nmichaels

+0

Probablemente un enlace en serie. Es un chip USB ATMega, con la biblioteca LUFA USB, que tiene soporte para ambos, pero un enlace serial es probablemente la opción más probable. – Bojangles

+0

Ahh, pero en Windows puede encontrar una docena y media de bibliotecas de terceros para $$$ ;-) –

Respuesta

8

Probar libusb.

sistemas operativos soportados: Linux, FreeBSD, NetBSD, OpenBSD, Darwin, MacOS X (y Windows, a través del proyecto libusb-win32).

Pero debe tener en cuenta que utiliza libusb0.sys controlador en modo kernel en Windows, que no se WHQL y que podría ser un problema en el 64-bit de Windows 7 y Windows Server 2008 R2. Lo sentimos, versión 1.2.0.0 de libusb0.sysis digitally signed.

+0

¡Gracias! Solo la información que necesitaba. – Bojangles

+0

El problema con el uso de libusb-win32 es que es un puerto de libusb-0.1, que no es compatible con libusb-1.0. Sin embargo, ahora parece que libusb-1.0 es compatible con Windows de forma nativa. – trojanfoe

+0

Libusb ha mejorado en los últimos años: ahora puede usarlo en Windows para hablar con dispositivos que tienen WinUSB como su controlador, por lo que no tiene que ejecutar ningún código de modo kernel de terceros como 'libusb0.sys'. –

4

Sólo me gustaría actualizar este post para cualquier persona que se va a volver a ella hoy en día ...

libusb (versión 0.1) ya está en desuso. El estándar moderno es usar libusb-1.0 o libusbx.

Personalmente, creo que hay muchas razones para usar libusbx. Fue escrito por frustrados desarrolladores de libusb-0.1 que querían un ciclo de actualización más frecuente y un mejor sistema de mantenimiento de errores.

Mis razones para sugerir libusbx son los siguientes:

  • no requiere acceso sudo
  • trabajaron mucho mejor para mí fuera de la caja con la lectura de los mensajes entrantes
  • mejor apoyo y más frecuentes respuestas a bugs/problemas
  • asincrónicos y soporte síncrono para el envío/recepción de mensajes

De acuerdo, libusb-1.0 admite informes asincrónicos/sincronizados ... pero la filosofía detrás de libusbx es mucho más atractiva y la documentación es mejor.

Así que depende totalmente de usted, si usted o quien quiera aún desea saber un poco más acerca de las bibliotecas, la historia es muy fácil de encontrar en línea. También puede ver this pregunta sobre la pila para obtener más información sobre el tema inmediato.

+3

A partir de febrero de 2014, en realidad solo queda [libusb] (http://libusb.info).La página principal de linusbx tiene el siguiente comentario: libusbx era una bifurcación de [libusb] (http://libusb.info), una biblioteca que proporciona acceso genérico a dispositivos USB. A partir de 2014.01.26, este proyecto se ha fusionado completamente de nuevo en [libusb] (http://libusb.info) y se ha suspendido. Dado que no habrá nuevas versiones de libusbx, se recomienda encarecidamente que cambie a usar [libusb] (http://libusb.info). – user23573

Cuestiones relacionadas