opennetcfとデバイス制御 ~ .net compact framework meet opennetcf ~

29
OpenNETCFを使ってデバイス制御 Windows Mobile meet OpenNETCF CH3COOH(酢酸)

Upload: ch3cooh-393

Post on 05-Dec-2014

8.424 views

Category:

Technology


2 download

DESCRIPTION

2009/09/05に開催されたスマートフォン勉強会@関西#5でお話させて頂いたセッション資料です。 OpenNETCFを使えばデバイスを手軽に利用出来たり、.NET Compact Frameworkで削除されたクラスやイベントなどに対応したコントロールを使う事ができるというお話をさせて頂く予定でした。

TRANSCRIPT

Page 1: OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~

OpenNETCFを使ってデバイス制御~Windows Mobile meet OpenNETCF~

CH3COOH(酢酸)

Page 2: OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~

OpenNETCFとデバイス制御~ .NET Compact Framework meet OpenNETCF~

CH3COOH(酢酸)

Page 3: OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~

お詫び

• デバイス制御分を多めに考えていましたが、原稿を落としたので一部内容を変更してお送

り致します

Page 4: OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~

自己紹介

• CH3COOH(酢酸) です

• 会計システムと戦っているプログラマ(?)

• 1円単位のお金の調整する簡単なお仕事を毎日終電までしてます

• Windows Mobile超可愛いです

• WM6.5端末が発売されるのが今から楽しみです(但し、イーモバイルに限る)

Page 5: OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~

Windows Mobileとは

• Windows CEをベースにした携帯電話とPDA向けのプラットフォーム

• 「スマートフォン」と呼ばれる分野の代表格

• 今日はWindows MobileでOpenNETCFからデバイスを制御したりするお話をします

Page 6: OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~

Windows Mobile端末に搭載されているデバイス

• カメラ• GPS

• Bluetooth

• 赤外線• 無線LAN

• 加速度センサ

• バイブレータ

Page 7: OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~

Windows Mobile以外のスマートフォン搭載デバイス

• HTC HT-03A(Android)– カメラ、無線LAN、Bluetooth、GPS、加速度センサ

• Apple iPhone 3GS– カメラ、無線LAN、Bluetooth、GPS、加速度センサ

• 各種端末で大体同じデバイスが載ってる!

Page 8: OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~

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#で開発が出来ます

Page 9: OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~

.NET Compact Frameworkでサポートされているデバイス

• カメラカメラカメラカメラ

• GPS

• BlueTooth

• 赤外線赤外線赤外線赤外線

• 無線LAN

• 加速度センサ

• バイブレータ

Page 10: OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~

.NET Compact Frameworkからのデバイス制御

• .NET Compact Frameworkで、未サポートのデバイスを使用するには、

Win32APIをP/Invokeで呼び出します

• ここではバイブレータを使用するためのサンプルコードをご紹介します

Page 11: OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~

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

Page 12: OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~

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

Page 13: OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~

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

Page 14: OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~

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

Page 15: OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~

OpenNETCFのあるとき

• OpenNETCF.orgのSmart Device Frameworkを使えば、面倒な定義が不要になります

• OpenNETCF.WindowsCE.dllを参照し、バイブさせるサンプルコードを書いてみました。

Page 16: OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~

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

Page 17: OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~

OpenNETCFとは

• .NET Compact FrameworkからWindows Mobileを使いやすくする為のSharedSource Licenseのクラスライブラリ

Page 18: OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~

OpenNETCFのライセンス形態

• OpenNETCF Shared Source License を採用しています

• ソースコードを自分のアプリに組み込まなければ、無料で使うことができます

• 自分のアプリに組み込んで使う場合は、ライセンスを購入する必要があります

Page 19: OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~

他にOpenNETCFで何が出来るの?

• 無線機能の有効・無効化• LEDの点灯・消灯

• Vibraterの振動

• マイクを使って録音• etc etc…

Page 20: OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~

• OpenNETCF.WindowsMobile名前空間• BluetoothRadio クラス

– Bluetoothデバイスの制御を行います

• WiFiRadio クラス– 無線LANデバイスの制御を行います

• PhoneRadio クラス– 電話機能の制御を行います

無線機能の有効・無効化

‘ Bluetooth端末を有効にする

bt.RadioState = OpenNETCF.WindowsMobile.RadioState.On

Page 21: OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~

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)

Page 22: OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~

バイブレータの振動

• OpenNETCF.WindowsMobile名前空間

• Vibrateクラス

–バイブレータの制御を行います

' バイブレート開始OpenNETCF.WindowsMobile.Vibrate.Play()

' バイブレート停止OpenNETCF.WindowsMobile.Vibrate.Stop()

Page 23: OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~

マイクを使って録音

• 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()

Page 24: OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~

もっと何か出来ないの?

• .NET CFで削られているクラスがある!– FtpWebRequest クラス

• OpenNETCF.Net.Ftp 名前空間

– SmtpCredential クラス• OpenNETCF.Net.Mail 名前空間

• 同じく削られたイベントやメソッドも復活!– Combobox2

– Clipboard2• OpenNETCF.Windows.Forms 名前空間

Page 25: OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~

もっともっと何か出来ないの!?

• やっぱり携帯電話だから・・・

• 発着信履歴取得– Phone クラス

• OpenNETCF 名前空間

• RSSを読む処理は案外面倒・・・– FeedEngine クラスなど

• OpenNETCF.Rss 名前空間

Page 26: OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~

デバイスを活用した

ソリューションの提案

• GPSを使った営業支援システム– GPSロガーで経路を記録して、そのまま営業日報として配信

• カメラを使った出張買取サービス– 車の出張買取サービスで査定情報の入力やキズなどを撮影したデータを本部に配信

Page 27: OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~

まとめ

デバイスの制御は面倒くさい!デバイスの制御は面倒くさい!

.NET.NET CFCFからのデバイスの制御はからのデバイスの制御は

もっと面倒くさい!!もっと面倒くさい!!

OpenNETCFOpenNETCFを使を使ってもっとってもっと本質の部分に本質の部分に

リソースを投入リソースを投入してみては如何でしょうかしてみては如何でしょうか

Page 28: OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~

最後に

• Windows Mobile CF プログラミングプログラミングプログラミングプログラミング Tips– http://ch3cooh.jp/tips/wm/

– CFのサンプルコードやP/Invokeを使ったデバイスの操作に関するTipsなどを掲載しています

• スマートフォン勉強会– http://smartphone.techtalk.jp/

– スマートフォン全般の使い方や、アプリケーションの開発手法をみんなで学んでいく勉強会です

– 大阪は奇数月、東京では偶数月に開催してます

Page 29: OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~

•ご清聴ありがとうございました