PDAclub.pl - Forum użytkowników technologii mobilnych

Windows Mobile (Classic, Professional, Standard), Windows Phone 6.x oraz 7/8.x/10 => Oprogramowanie PPC => Dla programistów => Wątek zaczęty przez: deyot w Sierpień 13, 2007, 22:28:54

Tytuł: Jak wykryć nadchodzące połączenie?
Wiadomość wysłana przez: deyot w Sierpień 13, 2007, 22:28:54
Witam.
Piszę program dla MDA Compact i potrzebuję, żeby program reagował na nadchodzące połączenie. Od dłuższego czasu bawię się z TAPI ale nic mi jak dotychczas nie wychodzi. Ma ktoś może jakieś doświadczenie w tej materii i mógłby rzucić jakiś pomysł?
Piszę w VC2005 w kodzie natywnym.
Tytuł: Odp: Jak wykryć nadchodzące połączenie?
Wiadomość wysłana przez: MastaKrK w Sierpień 24, 2007, 20:08:54
nie wiem o co dokladnie chodzi ale w moim pda zapalaja sie klawisze wszystkie i ekranik 5 sekund przed uslyszeniem dzwonka i obrazkiem ktory pokazuje osobe dzwoniaca
Tytuł: Odp: Jak wykryć nadchodzące połączenie?
Wiadomość wysłana przez: deyot w Sierpień 27, 2007, 22:17:37
Dzięki za odpowiedź. Chodziło mi o to jak programowo rozpoznać nadchodzące połączenie. Już sobie poradziłem. Mniej - więcej.
Tytuł: Odp: Jak wykryć nadchodzące połączenie?
Wiadomość wysłana przez: mustela w Sierpień 28, 2007, 08:42:19
Jesli udalo sie Tobie, to podziel sie swoja wiedza.
Moze komus przydac sie to w przyszlosci.
Jesli szczegoly chcesz zachowac dla siebie to podaj chociaz jakas wskazowke.

Pozdrawiam.
Tytuł: Odp: Jak wykryć nadchodzące połączenie?
Wiadomość wysłana przez: deyot w Sierpień 28, 2007, 13:05:44
No cóż nie jest to jakoś szczególnie trudne. Z drugiej strony sporo wysiłku kosztowało mnie znalezienie potrzebnych informacji, a i różne osoby na różnych forach dyskusyjnych też nie są zbyt skore do pomocy.
Ale do rzeczy.
Piszę w kodzie natywnym, więc wskazówki będą dotyczyć gołego API w C. Nie mam w tej chwili dostępu do kodu źródłowego. Piszę z pamięci.
Kolejka czynności wygląda mniej więcej następująco:
Inicjujemy TAPI używając funkcji lineInitializeEx(). Nie było w moim przypadku konieczne uzgadnianie wersji API i ExtAPI (funkcje Negotiate coś tam... już nie pamiętam). Podobno jednak dobrze jest uzgodnić wersję ExtAPI. lineInitializeEx() już uzgadnia wersję API. Ta funkcja daje też informację o liczbie urządzeń w systemie. Dzięki temu wiemy ile razy wywołać lineGetDevCaps(). Ta funkcja pozwoli znaleźć komórkę w naszym komputerku. Teraz iterujemy lineGetDevCaps() tak długo aż znajdziemy komórkę. Rozpoznajemy ją w taki sposób: do lineGetDevCaps() przekazuje się strukturę (nie pamiętam nazwy - poszukajcie w msdn), która później wypełniana jest specyfikacją danego urządzenia. Szukamy urządzenia, które pod offsetem wskazywanym bodaj przed pole .dwDeviceName (nazwy zmiennej nie jestem pewien) zawiera napis "Cellular Line". Następnie wywołujemy funkcję lineOpen() i już kontrolujemy telefon. Trzeba tylko dobrze ustawić flagi konfiguracyjne w parametrach do lineOpen() . Jak mam coś z "DATAMODEM" i "VOICE coś tam". Jak zerknę w kod to napiszę co konkretnie. Potem w najprostszym rozwiązaniu wystarczy w kółko wywoływać lineGetMessage(), które będzie przekazywać informację o wszystkich zdarzeniach związanych z telefonem. LINE_APPNEWCALL to nowe połączenie na przykład. Można też używać mechanizmu eventów ale tego jeszcze do końca nie rozszyfrowałem (dostaję zdarzenie jak ktoś do mnie dzwoni ale nie jak ja do kogoś dzwonię). Jakby ktoś zechciał mi pomóc to będę wdzięczny.
Tytuł: Odp: Jak wykryć nadchodzące połączenie?
Wiadomość wysłana przez: mustela w Sierpień 28, 2007, 13:20:14
Dzieki  :ok:

Calkiem zrozumiale opisales mimo ze z glowa czyli z niczego (jak mawial moj prof. Matematyki).

Powodzenia w dalszej walce...

event'y nie sa takie straszne. trzeba sie tylko pod odpowiedni podwiesic.
Niestety nie mam praktyki w twoim temacie.

Eventy to ja sam definiuje i zglaszam a w innej aplikacji je przechwytuje.

 :ok:
Tytuł: Odp: Jak wykryć nadchodzące połączenie?
Wiadomość wysłana przez: deyot w Sierpień 28, 2007, 13:57:51
Zasadniczo wywołując lineInitializeEx() wybierasz sobie jak chcesz być powiadamiany o zdarzeniach związanych z danym urządzeniem. Z tego co się orientuję są dwie metody. Procedurka, której adres przekazujesz do lineInitializeEx() i która jest wywoływana jako procedura obsługi okna (ukrytego, tworzonego przez system). Tej metody nie badałem i nie jestem pewien jak działa (i czy w ogóle ją dobrze opisałem). Oraz przez mechanizm eventów. W tym drugim przypadku lineInitializeEx() przekazuje ci uchwyt do eventa. Problem w tym, że event nie zawsze mi się odpala. Z tego co mi się wydaje należy jakoś powiadomić system w jakich przypadkach ma go uruchamiać. Szczegółów niestety nie znam. Jak by ktoś wiedział, to niech powiem. Byłoby fajnie. Bo samemu przekopywać się przez msdn i próbowanie kupy różnych #definów, których nazwy w większości nic nie mówią jest co najmniej nużące.
Tytuł: Odp: Jak wykryć nadchodzące połączenie?
Wiadomość wysłana przez: kartam w Sierpień 28, 2007, 16:19:44
dajcie spokój ! A nie lepeij przez rejestr? W podkluczu State (nie pamiętam gdzie dokładnie) jest o tym informacja
Tytuł: Odp: Jak wykryć nadchodzące połączenie?
Wiadomość wysłana przez: deyot w Sierpień 31, 2007, 08:27:15
witam.
A mógłbyś może podać bardziej konkretne informacje? Monitorowałem niektóre klucze (i podklucze) o nazwie state, a właściwie takie jakie mi się kojarzyły, i nie zauważyłem żeby jakikolwiek zmieniał swoją wartość w momencie wykonywania połączenia.
Jeśli byś sobie przypomniał o jaki konkretnie wpis w rejestrze chodzi, to byłbym wdzięczny.
Tytuł: Odp: Jak wykryć nadchodzące połączenie?
Wiadomość wysłana przez: kartam w Sierpień 31, 2007, 18:33:46
witam.
A mógłbyś może podać bardziej konkretne informacje? Monitorowałem niektóre klucze (i podklucze) o nazwie state, a właściwie takie jakie mi się kojarzyły, i nie zauważyłem żeby jakikolwiek zmieniał swoją wartość w momencie wykonywania połączenia.
Jeśli byś sobie przypomniał o jaki konkretnie wpis w rejestrze chodzi, to byłbym wdzięczny.
postaram się, ale na 80% było coś takiego. właśnie w State