h8write.cで発生するWindowsならではのバグめいたもの

ちょっとしたバグのようなものがあったので、ご報告まで。Open SSH/H8 writerで公開されているソースコードです。

Windowsでは、comとして認識されたものが、デバイスごとに通番を割り振られる仕様となっています。最初に接続したシリアル通信デバイスはcom1、次に接続されたものはcom2、以降続きます。ここで、10個以上を接続すると、com10となるわけですが、本来10以上のシリアル通信デバイスを接続することが想定されてないらしく、特別扱いされているようです。そのため、com10以降のシリアル通信デバイスに書きこもうと思っても、原因の分からないエラーで書き込めません。

というわけで、それを解決するためには、こちらの情報が参考になります。

1400行目くらいにある部分を、以下のように書き換えてください。面倒なら、以下からどうぞ。

h8write_win

なお、書き込んだバイナリデータをstderrに出力していました。stderrは一回出力されるたびにバッファがクリア(fflush)されるので、低スペックだとむちゃくちゃ遅いです(そういう問題ではないかもしれませんが、とにかく遅い)。そのため、バイナリデータの出力先を、stdoutにしています。ついでに、voidなのにreturn -1;としていた箇所を修正しておきました。

/*	Check if CPU has been spcified or not	*/
	if(cpuid == 0) {
		error_print(FATAL,ERR_CPU_TYPE,NULL);
	}
/*	Chek Freq for 3069	*/
	if(freq == 0) freq = 25;
	if( !(freq == 20 || freq == 25)) error_print(FATAL,ERR_OPTION,"Speed (-fxx) should be 20 or 25\n");

#ifdef Win32
	{
		char buf[MAXPATHLEN];
		strcpy(buf, "\\\\.\\");
		strcat(buf, sPort);
		strcpy(sPort, buf);
	}
#endif

	opencom(sPort, 9600);

コメントを残す

メールアドレスが公開されることはありません。