AirH"フォン(AH-J3003)をLinuxで遊ぶ その2 2005.2.28

     AirH"のPHS、AH-J3003はJRCから提供されているファイル転送プログラムを使って画像ファイルやメロディファイル、電話帳データ、ブックマークデータを読み書きできますが、電話帳データとブックマークデータについては、DDI-Pocketから提供されているユーティリティプログラム「H"問屋」を使っても読み書きできます。

     JRCのファイル転送プログラムのプロトコルについては、以前に解析結果をレポートしましたが、「H"問屋」についてもプロトコルが解析できましたのでレポートします。その結果ですが、両者の方式は、まったく似ても似つかぬものです。

     まずは、下記ダンプリストをご覧ください。ハイパーターミナルでATコマンドを直接入力した時の状況です。太字の部分がキーから入力した部分です。AT@Sを入力した以降 +++ の入力を終わるまではキー入力はエコーされません。\rはCRを\nはLFを表します。それぞれ ctrl+M, ctrl+J で入力しています。

    ATZ\r
    OK
    AT@S\r
    OK
    <1F>\r\n
    <1:0:1/1000:00/00:074072080045057051048f>
    <2:1H>\r\n
    <1:1:054068068073080032000008007001001008
    18617920522217819321917900100200814409514
    02031362341520890010030110000480550560490
    50051052053054055001009000001009000000001
    001004h>
    +++
    OK
    AT@S\r
    OK
    <8F>\r\n
    <8:0:1/100:00/00:074072080045057051048f>
    <2:8H>\r\n
    <1:8:045068068073080032000008007032001009
    07610511011712014323814924103200202210411
    61161120580470471191191190461081051101171
    20046111114046106112h>
    +++
    OK
    

     AT@S\r でデータ転送モードを開始します。+++ を入力すると転送モードを終了します。<1F>\r\n で電話帳データの件数を表示します。<2:1H>\r\n で電話帳データを一つ表示します。<2:1H>\r\n を続けて入力すると次のデータを表示します。

     <1F>に代えて<8F>を入力するとブックマークの件数を表示します。<2:8H>でブックマークのデータを表示します。

     <1:1: や <1:8: で始まり、h> で終わる数字の列が電話帳データやブックマークデータを表しています。一見複雑そうで何やら暗号めいて見えますが、判ってしまえばそう難しいものではありません。

     数字列の部分は 3文字毎に区切って読みます。それぞれが10進3桁の数値を表現しており、これら3桁の値は全て256未満です。ここから、1バイトの値を10進数3桁で表現したものと推測できます。そして、これらを文字コードの値と見なして、当てはまる文字の列に置き換えてみると次のようになります。

    <1:8:045068068073080032000008007032001009076105
    11011712014323814924103200202210411611611205804
    70471191191190461081051101171200461111140461061
    12h>
    <1:8:045 068 068 073 080 032 000 008 007 032 
             D   D   I   P   ' '             ' '
    001 009 076 105 110 117 120 143 238 149 241 032 ....
             L   i   n   u   x    情   報    ' '  
    

     なんか、よく見た文字が現れてきました。ここまで判ればしめたものです。後は、色々とデータを変更してダンプして見れば、データの構成が見えてきます。

     以下、解析結果をまとめておきますので、参照ください。

    1.拡張ATコマンド
      ファイル転送モード開始
      -> "AT@S",CR
      <- CR,LF,"OK",CR,LF
      
      電話帳データの件数表示
      -> "<1F>",CR,LF
      <- "<1:0:nnn/1000:......F>",CR,LF
      
      電話帳データ読み出し
      -> "<2:1H>",CR,LF
      <- "<1:1:.........h>",CR,LF
      -> "<2:1H>",CR,LF
      <- "<1:1:.........h>",CR,LF
      -> "<2:1H>",CR,LF
      <- "<2b>",CR,LF	(データなし)
      -> "+++"
      
      電話帳データ消去・書き込み
      -> "<3:1H>",CR,LF
      <- "<2h>",CR,LF
      -> "<1:1:..........H>",CR,LF
      <- "<2h>",CR,LF
      -> "<1:1:..........H>",CR,LF
      <- "<2h>",CR,LF
      -> "+++"
      
      ブックマークの件数表示
      -> "<8F>",CR,LF
      <- "<8:0:nn/100:......F>",CR,LF
      
      ブックマークデータ読み出し
      -> "<2:8H>",CR,LF
      <- "<1:8:.........h>",CR,LF
      -> "<2:8H>",CR,LF
      <- "<1:8:.........h>",CR,LF
      -> "<2:8H>",CR,LF
      <- "<2b>",CR,LF	(データなし)
      
      
      ブックマークデータ消去・書き込み
      -> "<3:8H>",CR,LF
      <- "<2h>",CR,LF
      -> "<1:8:..........H>",CR,LF
      <- "<2h>",CR,LF
      -> "<1:8:..........H>",CR,LF
      <- "<2h>",CR,LF
      -> "+++"
      
      ファイル転送モード終了
      -> "+++"
      <- CR,LF,"OK",CR,LF
      
    2.電話帳データフォーマット
      "<1:1:","-- 10進3桁ダンプデータ --","h>",CR,LF
      
      ■10進3桁ダンプ部分の元データフォーマット
      "xDDIP ",0,8,y,[データ部繰り返し ...]
      
      x 適当な1文字が割り当てられますが、意味・効果について未解析です。
      0,8,y の y には、6,2,3,7などの数値が割り当てられますが、こちらも
      その意味や効果について未解析です。
      
      ■データ部の構成
      <データ区分><データ種別><データ長><データ>
      
      ■データ区分,データ種別一覧
      <1><1> カナ名称
      <1><2> 全角(漢字)名称
      <1><3> 電話番号
      <1><4> FAX番号
      <1><5> PHS番号
      <1><6> 携帯番号
      <1><7> ポケベル番号
      <1><8> 文字電話
      <1><9> メールアドレス
      <0><1> グループ番号
      
      ■データ例
       カナ名称 "イチロウ"、漢字名称 "一郎"、電話番号 "0781234567"、グループ番号
       "1" 番の電話帳データがどのような表現になるか次に示します。
      
      "SDDIP "<0><8><6>
               =>16進表示 53 44 44 49 50 20 00 08 06
      <1><1><4>"イチロウ"
               =>16進表示 01 01 04 B2 C1 DB B3
      <1><2><4>"一郎"
               =>16進表示 01 02 04 88 EA 98 59
      <1><3><11><0>"0781234567"
               =>16進表示 01 03 0B 00 30 37 38 31 32 33 34 35 36 37
      <0><1><1><4>
               =>16進表示 00 01 01 04
      
      1バイト毎に10進3桁で表示すると、
      "SDDIP "<0><8><6>
               =>10進表示 083 068 068 073 080 032 000 008 006
      <1><1><4>"イチロウ"
               =>10進表示 001 001 004 178 193 219 179
      <1><2><4>"一郎"
               =>10進表示 001 002 004 136 234 152 089
      <1><3><11><0>"0781234567"
               =>10進表示 001 003 011 000 048 055 056 049 050 051 052 052 054 055
      <0><1><1><4>
               =>10進表示 000 001 001 004 
      
      転送データは次のようになる
      <1:1:083068068073080032000008006001001004178193219179001002004136234152089
      001003011000048055056049050051052052054055000001001004h>
      
      ■電話番号の先頭 0 に関する注意
       データ書き込み時に、電話番号を <1><3><10>"0781234567" と指定すると
      PHSに書き込まれた時には、"781234567" と先頭の0が削除されます。この場
      合には、次のようにバイナリ0を先頭に付加して書き込みます。<1><3><11>
      <0>"0781234567" とすると、PHSには、"0781234567" と書き込まれます。
      
      ■グループ番号に関する注意
      グループ番号は4倍した値で指定します。
      グループ1は、<0><1><1><4>とし、グループ2は <0><1><1><8> となります。
      
      
    3.ブックマークデータフォーマット
      "<1:8","-- 10進3桁ダンプデータ --","h>",CR,LF
      
      ■10進3桁ダンプ部分の元データフォーマット
      "xDDIP ",0,8,y," ", <1><データ長><データ>, " ", <2><データ長さ><データ>
      
      x 適当な1文字が割り当てられますが、意味・効果について未解析です。
      0,8,y の y には、6,2,3,7などの数値が割り当てられますが、こちらも
      その意味や効果について未解析です。
      
      ■データ種別一覧
      <1> コンテンツ名
      <2> コンテンツアドレス
      
      ■データ例
       コンテンツ名 "Linux情報"、コンテンツアドレス"http://www.linux.
      or.jp"のブックマークデータがどのような表現になるか次に示します。
      
      "ADDIP "<0><8><2>" "
               =>16進表示 41 44 44 49 50 20 00 08 02 20
      <1><9>"Linux情報 "
               =>16進表示 01 09 4C 69 6E 75 78 8F EE 95 F1 20
      <2><22>"http://www.linux.or.jp"
               =>16進表示 01 16 68 74 74 70 3A 2F 2F 77 77 77 2E
                         6C 69 6E 75 78 2E 6F 72 2E 6A 70
      
      1バイト毎に10進3桁で表示すると、
      "ADDIP "<0><8><6>" "
               =>10進表示 065 068 068 073 080 032 000 008 002 032
      <1><9>"Linux情報 "
               =>10進表示 001 009 076 105 110 117 120 143 238 149 241 032
      <2><22>"http://www.linux.or.jp"
               =>10進表示 001 022 104 116 116 112 058 047 047 119 119 119 046
                         108 105 110 117 120 046 111 114 046 106 112
      転送データは次のようになる
      <1:8:065068068073080032000008002032001009076105110117120143238149241
      03200102210411611611205804704711911911904610810511011712004
      6111114046106112h>