Сохранение последовательного порта Bluetooth в Windows Mobile 6.0 после выключения/приостановки

Я столкнулся с неожиданным поведением во время отладки программы WinMo 6 прошлой ночью, и мне интересно, не сплю ли я. Но сначала немного контекста.

Программа связывается через последовательный порт с устройством GPS. Он использует либо физический порт с кабелем, либо пробует через Bluetooth. После приостановки или отключения питания мне не нужно закрывать и снова открывать порт, если он использует физическое соединение. Однако при использовании Bluetooth мне нужно повторно подключиться: со старым дескриптором байты не передаются. Повторное открытие занимает около 6 или 7 секунд, поэтому приложение нельзя использовать сразу после приостановки работы Bluetooth.

Тем не менее, я помню одну полосу отладки, когда мой последовательный порт Bluetooth оставался действительным и функционировал после нескольких циклов выключения/включения питания, и это меня приятно удивило. Я не могу воспроизвести поведение сейчас. Была ли это ошибка в драйвере BT?

Любые подсказки, которые у вас есть о конфигурациях или API, которые вы можете попробовать, будут отличными, если вы когда-нибудь заставите это работать.


person joelr    schedule 15.10.2010    source источник
comment
Стек Microsoft Bluetooth или Widcomm? (Не знаю, используют ли какие-либо устройства WM6 Widcomm).   -  person alanjmcf    schedule 16.10.2010
comment
Как мне узнать? В спецификации нашего устройства об этом не сказано.   -  person joelr    schedule 18.10.2010


Ответы (1)


Протокол Bluetooth разработан таким образом, что связь между устройством GPD и вашим устройством Windows должна осуществляться не реже одного раза в несколько секунд. Если связь отсутствует, время ожидания связи истекает, и ее необходимо установить снова с нуля.

И, во-вторых, способ, которым вы выполняете цикл питания. Правильно реализованный стек Bluetooth будет явно закрывать любые открытые соединения, если он переходит в состояние отключения питания обычным способом.

Короче говоря, соединение Bluetooth не предназначено для выживания после выключения и выключения питания, поэтому ваша программа должна быть готова восстановить соединение с удаленным устройством Bluetooth после выключения и выключения питания.

person Bart van Ingen Schenau    schedule 15.10.2010
comment
Да, однако, я полагаю, что большинство состояний слоя сохраняются, а соединение восстанавливается быстрее. Возможно также, что ручка снова станет функциональной. Есть ли вообще вызов API, чтобы определить, стал ли дескриптор порта недействительным? После приостановки операции ReadFile/WriteFile для этого дескриптора возвращают значение true, но не оказывают заметного влияния. - person joelr; 18.10.2010
comment
@joelr: когда физическое соединение Bluetooth отключается, все логические соединения поверх него также полностью сбрасываются. Поскольку эмуляция последовательного порта должна быть согласована между двумя устройствами, на уровне Bluetooth нет различий между первоначальным подключением и повторным подключением. К сожалению, я не так хорошо знаком с Windows-Mobile API, поэтому не знаю, как можно определить, действителен ли дескриптор. - person Bart van Ingen Schenau; 18.10.2010
comment
Предполагается, что Windows Mobile разработана таким образом, чтобы сделать приостановку прозрачной для программиста. Я реализовал стек Bluetooth в прошлом году и понимаю, что Windows Mobile и другое мое устройство, безусловно, закрывают соединение внутри. Однако я полагал, что WinMo автоматически повторит попытку установить соединение при возобновлении, так как один дескриптор выделен моей программой. Это то, что мне сейчас действительно нужно: абстракция ОС эмуляции порта, а не фактическая физическая ссылка. - person joelr; 19.10.2010