Auther:[[nishino]] #pcomment(reply); 目次 #contents(); *Bluetooth通信の詳細 [#i0e36f51] 理解できたところから纏めます。 公式サイト [[Bluetooth.org - The Official Bluetooth Membership Site:https://www.bluetooth.org/apps/content/default.aspx]] **&color(red){注意!}; [#v1dc907c] 大学一年生が拙い英語力で仕様書を読み漁っているため、間違いが多々あると思われます。 決して鵜呑みにしないでください!自分で判断して真偽を確かめて下さい! そして、間違えがあれば是非ともコメントにお書きして下さい。 日本語の資料が本当に少ないので、是非ともご協力下さい! 以上のことをご理解の上、ご指導ご鞭撻のほどよろしくお願い致します。 そして公式の詳細な仕様書は契約した企業しか見れないという学生泣かせな仕様なので、ぜひ情報提供のほどお願いします。 (学生や一般の方が閲覧できる場所は、詳しい解説というよりも技術の概念的なのものなので、実際に使おうと思っても分かりにくいです。なんて普及させる気のない技術w) **概要 [#oe3eb37d] 基本はアドホック通信の規格。 通信速度や範囲が微妙すぎて忘れ去られそうになった悲しい子。 けれど、モジュールの小型化やマウスやオーディオ繋ぐ程度なら問題ない通信速度によって無線のニッチ市場を確保。 IrDAほど通信距離と速度が煩わしくなく、無線LANほどの通信速度と距離はいらん!という通信規格。だったが…技術の進歩により、どれも少しずつカバーの範囲が被っている。 廉価で省電力な、速度まぁまぁの無線通信用の規格という認識で取りあえずはおk しっかりとした日本語で理解したい人は[[wiki:http://ja.wikipedia.org/wiki/Bluetooth]]へ!ウィキペディアンよ…実装方法も解説してくれ……。 **利点 [#o6258972] 元々がDevice to Device(アドホック通信)用の通信規格なので、その中では速度が速い方。 コリジョンによる遅延が起こりにくい? 無線通信規格の中では、値段の割に実装モジュールが小さくて済む。(今のところ) プロファイルを使うので通信の用途が明確。 省電力。エコ(笑) 以上。 **問題点。 [#ba1b3ad1] 802.11nと比べると速度が微妙すぎる。日本語の資料が少ない…というか技術解説しかほぼない。 プロファイルを使うので、プロファイルに即した通信しかできない。 つまり、目的に合ったプロファイルが実装されてなければ、自分で乗せなきゃいけない。 プロファイルAとBを使おうと思ったら、いちいち切り替えるか、A+Bという新たなプロファイルを作る必要がある。 そして最大の&color(red){問題点};! 他の無線通信規格とBluetoothは場合によって干渉を起こします。 (ソースの一例:[[802.11bとBluetoothの干渉を“目で見る”:http://plusd.itmedia.co.jp/broadband/0207/19/sony.html]]) これは極端な例ですが、他の無線規格でも干渉が起こる場合もあります。 もちろん規格間で対策がなされている場合が多いです。 [[WiFi/BluetoothとWiMAXの共存技術:http://img.jp.fujitsu.com/downloads/jp/jmag/vol60-5/paper19.pdf]] この通り、無線同士の干渉が起こるのはBluetoothに限った話ではありません。 しかし、下位のバージョン(ver1.1以下)では無視できないほどひどいです。場合によっては無線LANがつながらなくなったりします。 (Bluetoothが名前の由来通り「乱立する無線通信規格を統合したい」という%%野望%%''願いを込めて''作られたのかどうかは分かりませんがIEEEに喧嘩を売っていたのかも。正直、普及しなかった理由はこっちの気が…。 まぁ…願いを込めて作られたから他の規格のことなんかry) [[すべてのデバイスはBluetoothに通じる(p3):http://ascii.jp/elem/000/000/300/300841/index-3.html]]を読む限り、数撃ちゃ当たる戦法で安定通信を保とうとするのが原因らしいです。 最近の規格では、コリジョン対策をして他の規格とも共存しているようです。 (wiki読む限り。けれど、何パーセント以内にコリジョンを抑えているのか不明。誰か確認してくれ…。) **仕組み [#i276ffb3] ***プログラム側の流れ [#n41de8fb] デバイス認識 ↓ リモートデバイス検索 ↓ ペアリング **実装 [#me44f38d] ***前書き [#b48453db] 仕様的にBluetoothアダプタのことをBluetoothラジオと呼んでいるみたいです。 AndroidOSでは、BTのclassがBluetoothAdapterのようにあるので分かりやすいですが、 一般的にはadapterではなくradioの名称を使うほうが多いです。 APIの命名に〜radioと使われているときは、Bluetoothアダプタに対するAPIであると脳内処理してください。 基本的にBTスタックはMicrosoft標準のを使います。 BTスタックの意味が分からない人はwikiへ(取りあえずドライバぐらいの認識でおk) ***C# [#a6ecd3cd] %%Accelerated C#の本以外まともなサンプルがないw%% 完全に勘違いでした。日本語の資料は見つからなかったけどorz ''参考サイト:'' [[Accelerated C#:http://books.google.co.jp/books?id=IzU3B7mjI90C&printsec=frontcover&dq=Accelerated+C%23&hl=ja&ei=US7tS9DYHM6GkAWnn9HWBg&sa=X&oi=book_result&ct=result&resnum=1&ved=0CCoQ6AEwAA#v=onepage&q=bluetooth&f=false]] p.202をチェック!Bluetooth以外の場所も是非買って読むべし。 [[C4F Developer Kit:http://c4fdevkit.codeplex.com/]](中身だけさっさと見たい人は[[ここ:https://c4fdevkit.svn.codeplex.com/svn/Bluetooth/Source/vcs/]]) とりあえずここ見とけって感じのサイト。参考というか凄過ぎて頭が上がらん。 [[Wireless Communication Library:http://www.btframework.com/index.htm]] 素晴らしいライブラリを販売している場所。$100でLite版が買えるのでちゃっちゃと作りたい人は購入を検討するべし。MicrosoftもToshibaやその他もろもろのスタックがこれ一つで同じように扱える。 [[[.NET2] BLUETOOTH: UTILISATION DES API BLUETOOTH ET WINSOCKS:http://www.csharpfr.com/codes/NET2-BLUETOOTH-UTILISATION-API-BLUETOOTH-WINSOCKS_44488.aspx]] ダウンロードに登録が必要だが、無料登録なので問題なし フランス語は紳士なら読めるはず。他にもたくさん有用なコードあり。 ''主な流れ'' まず、C#にはBT用のAPIがないのでWin32 APIを直接呼び出さなければいけません。 [[.NET TIPS Win32 APIやDLL関数を呼び出すには?:http://www.atmarkit.co.jp/fdotnet/dotnettips/024w32api/w32api.html]] MicrosoftのBTスタックを扱うdllが""Irprops.cpl"なので、これを読み込む。 具体的には,DllImport属性を仕様する準備を整え、(アンマネージコードなAPIをDLLから利用するためのもの) 具体的にはDllImport属性を仕様する準備を整え、(アンマネージコードで作られたAPIをDLLから利用するためのもの) using System.Runtime.InteropServices; BT用のDLLを読みだす。 [DllImport("Irprops.cpl")] 後はC++と同じようにAPI使えば、それなりの形になる。 ***C++ [#maf37d68] 必要なヘッダ winsock2.h bthdef.h BluetoothAPIs.h 必要なライブラリ Irprops.lib 使用するであろうAPI はっきり言ってヘッダーのコメントが神なのでしっかり読んでください。 ***JAVA [#c80050f3] *Visual Studio 2005 に Service Pack 1を統合する [#jb5f7057] Windows 7 Professional x86 で確認。 E:\はVisual Studio 2005 インストールCDの場所なので各自で変更してください。 ユーザーフォルダの下に作業フォルダを作成してから進めました。 (C:\Users\Hogehoge\tmp) tmpフォルダ内に必要なService Packを入れておいて下さい。 [[Visual Studio 2005 Team Suite Service Pack 1:http://www.microsoft.com/downloads/details.aspx?familyid=bb4a75ab-e2d4-4c96-b39d-37baf6b5b1dc&displaylang=ja]] [[Visual Studio 2005 Service Pack 1 Update for Windows Vista:http://www.microsoft.com/downloads/details.aspx?FamilyId=90E2942D-3AD1-4873-A2EE-4ACC0AACE5B6&displaylang=ja]] [[Visual Studio 2005 Service Pack 1 ATL セキュリティ更新プログラム:http://www.microsoft.com/downloads/details.aspx?FamilyID=7c8729dc-06a2-4538-a90d-ff9464dc0197&displaylang=ja]] **Service Pack 1を統合 [#yfc48525] とても時間がかかるので注意。 コマンドプロンプトで以下のように打ち込む。 cd tmp msiexec.exe /a E:\vs\vs_setup.msi TARGETDIR=%cd%\vs /L*vx install.log VS80sp1-KB926602-X86-JPN.exe /extract VS_TMP1 msiexec.exe /a vs\vs_setup.msi /p VS_TMP1\VS80sp1-KB926602-X86-JPN.msp /L*vx patch1.log VS80sp1-KB932236-X86-JPN.exe /extract VS_TMP2 msiexec.exe /a vs\vs_setup.msi /p VS_TMP2\VS80sp1-KB932236-X86-JPN.msp /L*vx patch2.log VS80sp1-KB971090-X86-INTL.exe /extract VS_TMP3 msiexec.exe /a vs\vs_setup.msi /p VS_TMP3\VS80sp1-KB971090-X86-INTL.msp /L*vx patch3.log インストールCDの中身をまるまる新たなフォルダにコピー。 E:\ → C:\Users\Hogehoge\VS2005SP1 VSの中の.cabと.msiのファイルは既にvsに展開済みのため削除。 C:\Users\Hogehoge\VS2005SP1\VS *.cab *msi を削除 VSフォルダにvsフォルダを上書きする。 C:\Users\Hogehoge\VS → C:\Users\Hogehoge\VS2005\VS SQLServer2005の互換性で文句言われた人は、後に自分でアップデートしてください。 &color(red){''注意''}; 作成するディスクラベル名はオリジナルと同じにする必要があります。(恐らく『DVD1』のはず) 同じにしないとインストール時にCDがあっても、途中でCDの挿入を求められます。 IP:133.28.96.26 TIME:"2010-05-14 (金) 20:53:24" REFERER:"http://merl.ec.t.kanazawa-u.ac.jp/micon-bu/index.php?cmd=edit&page=nishino%2Fhowto" USER_AGENT:"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.1.249.1064 Safari/532.5"