Jak się okazuje HTC stosuje bardzo niemiłą politykę – nie udostępnia SDK do obsługi G-Seneora. Na szczęście, biblioteka została zhackowana (reverse engineering) przez Scotta: http://scottandmichelle.net/scott/comments.html?entry=784 , dzięki czemu wystarczy skorzystać mechanizmu P/Invoke, aby wykorzystać ją w kodzie zarządzanym. Tym zajął się Koushik Dutta: http://blog.enterprisemobile.com/2008/07/using-htc-diamonds-sensor-sdk-from-managed-code/ dzięki czemu wszystko co trzeba zrobić, to dodać do projektu referencję do biblioteki GSensorSDK i już można wykorzystać żyroskop we własnym programie.
Podstawową klasą biblioteki jest klasa HTCGSensor (wszystko w przestrzeni nazw GSensorSDK), która umożliwia odczytywanie wektora wychylenia urządzenia, za pomocą metody GetGVector(). Metoda ta, zwraca strukturę GVector, z które można odczytać wartości składowe X, Y i Z. Znaczenie poszczególnych wartości jest wyjaśnione na blogu blog.enterprisemobile.com, ale najlepszą metodą załapania jest skorzystanie z prostego programu, który wyświetla wartości na ekranie i pobawienie się telefonem.
Pole w klasie okna:
BallInContainer ballInContainer;
Kod w konstruktorze klasy okna:
gsensor = new HTCGSensor();
Przypisanie składowych wektora do labelek, najlepiej umieścić w procedurze obsługi zdarzenia Tick, w timerze:
GVector vector = gsensor.GetGVector();
labelX.Text = vector.X.ToString("F5");
labelY.Text = vector.Y.ToString("F5");
labelZ.Text = vector.Z.ToString("F5");
Poza wyżej wymienionymi możliwościami, klasa HTCGSensor pozwala na wykorzystanie zdarzenia OrientationChanged, które jest odpalane, kiedy zostanie zmieniona orientacja ekranu. Na przykład użytkownik obróci telefon o 90 stopni, przechodząc z trybu portretowego do krajobrazowego.
Później można sobie napisać Teeter'owską kulkę, która obija się o ściany, co oczywiście zrobiłem, ale kodu nie wrzucam, bo jeszcze nie wiem jak się na bloggera uploaduje pliki. ;)
Miłego żonglowania telefonami!