2010-10-15 30 views
0

J'ai rencontré un comportement inattendu lors du débogage d'un programme WinMo 6 hier soir, et je me demande si je rêvais. Mais d'abord, un certain contexte.Maintenir en vie un port série Bluetooth sur Windows Mobile 6.0 après la mise hors tension/suspension

Le programme communique via un port série avec un périphérique GPS. Il utilise soit un port physique avec câble, et essaie également via Bluetooth. Après une suspension ou une mise hors tension, je n'ai pas besoin de fermer et de rouvrir le port s'il utilisait le lien physique. Cependant, si vous utilisez Bluetooth, je dois me reconnecter: aucun octet n'est transmis avec l'ancien handle. Réouverture prend environ 6 ou 7 secondes, de sorte que l'application ne soit pas utilisable immédiatement après une suspension sur Bluetooth. Cependant, je me souviens d'une série de déboguages ​​où mon port série Bluetooth serait encore valide et fonctionnel après plusieurs cycles de mise hors tension/sous tension, et cela m'a agréablement surpris. Je ne peux pas reproduire le comportement maintenant. Était-ce un bug dans le pilote BT? Tout ce que vous avez à propos des configurations ou de l'API à essayer serait génial, si jamais vous avez réussi à le faire fonctionner.

+0

Pile Microsoft Bluetooth ou Widcomm? (Je ne sais pas si des périphériques WM6 utilisent Widcomm). – alanjmcf

+0

Comment savoir? La spécification sur notre appareil ne le mentionne pas. – joelr

Répondre

1

Le protocole Bluetooth est conçu de telle sorte qu'il doit y avoir une communication entre le périphérique GPD et votre périphérique Windows au moins une fois toutes les quelques secondes. Si la communication n'est pas présente, le lien expire et doit être rétabli à partir de zéro.

Et d'autre part, il y a la façon dont vous effectuez le cycle d'alimentation. Une pile Bluetooth correctement implémentée fermera explicitement toutes les connexions ouvertes si elle se met normalement hors tension. En bref, une connexion Bluetooth ne doit pas survivre pendant un cycle d'alimentation, votre programme doit donc être prêt à rétablir la connexion à un périphérique Bluetooth distant après un cycle d'alimentation.

+0

Oui, cependant, je crois que la plupart des états de calques doivent être conservés et la connexion rétablie plus rapidement. Peut-être aussi que le manche redeviendrait fonctionnel. Y a-t-il même un appel d'API pour déterminer si un descripteur de port est devenu invalide? Après une suspension, ReadFile/WriteFile sur ce handle renvoie true, mais n'a aucun effet perceptible. – joelr

+0

@joelr: Lorsqu'un lien Bluetooth physique est déconnecté, tous les liens logiques qui le composent sont entièrement réinitialisés. Comme l'émulation du port série doit être négociée entre les deux périphériques, il n'y a pas de distinction au niveau Bluetooth entre une connexion initiale et une reconnexion. Malheureusement, je ne suis pas familier avec l'API Windows Mobile, donc je ne sais pas comment vous pouvez savoir si un handle est toujours valide. –

+0

Windows Mobile est supposé conçu de manière à rendre les suspensions transparentes pour le programmeur. J'ai mis en place une pile Bluetooth l'année dernière et je comprends Windows Mobile et mon autre appareil ferme certainement la connexion, en interne. Cependant, je supposais que WinMo réessayerait automatiquement d'établir la connexion sur CV étant donné qu'une poignée est allouée par mon programme. C'est ce que je suis vraiment après maintenant: l'abstraction de l'OS de l'émulation de port, pas le lien physique réel. – joelr