なんとかなるさね

マイコンをネタにブログを始めてみました


RL78マイコン基板(RL78/G13)|Internet Explorerからrl78flashを起動して通信(シリアルモニタ)する 

前のエントリでInternet Explorerからrl78flash(オープンソースソフトウェアのRL78内蔵フラッシュメモリ書き
換えツール)を起動してみたのですが、rl78flashには書き込み機能の他にシリアルポートと通信(シリアルモニタ)
する機能もありますので、それを試してみました。ちょっと残念だったのは、rl78flashのキー入力送信機能を
無効化(nulからの入力にリダイレクト)してやらないとrl78flashが起動して直ぐ終了してしまうのと、rl78flashの
プロセスを終了させる為にWindowsの強制終了コマンド(taskkill)を実行しなければならなかったことでした。
(あと、今さらですが、StdOut.ReadLine()がブロッキングリードであることも。)

スクリプト: Script4.html
内容:

<script type="text/javascript">
var WshShell = new ActiveXObject('WScript.Shell');

document.open();
document.write('rl78flash -m 2 -rt 9600 COM14' + '<br>');
document.close();

var oExec = WshShell.Exec('cmd /c title=running rl78flash & "E:\\tools\\micom\\Renesas\\Programming Tools\\JScript\\rl78flash.exe" -m 2 -rt 9600 COM14 < nul 2>&1');
document.open();
for (i = 0; i < 10; i++)
{
    document.write(oExec.StdOut.ReadLine() + '<br>');
}
document.close();

var oKill = WshShell.Exec('cmd /c title=terminating rl78flash & taskkill /f /im rl78flash.exe');

while (oExec.Status == 0) {}
</script>


実行方法と実行結果は以下の通りです。

start "" /wait "c:\Program Files\Internet Explorer\iexplore.exe" -nohangrecovery -noframemerging -nosessionmerging "E:\tools\micom\Renesas\Programming Tools\JScript\Script4.html"





今回も前のエントリと同様にコマンドプロンプトが表示されてしまうのですが、今回はタイトルバーを変更する
ようにしてみました。




追記 : 補足

なお、rl78flashのキー入力送信機能を無効化(nulからの入力にリダイレクト)しなかった場合には、以下のように
エラーになります。

スクリプト: Script4b.html
内容: 赤字の箇所を削除

<script type="text/javascript">
var WshShell = new ActiveXObject('WScript.Shell');

document.open();
document.write('rl78flash -m 2 -rt 9600 COM14' + '<br>');
document.close();

var oExec = WshShell.Exec('cmd /c title=running rl78flash & "E:\\tools\\micom\\Renesas\\Programming Tools\\JScript\\rl78flash.exe" -m 2 -rt 9600 COM14 < nul 2>&1');
document.open();
for (i = 0; i < 10; i++)
{
    document.write(oExec.StdOut.ReadLine() + '<br>');
}
document.close();

var oKill = WshShell.Exec('cmd /c title=terminating rl78flash & taskkill /f /im rl78flash.exe');

while (oExec.Status == 0) {}
</script>




追記 : メモ

エディタを使わずブラウザだけでGoogle Appの開発が可能に - マイナビニュース
http://news.mynavi.jp/news/2016/10/22/107/

追記 : メモ

Google AppとChrome App(ゆくゆくは廃止予定らしい)は別物なのかな?

スポンサーサイト



2016/10/06   blog-entry-825   category: RL78 /* 16bit,8bit CISC */

go page top

RL78マイコン基板(RL78/G13)|Internet Explorerからrl78flashを起動してフラッシュ書き込みする 

前のエントリでInternet ExplorerからCOMポートをリード/ライトする方法を試した時、Internet Explorerから
Windowsのmodeコマンドを起動するなどということをやっていたのですが、それが出来たのですから、恐らく
rl78flash(オープンソースソフトウェアのRL78内蔵フラッシュメモリ書き換えツール)を起動することも出来る筈
だと思い、やってみました。(なお、以前のエントリに書いた通りrl78flashにはソフトウェア上の何かしらがある
ような気がしています(というか今は目星が付いています)が、その回避の為にmodeコマンドを実行しています。)

スクリプト: Script3.html
内容:

<script type="text/javascript">
var WshShell = new ActiveXObject('WScript.Shell');

document.open();
document.write('rl78flash -m 2 -b 1000000 -iewv COM14 cotton_sketch.mot' + '<br>');
document.close();

var oExec = WshShell.Exec('cmd /c cd /d "E:\\tools\\micom\\Renesas\\Programming Tools\\JScript" > nul & mode COM14 dtr=off > nul & rl78flash -m 2 -b 1000000 -iewv COM14 cotton_sketch.mot 2>&1');

document.open();
document.write(oExec.StdOut.ReadLine() + '<br>');
document.write(oExec.StdOut.ReadLine() + '<br>');
document.write(oExec.StdOut.ReadLine() + '<br>');
document.write(oExec.StdOut.ReadLine() + '<br>');
document.write(oExec.StdOut.ReadLine() + '<br>');
document.write(oExec.StdOut.ReadLine() + '<br>');
document.close();

while (oExec.Status == 0) {}

document.open();
document.write('Completed!' + '<br>');
document.close();
</script>


実行方法と実行結果は以下の通りです。

start "" /wait "c:\Program Files\Internet Explorer\iexplore.exe" -nohangrecovery -noframemerging -nosessionmerging "E:\tools\micom\Renesas\Programming Tools\JScript\Script3.html"





ただ、今回は前のエントリのRunメソッドでは無く、rl78flashのメッセージ出力を取得する為にExecメソッドを
使いましたが、以下のようにコマンドプロンプトが表示されてしまうのが、ちょっと残念なところではあります。



追記 : 補足

なお、modeコマンドを実行しなかった場合には、以下のようにエラーになることがあります。

スクリプト: Script3b.html
内容: 赤字の箇所を削除

<script type="text/javascript">
var WshShell = new ActiveXObject('WScript.Shell');

document.open();
document.write('rl78flash -m 2 -b 1000000 -iewv COM14 cotton_sketch.mot' + '<br>');
document.close();

var oExec = WshShell.Exec('cmd /c cd /d "E:\\tools\\micom\\Renesas\\Programming Tools\\JScript" > nul & mode COM14 dtr=off > nul & rl78flash -m 2 -b 1000000 -iewv COM14 cotton_sketch.mot 2>&1');

document.open();
document.write(oExec.StdOut.ReadLine() + '<br>');
document.write(oExec.StdOut.ReadLine() + '<br>');
document.write(oExec.StdOut.ReadLine() + '<br>');
document.write(oExec.StdOut.ReadLine() + '<br>');
document.write(oExec.StdOut.ReadLine() + '<br>');
document.write(oExec.StdOut.ReadLine() + '<br>');
document.close();

while (oExec.Status == 0) {}

document.open();
document.write('Completed!' + '<br>');
document.close();
</script>




追記 : メモ

Exec メソッド - MSDN
https://msdn.microsoft.com/ja-jp/library/cc364356.aspx

Status プロパティ (WshScriptExec) - MSDN
https://msdn.microsoft.com/ja-jp/library/cc364410.aspx

StdOut プロパティ (WshScriptExec) - MSDN
https://msdn.microsoft.com/ja-jp/library/cc364386.aspx

StdErr プロパティ (WshScriptExec) - MSDN
https://msdn.microsoft.com/ja-jp/library/cc364384.aspx

StdIn プロパティ (WshScriptExec) - MSDN
https://msdn.microsoft.com/ja-jp/library/cc364385.aspx

追記 : メモ

Arduino CreateではブラウザからArduinoへのスケッチの転送にはプラグイン(?)を使います、との記事を読んで、
(Internet Explorer限定で)それの真似事(?)をしようとしていたらしい、 ということに気付きました、、、

Arduino Createが正式リリースされました - スイッチサイエンス社ブログ
http://mag.switch-science.com/2016/08/16/arduino-create/

The Arduino Create Multi Platform Agent - GitHub
https://github.com/arduino/arduino-create-agent/

(これはプラグインとは呼ばないと思う、、、)
(追記 : HTML5でもなければJavaScriptでもなくて、Go言語で記述されたタスクトレイ常駐型アプリケーション?)
(追記 : Arduinoボードへの書き込みは内部で既存のavrdudeを起動して行っているらしい。)

追記 : 雑感

Arduino Create Multi Platform Agentを改造して、特定のフォルダのMOTファイルが更新されたらrl78flashを
自動的に起動して書き込むようにすれば、ルネサスWebコンパイラでも使えるような気が、、、

KurumiWriterに同様なMOTファイル監視機能を追加して、更に、タスクトレイに入れられるようにする手もあり?

追記 : 雑感その2

ブラウザの中で動作しているかどうかは重要ではなくて、ブラウザの中で操作しているという感覚が重要なのかな?
(スイッチサイエンス社のライターさんは、そこで錯覚したのかな?)

2016/10/03   blog-entry-824   category: RL78 /* 16bit,8bit CISC */

go page top

RL78マイコン基板(RL78/G13)|Internet ExplorerからOCXを使わずにCOMポートを読み書きする 

ウェブで調べ物をしていて、Internet ExplorerからOCXを使わずにCOMポートをリード/ライトする方法がある
ことを知りました。いつものように、ちょっと好奇心から試してみました。(前2つのエントリ(821, 822)と同様に
改造したKurumiWriterを使った後に試しています。そうしないと動作が暫く固まる現象が発生してしまう為。)

スクリプト: Script1.html
内容:

<script type="text/javascript">
var ForReading = 1, ForWriting = 2, ForAppending = 8;

var WshShell = new ActiveXObject("WScript.Shell");
WshShell.Run("cmd /c mode COM14 dtr=on > nul & mode COM14 BAUD=9600 PARITY=n DATA=8 STOP=2 to=on dtr=off", 7, true);

var fso = new ActiveXObject("Scripting.FileSystemObject");
var com = fso.OpenTextFile("\\\\.\\COM14", ForReading);
document.open();
document.write(com.ReadLine() + '<br>');
document.write(com.ReadLine() + '<br>');
document.close();
com.Close();
</script>


実行方法と実行結果は以下の通りです。

start "" /wait "c:\Program Files\Internet Explorer\iexplore.exe" -nohangrecovery -noframemerging -nosessionmerging "E:\tools\micom\Renesas\Programming Tools\JScript\Script1.html"





追記 : 補足

なお、リードとライトを切り替えるには一旦COMポートをクローズしてからオープンし直す必要がありました。
更に、マイコン側からメッセージを送信する前にディレイを入れる必要がありました。

プログラム: http://www.musashinodenpa.com/arduino/ref/index.php?f=0&pos=3245を参考にしました。
内容: 赤字の箇所を追加しています。(以前のエントリと同様にルネサスWebコンパイラでビルドしています。)

#include <Arduino.h>

int incomingByte = 0; // 受信データ用

void setup() {
  Serial.begin(9600); // 9600bpsでシリアルポートを開く
  Serial.print("Temperature: ");
  Serial.println(getTemperature(TEMP_MODE_CELSIUS)); // MCU内蔵温度センサ
}

void loop() {
  if (Serial.available() > 0) { // 受信したデータが存在する
    incomingByte = Serial.read(); // 受信データを読み込む

    delay(1000); // 相手側の受信準備が整うまでウェイトする
    Serial.print("I received: "); // 受信データを送りかえす
    Serial.println(incomingByte, DEC);
  }
}


スクリプト: Script2.html
内容:

<script type="text/javascript">
var ForReading = 1, ForWriting = 2, ForAppending = 8;

var WshShell = new ActiveXObject("WScript.Shell");
WshShell.Run("cmd /c mode COM14 dtr=on > nul & mode COM14 BAUD=9600 PARITY=n DATA=8 STOP=2 to=on dtr=off", 7, true);

var fso = new ActiveXObject("Scripting.FileSystemObject");
var com = fso.OpenTextFile("\\\\.\\COM14", ForReading);
document.open();
document.write(com.ReadLine() + '<br>');
document.close();
com.Close();

com = fso.OpenTextFile("\\\\.\\COM14", ForWriting);
document.open();
document.write("Can you receive? I will send: 'A' (65)" + '<br>');
document.close();
com.Write("A");
com.Close();

com = fso.OpenTextFile("\\\\.\\COM14", ForReading);
document.open();
document.write(com.ReadLine() + '<br>');
document.close();
com.Close();
</script>


実行結果は以下の通りです。



追記 : メモ

参考にさせて頂いたブログ

ブラウザ上からCOMポート!? - ぷろぐらむとか
http://futr.cocolog-nifty.com/blog/2008/04/post_7acf.html

読ませて頂いたブログ

COMポート一覧取得 - 揮発性のメモ
http://d.hatena.ne.jp/iww/20070306/com

追記 : メモ

Run メソッド - MSDN
https://msdn.microsoft.com/ja-jp/library/cc364421.aspx

OpenTextFile メソッド - MSDN
https://msdn.microsoft.com/ja-jp/library/cc428044.aspx

IE Command-Line Options - MSDN
https://msdn.microsoft.com/library/hh826025(v=vs.85).aspx

追記 : メモ

JavaScriptでArduinoをコントロール - ICS MEDIA - 株式会社ICS
https://ics.media/entry/6338
https://ics.media/entry/5538
https://ics.media/entry/4758

Node.jsからGR-ADZUKIを動かそう! - Yasuyuki Suzuki - Rulz
http://japan.renesasrulz.com/gr_user_forum_japanese/f/143/t/3449.aspx

追記 : メモ

あ、危なかった、、、 手を出すかも知れないところだった、、、 Rulz(というかShuta Kimuraさん)に感謝、、、

Rubicの新バージョンリリースについて - Shuta Kimura - Rulz
http://japan.renesasrulz.com/gr_user_forum_japanese/f/144/t/3652.aspx

JavaScript + Chrome Packaged Apps API を使用したシリアル通信Webアプリ - TechSketch - TIS株式会社
https://tech-sketch.jp/2013/08/javascript-chrome-packaged-apps-v2-api-web.html

Windows、Mac、LinuxでChromeアプリが廃止される! 開発者はどうすればよいか? - daiizの自由帳 - daiiz
http://daiiz.hatenablog.com/entry/2016/08/20/235600

代替品はこれかな? (もしFTDIのドライバが対応してくれれば特に何もしなくても使えるようになる筈なのかな?)

Access USB devices on the Web - Web Updates - Google
https://developers.google.com/web/updates/2016/03/access-usb-devices-on-the-web

2016/09/30   blog-entry-823   category: RL78 /* 16bit,8bit CISC */

go page top

RL78マイコン基板(RL78/G13)|KurumiWriter(改)で書き込んで自作utf8to932コマンドで日本語表示 

2つ前のエントリで改造したKurumiWriterを使った後はコマンドプロンプトのmodeコマンドとmoreコマンドの
組み合わせでRL78/G13と通信(シリアルモニタ)出来るようになっていることに前のエントリで気付いたのですが、
以前のエントリのようにルネサスWebコンパイラでSerial.print()の引数に日本語を書いていた場合には、それが
文字化けして表示されます。この際ですので、文字化けせずに表示されるようにコマンドを1つ自作してみました。

単にUTF-8からSJISへ漢字コードを変換しているだけなのですが、試しに汎用的な漢字コード(文字コード)変換
ツールを幾つか使ってみたところ、今回のようにリアルタイムで1行づつ入力されるデータをリアルタイムで1行
づつ出力することが出来なかったり(入力や出力でバッファリングが行われていてデータが充分に溜まった時点で
まとめて変換される)、COMポートに対して使えなかったり、といった状況でしたので自作することにしました。
(とは言え、エラーチェックを何もしていないところなど、ちょっと後ろめたい気持ちがない訳ではないですが。)

mode COM14 dtr=on > nul & mode COM14 baud=9600 parity=n data=8 stop=2 to=off dtr=off & utf8to932 < \\.\COM14


KurumiWriter V1.00(ソース公開版)の改造に使用したVisual C++ 2010 Express SP1で作成


// utf8to932.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"
#include "windows.h"

#define BUFSIZE 1024

int _tmain(int argc, _TCHAR* argv[])
{
    // for (;;) {} /* プロジェクトのプロパティで“デバッグ”の“アタッチ”を“はい”にしておく */
    CHAR buff[1024BUFSIZE];
    WCHAR wbuff[1024BUFSIZE];

    for (;;)
    {
        buff[0] = '\0';
        wbuff[0] = '\0';
        fgets(buff, sizeof(buff)BUFSIZE, stdin);
        MultiByteToWideChar(CP_UTF8, 0, buff, -1, wbuff, sizeof(wbuff)/*しまった、バイト数でなく配列数だった*/BUFSIZE);
        WideCharToMultiByte(CP_ACP, 0, wbuff, -1, buff, sizeof(buff)BUFSIZE, NULL, NULL);
        fputs(buff, stdout);
    }
    return 0;
}


ビルドしたプログラムは以下の通りです。(ちなみに、バッファオーバーフローはさせないようにして下さい。)

ファイル: utf8to932.7z
ファイル: utf8to932.7z        (2016/09/28更新)

追記 : メモ

参考にさせて頂いたブログ

SJISとUTF8の漢字コード変換 - Minoru Hatada
http://home.a00.itscom.net/hatada/windows/tips/sjis2utf8.html

追記 : メモ

MultiByteToWideChar - MSDN
https://msdn.microsoft.com/ja-jp/library/cc448053.aspx

WideCharToMultiByte - MSDN
https://msdn.microsoft.com/ja-jp/library/cc448089.aspx

追記 : メモ

試させて頂いた記事やブログ

libiconv - 瀬川 博人 - 株式会社システムエージェントジャパン
インストール(Windowsプリコンパイル版)
http://saj.co.jp/techinfo/htmls/other-libiconv-install_windows_precompile.html
ダウンロードファイル
http://ftp.jaist.ac.jp/pub/GNU/libiconv/libiconv-1.9.1.bin.woe32.zip
(http://ftp.jaist.ac.jp/pub/GNU/libiconv/)
http://ftp.jaist.ac.jp/pub/GNU/gettext/gettext-runtime-0.13.1.bin.woe32.zip
(http://ftp.jaist.ac.jp/pub/GNU/gettext/)

@IT > Windows Server Insider > Tech TIPS - アイティメディア株式会社
nkfツールで文字コードを変換する(Windows編)
http://www.atmarkit.co.jp/ait/articles/1301/25/news092.html
ダウンロードファイル
http://www.vector.co.jp/download/file/win95/util/fh526847.html

Windows Script Programming - ウィンドウズスクリプトプログラマ
cmd.exeとchcp.comだけで、文字コード(Unicode、UTF-8、UTF-7、JIS、EUC-JP、SJIS)を変換する!
http://scripting.cocolog-nifty.com/blog/2008/12/cmdexeunicodeut.html
ダウンロードファイル
http://www.vector.co.jp/download/file/winnt/util/fh470470.html

2016/09/27   blog-entry-822   category: RL78 /* 16bit,8bit CISC */

go page top

RL78マイコン基板(RL78/G13)|KurumiWriter(改)で書き込んでmoreコマンドでシリアル通信する設定 

前のエントリでKurumiWriterの改造を行ってみたのですが、今になってコマンドプロンプトのmodeコマンドと
moreコマンドの組み合わせでRL78/G13と通信(シリアルモニタ)出来るようになっていることに気付きました。
恐らくKurumiWriterの改造でCOMポートのタイムアウト時間を操作したこと(正確にはタイムアウト時間を変更
してそのままにしたこと)が影響しているのだろうと思っていますが、ちょっと気付いたことは、COMポートを
操作するWindows communication APIではCOMポートの設定変更が残る(以前にクローズした時の設定が次に
オープンする時に引き継がれる)ようになっているのは、COMポートがリダイレクト出力先(またはリダイレクト
入力元)に使用されることを想定していた(と推測される)DOSの仕様が関係していそうな気がするということです。

mode COM14 baud=9600 parity=n data=8 stop=2 to=off dtr=off & more < \\.\COM14 > CON


mode COM14 dtr=on > nul & mode COM14 baud=9600 parity=n data=8 stop=2 to=off dtr=off & more < \\.\COM14 > CON


追記 : 補足

moreコマンドは出力をリダイレクトするとページ操作のキー入力を要求しなくなりました。(垂れ流しになる。)
modeコマンドの引数の'to'オプションですが'timeout'の意味のようです。他に以下のオプションがありました。



追記 : 雑感

ちょうど今、RulzでMac OS X/Linux/RaspbianでKurumi基板と通信する方法についてのスレッドが立っている
のですが、これらのルーツであるUnixはDOS以上に昔からあるOSですのでCOMポートについての考え方も同じ
ようになっている気がし始めていて、ひょっとしてCOMポート(むしろ'シリアル端末'や単に'端末'と呼ばれる)の
設定変更コマンドとcatコマンドで通信出来てしまったりしないだろうかという気がし始めているところです、、、

Very Simple Terminal for GR-KURUMI for Mac OS X
http://japan.renesasrulz.com/gr_user_forum_japanese/f/110/t/3628.aspx

→ 追記 : 出力レベルの制御は出来ないようでした、、、(プログラムを書かないと出来ないようです、、、)

trusty (1) stty.1.gz
http://manpages.ubuntu.com/manpages/trusty/man1/stty.1.html

DTR (Full text search results)
http://manpages.ubuntu.com/cgi-bin/search.py?q=DTR&cx=003883529982892832976%3A5zl6o8w6f0s&cof=FORID%3A9

追記 : メモ

その後、以前のエントリで試してみたWindowsでLinux環境をエミュレーションするMSYS2というツールでは、
改造したKurumiWriterを実行することなく、以下のようなことが出来てしまうことに気付きました。

mode.com COM14 baud=9600 parity=n data=8 stop=2 to=off dtr=off | iconv -f cp932 -t utf-8 ; cat /dev/ttyS13


mode.com COM14 dtr=on > /dev/null ; mode.com COM14 baud=9600 parity=n data=8 stop=2 to=off dtr=off | iconv -f cp932 -t utf-8 ; cat /dev/ttyS13


また、以前のエントリでPython+pySerial+miniterm.pyを使って日本語表示させたルネサスWebコンパイラで
Serial.print()の引数に書いた日本語も、Python+pySerial+miniterm.pyを使うことなく日本語表示出来ました。

mode.com COM14 baud=9600 parity=n data=8 stop=2 to=off dtr=off | iconv -f cp932 -t utf-8 ; cat /dev/ttyS13


mode.com COM14 dtr=on > /dev/null ; mode.com COM14 baud=9600 parity=n data=8 stop=2 to=off dtr=off | iconv -f cp932 -t utf-8 ; cat /dev/ttyS13


追記 : 雑感

ソースを見ずに単なる勘ですが、catコマンドは単にopen()関数を呼び出すだけで、オープンしたのがファイル
なのかCOMポートなのかは関知しない(対象を判別して個別処理をすることはしていない)ような気がします、、、

2016/09/26   blog-entry-821   category: RL78 /* 16bit,8bit CISC */

go page top