※新しいものは上に追加されます。

02-4-2

yozanはなんかだめだめな匂いがするのでAI15、解約して凍結することにしました。

01-11-27

PIAFS送信側テスト一発で通ったけどいいのか? といっても簡単なチェックだけ。 ざーっとデータ流してチェックしないと フローコントロールがちゃんといってるのかわからんけど、 テストプログラムは面倒なのでIMAP4クライアントの実装はじめるべーか。

01-11-21

引越しとかで手付かずだったけど再開。もちろんすっかり忘れている。

01-8-1

NEGO-REQをしてもいないのにNEGO-ACKを返したり、 CTRL-REQで通知したRTFよりも小さな値をCTRL-ACKで返したり。 PIAFSも相手先により結構むちゃくちゃでんな。

01-7-26

PIAFSの受信側をコーディング終了。テストが大変そうだにゃ。 なんでわざわざPIAFSから実装しているのかっつーと、 OS内のPIAFSルーチンはSelectiveARQをなんと実装しておらず、 いったんエラーが発生するとフレームがひとまわりするまで 受信がのろのろになってしまうから。
あとPPP/IP/TCPをメモリ喰わずに実装しやすいように、というのもあるが、 PPP/IP/TCPはとりあえずあとまわしで、 サーバ側直でIMAPに接続するようにするつもり。

01-5-30

完成お祝いの茅台酒。ひさしぶり。

01-5-22

↓下訂正。GHNDでかまわない。 刺さるのはデバッグ中にVisualC++上にドラッグするから。

01-5-18

メモ。STGMEDIUMでのHGLOBALはGlobalAlloc(GPTR,...)なこと。

01-5-15

WM_DEVICECHANGEが来ない… 他のPCカードだと来るのでデバイスドライバが悪いのかと思いきや、 モデムコントロールパネルには来ているみたいなので 何らかのRegisterDeviceNotificationで対処できそうなのに どうやっても来ない。どうすんべ?

…モデムクラス: 2c7089aa-2e0e-11d1-b114-00c04fc2aae4で登録すればOK。

01-5-8

↓リセット中じゃないと書けないシステムエリア。 EEPROMのManuIDをJEDECから探って、 Atmel AT29LV040A、がEEPROMのロックではない模様。
では書き込み禁止はどこ?ってメモリポートのr[e]、r[f]ですか。(加筆済)

01-5-7

海外&ゴールデンウィークぼけ…
シリアルポートの読み書き割り込み確認。デバイザがないだけっぽい。 でも当分必要ないので実装せず。
メモリリードとライトのシステムスレッドでの実装終了。キャンセルルーチン未。

EEPROM (800000-8fffff) の書き換え手順。 (ManuID=0x1f、DevID=0xc4の512kx8bitの2チップ)

  1. 80aaaaからaa,aa書き込み。
  2. 805554から55,55書き込み。
  3. 80aaaaからa0,a0書き込み。
  4. 512バイト界から512バイト書き込み。
  5. 最後に書き込んだワードデータが正しいかどうかでループ。10msecほど。 読み出しそのものは必須ではない。 どんなデータを書き込んでもbusy中は別の値として読める。
  6. 書き込みモードは512バイト毎に解除される。再び1.から。 時間でも解除されるっぽいのが危険な感じ。

01-4-16

コンフィグインデックスはIRP_MN_WRITE_CONFIGでは書き込めないのでFILTER_RESOURCEで実装。 初期時とリソース変更時でFILTER_RESOURCEにまわってくるリソースリストが異なるので注意。 IoctlはFILE_DEVICE_MODEMは通過せず、FILE_DEVICE_SERIAL_PORTならOK。 これでメモリアクセスに関する問題はすべて解決。テストでWin32アプリから AI15のROMデータ読み込み成功。 あとはタイミング調整と実用アプリのコーディング。
モデムアクセスと、あとメモリアクセスでのIRQの使い方がpending。 切り替えに時間かかる(モデム→メモリ9ms、メモリ→モデム3.5ms)ので、 IRQで通知してくれるとうれしいけど調べるの面倒そう。

01-4-13

メモリポートメモ。
xx0=ステータス(R) 定常c2。
  +02=モデムモード
  +04=メモリアクセスモード
      おそらくすぐには切り替わらないのでここを見て確認要。
xx1=コマンド(RW) 定常02。
  +01(RW)=? デジタル32Kモード? 01->ステータス80
  +02(RW)=モデムモード 02->ステータスc2
  +04(RW)=メモリアクセスモード 04->ステータスc4
          メモリアクセスモードのまま抜くと復活できず
  +80(RW)=?
xx2=レジスタアドレス(RW)下位4ビット。
xx3=レジスタデータ(RW)
  r[0](RW)=アドレス下位
  r[1](RW)=アドレス中位
  r[2](RW)=アドレス上位
  r[3](RW)=データ。自動インクリメントされる。
  r[4-d]=? 固定値 ff 00 00 00 01 00 20 00 00 00
  r[e](RW)=EEPROM書込許可のbit15〜8。初期値58。
  r[f](RW)=EEPROM書込許可のbit20〜16。下位5ビットのみRW可。
       初期値09つまり895800以降に書き込める。
       900000にするとどこにも書き込めない。

01-4-12

COM3とかへのリンクと、COM3をオープンした場合にドライバに廻ってくること確認。 が割り付けられたはずのアドレスを読み出してもff ff ff..だったので、 電源が入っていないのかとDEVICE_POWER関連実装しPowerOnを投げるように してみるが変化無し。ふと思い立ってLogConfigOverrideして、 PCMCIAのコンフィグインデックスを30-33にしてみるとビンゴ。 電源関連は未実装でも問題なしの模様。

コンフィグインデックス、 00-1fでは未セレクト。 20-23ではCOMポートは指定した部分(例:22では3e8-3ef)のみ見えてメモリポートはxx0-7に見える。 30-33ではCOMポートはxx8-xxfに見えてメモリポートはxx0-xx7に見える。

LogConfigOverrideすると、最初のPnPでは正しく動作するが、 以後のユーザによる割付変更だと無視されてタプル情報が使われてしまうので、 PnP-FILTER_RESOURCEで対処するかConfigを自前で書き込むようにするか検討。

というわけで、あとはメモリポートの解析だなあ…

01-3-28

とりあえず枠組みだけ ソフトモデムとして実装。
わけのわからんPnPメッセージが大量に流れてきてるなあ…

ソフトウェアモデムのサンプルコード(fakemodem)があるWindows Modem DDKですが、 下のリンクから消えうせてますね。 Windows 2000 DDKにはまだサンプルコードは入っていません。
覚書。セクション名にはWindows2000だけ対応の場合でも.NTが必要。 DriverVerの日付は証明書なしでは表示されない。 デバイス取り外し時の挙動が初回に変…再現せず。

01-3-23

引越しとかで手付かずだったけど再開。もちろんすっかり忘れている。

01-1-26

とりあえずWin2000で使えるようにともがいている。 PCMCIAタプルはDS110のそれと同じ。ただしモデムカード模倣はない。 で、出ているエラーはすべてSerialクラスからの「シリアル ポートであるか検証中に、デバイザ ラッチ レジスタの内容が、割り込み有効化レジスタおよび受信レジスタと同じでした。」というもの。 16550互換なポートじゃないんでしょうか? 少なくとも標準のSerial.sysで認識はできないみたい。 任意のIOポートをアクセスするツールを使ってどの程度互換性があるのか (あるいは、まったくないのか)を調べるのもいいんだけど、 この際だからWindows Driver Modelなデバイスドライバを書いてみて、 それでポートアクセスがどうなっているか調べてみることにする。

なお、overrideしなくてもちゃんと3e8とかのアドレスを見てくれるみたい。 ただ、overrideにはバグがある? MultiFunctionではoverrideはインストール時には効くけどリソース変更では無視されタプル情報のが使われるし、Modemクラスだとそもそもまったく無視されてるっぽい。

ドライバはModemクラスのLowerFilterとして実装することにする。 つまりソフトモデムと同じ方法。 いや、マルチファンクションアダプタとして実装するのが正義なんでしょうけど、 デバイスマネージャにたくさんデバイスが並ぶのは好きじゃないのよ。マルチファンクションアダプタのアイコン◇もなんだかそっけないし。

参考文献 : Windows 2000 DDK (MSDN Professional) , WDMデバイスドライバ (ISBN4-88135-861-8) , Windows Modem DDK (MSサイト)