Hola,
Trato yo de contestar a tus dudas... ya que creo algo de experiencia tengo en el tema...
¿Se podría con un solo bluetooth(hci), extraer servicios y enviar todo concurrentemente o hacen falta dos?
No. no hacen falta dos, pero con uno estas bastante mas limitado.
¿que seria mejor? un proceso para cada tarea y su hilo o hilos correspondientes o solo un proceso con un thread para extraer y otros 6 para enviar?
Nosotros empleamos threads multiples para el proceso general de envio y para cada envio en si. En el de busqueda tambien se emplean theads (en las distintas fases de busqueda) mas que nada para evitar ciertos procesos que son bloqueantes. Aunque esto depende mucho del stack de bluetooth y del SO que estes usando (nosotros lo tenemos para varias plataformas: Windows, Linux, Symbian, nuestra plataforma propia, etc...). Por ejemplo en el caso concreto de linux, lo tenemos tambien hecho en noblocking, con lo cual podriamos prescindir del ciertos threads.
No obstante, como diria Yoda:
Los threads poderosos son, pero con ellos tener cuidado debes... mi padawan...Manejar threads implica un control de datos exaustivo en cada momento, en este caso complica mucho el tema si no se hace "escrupulosamente" bien.
Y una ultima, para gestionar concurrentemente el envio de archivos,¿hay que especificar en algun sitio (libreria, o programandolo a parte) que tal envio se hace por tal "canal", y otro envio por otro?(entendiendo por canal a una de las 7 conexiones concurrentes que puede hacer un modulo bluetooth), o eso lo gestiona automaticamente el bluetooth hasta llegar a las 7 conexiones simultaneas?
Por supuesto tienes que realizar una conexion, a cada terminal por su canal correspondiente (en este caso del del Obex Push) y enviar la informacion segun el protocolo de Obex. Lo de los canales se "sobreentiende" por que si no no tendria ningun sentido usar el SDP en la busqueda. Con un simple inquiry tendriamos suficiente.
No obstante, (por si se te ha pasado por la cabeza)
el uso de aplicaciones externas para el envio (como es el caso del BluezSpammer) es incompatible con el uso de threads en concurrencia (si ya de por si es complicado usar threads sin mas, usando con una ejecucion externa de una aplicacion puede pasar cualquier cosa). Asi que lo mas prudente es implementarse el protocolo OBEX y realizar la conexion directamente...
Por otra parte no esperes ("ni de coña") poder llegar a las 7 conexiones simultaneas. En un envio de ficheros el ancho de banda disponible del bluetooth no te da aunque sea Bluetooth 2.0. Todos los que en Marketing de proximidad calculan las conexiones concurrentes segun la formula:
El numero de modulos bluetooth disponibles x 7 = numero conexiones concurrentes que pueden hacer.
... te mienten DESCARADAMENTE!!!!.
Como comentario final: una herramienta de estas (marketing de proximidad) parece sencilla al principio...
...pero segun vas mentiendote en el tema ... se torna MUUUCCHOOO mas complicada de lo que parecia. Saludos,
Sir Graham.