SVX日記
2005-02-18(Fri) ナビホーク帰港
電池交換とちょっとした修理のために、愛用の腕時計ナビホークをメンテに出すも、修理から帰ってくるまでに悪夢にうなされ、やっと戻ってきたと思ったら計算尺が小破、再び修理に出し、また悪夢を見る……という経緯を経て、やっと帰ってきたのである。
ドキドキしながら開封すると……おぉ、計算尺が新品に交換されている!! 新品の頃はこんなに光沢があったんだなぁ。かなりウレしい。シブかった回転もスムーズになっている。前回に修理から帰ってきて、計算尺にキズが付き、回転がシブくなってしまった状態を見たときは、このまま使い続けるのがツラい気持ちにまで落ち込んだので、中途半端な修理を施されても愛着が戻るか不安だった。しかし、これだけちゃんと治してもらえれば、ノープロブレム。残りの人生を供にするイキオイである。
しかし既に製造を中止した腕時計でも、パーツは在庫してるんだねぇ。いや、自動車や家電ならともかく腕時計、しかも決して高級時計ではないから、正直、意外だった。今回は修理作業時の破損ということで対応してもらえたが、もしかすると、そうでなくても見栄えが悪いという理由で交換を依頼できるというコトだろうか? ま、更に5年後までパーツが在庫している可能性は低いだろうけども。
なんにせよ時計の機能としてはオマケに近い、計算尺の破損に対し、ちゃんと対応してくれたシチズンには大感謝である。そういえば、シチズンはマイクリエィションという自分で時計をデザインできるサービスをやっている。そういや以前にオイラこれで2本ほど注文したんだった。1本は人にあげ、もう1本は紛失してしまったが、1万円前後という値段の割にはなかなか面白いサービスである。また作ってみようかな。
さて、先日の「小論文を機械採点してみる」で少しバラしたが、来週あたり、いわゆる面接というヤツに向かうコトなっている。その時の切符も上記の腕時計の小包と同時に到着した。この切符というヤツがまた面白い。JR東海ツアーズの「ぷらっとこだまエコノミープラン」というヤツである。
各駅停車の新幹線「こだま」に乗らねばならない、という制限があるものの、指定席料金込みでかなり割安、しかも1ドリンクが付くというサービスだ。1ドリンクがビール可というのがまたポイントが高い。まぁ「ひかり」に比べ、東京、名古屋間で1時間ほどの差が生じるが、\3,000は得をするので、座っているだけで時給\3,000と考えれば悪くないであろう。
ちなみに「ぷらっとこだまグリーンプラン」というのもあって、これは「こだま」ながら「ひかり」とほぼ同料金でグリーン車に乗ることができる。こいつはのんびりと旅行する時にはぴったりである。グリーンはいいぞぉ。
2009-02-18(Wed) 簡易ながらラインモニタ成功
しこしこと、秋月のWindows用PICプログラマのソースコードを読んでは、プロトコル解析をする今日この頃である。んが、こんなこと言ってはなんなんだが、このソースコードは驚愕の汚さだ。何度、同じコードを繰り返せば気が済むんだ……度を超している。これは、PICプログラマキットV4添付の物件であることから、初期バージョンに近い状態だと思うのだが、その時点ですら、九龍城砦も顔負けの増築っぷりである。
いかにも「動いているところには絶対に触らない」という強固な意志の元、増築を繰り返したコードに見える。確かに「動いているところには絶対に触らない」というのは、この業界によくある掟かもしれないが、にしても限度があろう。まぁ、オイラのコードも、かなり一般には奇異なルールで書いているので、エラそうなことはいえないけれどもさ。
にしても、問題は、結局、このコードは古いモノであって、最新のファームに対応したモノではないということだ。大いに参考にはなるものの、これに従って挙動すれば動く、ということは保障されない。やっぱり、ラインモニタで通信内容を盗聴しないとなぁ……。
現在のラインモニタは、ライタからの通信は正常に得られるが、ライタへの通信がところどころ化け、内容がイマイチ安定しないという状態である。なんだか、電圧が逆に見えるのだが、不思議なことにPICの読み書きは正常にできてしまうのだよなぁ……
気を取り直して結線を修正。ついでに、モニタ用LEDも実装した。信号がない時は、赤いLEDが点灯。通信が発生すると、白LEDがチカチカする。ふみふみ、正常にモニタできるようになったぞ。PICライタは半二重通信なので、RXとTXの両方を一度にモニタできるし、ジャンパを外せば、片方ずつモニタすることもできる。取得できる内容も完全に安定している。
しかし、問題は、RXとTXの両方を一度にモニタする都合上、送受信の内容が混じってしまい、それを区別できないこと。幸い、ワンショットのみの結果から解析する必要はないので、同じ通信を3回繰り返し、RXのみ、TXのみを別に採取して、合計3つのファイルから、送信と受信の内容を分離しようと、スクリプト「shotoku.rb」を開発しようと……したが、実はコレが結構に難しい。
結局、通信内容をテキストに落としてdiffを取って分離することにした。実はdiffは上述の命題を限りなく解決するファジィなインテリジェンスを備えた、なかなかに高度なツールなんだよね。つまりは、送受信の混じった内容と、送信だけの内容、2回にわけてモニタして、前処理(seeable.rb)して、diffに食わせて、後処理(gather.rb)して、以下のような感じの結果が得ようって寸法である。
# 前処理のスクリプト
$ cat seeable.rb
#!/usr/bin/ruby
$stdin.each_byte {|c|
printf("%02x [%s]\n", c, (c < 0x20 ? '^' + (c + 64).chr : (c < 0x7f ? c.chr : '')))
}
# 後処理のスクリプト
$ cat gather.rb
#!/usr/bin/ruby
mode = ' Start'; d = ''; c = '<Start>'
$stdin.each {|l|
if(l =~ /^(.) ([0-9a-f]{2} )\[(.*)\]/i)
if(mode != $1)
printf "%s %-48s [%s]\n", mode[0,1], d, c
mode = $1; d = ''; c = ''
end
d += $2; c += $3.size == 1 ? $3 : '.'
mode += 'LF' if(c.size > 15)
end
}
# 送受信の混じった内容、今回は「PIC16F819への書き込み」をモニタし、前処理する
$ cat /dev/ttyUSB0 | ./seeable.rb > 819progRT
# 送信だけの内容をモニタし、前処理する
$ cat /dev/ttyUSB0 | ./seeable.rb > 819progT
# diffに食わせたものを、後処理する
$ diff -C 1000 819progRT 819progT | ./gather.rb
[<Start>]
2a 2a 2a 3f [***?]
- 41 45 2d 50 47 4d 38 37 37 20 20 56 36 2e 37 31 [AE-PGM877 V6.71]
- 0d 40 [.@]
6d 44 0a [mD.]
- 0a [.]
4e 72 73 63 00 08 [Nrsc..]
- 3f ff 3f ff 3f ff 3f ff 3f ff 3f ff 04 e4 3f 10 [?.?.?.?.?.?...?.]
- 40 [@]
40 2a 2a 2a 3f [@***?]
- 41 45 2d 50 47 4d 38 37 37 20 20 56 36 2e 37 31 [AE-PGM877 V6.71]
- 0d 40 [.@]
6d 44 0a [mD.]
- 0a [.]
4e 62 64 0a [Nbd.]
- 40 [@]
4e 77 48 65 08 00 [NwHe..]
- 00 [.]
28 21 [(!]
- 01 [.]
3f ff [?.]
- 02 [.]
3f ff [?.]
- 03 [.]
3f ff [?.]
- 04 [.]
:
: ※以下、略。行頭が'-'が付いているのが、受信内容。何も付いてないのが、送信内容。