iPodとのシリアル通信させてみる(その1)
iPodとPCをつなぐ治具を作ったので、制御ソフトを作ってみる。
作るにあたってインターネットで資料を集めた。
開発言語は以前マインスイーパを作ったC#(Microsoft Visual C# 2005 Express Edition)で行うことにする。(シリアル通信の設定が楽そう)
|
【ネットで仕入れた資料よりわかったこと】
- シリアル通信設定:
19200bps、STOP1、パリティー無し
- USBで接続中はシリアルのコマンドが利かない。(あたりまえか?)
- 通信プロトコルは主に5つに連なり_
- ヘッダー
([0xFF]、[0x55]の順で固定な値)
- データ数
(1(モード数分)+n(データ数分))
- モード
([0x00]~[0x04])
- データ
(コマンド等)
- チェックサム
(100h-データ数-モード-データ)
で構成される。
これは送信データ・受信データ共に同じ。
(最初送信データ側だけこのプロトコルなのかと思っていたら、作っていくうちにiPodからの返答もこのプロトコルでやってくるというのを実際に受けた受信データからわかったよ。)
- ようは「3.モード」と「4.データ」をiPodへ与えてやれば何かしらの制御が可能であると。
- まずその「3.モード」は3種類ある。それぞれは
- 「ボイスレコーダ」・モード
- 「簡易リモート」・モード
- 「アドバンス(上級)iPod・リモート」・モード
- んでそれぞれに「4.データ」も付加して送るわけである。上記3種類の各モードに対するデータはどんなものがあるか、さらに詰めていく。
|
【モード0x00:モード切替】- [0xFF]-[0x55]-[0x03]-[0x00]-(モード値(※))-[チェックサム]
- PCから順にiPodへ送ることでモード値に書かれたモードにさせる。
※モード値 | 内容 | [0x01]-[0x01] | iPodをモード1「ボイスレコーダ」にする | [0x01]-[0x02] | iPodをモード2「簡易リモート」にする | [0x01]-[0x04] | iPodをモード4「上級リモート」にする |
- 例)iPodをモード4(AdvanceiPodRemote)にさせる
[0xFF]-[0x55]-[0x03]-[0x00]-[0x01]-[0x04]-[0xF8]
チェックサム・・・100h-0x03-0x00-0x01-0x04=0xF8
|
【モード0x01:ボイスレコーダ】
- 昔のiPodではマイクが付けられて、このモードにすることで
8kHzのモノラル
で録音できたみたい。
- どうやら過去iPod機種のみサポートのようで、自分のiPod(3G)ではこのモードにすると怒られた。
なのでこのボイスレコーダとしては使えないようだ。(´・ω・`)ショボーン
|
【モード0x02:簡易リモート】
- 簡単な再生系のコマンドiPodの周辺機器で売られているリモコンはこのコマンドを使っているもよう。
- コマンドを送ると、動作をし続けるので停めてやるコマンドを送らねばならない。
例えば「音量 増」を送るとドンドンボリュームが上がっていってしまう。
「ボタンリリース」を送らないと止まらない。
同様に「Play/Pause」コマンドを送ると、ずーっと[Play/Pause]ボタンを押した状態になるのでその結果電源が落ちてしまう。([Play/Pause]キーの長押しで電源Off)
- コマンドは2バイト、3バイト、4バイト、5バイトで構成されているが、自分のiPod(3G)では3、4、5バイトのコマンドは対象外のようで受け付けてくれなかった。
(5バイトのコマンドにスクロールUP/Downがあるんだよなぁ・・ちぇ。)
- 例)次のアルバムにする。
[0xFF]-[0x55]-[0x03]-[0x02]-[0x00]-[0x20]-[0xD9]
すかさず
[0xFF]-[0x55]-[0x03]-[0x02]-[0x00]-[0x00]-[0xFB]
コマンド数 |
内容 | 1 | 2 | 3 | 4 | 5 | 2バイト | ボタンリリース | 0x00 | 0x00 | | Play/Pause | 0x01 | 音量 増 | 0x02 | 音量 減 | 0x04 | スキップ 増 | 0x08 | スキップ 減 | 0x10 | アルバム 次 | 0x20 | アルバム 前 | 0x40 | 停止 | 0x80 | 3バイト(※) | Play(Pauseなし) | 0x00 | 0x00 | 0x01 | | Pause(Playなし) | 0x02 | ミュート(サイクリック) | 0x04 | プレイリスト 次 | 0x20 | プレイリスト 前 | 0x40 | シャッフル(サイクリック) | 0x80 | 4バイト(※) | リピート(サイクリック) | 0x00 | 0x00 | 0x00 | 0x01 | | 電源OFF | 0x04 | | 電源ON | 0x08 | | メニュー | 0x40 | | 決定 | 0x80 | | 5バイト(※) |
スクロール ↑ | 0x00 | 0x00 | 0x00 | 0x00 | 0x01 | スクロール ↓ | 0x02 |
※3,4,5バイトコマンドは自分のiPodでは動かないので参考程度に。(まんまネットで得た内容(;´∀`)) |
<モード4については次回>(つーかまだ作っていて終わっていない。(;´∀`)) |
| 固定リンク | 0
トラックバック
この記事へのトラックバック一覧です: iPodとのシリアル通信させてみる(その1):
» iPodとのシリアル通信させてみる(その2) [じむの(とりあえず)やってみたの巻]
前回からだいぶ経ちました。ええ長い間サボっていました。 なんかプログラムを書くモ [続きを読む]
受信: 2007/12/20 23:04
コメント