opennetcfとデバイス制御 ~ .net compact framework meet opennetcf ~
DESCRIPTION
2009/09/05に開催されたスマートフォン勉強会@関西#5でお話させて頂いたセッション資料です。 OpenNETCFを使えばデバイスを手軽に利用出来たり、.NET Compact Frameworkで削除されたクラスやイベントなどに対応したコントロールを使う事ができるというお話をさせて頂く予定でした。TRANSCRIPT
OpenNETCFを使ってデバイス制御~Windows Mobile meet OpenNETCF~
CH3COOH(酢酸)
OpenNETCFとデバイス制御~ .NET Compact Framework meet OpenNETCF~
CH3COOH(酢酸)
お詫び
• デバイス制御分を多めに考えていましたが、原稿を落としたので一部内容を変更してお送
り致します
自己紹介
• CH3COOH(酢酸) です
• 会計システムと戦っているプログラマ(?)
• 1円単位のお金の調整する簡単なお仕事を毎日終電までしてます
• Windows Mobile超可愛いです
• WM6.5端末が発売されるのが今から楽しみです(但し、イーモバイルに限る)
Windows Mobileとは
• Windows CEをベースにした携帯電話とPDA向けのプラットフォーム
• 「スマートフォン」と呼ばれる分野の代表格
• 今日はWindows MobileでOpenNETCFからデバイスを制御したりするお話をします
Windows Mobile端末に搭載されているデバイス
• カメラ• GPS
• Bluetooth
• 赤外線• 無線LAN
• 加速度センサ
• バイブレータ
Windows Mobile以外のスマートフォン搭載デバイス
• HTC HT-03A(Android)– カメラ、無線LAN、Bluetooth、GPS、加速度センサ
• Apple iPhone 3GS– カメラ、無線LAN、Bluetooth、GPS、加速度センサ
• 各種端末で大体同じデバイスが載ってる!
Windows Mobileアプリの種類
• ネイティブ(C++) – 特定のCPUやOS向けに作られるアプリ
– Windows MobileだとTodayとか
• Widget(WM6.5~)– HTMLとJavaScriptで作るアプリ
– Windows Mobile 6.5からの新機能
• .NET Compact Framework– .NET FrameworkのサブセットVB.NETやC#で開発が出来ます
.NET Compact Frameworkでサポートされているデバイス
• カメラカメラカメラカメラ
• GPS
• BlueTooth
• 赤外線赤外線赤外線赤外線
• 無線LAN
• 加速度センサ
• バイブレータ
.NET Compact Frameworkからのデバイス制御
• .NET Compact Frameworkで、未サポートのデバイスを使用するには、
Win32APIをP/Invokeで呼び出します
• ここではバイブレータを使用するためのサンプルコードをご紹介します
P/Invokeを使った長~~~いコード(1)
• バイブレータを制御するNLed APIを使うのでP/Invokeの定義を行います
Public Class Led
<DllImport("coredll.dll", SetLastError:=True)> _Private Shared Function NLedGetDeviceInfo(ByVal h As UInteger, _
ByRef pOutput As NLED_COUNT_INFO) As BooleanEnd Function
<DllImport("coredll.dll", SetLastError:=True)> _Private Shared Function NLedSetDevice(ByVal h As UInteger, _
ByRef pOutput As NLED_SETTINGS_INFO) As BooleanEnd Function
Private Const NLED_COUNT_INFO_ID As UInteger = 0Private Const NLED_SETTINGS_INFO_ID As UInteger = 2
P/Invokeを使った長~~~いコード(2)
• さきほど定義したNled APIに渡す構造体を定義します
Private Structure NLED_SETTINGS_INFOPublic LedNum As UIntegerPublic OffOnBlink As IntegerPublic TotalCycleTime As LongPublic OnTime As LongPublic OffTime As LongPublic MetaCycleOn As IntegerPublic MetaCycleOff As Integer
End Structure
Private Structure NLED_COUNT_INFOPublic cLeds As UInteger
End Structure
P/Invokeを使った長~~~いコード (3)
Public Shared Function GetLedCount() As IntegerDim info As New NLED_COUNT_INFO()Dim LEDCount As Integer = 0If NLedGetDeviceInfo(NLED_COUNT_INFO_ID, info) Then
LEDCount = CInt(info.cLeds)End IfReturn LEDCount
End Function
Public Shared Sub SetLedStatus(ByVal ledID As Integer, _ByVal status As Integer)
Dim info As New NLED_SETTINGS_INFO()With info
.LedNum = System.Convert.ToUInt32(ledID)
.OffOnBlink = System.Convert.ToUInt16(status)End WithNLedSetDevice(NLED_SETTINGS_INFO_ID, info)
End SubEnd Class
P/Invokeを使った長~~~いコード (4)
• バイブレートさせるための定義が終わったので、
ようやくバイブをさせることが出来ます
Private Sub Button2_Click(ByVal sender As System.Object, _ByVal e As System.EventArgs) _Handles Button2.Click
' バイブレーション開始LedVibrate.SetLedStatus(1, 1)
' 2秒間鳴動させた後、バイブを停止するSystem.Threading.Thread.Sleep(2000)LedVibrate.SetLedStatus(1, 0)
End Sub
OpenNETCFのあるとき
• OpenNETCF.orgのSmart Device Frameworkを使えば、面倒な定義が不要になります
• OpenNETCF.WindowsCE.dllを参照し、バイブさせるサンプルコードを書いてみました。
OpenNETCFを使った短くシンプルなコード
• これだけ。
Private Sub Button1_Click(ByVal sender As System.Object, _ByVal e As System.EventArgs) _Handles Button1.Click
' バイブレーション開始Dim led As New OpenNETCF.WindowsCE.Notification.Led()led.SetLedStatus(1, OpenNETCF.WindowsCE.Notification.Led.LedState.On)
' 2秒間鳴動させた後、バイブを停止するSystem.Threading.Thread.Sleep(2000)led.SetLedStatus(1, OpenNETCF.WindowsCE.Notification.Led.LedState.Off)
End Sub
OpenNETCFとは
• .NET Compact FrameworkからWindows Mobileを使いやすくする為のSharedSource Licenseのクラスライブラリ
OpenNETCFのライセンス形態
• OpenNETCF Shared Source License を採用しています
• ソースコードを自分のアプリに組み込まなければ、無料で使うことができます
• 自分のアプリに組み込んで使う場合は、ライセンスを購入する必要があります
他にOpenNETCFで何が出来るの?
• 無線機能の有効・無効化• LEDの点灯・消灯
• Vibraterの振動
• マイクを使って録音• etc etc…
• OpenNETCF.WindowsMobile名前空間• BluetoothRadio クラス
– Bluetoothデバイスの制御を行います
• WiFiRadio クラス– 無線LANデバイスの制御を行います
• PhoneRadio クラス– 電話機能の制御を行います
無線機能の有効・無効化
‘ Bluetooth端末を有効にする
bt.RadioState = OpenNETCF.WindowsMobile.RadioState.On
LEDの点灯・消灯
• OpenNETCF.WindowsCE.Notification名前空間
• Led クラス– LEDの点灯を行ったり、LEDの情報を取得します
– バイブレータに振られているIDを指定することで、このLEDクラスでもバイブさせる事が出来ます
‘ ID2のLEDを点灯させますDim led As New OpenNETCF.WindowsCE.Notification.Led()led.SetLedStatus(2, OpenNETCF.WindowsCE.Notification.Led.LedState.On)
バイブレータの振動
• OpenNETCF.WindowsMobile名前空間
• Vibrateクラス
–バイブレータの制御を行います
' バイブレート開始OpenNETCF.WindowsMobile.Vibrate.Play()
' バイブレート停止OpenNETCF.WindowsMobile.Vibrate.Stop()
マイクを使って録音
• OpenNETCF.Media.WaveAudio名前空間
• Recorderクラス
–音声の録音を行います
‘ 録音を開始する
audioRecorder = new OpenNETCF.Media.WaveAudio.Recorder()audioRecorder.RecordFor(
System.IO.File.OpenWrite(filePath),_10000, _OpenNETCF.Media.WaveAudio.SoundFormats.Stereo16bit44kHz)
' 録音を停止する
audioRecorder.Stop()
もっと何か出来ないの?
• .NET CFで削られているクラスがある!– FtpWebRequest クラス
• OpenNETCF.Net.Ftp 名前空間
– SmtpCredential クラス• OpenNETCF.Net.Mail 名前空間
• 同じく削られたイベントやメソッドも復活!– Combobox2
– Clipboard2• OpenNETCF.Windows.Forms 名前空間
もっともっと何か出来ないの!?
• やっぱり携帯電話だから・・・
• 発着信履歴取得– Phone クラス
• OpenNETCF 名前空間
• RSSを読む処理は案外面倒・・・– FeedEngine クラスなど
• OpenNETCF.Rss 名前空間
デバイスを活用した
ソリューションの提案
• GPSを使った営業支援システム– GPSロガーで経路を記録して、そのまま営業日報として配信
• カメラを使った出張買取サービス– 車の出張買取サービスで査定情報の入力やキズなどを撮影したデータを本部に配信
まとめ
デバイスの制御は面倒くさい!デバイスの制御は面倒くさい!
.NET.NET CFCFからのデバイスの制御はからのデバイスの制御は
もっと面倒くさい!!もっと面倒くさい!!
OpenNETCFOpenNETCFを使を使ってもっとってもっと本質の部分に本質の部分に
リソースを投入リソースを投入してみては如何でしょうかしてみては如何でしょうか
最後に
• Windows Mobile CF プログラミングプログラミングプログラミングプログラミング Tips– http://ch3cooh.jp/tips/wm/
– CFのサンプルコードやP/Invokeを使ったデバイスの操作に関するTipsなどを掲載しています
• スマートフォン勉強会– http://smartphone.techtalk.jp/
– スマートフォン全般の使い方や、アプリケーションの開発手法をみんなで学んでいく勉強会です
– 大阪は奇数月、東京では偶数月に開催してます
•ご清聴ありがとうございました