2009-06-29 13 views
17

Abbiamo un programma che ha bisogno di essere in grado di utilizzare la tecnologia Bluetooth per i seguenti requisiti:Bluetooth in C#, quale stack, quale SDK?

  1. ricevere file da dispositivi Bluetooth (fino a 2 dispositivi allo stesso tempo)
  2. Mostra tutti i dispositivi Bluetooth in gamma
  3. inviare file a dispositivi Bluetooth
  4. ricerca dei dispositivi Bluetooth e trasferire file allo stesso tempo

Siamo in esecuzione su Windows XP.

Ho fatto qualche ricerca in giro e sembra che ci sia 3 pile principali:

BlueSoleil

Sul sito web BlueSoleil, nella loro sezione SDK, sembra per citare solo 1 collegamento è supportato , che ovviamente non va bene.

di Windows

sembra solo per supportare 1 Dongle Bluetooth, che probabilmente significa che non siamo in grado di soddisfare tutte le nostre esigenze.

Widcomm

costoso e potenzialmente eccessivo? API più complessa? Pensieri?

In termini di SDK per C#, stava guardando Franson Bluetools, qualcuno ha utilizzato questa API?

Grazie

risposta

18

In primo luogo il disclaimer, sono il manutentore della libreria 32feet.NET. :-)

Ho appena controllato, e su XP con lo stack Microsoft (utilizzando un dongle) posso contemporaneamente ricevere due OBUT PUT e anche scoprire dispositivi. Ciò sta utilizzando la classe ObexListener di 32feet.NET e il metodo BluetoothClient.DiscoverDevices. Per inviare OBEX PUT si può usare la sua classe ObexWebRequest. Per fare più connessioni parallele con ObexListener ho avuto solo thread multipli che chiamano il suo metodo GetContext().

Ecco, questo è forse più semplice di quello che pensavamo ...

Ho anche provato con OBEX Server di Andy Hume utilizzando la sua biblioteca Brecham.Obex e la concomitante ricevo funziona bene anche lì. È disponibile da http://32feet.net/files/folders/objectexchange/entry6511.aspx.

Sul nostro supporto Widcomm. Speriamo che non sembri troppo "incompleto" dal lato del cliente ... Inquiry (device discovery) e connessioni funzionano tutte. Il lato server ha ancora bisogno di un po 'di lavoro e ci sono alcune cose che l'API di Widcomm semplicemente non supporta, ad es. (gestione di autenticazione programmatica).

Qual è stato il problema con i campioni? Compile-time o run-time? Nello stack MSFT o Widcomm? Follow-up allo http://32feet.net/forums/37.aspx se preferisci.

+0

Grazie alanjmcf :-) Abbiamo bisogno del lato server. Stiamo producendo un dispositivo che consenta alle persone di trasferire materiale dal proprio cellulare e inviare materiale al proprio telefono cellulare. Quindi abbiamo bisogno di pubblicare i servizi da usare per i clienti. Non sono sicuro che 2 flussi siano sufficienti per il futuro, quindi perché non sono entusiasta dello stack di Windows. Puoi montare 8 persone attorno a uno dei nostri dispositivi. Pubblicherò problemi di esempio sul tuo sito. – badbod99

+0

Ogni volta che un autore di una libreria invia una risposta, ottiene un +1 imho. –

+0

Grazie Jordan. sui commenti precedenti. Mi chiedo quali progressi sono stati fatti. In ogni caso sui "due OBEX PUT e anche sulla scoperta dei dispositivi" ne ho appena provati due, forse i peer completi (?) Di sette piconet potrebbero essere supportati? Ancora non sono otto ... – alanjmcf

4

Prova questo: 32feet.NET. A partire dalla versione 2.4, supportano lo stack Widcomm oltre allo stack Windows.

BTW: Perché è necessario lavorare con due dongle allo stesso tempo? Di solito un singolo dongle può gestire fino a 7 dispositivi collegati contemporaneamente.

+0

È a mia conoscenza che, sebbene supporti più dispositivi contemporaneamente, può solo eseguire il trasferimento di file Obex a/da uno di quelli contemporaneamente. Correggimi se sbaglio! – badbod99

+0

Ho dato un'occhiata a 32 piedi. La loro implementazione widcomm è piuttosto incompleta e non ho potuto far funzionare nessuno dei loro campioni. Sono felice di spendere per un componente, ma non riesco a trovarne uno buono! Gli esempi di strumenti blu non funzionano neanche fuori dalla scatola. – badbod99

+0

Non ho ancora provato l'implementazione widcomm da solo. Per quanto riguarda i dispositivi multipli, non posso dirlo con certezza, perché non ho provato, ma per quanto ne so non ci sono limiti per il tipo di connessione, quindi dovresti avere diversi trasferimenti simultanei di obex senza problemi. – arbiter

5

Tempo di spiegare esattamente quello che abbiamo finito per fare ...

2 dongle perché?

  1. Se un dongle sta facendo una scansione la velocità di trasferimento è massicciamente rallentato
  2. Un dongle può supportare solo 7 trasferimenti simultanei, se si sta facendo una scansione, questa scende a 6. Se si desidera inviare , ricevi e scansiona tutto allo stesso tempo, tutto rallenta, male, e tu sei molto limitato nei canali.

Così, l'idea è quella di eseguire un dongle continuamente la scansione (quindi i dispositivi appaiono più rapidamente possibile) e l'altro dongle riservato per i trasferimenti, e dato che non è la scansione, i trasferimenti sono bello e veloce.

Biblioteca abbiamo usato

Dopo molte prove e ho pensato, abbiamo finito per optare per WirelessCommunicationLibrary from BT framework.

Supporta Widcomm, Windows, BlueSoleil e lo stack Toshiba. Supporta tutto il lato server di cui abbiamo bisogno, è un prodotto commerciale ben supportato, che funziona perfettamente senza errori.

Quale stack?

Bene, questo è complesso. NESSUNO degli stack supporta 2 dongle allo stesso tempo. Quindi l'unica opzione è quella di eseguire un dongle su uno stack e l'altro dongle su un altro. Questo è dove la libreria WCL è utile!

Microsoft - Se si verifica un errore durante una scansione, è comune l'arresto dell'intero stack. Questo non è l'ideale! Devi chiudere e riavviare il dispositivo radio, ci vuole tempo ed è soggetto a guasti. Ma ... lo stack Microsoft gestisce molto bene i trasferimenti di file.

Widcomm - Lo stack Widcomm non è ottimo per i trasferimenti di file. Ci sono piccole applicazioni fastidiose che si installano con Widcomm che continuano a provare a prendere il controllo della tua app. Puoi uccidere bttray.exe, il che è d'aiuto, ma durante i trasferimenti ottieni ancora strani comportamenti dallo stack. Sono sicuro che questo può essere risolto, ma dal momento che Windows è scarso per le scansioni, ha senso utilizzare Widcomm per le scansioni.

Quindi ... abbiamo un set di dongle su Widcomm per eseguire la scansione più e più volte e un dongle impostato su Microsoft è impostato per gestire solo i trasferimenti di file (dentro e fuori).

Ottenere 2 dongle a lavorare

Siamo andati per l'utilizzo di 2 delle stesse chiavi, siamo in grado di ordinarli in massa e immagazzinare tutti la stessa confusione riducendo. Ogni dispositivo spedito richiede solo 2 dongle bluetooth, semplice.

L'unico problema è che questi sono dongle widcomm e abbiamo bisogno di un dongle nello stack Windows. Windows non li riconosce come dongle di Windows, quindi non li registrerà per lo stack di Windows. Quindi ... è un trucco che puoi fare al BT.file inf per far sì che riconosca il dongle per Windows. Quindi è necessario passare i driver per uno dei dongle per l'esecuzione sui driver di Windows e il gioco è fatto.

Sommario

Quindi ... abbiamo un dongle la scansione di tutto il tempo, uno trasferimenti di movimentazione, ciascuno su pile separate e tutto funziona bene. Questo è l'unico modo che ho trovato per ottenere 2 dongle che funzionano senza problemi su Windows. Se hai un suggerimento migliore, per favore pubblicalo!

+1

Solo per notare che la mia libreria 32feet.NET ha supportato l'uso di due dongle dal 2.5 (in realtà 2.4.1). Uno con MSFT e uno con Widcomm simile a quello usato in questo caso. :-) – alanjmcf

+0

L'unico problema è che 32feet non supporta le funzionalità del server di Widcomm. – badbod99

Problemi correlati