シリアルポートのタイムアウト設定

手順

  1. GetCommTimeout関数でパラメータの取得
  2. COMMTIMEOUTS構造体でパラメータの指定
  3. SetCommTimeouts関数でパラメータの設定

ソースコードの例

HANDLE hdSerial;
COMMTIMEOUTS timeout;

GetCommTimeouts( hdSerial, &timeout );        // タイムアウトパラメータを取得

/* タイムアウトパラメータを指定 */
timeout.ReadIntervalTimeout = 20;
timeout.ReadTotalTimeoutMultiplier = 10;
timeout.ReadTotalTimeoutConstant = 100;
timeout.WriteTotalTimeoutMultiplier = 10;
timeout.WriteTotalTimeoutConstant = 100;

SetCommTimeouts( hdSerial, &timeout );        // タイムアウトパラメータを設定

COMMTIMEOUTS構造体

typedef struct _COMMTIMEOUTS {  
    DWORD ReadIntervalTimeout;
    DWORD ReadTotalTimeoutMultiplier;
    DWORD ReadTotalTimeoutConstant;
    DWORD WriteTotalTimeoutMultiplier;
    DWORD WriteTotalTimeoutConstant;
};
  • 受信はインターバル時間とトータル時間を設定できる
  • 送信はトータル時間のみ
  • 単位はミリ秒

トータル時間は計算して求める。以下参照。

  • 受信インターバル時間
    • ReadIntervalTimeoutに設定する
    • ReadFile関数で1文字だけ受信する際には効果なし
    • ゼロに設置すると、受信インターバル時間は使われない
  • 受信トータル時間
    • ReadTotalTimeoutMultiplier * (受信バイト数) + ReadTotalTimeoutConstant
    • ReadTotalTimeoutMultiplier と ReadTotalTimeoutConstant がゼロのとき、受信トータル時間は使われない
  • 送信トータル時間
    • WriteTotalTimeoutMultiplier * (送信バイト数) + WriteTotalTimeoutConstant
    • WriteTotalTimeoutMultiplier と WriteTotalTimeoutConstant がゼロのとき、送信トータル時間は使われない
  • すべてゼロにするとタイムアウトされない
MAXDWORDを使う
timeout.ReadIntervalTimeout = MAXDWORD;
timeout.ReadTotalTimeoutMultiplier = MAXDWORD;
timeout.ReadTotalTimeoutConstant = /* 0 < MAXDWORD */;

このようにすると、

  • 入力バッファが空であれば、ReadFile関数は待機
  • 入力バッファがあれば(データを受信すれば)、入力バッファをデータバッファに格納
  • ReadTotalTimeoutConstantで指定した時間内に文字が到着しない場合はタイムアウトする
timeout.ReadIntervalTimeout = MAXDWORD;
timeout.ReadTotalTimeoutMultiplier = 0;
timeout.ReadTotalTimeoutConstant = 0;

このようにすると、指定したバイト数のデータを受信し終えていなくもReadFile関数は終了する。

ゼロスラッシュなフォントを探した

M+2VM+IPAG circle

M+フォント(ひらがな・カタカナ) + IPAゴシック(漢字) + Bitstream Vera Sans Mono(英数字) の等幅フォント

http://mix-mplus-ipa.sourceforge.jp/

ですって。
プログラミングするときはこれがいいね。

10ptのとき

  • I(アイ)、l(エル)、1(いち)、|(縦棒)もOK
  • O(オー)、0(ゼロ)もOK
  • :(コロン)、 ;(セミコロン)もOK
  • 元のフォントの半濁点を大きくさせている

16ptのとき

  • 16ptぐらい大きくすると「ミ」のギザギザが目立つ・・・

gvimの設定

LinuxWindowsで書式が違う。

Windows
set guifont=M+2VM+IPAG_circle:h10:cSHIFTJIS
Linux
set guifont=M+1VM+IPAG\ circle\ 10

Operaの設定

環境はWindows XP + Opera 9.52
[ツール]->[設定]からフォントの設定を変えただけでは、Googleの検索結果のフォントなどは変化しない。
これはユーザスタイルシートを設定すると解決できるみたい。

/* Opera Style Sheet */

/* --- font-style --- */
/*
*  {
    font-style:normal !important;
   }
*/

/* --- font-family --- */
/* base-font IPAMonaPGothic */
*  {
    font-family:IPAMonaPGothic !important;
   }

/* monospace-font IPAMonaGothic */
pre, pre *, code, samp, var, tt   {
    font-family:IPAMonaGothic !important;
   }
http://d.hatena.ne.jp/bend_tail/20070608/1181288474

「IPAMonaPGothic」と「IPAMonaGothic」の部分を変える。
「M+2P+IPAG circle」の場合は「"M+2P+IPAG circle"」と書く。
Linuxの場合は「M+2P+IPAG\ circle」か「M+2P+IPAG_circle」かもしれない)

手順

  1. 作ったスタイルシートを「C:\Documents and Settings\ユーザ名\Application Data\Opera\Opera\profile\styles\user」にでも置く
  2. [表示]->[スタイル]->[表示モードの編集]か、右クリック->[サイトごとの設定を編集]で指定する

iniファイルを変更しても出来るかも。