2010-01-05 7 views
0

J'essaie d'utiliser la pile bluetooth Widcomm par Broadcomm et cela devrait fonctionner, mais il y a une chose que je ne comprends toujours pas: COMMENT PUIS-JE OUVRIR AUTOMATIQUEMENT LA COM VIRTUELLE QUAND JE DOIS COMMUNIQUER? J'essaie d'utiliser SPP (Serial Port Profile) mais la documentation avec le SDK n'est pas si exaustive.Widcomm bluetooth: comment ouvrir le COM virtuel

S'IL VOUS PLAÎT, JE NE PEUX PAS UTILISER 32FEET!

J'Enveloppez la partie SPP serveur de l'API:

[DllImport("wcbts.dll", SetLastError = false, CharSet = CharSet.Unicode)] 
    internal static extern IntPtr CreateSppServer(IntPtr pStack); 

    [DllImport("wcbts.dll", SetLastError = false, CharSet = CharSet.Unicode)] 
    internal static extern void DeleteSppServer(IntPtr pServer); 

    [DllImport("wcbts.dll", SetLastError = false, CharSet = CharSet.Unicode)] 
    internal static extern bool SppServerStart(IntPtr pServer, IntPtr pszServiceName); 

    [DllImport("wcbts.dll", SetLastError = false, CharSet = CharSet.Unicode)] 
    internal static extern bool SppServerStop(IntPtr pServer); 

    [DllImport("wcbts.dll", SetLastError = false, CharSet = CharSet.Unicode)] 
    internal static extern IntPtr SppServerNotifyWindow(IntPtr pServer, IntPtr hWnd, int nMsg); 

Qu'est-ce que pszServiceName? où je peux le trouver? et hWnd et nMsg ???

Merci

Répondre

2

J'ai posté une réponse à cela plus tôt, mais il semble ne jamais être apparu! :-(

Quoi qu'il en soit, je suis le mainteneur de la bibliothèque 32feet.NET et l'auteur du support Widcomm Tout d'abord, pour autant que je sache, la licence ne devrait pas être un problème pour la distribution commerciale. à http://32feet.net/forums/t/2289.aspx:

« 32feet.NET est gratuit pour un usage commercial ou non commercial Si vous utilisez les binaires que vous pouvez simplement utiliser la bibliothèque en l'état, si vous apportez des modifications à la source que vous devez inclure le. 32feet.NET License.txt document et s'assurer que les en-têtes de fichiers ne sont pas modifiés/supprimés. "

ll Je vois si Peter peut poster un commentaire ici pour donner de la certitude. De toute façon, nous n'avons pas implémenté le support de la fonctionnalité du port COM virtuel de Widcomm (c'est certainement possible bien que personne ne l'ait demandé - à part vous-même). Je ne suis pas un grand fan des ports COM virtuels. Il semble toujours beaucoup plus facile d'utiliser une connexion directe 'sockets', plutôt que d'essayer de configurer un port COM, et essayer de trouver quel nom il a été créé comme [1], puis d'ouvrir un SerialPort pour l'utiliser, puis si la connexion est perdue on ne sait pas et tout simplement garder ... Son réessayant tellement plus facile de faire ce qui suit:

Dim addr As BluetoothAddress _ 
    = BluetoothAddress.Parse("001122334455") 
' 
Dim ep As New BluetoothEndPoint(addr, BluetoothService.SerialPort) 
Dim cli As New BluetoothClient 
cli.Connect(ep) 
Dim peerStream As Stream = cli.GetStream() 
peerStream.Write/Read ... 

Voir plus à http://www.alanjmcf.me.uk/comms/bluetooth/32feet.NET%20--%20User%20Guide.html

pour répondre à vos questions spécifiques Widcomm . Plusieurs instances d'un service Bluetooth peuvent être créées, c'est-à-direplusieurs services SPP (chacun utilisant l'ID de classe de service SPP), chacun peut fournir un attribut de nom de service pour permettre aux clients de choisir entre eux. Dans la plupart des cas, il ne sera pas nécessaire, il suffit donc de passer une chaîne nulle ou de longueur nulle - les documents Widcomm SDK ne disent pas ce qui est autorisé. En ce qui concerne les poignées de fenêtre, Widcomm utilise des méthodes virtuelles C++ (yuk - cela fait direct P/Invoquant la plupart du temps impossible) pour implémenter des événements/rappels, probablement le code de Mr Figueira convertit ces rappels en messages Windows.

[1] La création de ports COM virtuels Bluetooth n'est pas simple. Sur MSFT + Win32, on ne sait pas quel nom a été sélectionné pour le port COM! Sur MSFT + WM, l'API officielle ne fonctionne pas bien sur de nombreux types d'appareils. Et notre méthode non officielle de le faire nécessite un redémarrage IIRC. :-(

1

Alors d'abord vous dites que vous ne pouvez pas utiliser 32feet.net. Pourquoi? Vous utilisez évidemment João Paulo Figueira's bluetooth stack library, parce que c'est ce que wcbts.dll est, il ne peut donc pas être un mandat contre l'utilisation de la bibliothèque de tiers (et 32feet est libre et open source).

Cela m'amène à la question 2. Si vous utilisez sa bibliothèque, avez-vous regardé son exemple sur la façon d'utiliser cette bibliothèque? Il est téléchargé à partir du same place as the DLL vous devez avoir. Pour ce qui est de hWnd et de nMsg, basé sur le fait que c'est la programmation Windows et le nom de l'API, je dirais que hWnd est le handle de la fenêtre qui recevra des notifications quand quelque chose se passe dans la bibliothèque et nMsg est la constante de message personnalisée que vous souhaitez transmettre à cette fenêtre afin que vous puissiez rechercher ces messages. Encore une fois, je parie que l'échantillon qu'il montre montre tout cela.

+0

oui j'ai vu l'échantillon mais le wrapper n'implémentait pas le service SPP que j'essaye d'ajouter au projet, en fait le morceau de code ci-dessus est écrit par moi – Sunrising

+0

en outre 32feet n'est pas correct si vous voulez vendre votre produit! – Sunrising

Questions connexes