Witam.
Chciałbym się, podzielić moim rozwiązaniem problemu automatycznego nawiązywania połączenia DUN po każdym uruchomieniu i wybudzeniu urządzenia. Rozwiązanie testowałem na NR460BT i działa zadowalająco. Być może da się je zastosować także w innych modelach.
Jak wiadomo nawigacja automatycznie nawiązuje połączenie typu HFP. Aby zestawić połączenie DUN, należy w nakładce NavRoad nacisnąć przycisk „Połączenie DUN”. Co ważne, połączenie DUN zostanie nawiązane tylko, jeśli aktywne jest połączenie HFP. Poniższe rozwiązanie automatyzuje ten proces. Kluczowe są dwa elementy – odczytanie aktualnego stanu Bluetooth i aktywacja profilu DUN. Jak się okazuje stan Bluetooth można odczytać z rejestru (klucz HKLM\Platform\BluetoothStatus), a aktywację profilu DUN można wykonać za pomocą programu PhoneLinkMsg.exe obecnego w katalogu \ShellDisk\Shell\ANW. Pozostaje stworzenie skryptu, który w przypadku wykrycia aktywnego profilu HFP, uruchomi program PhoneLinkMsg.exe, naciśnie przycisk „Connect GPRS”, i zakończy działanie programu. Poniżej przykład takiego skryptu, dla narzędzia MortScript:
Sleep(30000)
While (True)
#sprawdzenie stanu Bluetooth
bs=RegRead("HKLM","Platform","BluetoothStatus")
if(bs=3)
# HFP profile active
SleepMessage(1,"Starting DUN...","Wait...",TRUE)
#symulacja naciśnięcia "GPRS Connect"
#w programie Phonelinkmsg.exe
While(WndExists("PhoneLinkMsgWnd"))
Close("PhoneLinkMsgWnd")
Sleep(500)
endwhile
Run("\ShellDisk\Shell\ANW\PhoneLinkMsg.exe")
WaitFor("PhoneLinkMsgWnd",10)
Repeat(18)
SendDown("PhoneLinkMsgWnd")
EndRepeat
SendCr("PhoneLinkMsgWnd")
Minimize("PhoneLinkMsgWnd")
Sleep (1000)
Close("PhoneLinkMsgWnd")
endif
#przerwa między kolejnymi sprawdzeniami stanu Bluetooth
Sleep(60000)
EndWhile
Pozostaje kwestia uruchamiania tego skryptu przy starcie urządzenia. Można to oczywiście zrobić na kilka sposobów. Chyba najprościej jest wywołać go za pomocą nakładki NavRoad – w pliku \ShellDisk\Shell\APShell.ini:
[LaunchonInitial]
FileName1=<ścieżka do programu>
Wykorzystuje się tu cechę MortScript, polegającą na tym, że program Autorun.exe, po zmianie jego nazwy wywołuje skrypt o odpowiadającej mu nazwie. (Dzięki temu można uniknąć potrzeby podawania parametrów wywołania) .
Do powyższego skryptu można dorzucić (na jego początek) automatyczne uruchamianie programu do nawigacji po uruchomieniu urządzenia - na przykład tak:
# czas inicjacji sprzętu (GPS)
#dobrany doświadczalnie - przy zbyt małym czasie mogą wystąpić
#problemy z inicjacją GPS w programie do nawigacji
Sleep(20000)
# czas uruchamiania menu NavRoad, Bluetooth i
#zestawienia połączenia HFP
#dobrany doświadczalnie - przy zbyt małym czasie aktywne
#pozostaje okno menu NavRoad
Sleep(10000)
#uruchomienie AutoMapy
Run("\SDMMC\navroadmaps.lnk")
#oczekiwanie na otwarcie okna przez AutoMapę
WaitFor("AutoMapa",30)
#jeśli AM uruchomiona zbyt wcześnie, ukrywaj inne okna
repeat(30)
if(NOT WndActive("AutoMapa"))
Show("AutoMapa")
endif
Sleep(1000)
endrepeat
i już można zapomnieć o istnieniu nakładki NavRoad i systemu Windows CE. Pozostaje tylko pytanie dlaczego urządzenia nie można tak skonfigurować za pomocą paru opcji w menu NavRoad?
Jeśli ktoś potrafi ustalić w jaki sposób program PhoneLinkMsg.exe przekazuje polecenia do modułu sterującego Bluetooth (program Phonelink.exe?) , to można by uniknąć uruchamiania programu PhoneLinkMsg.exe, co niestety jest widoczne na ekranie.
Pozostaje też kwestia dokładnego momentu całkowitego uruchomienia się nakładki (jest to mniej więcej chwila pojawienia się zegara), tak aby uniknąć niepotrzebnej zwłoki przy uruchamianiu programu do nawigacji.
Pozdrawiam.