2014年8月18日月曜日

【Quartz】プログラミング言語を作…りたい話

組み込み環境のLinuxでドライバを作る場合、ドライバ自体は割りと
簡単に作れるけど、一番面倒なのがテスト。ドライバはGPIO使って
LEDとかスイッチとか制御するだけでも、そのテスト用のアプリは
意外と面倒なんですよね~。

あと、特定機能のライブラリとか作る場合も一緒。ライブラリをコール
するためのサンプルアプリとかって、網羅的に機能を試そうとすると
結構複雑な構成になるわけです。

今まではしょぼ目のコマンドセットを使っていて、まあこれでも大体
目的は果たせてたんだけど、色々欲張るうちにIF文やループの機能が
増えていって、字句解析、構文解析を端折ったような構成だったから
内部がどんどん複雑に…。テスト用なのでしっかり作る必要性も
ないっちゃないんだけど、ここらでちゃんとしたものを作っておいても
いいかなあ…と言うのが動機です。

Luaを使っても良かったんだけど、簡素に出来てるLuaであっても
目的にはちょっとオーバースペック。オブジェクト指向っぽいもの
とか全然必要ないし( ̄ー ̄)。BASICのサブセットでもいいぐらい。

■名前:Quartz
 ・まだ実装もしてないけど名前だけは決まってると言う…(^^;。
  プログラム言語の名前は飲料系(コーヒーかな)とか宝石系とか
  動物系が多いんだけど、「組み込んで使えるちょっとしたもの」
  が良かったので石英(Quartz)としてみました。

■機能・特徴
 ・C言語のライブラリとして提供される。
 ・アプリケーションに組み込んで使う
 ・機能的には最低限の言語機能だけ提供し、その他の必要な機能は
  ユーザーがQuartz上で使える関数を(C言語で)実装するような
  イメージ。
 ・最低限…とはいいつつ、自分が良くつかうのでスレッドとソケットは
  扱えるようにする。

【NAS】最終的に

HDDがぶっ飛んだり、BuffaloのNASが使い物にならなかったり…ってことで
最終的にはウチのNAS環境は以下の様な感じに落ち着きました(^^;。

■無線ルータ:Buffalo WZR-600DHP2
 ・USB-HDDを接続して簡易NASを実現する場合、ファイルシステムがXFSに
  なり、しかも古いBuffaloのルータがフォーマットしたXFSと互換性が微妙
  なので、USB-HDDの接続は却下

 ・でも、ちょっとだけファイル共有がしたいので、余っていたSDHC 32GBを
  つないでおく(^^;。これだけでも割と便利♪

■サーバ:Acer Revo3610
 ・メモリは4GBに増設。でも3GBまでしか認識しないんだけどね(T∇T)。
 ・HDDはSSHDにしてあるけど、Windows7が入っているので、東芝の64GBの
  USBメモリ買ってこれにUbuntu12を入れる。ファイルサーバとして動作
  させる場合にはUbuntu起動にしておく。USB-HDDをext3でフォーマット
  して接続。この領域はSAMBAで公開

■RAID
 ・上のUbuntu + USB-HDDのHDDフォーマットをNTFSにして、UbuntuとWindowsの
  両方からマウントして共有!とかやってたら、HDDがぶっ飛んだ!Σ( ̄口 ̄;;。
  多分、MBRとかPBRとかその辺りが破壊された様子。WindowsのHDD復旧ソフト
  買って、1TBぐらいあった写真やらを1週間かけて復元(24時間連続運転で7日
  間…( ̄ω ̄; )。それでも壊れてる写真、結構あったなあ。

  復旧したはいいけど、1個のフォルダに全部復旧したファイル入れてくれるもん
  だから、軽いスクリプトをなでしこで書いてファイル振り分け。これも数日かかる。

 ・これはいかん!!ってことでラトックのRS-EC32-U3Rと言うRAID組めるHDD
  ケースを買って、2TB x 2でRAID1構成。これでまあ、バックアップは暫くは
  安心か…。RAIDの方はネットワーク共有はしないことに(^^;。

Revo3610はCPUがATOM330(1.6GHz)なので、ちょっと遅いなあ。Windowsは
そこそこ快適に動作するんだけど、UbuntuはUSBメモリからの起動なので
ちょっと遅く感じる。クロス環境でARMなCPUのボードで遊んだりしたいので
もうちょっと速いマシン欲しいところ。

2014年3月28日金曜日

【Buffalo】無線ルータと簡易NASの話 その2

以前使用を開始したBuffaloの無線ルータWZR-600DHP2と、その
簡易NAS機能ですが…結局使用中断しました( ̄ω ̄;。

600DHP2の簡易NAS機能、最初は調子よく動いてたんですが、
時々ファイルが全く見えなくなる症状が発生。見えた!と思っても
特定のディレクトリの下のファイルがなくなってたり…再起動したり
してると復活するんだけど…

ってことで結局USBにUbuntuをインストールして、それをPCに接続。
普段はLinuxのサーバとして動作してもらって、使いたいときはHDDに
入ってるWin7を使う様にしました。

600DHP2、無線部分についてはいんだけど、オマケ機能のNAS
は全然だめ。且つ、この無線ルータに変えてからVNCが繋がらなく
なるし…無線ルータのオマケ機能は宣伝ほどはしっかり実装されて
ないと言うのが結論です(^^;。

2014年3月12日水曜日

【MSX】MSX3を実現するとしたら

MSX3を実現するとしたら、どんな感じがいいか…

■やっぱりキーボード型のがいいなあ…

 テレビにMSXつなげて、カタカタやってたあのスタイルが好きだった
 ので、やっぱりキーボード型のがいいなあと思う。で、調べてみると



 Cybernetと言う会社のZPC-D5ってのがあって、あ、もうこれで
 いいかも(^^;とか思っちゃいます。いやいや、これじゃただのPC
 なんだけど。

■安価であること
 PanasonicのMSX2、FS-A1は割りと安価で、これが普及の一翼を
 担ったんだなあと思われます。安けりゃいいわけではないけど、
 安価で入手性がいいことは重要かなあ。

■性能
 PCの、たとえばIntelのCPUを使えばそれなりにエミュレータも
 動くけど、やっぱりそれはただのPCだしMSXとは違う気はする。
 「あえて」CPUの性能は抑えて、ゲームなんかを個人でプログラム
 する楽しみを味わえる環境が良いかな?。

こう考えていくと、ARMの組み込みボードを使って、MSX3(っぽいもの)
を作ると面白そう。最近はARM Cortex-A8の乗ったボードが5000円
ぐらいで入手できますから!。

Raspberry PiもなかなかいいんだけどARM11なのはちょっと将来性
を感じないので、ターゲットとしてはBeagleBoneBlackがいいかも。
OSはLinuxで、ここにBASIC…かそれに変わる言語でプログラム
出来るライブラリが揃ってれば、それがMSX3(っぽいもの)になり
そうだなあ。

MSX1、2はエミュでカバーして、周辺機器はUSBに統一。ディスプレー
・サウンドはHDMI接続。MSX2,Turboからはかけ離れたCPU性能
(ARM Cortex-A8 1GHz!)になるし、OSもLinuxになるけど、
ある程度現代のPCシステムにあった形にすると、色々いじれる
Linuxがいいかな。

2014年2月16日日曜日

【なでしこ】マニュアルの話

今年で日本語プログラミングは30周年、なでしこは10周年ですか(^^)。
プログラミング言語と言えば、手続き型、関数型、オブジェクト指向
などなど色々あるけど、ほぼ英語。日本語プログラミングはMindとか
先駆的なものもあるけど、なかなか広まらないですね。

「なでしこ」はそんな中でかなり自然な日本語で書けるプログラミング
言語。ただ、あまり日本語っぽさにこだわると、プログラミングっぽく
なくなっちゃうんだけど(^^;。なでしこからプログラミングに入門すれば
その他の言語にも割りとスムーズに移行できそうだけどなあ。Cや
Javaやってからなでしこイジってるからそう思うだけ?

普及には何かしらマニュアルが必要かな~と思って、なでしこの
基本的な部分のマニュアル書こうかと計画中。最近はAmazonが
Kindle Direct Publishing(KDP)なんてサービスもやってるし、販売
してみても面白いかも(ё∇ё)。…気長にやろう!。

------

そういえば、MSXも祝30周年。ヒマがあればMSXのエミュとか作って
みたいし、MSX3の妄想もしてみたいけどなかなか時間が…。今、
STMicroとかが出してる格安のARM Cortex-M4なLSIとか使えば
結構面白いハード作れそうなんだけどなあ。PlayStation4など、
最新のハードでHDバリバリのゲームもいいけど、おっさん世代は
軽いハードで、頑張って動く昔ながらの「ゲーム性の高い」ヤツが
好きなんです(^^;。ああ、ワクワクするO(≧∇≦)O。

2013年12月31日火曜日

【なでしこ】nako_comm.dll

2013年も今日で終わりか!!Σ( ̄口 ̄;;。ってことで結局あまり時間が
とれずにデバッグ出来なかったけど、取りあえず現状の"nako_comm.dll"を公開
します。

上記のリンクを辿るとnako_comm.7zをDL出来ますので、適当なところに解凍
します。

------ここから------
\nako_comm
|   debug.c
|   dll_comm_funcs.c
|   dll_comm_funcs.h
|   dnako_callback_funcs.c
|   dnako_import.c
|   dnako_import.h
|   dnako_import_def.h
|   dnako_import_types.c
|   dnako_import_types.h
|   dnako_plugin_body.c
|   log.txt
|   nako_comm.txt
|  
\---nako_dll_base
    |   dnako_import.def
    |   nako_dll_base.sln
    |   nako_dll_base.vcxproj
    |   nako_dll_base.vcxproj.user
    |  
    \---dll
            nako_comm_d.dll
            nako_comm_r.dll

 ------ここまで------

\nako_dll_base\dllの中に2つDLLが入ってます。「_d」がデバッグ版、
「_r」がリリース版でVC++でコンパイルしてます。使用の際は、それぞれ
「nako_comm.dll」にリネーム後、なでしこの\plug-insフォルダに
コピーして使ってください。


再コンパイルする場合には\nako_dll_base\nako_dll_base.slnをクリックして
VC++(Express)を起動して、コンパイルしてください。


含まれる命令(関数)仕様は以下の通りですが、あんまりデバッグ
してませんので、今回のものはDLLのサンプル程度に参照して
ください。来年(暇があったら)デバッグします(^^;。

------ここから------

■関数仕様

・バイト確保
    書式:バイト確保([int]バイト数、[int]初期値)
    戻値:[int]ハンドル
    説明:バイト数に1,2,4の何れかを指定して、変数を確保し、初期値を
       代入する。以降、戻り値のハンドルを使用して、値を読み書き
          出来る。
         
          確保されるメモリ領域は内部でunsignedで扱われる。この値は
          なでしこ側から見るとグローバルな領域になるので、関数内等
          ローカルスコープから本関数をコールした場合も、変数自体は
          グローバルに確保されていることに注意すること(つまり、
          なでしこの関数を抜けても、変数領域は解放されない)。
         
          確保が成功した場合には0以上の整数が、失敗した場合には-1
          が返される。使用が終了した場合はハンドルを解放すること。

・バイト読込
    書式:バイト読込([int]ハンドル)
    戻値:[int]変数値
    説明:バイト確保命令で取得したハンドルの、現在の値を取得する。
       戻り値は整数型になる。無効なハンドル値を指定した場合には
          常に0が返される。
         
・バイト書込
    書式:バイト書込([int]ハンドル、[int]値)
    戻値:[int]結果
    説明:バイト確保命令で取得したハンドルに対して、指定した値を
       書き込む。書き込める値の範囲は確保されている領域サイズに
          より異なり、範囲外の値を指定した場合にはエラーとなる。
         
          書込が成功した場合には0が、失敗した場合には-1が返される。

・エンディアン変換
    書式:エンディアン変換([int]ハンドル)
    戻値:[int]結果
    説明:バイト確保命令で取得したハンドルに対応する値のエンディアン
       変換を実施する。変換後の値はハンドル対応値に上書きされる。
         
          成功した場合は0が、無効なハンドルを指定した場合は-1が
          返される。

・バッファ確保
    書式:バッファ確保([int]サイズ)
    戻値:[int]ハンドル
    説明:メモリを動的に確保して、そのハンドルを返す。成功した場合、
       0以上のハンドル値が、失敗した場合には-1が返される。
         
          なお、メモリは動的に確保されているので、使用後はかならず
          ハンドルの解放を実施して確保されたメモリ領域を解放する
          こと。

・バッファクリア
    書式:バッファクリア([int]ハンドル、[int]クリア値)
    戻値:[int]結果
    説明:バッファ確保命令で取得したハンドルの領域をクリア値を用いて
       クリアする。クリア値には0~255(0xFF)までの1byte値を指定
          する。
         
          成功した場合は0が、無効なハンドル、クリア値を指定した
          場合は-1が返される。

・バッファコピー
    書式:バッファコピー([int]元ハンドル、[int]先ハンドル、[int]サイズ)
    戻値:[int]結果
    説明:既に確保されているコピー元ハンドルから、コピー先ハンドルに
       データをコピーする。先ハンドルはバッファでなくては
          ならないが、元ハンドルについてはバッファ、もしくは
          上記バイト確保命令で取得したハンドルでも良い。
         
          成功した場合は0が、無効なハンドルを指定した場合には-1が
          返される。

・バッファ読込
    書式:バッファ読込([int]ハンドル、[int]オフセット)
    戻値:[int]読込データ
    説明:既に確保されているメモリ領域(ハンドル)の、所定のオフセット
       位置から、1byteのデータを取得して返す。
         
          無効な引数を指定した場合には0が返される。

・バッファ書込
    書式:バッファ書込([int]ハンドル、[int]オフセット、[int]データ)
    戻値:[int]結果
    説明:既に確保されているメモリ領域(ハンドル)の、所定のオフセット
       位置に、1byteのデータを書き込む。データには0~255の値を
          指定する。
         
          成功した場合には0が、無効な引数を指定した場合には-1が
          返される。

・リングバッファ確保
    書式:バッファ確保([int]サイズ)
    戻値:[int]ハンドル
    説明:メモリを動的に確保して、そのハンドルを返す。成功した場合、
       0以上のハンドル値が、失敗した場合には-1が返される。
         
          なお、メモリは動的に確保されているので、使用後はかならず
          ハンドルの解放を実施して確保されたメモリ領域を解放する
          こと。
         
          「バッファ確保」と処理内容は一緒だが、以降このバッファは
          リングバッファとして扱われる。

・リングバッファ読込
    書式:リングバッファ読込([int]ハンドル、[int]先ハンドル、[int]サイズ)
    戻値:[int]サイズ
    説明:確保されているリングバッファハンドルから、サイズ分を読み
         込んで先ハンドル(バッファ)に書き込む。読み込めるサイズは
          コピー先のバッファサイズに依存し、バッファサイズ以上の
          データは読み込まない。読み込めたサイズは戻り値として返される。
         
          リングバッファなので、読み込みの開始位置は現在の読込位置
          となり、読み込んだサイズ分は以降書込可能領域となる。
         
          引数が不正な場合等、エラーの場合は-1が返される。

・リングバッファ書込
    書式:リングバッファ書込([int]ハンドル、[int]元ハンドル、[int]サイズ)
    戻値:[int]サイズ
    説明:作成済みの元ハンドル(バッファ)からサイズ分読み込んで、
       確保されているリングバッファハンドルに対して書き込む。
          書き込めるサイズは元ハンドルのサイズに依存し、それ以上の
          サイズを指定した場合は、書き込めるだけ書き込む。
          (データがある分だけ書き込む)。書き込めたサイズが戻り値
          として返される。
         
          書き込み位置はリングバッファ中の書き込み可能な領域の先頭
          からとなり、書き込んだ分は以降読込可能となる。書き込む前に
          空き領域を知りたい場合には「リングバッファ空きサイズ」
          命令でサイズを取得出来る。
         
          引数が不正な場合等、エラーの場合は-1が返される。

・リングバッファ読込サイズ
    書式:リングバッファ読込サイズ([int]ハンドル)
    戻値:[int]読込可能サイズ
    説明:確保されているリングバッファハンドルの、現在読み込める
       データサイズを返す。
         
          引数が不正な場合等、エラーの場合は-1が返される。

・キュー作成
    書式:キュー作成(#引数なし)
    戻値:[int]ハンドル
    説明:空のキューを作成して、そのハンドルを返す。キューに対しては
       本ライブラリで生成出来るハンドルを追加・取得出来る(FIFO)。
         
          成功した場合にはハンドル値が、失敗した場合には-1が返される。

・キュー追加
    書式:キュー追加([int]キュー、[int]ハンドル)
    戻値:[int]結果
    説明:指定のキューハンドルに、ハンドルを追加する。
   
       成功した場合は0が、失敗した場合は-1が返される。

・キュー取得
    書式:キュー取得([int]キュー)
    戻値:[int]ハンドル
    説明:指定されたキューから、先頭の1要素を取得して返す。
   
       成功した場合にはハンドル値が、失敗した場合には-1が返される。

・キュー要素数取得
    書式:キュー要素数([int]ハンドル)
    戻値:[int]要素数
    説明:指定されたキューに繋がれているハンドル数(要素数)を
       返す。失敗した場合には-1が返される。

・スタック作成
    書式:スタック作成(#引数なし)
    戻値:[int]ハンドル
    説明:空のスタックを作成して、そのハンドルを返す。スタックに対しては
       本ライブラリで生成出来るハンドルを追加・取得出来る(LIFO)。
         
          成功した場合にはハンドル値が、失敗した場合には-1が返される。

・スタック追加
    書式:スタック追加([int]スタック、[int]ハンドル)
    戻値:[int]結果
    説明:指定のスタックハンドルに、ハンドルを追加する。
   
       成功した場合は0が、失敗した場合は-1が返される。

・スタック取得
    書式:スタック取得([int]スタック)
    戻値:[int]ハンドル
    説明:指定されたスタックから、末尾の1要素を取得して返す。
   
       成功した場合にはハンドル値が、失敗した場合には-1が返される。

・スタック要素数取得
    書式:スタック要素数([int]ハンドル)
    戻値:[int]要素数
    説明:指定されたスタックに繋がれているハンドル数(要素数)を
       返す。失敗した場合には-1が返される。

・バイナリオープン
    書式:バイナリオープン([str]ファイル名、[int]モード)
    戻値:[int]ハンドル
    説明:ファイル名で指定されたファイルを、モードで指定された方法で
       オープンする。モードには0,1,2,3の何れかを指定し、意味は
          以下のとおり。

           0 : 読込専用
           1 : 書込専用
           2 : 読み書き
           3 : 追記
           
         ファイルは常にバイナリとしてオープンされる。テキストモード
          で扱いたい場合には、なでしこの組み込み命令を使用すると良い。

         成功すると0以上のハンドルが返される。失敗した場合には-1が
          返される(ファイルがない、モードが範囲外など)

・バイナリ読込
    書式:バイナリ読込([int]ハンドル、[int]先ハンドル、[int]サイズ)
    戻値:[int]サイズ
    説明:バイナリオープンされているハンドルから、サイズ分を読み
         込んで先ハンドル(バッファ)に書き込む。読み込めるサイズは
          コピー先のバッファサイズに依存し、バッファサイズ以上の
          データは読み込まない。読み込めたサイズは戻り値として
          返される。
         
          読み込み開始位置は現在の開始位置で、読み込む毎にオフセット
          がプラスされる。現在の開始位置はバイナリ位置取得命令で
          取得出来、位置の変更はバイナリシーク命令で可能である。
         
          引数が不正な場合等、エラーの場合は-1が返される。

・バイナリ書込
    書式:バイナリ書込([int]ハンドル、[int]元ハンドル、[int]サイズ)
    戻値:[int]サイズ
    説明:作成済みのバッファ(元ハンドル)からサイズ分読み込んで、
     バイナリオープンされているハンドルに対して書き込む。
          書き込めるサイズは元ハンドルのサイズに依存し、それ以上の
          サイズを指定した場合は、書き込めるだけ書き込む。
          (データがある分だけ書き込む)。書き込めたサイズが戻り値
          として返される。
         
          書込開始位置は、書込専用、読み書き用にオープンしている場合は
          ファイルの先頭から開始し、書き込む毎にオフセットがプラスされ
          る。既存ファイルの場合は一旦ファイルが消去されるので注意する
          こと。追記モードの場合はファイルの終端から書込が開始される。
         
          引数が不正な場合等、エラーの場合は-1が返される。

・バイナリシーク
    書式:バイナリシーク([int]ハンドル、[int]オフセット)
    戻値:[int]オフセット
    説明:バイナリオープンされているハンドルの読み込み・書込開始
       位置をオフセットの値に設定する。オフセットは0以上の
          値で、ファイルサイズ以上の値を設定した場合には、ファイルの
          末尾となる。
         
          成功した場合にはオフセット値が、失敗した場合には-1が
          返される。

・バイナリ位置取得
    書式:バイナリ位置取得([int]ハンドル)
    戻値:[int]位置
    説明:バイナリオープンされているハンドルの、現在開始位置を
       返す。引数が不正だった場合には-1が返される。

・ビットチェック
    書式:ビットチェック([int]ハンドル、[int]パターン)
    戻値:[int]結果
    説明:対象となるハンドルと、パターンを指定して、パターンビット
       が対象に含まれているかチェックする。対象はバイト確保
          されたハンドルであること。
         
          パターンが含まれている場合には1(TRUE)が、含まれていない
          場合は0(FALSE)が返される。引数が不正な場合には0が返される。

・ビットセット
    書式:ビットセット([int]対象、[int]パターン)
    戻値:[int]結果
    説明:対象のハンドル値に、パターンビットを設定する。対象は
         バイト確保されたハンドルを指定する。
         
          成功した場合には0が、引数に不正があった場合には-1が
          返される。

・ビットクリア
    書式:ビットクリア([int]対象、[int]パターン)
    戻値:[int]結果
    説明:対象のハンドル値の、パターンで指定されるビットをクリア
       する。対象はバイト確保されたハンドルであること。
         
          成功した場合には0が、引数に不正があった場合には-1が
          返される。

・ソケットオープン
    書式:ソケットオープン([int]タイプ)
    戻値:[int]ハンドル
    説明:タイプを指定してソケットを作成(オープンする)。
       タイプには以下の何れかを指定する。
           
            0 : TCP
            1 : UDP
         
          成功した場合には0以上のハンドル値が返される。失敗
          した場合には-1が返される。

・ソケット接続待ち
    書式:ソケット接続待ち([int]ハンドル、[int]ポート)
    戻値:[int]ソケットハンドル
    説明:ソケットオープンで取得済のハンドルと、指定のポートを
          使って、TCPで相手が接続してくるのを待つ。
         
          成功した場合は新規のソケットハンドルが、失敗した場合は
          -1が返される。成功した場合、後述の「相手IPアドレス取得」
          命令を使用して、接続相手のアドレスを取得することが出来る。

・ソケット接続
    書式:ソケット接続([int]ハンドル、[str]相手のアドレス、[int]ポート)
    戻値:[int]結果
    説明:ソケットオープンで取得済のハンドルと、サーバ側のアドレス、
         ポートを指定してTCPで接続する。
         
          接続が成功した場合には0が、失敗した場合には-1が返される。

・TCP送信
    書式:TCP送信([int]ハンドル、[int]バッファ、[int]サイズ)
    戻値:[int]サイズ
    説明:ソケットオープンで取得済のハンドル、且つこのソケットで
       相手に接続している場合に、バッファで指定されるハンドル
          のデータをサイズ分送信する。バッファはバッファ確保で
          取得したハンドルを指定すること。
         
          成功した場合には送信出来たサイズが返される。失敗した
          場合には-1が返される。

・TCP受信
    書式:TCP受信([int]ハンドル、[int]バッファ)
    戻値:[int]サイズ
    説明:ソケットオープンで取得済のハンドル、且つこのソケットで
       相手に接続している場合に、バッファで指定されるハンドル
          にデータを受信する。

          成功した場合には受信出来たサイズが返される。失敗した
          場合には-1が返される。

・UDP送信
    書式:UDP送信([int]ハンドル、[int]バッファ、[str]相手アドレス、[str]ポート)
    戻値:[int]サイズ
    説明:ソケットオープンで取得済のハンドルと、送信対象のバッファ
       のハンドル、及び相手アドレスとポートを指定してデータを
          送信する。ソケットハンドルはUDPでオープンされていること。
         
          成功した場合には送信サイズが返さえる。失敗した場合には
          -1が返される。

・UDP受信
    書式:UDP送信([int]ハンドル、[int]バッファ、[str]ポート)
    戻値:[int]サイズ
    説明:ソケットオープンで取得済のハンドルと、受信データ書きこみ
       用のバッファハンドル、及びポートを指定してデータを受信
          する。
         
          成功した場合には受信出来たサイズが返される。失敗した
          場合には-1が返される。

・相手IPアドレス取得
    書式:相手IPアドレス取得([int]ハンドル)
    戻値:[str]相手IPアドレス(文字列)
    説明:ソケットハンドルを指定して、TCP通信で接続した相手のアドレス、
       及びUDP通信で受信した場合の相手のIPアドレスを文字列で返す。

・シリアルオープン
    書式:シリアルオープン([int]ポート、[int]ボーレート)
    戻値:[int]ハンドル
    説明:ポートとボーレートを指定して、シリアルポートをオープン
        する。ポート、ボーレート以外のパラメータは、
         
           データ  :8bit
            パリティ :なし
            ストップ :1bit
            フロー制御:なし
         
          となる。
         
          成功した場合は0以上のハンドル値が返される。失敗した場合は
          -1が返される。

・シリアル送信
    書式:シリアル送信([int]ハンドル、[int]バッファ、[int]サイズ)
    戻値:[int]サイズ
    説明:シリアルオープンで取得済のハンドル、及びバッファ確保した
         ハンドルを指定してサイズ分のデータを送信する。
         
          成功した場合には送信出来たサイズが、失敗した場合には-1が
          返される。

・シリアル受信
    書式:シリアル受信([int]ハンドル、[int]バッファ、[int]サイズ)
    戻値:[int]サイズ
    説明:シリアルオープンで取得済のハンドル、及びバッファ確保した
         ハンドルを指定してサイズ分のデータを受信する。

          成功した場合には受信サイズが、失敗した場合には-1が
          返される。

・シリアルデータサイズ
    書式:シリアルデータサイズ([int]ハンドル)
    戻値:[int]サイズ
    説明:シリアルオープンで取得済のハンドルで指定されるシリアル
       ポートに対して、そのバッファに受信されているデータ
          サイズを取得する。
         
          ここでのバッファとは上記バッファ確保したものではなく
          Windowsのシリアルドライバが保持している受信バッファで
          ある。

・ハンドルタイプ取得
    書式:ハンドルタイプ([int]ハンドル)
    戻値:[int]ハンドルタイプ
    説明:指定ハンドルの種別を取得する。戻り値は以下のとおり。
      
       -1 :エラー(使われてない、など)
        1 :バイト
        2 :バッファ(リングバッファ)
        4 :ファイル
        8 :キュー
       16 :スタック
       32 :ソケット
       64 :シリアルポート
      
・ハンドル解放
    書式:ハンドル解放([int]ハンドル)
    戻値:なし
    説明:取得したハンドルを解放する。対象がメモリの場合はメモリ
       が解放され、バイナリ(ファイル)やソケットの場合は
          それらがクローズされる。

------ここまで------

いや~、なんか色々入れすぎた感もありますが、使いこなせば
C言語に近い動作をさせられそう♪。ただ、この後別のアプリを
なでしこでざっと作ってみて、なでしこに足りない部分はこの手の
命令よりも、実はGUIかなあ…と思ってます。エディタの簡易GUI
構築環境…思ってたよりも使えなかったなあ( ̄へ ̄;。

来年はこのあたりの解決方法を検討しよう♪

2013年11月10日日曜日

【Buffalo】無線ルータと簡易NASの話

近所のJoshinが閉店セールとかやってたので行ってみたら、無線ルータが
アマゾンよりやすい値段で速攻で購入♪

旧:Buffalo WZR-HP-G301NH
新:Buffalo WZR-600DHP2

となって快適な無線LAN環境が出来上がるハズだったのに、問題発生。
まず、iPhone5/5Cは5GHz帯(802.11a/n)の掴みがあまりよろしく
ない。ルーターが2階にあるからなのかもしれないが、KindleFireHDの
方は流石に良くつかんでる。ってことで、iPhoneの方は2.4GHz帯で
しばらく運用。

もう一点はG301の方にも600DHP2の方にも簡易NAS機能がついてて
USBのHDDつなげられる様になっているけど、G301で使ってたHDDを
600DHP2の方につなぎ変えても認識しない(正確には認識はするけど
未フォーマットと言われる)。

Buffaloのルータについてる簡易NAS機能は、LinuxのXFSフォーマット
になってるけど、どうもG301のこのフォーマットが質が悪いみたいで
LinuxPCでも600DHP2でも認識しない。試しに再度G301に接続
し直してみると、これはちゃんと認識した。ってことで、再度G301を
復活させて、WInPC介して余ってたHDDにコピー。115GBのデータが
入ってたので、4時間ぐらいかかった…。

コピーし終わったら、NAS用のHDDを600DHP2側でXFSフォーマット。
これを試しにLinuxPFでマウントすると、ちゃんと認識する。WinPC
介して、今度は600DHP2上の簡易NASにHDDからデータコピーしようと
思ったら23時間とかでたのでヤメ。Linuxで認識するんだから、Linux上
でコピーすればいいやってことで、昨日つくったPuppyLinux5.7.1環境
でHDD→HDDのコピー。時間は表示されないけど、まあそこそこの
スピードでコピーしてくれてるから、3時間もあれば終わるかな。

これもBuffalo系の商品だけど、玄人志向の

KURO-DACHI/CLONE/U3

と言う商品に最近非常にお世話になってる。上記のHDD→HDDコピーも
これ一台をLinuxに繋げれば2ドライブ見えてコピーできるし、そもそも
PCがなくてもHDDのクローンが作れる。これでノートPCのHDDを
SSHDに交換した♪。

PuppyLinuxは150MBぐらいの容量があれば全部入るので、USBフラッシュ
メモリに入れて使ってる。ちょっと構成にクセはあるけど、何かカワイイ
からお気に入り(^^)。

ああ…本当はなでしこのプログラミングしようと思ってたのになあ…