GPC-8826

Size: px
Start display at page:

Download "GPC-8826"

Transcription

1 IFHNL(PCI/C-PCI) GPC-8826 光メモリンクインタフェースモジュール用 Windows ドライバ Ver Help for Windows

2 目次 第 1 章はじめに 概要 特長 用語解説 共有メモリとは ウィンドウとは...9 第 2 章製品仕様 基本仕様 製品構成...12 第 3 章導入方法 インストール手順 デバイスの設定 設定ユーティリティ 起動手順 実行手順 メモリ共有できない接続方法 インタフェースモジュールのスレーブからマスタへの切替方法...20 第 4 章注意事項 Ver 以前のドライバご使用の方へ NETでの注意事項 PCI Express Native 環境でご使用の方へ...22 第 5 章リファレンス 関数一覧 関数個別説明 イベントについて 構造体説明 戻り値一覧 使用例一覧...78 第 6 章サンプルプログラム WriteFile ReadFile DMATransfer ShareTransfer AsyncCheckState SyncCheckState 注意事項 第 7 章ユーティリティ 設定ユーティリティ (IfHnlSet.exe) ユーティリティ (IfHnlUtil.exe)

3 第 8 章重要な情報 164 3

4 第 1 章はじめに 1.1 概要 GPC-8826 は Windows 上のアプリケーションから 弊社光メモリンク製品のメモリ共有を行うためのソフトウェアです GPC-8826 は 弊社光メモリンク製品を Windows 上のアプリケーションから DLL をダイナミックリンクし API をコールすることにより制御します 本ドキュメントは Windows 上で GPC-8826 を使用するための情報を掲載しています 1.2 特長 通常のメモリアクセス処理と同等の処理で共有メモリへのアクセス処理ができます その使い方もメモリアクセス処理と同等の処理でできます 異なる OS 同士 異なるバス同士のデータ転送を容易に行うことができます 32bit OS / 64bit OS, Windows / Linux, PCI バス / PCI Express バスなど 異なる環境の対象製品を組み合わせて使うことができます 簡単に DMA 転送ができます 共有メモリ 共有メモリ ユーザバッファ 共有メモリの転送ができます 共有メモリのダンプ表示 データの書き込み 割り込み監視 割り込み要求 データ転送を行うことができるユーティリティを準備しています ( ただしプログラムソースは非公開 ) ファイル形式でのメモリ共有による入出力による割り込み要求 イベント取得や DMA 転送を行うサンプルプログラムを付属しています ソースを公開していますので 自由にプログラムを拡張することができます 光メモリンクネットワーク上でメモリ共有するための設定ユーティリティを準備しています デバイスの状態を表示して設定を簡単に行うことができます コマンドラインからの実行もできますので バッチファイルでの実行などで設定ができます 画面上で機能や使い方を説明する Help をサポートしていますので 開発中に関数の詳細説明など 簡単に参照することができます 4

5 1.3 用語解説 用語マスタデバイススレーブデバイス光メモリンクネットワークノード共有メモリマスタコンピュータスレーブコンピュータ Virtual ウィンドウ Link ウィンドウ 説明光メモリンクのマスタとして設定を行ったデバイス光メモリンクのスレーブとして設定を行ったデバイス光メモリンクのネットワークのこと 一つのマスタコンピュータに対して構成されているネットワーク 光メモリンクネットワークの要素 マスタデバイスとスレーブデバイスで一つのノードを構成します 共有メモリとはコンピュータに搭載されている RAMを光メモリンク用に確保したメモリ 詳しくは 1.4 共有メモリとは を参照してください マスタデバイスを搭載したコンピュータスレーブデバイスを搭載したコンピュータスレーブからマスタにアクセスするためのウィンドウ詳しくは 1.5 ウィンドウとは を参照してください マスタからスレーブにアクセスするためのウィンドウ詳しくは 1.5 ウィンドウとは を参照してください 1.4 共有メモリとは共有メモリとはコンピュータに搭載されている RAM を光メモリンク用に確保したメモリです 確保の際 OS が使用する RAM 容量を制限します 下記のようにブート構成データを変更して行います Windows XP, 2003Server, 2000 の場合 Boot.ini ファイルの maxmem オプションを使用して OS の使用可能な RAM 容量を制限します 現在のオペレーティングシステムと同様のパーティションのシステム設定も変更されます Windows Vista(Server 2008 含む ) 以降の場合 bcdedit.exe の truncatememory オプションを使用して OS の使用可能な RAM 容量を制限します 現在のオペレーティングシステム設定のみ変更されます すでに同オプションを使用されている場合 その設定はそのまま反映されます RAM の増設などの理由で後から同オプションを変更したい場合は 下記の手順で変更を行ってください 下記の手順をとらず変更した場合は 本ソフトウェアの正常動作は保証いたしかねます 設定ユーティリティ (IfHnlSet.exe) にて設定のリフレッシュ (7.1.2 リフレッシュ ( 共有メモリ デバイス )) をする 2. オプションの変更を行う 設定ユーティリティ (IfHnlSet.exe) にて再設定 (7.1.1 設定方法 ) をする 5

6 1.4.1 復旧方法共有メモリの設定を行ったことにより OS が動作しなくなった場合の復旧方法について説明します 下記方法を実行し OS の使用可能な RAM 容量の制限を解除してください Windows XP, 2003Server, 2000 の場合 回復コンソールが使用できる場合 1. boot.ini ファイルを保存するための USB メモリを復旧するコンピュータに挿入します 2. 回復コンソールを起動します 起動方法についてはご使用の OS の説明を参照ください 3. 下記コマンドを実行し USB メモリに boot.ini ファイルをコピーします copy C:\boot.ini D:\boot.ini 上記コマンドは 復旧する OS のドライブが C であり USB メモリのドライブが D である場合の例です 環境により異なります ご注意下さい 4. USB メモリを復旧するコンピュータから取外し 別のコンピュータへ挿入します 5. USB メモリに先ほど保存した boot.ini ファイルをテキストエディタで修正してください boot.ini ファイルを開いた場合の例) [boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\windows [operating systems] multi(0)disk(0)rdisk(0)partition(1)\windows="microsoft Windows XP Professional" /noexecute=optin /fastdetect /maxmem= 赤字で表示した部分 ( には OS が使用できる RAM 容量の値が入っています ) を削除してください 複数の OS が設定されている場合は 復旧する OS の /maxmem= を削除してください 環境により 表記が異なる部分があります ご注意下さい 6. USB メモリを取外し 復旧するコンピュータへ挿入してください 7. 下記コマンドを実行し 修正した boot.ini ファイルを上書きしてください copy D:\boot.ini C:\boot.ini 上記コマンドは 復旧する OS のドライブが C であり USB メモリのドライブが D である場合の例です 環境により異なります ご注意下さい 8. 復旧するコンピュータの再起動を行い OS が動作できていることを確認してください 回復コンソールが使用できない場合 WinPE(Windows Preinstallation Environment) を作成 使用し 上記 回復コンソールが使用できる場合 の 3. からの手順を実行してください WinPE(Windows Preinstallation Environment) の作成 使用方法については WinPE 関連の Web サイトを参照してください 6

7 Windows Vista(Server 2008 含む ) 以降の場合 システム回復オプションが使用できる場合 1. 回復オプションを起動します 起動方法についてはご使用の OS の説明を参照ください 2. 回復ツールからコマンドプロンプトを選択し コマンドプロンプトを起動します 3. 下記コマンドを実行してください bcdedit /deletevalue {xxxxxxxx truncatememory xxxxxxxx には修復を行う OS の ID を指定してください 4. コンピュータの再起動を行い OS が動作できることを確認してください システム回復オプションが使用できない場合 WinPE(Windows Preinstallation Environment) を作成 使用し 上記 システム回復オプションが使用できる場合 の 3. からの手順を実行してください WinPE(Windows Preinstallation Environment) の作成 使用方法については WinPE 関連の Web サイトを参照してください 7

8 1.4.2 パーティション番号の確認方法 Windows XP, 2003Server, 2000 で パーティション番号を確認する場合 コマンドプロンプトより 下記コマンドを実行し パーティション番号を確認してください bootcfg 上記コマンドを実行後 表示される partition() の () の中の数字がパーティション番号となります 複数のオペレーティングシステムを設定している場合には 起動しているオペレーティングシステムのパーティション番号を確認してください bootcfg 実行後の例 ) ブートローダー設定 timeout: 30 default: multi(0)disk(0)rdisk(0)partition(1)\windows ブートエントリ ブートエントリ ID: 1 フレンドリ名 : "Microsoft Windows XP Professional" パス : multi(0)disk(0)rdisk(0)partition(1)\windows OS ロードオプション : /noexecute=optin /fastdetect 赤字で表示した数字 ( 上記例では 1) がパーティション番号となります また boot.ini ファイルをテキストエディタで開くことでも確認することができます boot.ini ファイルを開いた場合の例) [boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\windows [operating systems] multi(0)disk(0)rdisk(0)partition(1)\windows="microsoft Windows XP Professional" /noexecute=optin /fastdetect 赤字で表示した数字 ( 上記例では1) がパーティション番号となります 8

9 1.5 ウィンドウとは他コンピュータ上に割り当てている共有メモリにアクセスを行うためにはウィンドウを使用してその領域にアクセスを行います つまり ウィンドウのサイズで共有メモリにアクセスできる最大サイズが変化します 光メモリンクには下記の 2 つのウィンドウがあります Virtual ウィンドウスレーブコンピュータからマスタコンピュータにアクセスするためのウィンドウウィンドウの指定サイズはマスタコンピュータのデバイスリソースを取得します リソース不足などにならないよう注意してください ウィンドウサイズの設定は 7.1 設定ユーティリティ (IfHnlSet.exe) で行います 最大 4 チャンネルまで指定できます ( ) Link ウィンドウマスタコンピュータからスレーブコンピュータにアクセスするためのウィンドウウィンドウの指定サイズ分はスレーブコンピュータのデバイスリソースを取得します リソース不足などにならないよう注意してください ウィンドウサイズの設定は 7.1 設定ユーティリティ (IfHnlSet.exe) で行います 最大 4 チャンネルまで指定できます ( ) 各ウィンドウのチャンネルは環境により下記のようにチャンネル数が異なります マスタコンピュータまたはスレーブコンピュータが x64 環境の場合 : 同時に 2 チャンネルまでマスタコンピュータかつスレーブコンピュータが x86 環境の場合 : 同時に 4 チャンネルまで Virtual ウィンドウ Link ウィンドウの要求するサイズが大きい場合 コンピュータがメモリリソースを割り当てられず コンピュータが起動しなくなる可能性があります コンピュータの構成などよく理解した上で設定を行ってください 各接続状態でのウィンドウ 各接続状態でメモリ共有をする場合下記のような構成になります マスタコンピュータ スレーブコンピュータ間 スレーブコンピュータ マスタコンピュータ メモリ 物理アドレス領域 メモリ 物理アドレス領域 共有メモリ領域 仮想アドレス領域 仮想アドレス領域 Link ウィンドウ マスタコンピュータからスレーブコンピュータの共有メモリにアクセスする場合は Link ウィンドウを介してアクセスします 9

10 スレーブコンピュータ マスタコンピュータ間 スレーブコンピュータ マスタコンピュータ メモリ 物理アドレス領域 メモリ 物理アドレス領域 共有メモリ領域 仮想アドレス領域 仮想アドレス領域 Virtual ウィンドウ スレーブコンピュータからマスタコンピュータの共有メモリにアクセスする場合は Virtual ウィンドウを介してアクセスします スレーブコンピュータ 1 スレーブコンピュータ 2 間 スレーブコンピュータ 1 マスタコンピュータ スレーブコンピュータ 2 メモリ 物理アドレス領域 メモリ 物理アドレス領域 メモリ 物理アドレス領域 共有メモリ領域 仮想アドレス領域 Virtual ウィンドウ 1 仮想アドレス領域 Link ウィンドウ 2 仮想アドレス領域 スレーブコンピュータ 1 からスレーブコンピュータ 2 の共有メモリにアクセスする場合はアクセスするスレーブコンピュータ 1 マスタコンピュータ間のノードの Virtual ウィンドウ 1 と共有メモリのあるスレーブコンピュータ 2 マスタコンピュータ間のノードの Link ウィンドウ 2 を介してアクセスします このとき マスタコンピュータから共有データ領域はアクセスできません 10

11 第 2 章製品仕様 2.1 基本仕様 最大デバイス数 4 16 最大ノード数 CPU 内での取得共有メモリ容量 1MB~ ( 1) ウィンドウチャンネル数 4 または 2 ( 2) ( 3) ウィンドウサイズ 1MB~1GB( 1) Link ウィンドウ合計最大サイズ 1GB( 1) Virtual ウィンドウ合計最大サイズ 1GB( 1) DMA 転送チャンネル数 4 DMA 転送サイズ 1byte~8MB シェアオープン対応最大シェアオープン数 最大取得容量は環境に依存します 2 ウィンドウチャンネル数は環境により下記のようにチャンネル数が異なります マスタコンピュータまたはスレーブコンピュータが x64 環境の場合 : 同時に 2 チャンネルまでマスタコンピュータかつスレーブコンピュータが.x86 環境の場合 : 同時に 4 チャンネルまで 3 ウィンドウの割り当て先を変更できます 4 最大デバイス数とは 1 台のコンピュータに取り付けることができる光メモリンク製品の数です 5 最大ノード数とは同一光メモリンクネットワーク上に接続できるノードの数です 11

12 2.2 製品構成 製品構成ファイル名説明 弊社管理用ファイル GPC8826.VER 弊社ソフト管理用ファイル 最新情報ドキュメント README.HTM 最新ドキュメント掲載ファイル インストールプログラム SETUP.EXE インストール用ファイル ユーティリティプログラム IFHNLSet.EXE 設定ユーティリティ IFHNLUtil.EXE 動作確認ユーティリティ サンプルプログラム WriteFile ファイル出力サンプルプログラム ReadFile ファイル入力サンプルプログラム DMATransfer DMA 転送出力サンプルプログラム ShareTransfer プロセス間でのシェア処理のサンプルプログラム AsyncCheckState 光メモリンク状態取得プログラム ( 非同期 ) SyncCheckState 光メモリンク状態取得プログラム ( 同期 ) DLL IFHNL.DLL ダイナミックリンクライブラリファイル IFHNL.LIB インポートライブラリファイル IFHNL.H ヘッダファイル MSVCRT.DLL C ランタイム共有 DLL デバイスドライバ CP8826.SYS ドライバ CP8826Dma.SYS ドライバ GPC8826.inf ドライバインストールファイル GPC8826.SLD Windows Embedded 用ドライバ SLD ファイル ヘッダファイル IFHNL.H Visual C++ 用ヘッダファイル IFHNL.BAS Visual Basic 用ヘッダファイル Help HELP.PDF Help(PDF 形式 ) Visual C#.NET,Visual Basic.NET 用サンプルプログラムは それぞれ Viausl C#.NET 2003, Visual Basic.NET 2003 を使用して作成しています 12

13 第 3 章導入方法 3.1 インストール手順 README.HTM のインストール方法を参照してください 3.2 デバイスの設定 インタフェースモジュールの設定スレーブデバイスとするインタフェースモジュールの DSW1 の 4 を ON に設定してください 初期状態では まずスレーブコンピュータでの設定が必要です 次にスレーブコンピュータで 3.3 設定ユーティリティ を行ってください スレーブコンピュータの設定が完了するまでケーブルの接続を行わないでください マスタデバイスは設定不要です Classembly Devices の光拡張スロットの設定 マスタ スレーブデバイス切り替え可能製品設定ユーティリティにて Classembly Devices の光拡張スロットの設定 を行ってください 次にスレーブコンピュータで 3.3 設定ユーティリティ を行ってください スレーブコンピュータの設定が完了するまでケーブルの接続を行わないでください コンピュータの再起動が必要です 設定ユーティリティを実行しているコンピュータが 64bitOS の場合 Classembly Devices の光拡張スロットの設定 を行うためには デバイスアクセス用ドライバのインストールが必要です インストール方法については README.HTM の デバイスアクセス用ドライバのインストール を参照してください マスタデバイスとして使用できる製品設定はありません 次にスレーブコンピュータで 3.3 設定ユーティリティ を行ってください 3.3 設定ユーティリティ設定ユーティリティの設定により デバイス使用時の物理メモリの確保やウィンドウサイズの確保 ノード名の設定を行います 使用方法の詳細は 7.1 設定ユーティリティ (IfHnlSet.exe) を参照ください 必要であればマスタコンピュータの共有メモリの設定を設定ユーティリティで行ってください 次に 3.4 起動手順 を行ってください 設定ユーティリティでの設定を行わないかぎりメモリ共有はできません また マスタデバイスはデバイスとして認識しません コンピュータの再起動が必要です 13

14 3.4 起動手順 マスタコンピュータ スレーブコンピュータ共に電源が OFF の状態 1. スレーブコンピュータを起動させてください 2. スレーブコンピュータの OS が起動したことを確認してください 3. スレーブコンピュータで光メモリンクドライバのインストール ( インストール済みの場合は作業不要です ) 4. スレーブコンピュータで設定ユーティリティによる光メモリンクの設定 ( 設定が必要な場合 ) 設定後スレーブコンピュータの再起動を行い 2 に戻ります 5. スレーブコンピュータとマスタコンピュータの光メモリンクを光ケーブルで接続してください これ以降の作業時は下記の制限事項を守ること スレーブコンピュータでは光メモリンクのデバイスがオープンがされていないこと 設定ユーティリティ (IfHnlSet) が終了していること スレーブコンピュータで光メモリンクのデバイスオープン (IFHnlOpen 関数 ) 設定ユーティリティ (IfHnlSet) の実行を行わないこと 6. マスタコンピュータを起動させてください 7. マスタコンピュータの OS が起動したことを確認してください 8. マスタコンピュータで光メモリンクドライバのインストール ( インストール済みの場合は作業不要です ) 9. マスタコンピュータで設定ユーティリティによる光メモリンクの設定 ( 設定が必要な場合 ) Shared Memory Size の値以外を変更する場合は 設定後 マスタコンピュータの電源 OFF スレーブコンピュータの電源 OFF を実施し 1 に戻ります Shared Memory Size の値のみ変更した場合は 設定後マスタコンピュータの再起動を行い 7 に戻ります コンピュータ起動時は必ずこの手順で起動させてください 上記手順にてマスタコンピュータ スレーブコンピュータの起動後 光メモリンクを使用することができるようになります 14

15 3.4.2 マスタコンピュータ スレーブコンピュータ共に電源が ON の状態 ( 正常動作時 ) マスタコンピュータの再起動を行う場合 1. マスタコンピュータ スレーブコンピュータの両方で下記の終了処理を実行 共有メモリのアンマップ (IfHnlMemoryUnmap 関数 ) の実行 共有メモリのマッピング (IfHnlMemoryMap 関数 ) を行っていた場合 ウィンドウメモリのアンマップ (IfHnlWindowUnmap 関数 ) の実行 ウィンドウメモリのマッピング (IfHnlWindowMap 関数 ) を行っていた場合 ウィンドウのクローズ (IfHnlWindowClose) の実行 ウィンドウのオープン (IfHnlWindowOpen 関数 ) を行っていた場合 デバイスのクローズ (IfHnlClose) の実行 デバイスのオープン (IfHnlOpen 関数 ) を行っていた場合 これ以降の作業時は下記の制限事項を守ること スレーブコンピュータでは光メモリンクのデバイスがオープンされていないこと 設定ユーティリティ (IfHnlSet) が終了していること スレーブコンピュータで光メモリンクのデバイスオープン (IFHnlOpen 関数 ) 設定ユーティリティ (IfHnlSet) の実行を行わないこと 2. マスタコンピュータの再起動 3. マスタコンピュータ スレーブコンピュータ共に電源が OFF の状態 の 7 からの処理と同じ スレーブコンピュータの再起動を行う場合 スレーブコンピュータのみの再起動はできません スレーブコンピュータを再起動する際はマスタコンピュータの電源 OFF 後 スレーブコンピュータの再起動を行う必要があります 下記手順にて実施して下さい 1. マスタコンピュータ スレーブコンピュータの両方で下記の終了処理を実行 共有メモリのアンマップ (IfHnlMemoryUnmap 関数 ) の実行 共有メモリのマッピング (IfHnlMemoryMap 関数 ) を行っていた場合 ウィンドウメモリのアンマップ (IfHnlWindowUnmap 関数 ) の実行 ウィンドウメモリのマッピング (IfHnlWindowMap 関数 ) を行っていた場合 ウィンドウのクローズ (IfHnlWindowClose) の実行 ウィンドウのオープン (IfHnlWindowOpen 関数 ) を行っていた場合 デバイスのクローズ (IfHnlClose) の実行 デバイスのオープン (IfHnlOpen 関数 ) を行っていた場合 2. マスタコンピュータの電源 OFF 3. スレーブコンピュータの再起動 4. マスタコンピュータ スレーブコンピュータ共に電源が OFF の状態 の 2 からの処理と同じ 15

16 3.5 実行手順 1 つのコンピュータ上で弊社光メモリンク製品を複数枚使用する場合は インタフェースモジュール上のロータリスイッチ RSW1 の設定値が光メモリンク製品同士で重複しないように設定してからスロットに実装し システムを起動して下さい ロータリスイッチ RSW1 の設定値は弊社光メモリンク製品が複数存在する場合 制御対象を一意に識別するための番号となります 重複していた場合 本ソフトウェアの正常動作は保証いたしかねます ハブ (SIO ) はマスタコンピュータのデバイスとして認識します マスタデバイスのロータリスイッチ RSW1 の設定値と重複しないように設定してください Classembly Devices の光拡張スロットはロータリスイッチ RSW1 がありません 設定値は 0 として認識されます 基本的な制御の手順は以下の通りです ( 記述例は C 言語です ) 1. デバイス初期化デバイスを IfHnlOpen 関数で初期化します 初期化が正常終了すると 以後 デバイスへのアクセスが可能となります HANDLE DeviceHandle; DeviceHandle = IfHnlOpen ( IFHNL1, IFHNL_FLAG_NORMAL); 2. ウィンドウ初期化相手のコンピュータの共有メモリにアクセスしたい場合は ウィンドウを使用してアクセスします ウィンドウを IfHnlWindowOpen 関数で初期化します 同時にウィンドウに相手のコンピュータの共有メモリを割り当てます この処理には設定ユーティリティ (IfHnlSet.exe) で設定した Virtual ウィンドウの空きチャンネルが必要です スレーブコンピュータ スレーブコンピュータ間でのメモリ共有を行う場合はさらに 接続先のノード名 Link ウィンドウの空きチャンネルが必要です また IfHnlGetInfo 関数でノードの情報の取得ができます 初期化が正常終了すると 以後 ウィンドウから指定した共有メモリへのアクセスが可能となります 16

17 HANDLE WindowHandle; IFHNL_LINKWINDOW Linkinfo; sprintf(linkinfo.nodename, Node1 ); Linkinfo.Ch = 1; WindowHandle = IfHnlWindowOpen (DeviceHandle, 1, 1,1, &Linkinfo); この例では 下記の図ようなスレーブコンピュータ スレーブコンピュータ間接続です スレーブコンピュー マスタコンピュータ スレーブコンピュータ 2 タ 1 メモリ メモリ サイズ :1MB 物理アドレス領域 物理アドレス領域 物理アドレス領域 オフセット :1MB 共有メモリ領域 仮想アドレス領域 仮想アドレス領域 仮想アドレス領域 Virtual ウィンドウ 1 Link ウィンドウ 2 1 チャンネル 1 チャンネル スレーブコンピュータ 1 からスレーブコンピュータ 2 の共有メモリのオフセット 1MB サイズ 1MB の領域へ接続を行っています 自身のノードの Virtual ウィンドウの 1 チャンネルからノード名 Node1 の Link ウィンドウの 1 チャンネルを使用してアクセスを行います Virtual ウィンドウ Link ウィンドウについては 1.5 ウィンドウとは を参照ください 3. ウィンドウのマッピングウィンドウに割り当てた共有メモリを IfHnlWindowMap 関数で仮想メモリへマッピングします 仮想メモリへアクセスすることで 相手の共有メモリの情報を取得 設定できるようになります PVOID WinMapmem; WinMapmem = IfHnlWindowMap(DeviceHandle, WindowHandle); (char)(*winmapmem) = a ; printf( %c\n, (*((char*)winmapmem + 0x100))); 4. 自身のコンピュータの共有メモリへのマッピング自身のコンピュータ上の共有メモリを IfHnlMemoryMap 関数で仮想メモリへマッピングします 仮想メモリへアクセスすることで 自身のコンピュータ上の共有メモリデータを取得 設定できるようになります 17

18 PVOID PhyMapmem; PhyMapmem = IfHnlMemoryMap(DeviceHandle, 0, 1); (char)(*phymapmem) = a ; printf( %c\n, (*((char*)phymapmem + 0x100))); 共有メモリについては 1.4 共有メモリとは を参照ください 5. DMA 転送 この機能は下記 製品型式のみ対応しています ご注意ください PCI , PEX , CPZ DMA 転送はユーザバッファ 共有メモリ 共有メモリ ユーザバッファ 共有メモリ 共有メモリに転送ができます 各領域を指定する場合下記のように IfHnlDmaTransfer 関数の引数として入力することでDMA 転送を行います Windowの領域を使用する場合 IfHnlWindowOpen 関数で取得したハンドルと開始位置自身のコンピュータの共有メモリの領域を使用する場合 開始位置ユーザで確保したバッファの領域を使用する場合 使用するバッファ DWORD Ret; IFHNL_DMA_PARAMS Source; IFHNL_DMA_PARAMS Dest; // 送信側設定 ( 自身のコンピュータ共有メモリ ) Source.Num = IFHNL_MEMORY; Source.StartAddr = 0x100; // 受信側設定 (Window) Dest.Num = IFHNL_WINDOW; Dest.Handle = WindowHandle; Dest.StartAddr = 0x100; Ret = IfHnlDmaTransfer ( DeviceHandle, 1, 1024, &Source, &Dest, 0); 1 つのハブ (SIO ) から接続しているノードは マスタデバイスの DMA デバイスをシェアアクセスします DMA 転送を行う際は同期をとってください 6. 割り込み要求同期をとるときなどに ノードに対して割り込みを発生させることができます ノードに対して割り込みを IfHnlInterruptRequest 関数で要求します この処理には設定ユーティリティ (IfHnlSet.exe) で設定したノード名が必要です また IfHnlGetInfo 関数でノードの情報の取得ができます Ret = IfHnlInterruptRequest(DeviceHandle, Node1 ); 18

19 7. イベントノードからの割り込み要求をウィンドウメッセージ コールバックで取得します ウィンドウメッセージ コールバックは IfHnlSetEvent 関数で設定ができます また IfHnlKillEvent 関数でイベントの設定を解除できます void CALLBACK EventProc(DWORD DeviceHandle, PVOID UserData, CHAR * NodeName) { // 割り込みイベントに対応する処理を記述します Ret = IfHnlSetEvent (DeviceHandle, 10, EventProc, NULL, 0, NULL, WM_NULL); Ret = IfHnlKillEvent (DeviceHandle); 8. アンマップ共有メモリを割り当てた仮想メモリを IfHnlMemoryUnmap 関数 IfHnlWindowUnmap 関数で解放します アプリケーションでは 必ず仮想メモリの解放を行ってから終了してください Ret = IfHnlMemoryUnmap(DeviceHandle, PhyMapmem); Ret = IfHnlWindowUnmap(DeviceHandle, WinMapmem); 9. ウィンドウの終了処理ウィンドウの終了処理を IfHnlWindowClose 関数で行います アプリケーションでは 必ずウィンドウの終了処理を行ってから終了してください Ret = IfHnlWindowClose (WindowHandle); 10. 終了処理 IfHnlClose 関数でデバイスの終了処理を行います アプリケーションでは 必ず終了処理を行ってから終了してください Ret = IfHnlClose (DeviceHandle); 19

20 3.6 メモリ共有できない接続方法 下記のようにコンピュータ 1 のスレーブデバイスから コンピュータ 3 の共有メモリには直接アクセスできません コンピュータ 1 スレーブ コンピュータ 2 マスタ スレーブ コンピュータ 3 共有メモリ マスタ コンピュータ 1 とコンピュータ 3 でメモリの共有を行いたいのであれば 共有メモリをコンピュータ 2 に設けて共有してください コンピュータ 1 スレーブ コンピュータ 2 マスタ コンピュータ 3 スレーブ マスタ 共有メモリ 3.7 インタフェースモジュールのスレーブからマスタへの切替方法 リフレッシュ ( 共有メモリ デバイス ) の インタフェースモジュールのリフレッシュ操作方法 を参照してリフレッシュを行ってください 20

21 第 4 章注意事項 4.1 Ver 以前のドライバご使用の方へ設定ユーティリティにてメモリの不正アクセスが発生する可能性がある問題の改善のため 共有メモリの確保方法に変更を行っております 最新ドライバをインストール後 設定ユーティリティにて 共有メモリのリフレッシュを行った後 共有メモリを再設定してください 4.2.NET での注意事項 非同期処理で参照渡しする変数について各関数はアンマネージ関数です 非同期処理を使用する際は ガーベジコレクションによりメモリの開放 移動があるタイミングで発生します それにより関数内で保持しているポインタと アプリケーション内での変数のポインタでずれが発生し メモリ破壊が発生する可能性があります 下記の対策例のように対策してください 対象となる関数 IfHnlDmaTransfer 関数 (IFHNL_DMA_PARAMS 構造体の Buffer メンバ ) IfHnlSetEvent 関数 (UserData パラメータ ) 対策例 1. IfHnlDmaTransfer 関数サンプルプログラム DMATransfer を参照してください 2. IfHnlSetEvent 関数 Visual Basic.NET Public Sub EventProc(ByVal DeviceHandle As IntPtr, ByVal UserData As IntPtr, _ ByVal NodeName As String) 割り込みイベントに対応する処理を記述します End Function Dim nodename(16) As Byte IFCHNL.PIFHNLCALLBACK proc = new IFCHNL.PIFHNLCALLBACK(EventProc) GCname = GCHandle.Alloc(nodename,GCHandleType.Pinned) ret = IFCHNL.IfHnlSetEvent(DeviceHandle, 10, proc, GCname.AddrOfPinnedObject(), _ IFCHNL.IFHNL_SYNC, IntPtr.Zero, 0) GCname.Free(); 21

22 4.3 PCI Express Native 環境でご使用の方へ Windows Vista Windows Sever 2008 およびそれ以降のバージョンの Windows において PCI Express Native の環境では PCI ,CPZ を使用することはできません PCI Express Native を無効にするには 下記の方法を行ってください 1. 管理者権限 でコマンドプロンプトを起動してください 2. bcdedit /set {current pciexpress forcedisable と入力し Enter を入力して下さい 3. 入力後再起動を行ってください PCI Express Native を無効にした場合のシステムの動作については保障できません 無効にした場合の影響などについてはご使用の PC メーカ等へご確認下さい 2 の手順を bcdedit /set {current pciexpress default とすることで元の設定に戻すことができます PEX のみ 設定ユーティリティにて PCI Express Native の設定 を Enable に設定することで PCI Express Native 環境で光メモリンクを使用することができます 設定ユーティリティを実行しているコンピュータが 64bitOS の場合 PCI Express Native の設定 を使用するためには デバイスアクセス用ドライバのインストールが必要です インストール方法については README.HTM の デバイスアクセス用ドライバのインストール を参照してください 22

23 Visual C# static void EventProc(IntPtr DeviceHandle, IntPtr UserData,string NodeName) { // 割り込みイベントに対応する処理を記述します byte[] nodename = new byte[16]; IFCHNL.PIFHNLCALLBACK proc = new IFCHNL.PIFHNLCALLBACK(EventProc); GCname = GCHandle.Alloc(nodename,GCHandleType.Pinned); ret = IFCHNL.IfHnlSetEvent(DeviceHandle, 10, proc, GCname.AddrOfPinnedObject(), IFCHNL.IFHNL_SYNC, IntPtr.Zero, 0); GCname.Free(); 構造体について StructLayout クラスのオプションに LayoutKind.Sequential を指定しています 23

24 第 5 章リファレンス 5.1 関数一覧 No 関数名 機能 初期化関数 1 IfHnlOpen デバイスをオープンします 2 IfHnlClose デバイスをクローズします 3 IfHnlGetInfo 光メモリンクネットワーク上のノードの情報を取得します 共有メモリ用関数 4 IfHnlMemoryMap 共有メモリを仮想メモリに割り当てます 5 IfHnlMemoryUnmap 共有メモリから仮想メモリを解放します ウィンドウ用関数 6 IfHnlWindowOpen ウィンドウをオープンします 共有メモリを割り当てます 7 IfHnlWindowClose ウィンドウをクローズします 共有メモリの割り当てを解除します 8 IfHnlWindowMap ウィンドウを仮想メモリに割り当てます 9 IfHnlWindowUnmap ウィンドウから仮想メモリを解放します 10 IfHnlWindowGetHandle すでにオープンしているウィンドウのハンドルを取得します DMA 転送用関数 11 IfHnlDmaSet DMA 転送を初期設定します 1 12 IfHnlDmaTransfer DMA 転送を開始します 1 13 IfHnlDmaStatus DMA 転送の情報を取得します 1 14 IfHnlDmaStop DMA 転送を強制停止させます 1 割り込み要求関数 15 IfHnlInterruptRequest 割り込みを発生させます イベント設定関数 16 IfHnlSetEvent イベントを設定します 17 IfHnlKillEvent イベントを解放します 18 IfHnlFinishMessage メッセージ使用時の終了処理を行います 障害検出用関数 19 IfHnlGetLinkStatus 光メモリンクのリンク状態を取得します 20 IfHnlResponseCheck 接続先の光メモリンクデバイスの応答を確認します 1 この関数は下記 製品型式のみ対応しています ご注意ください PCI , PEX , CPZ

25 5.2 関数個別説明 1. IfHnlOpen 機能 デバイスのオープンを行い 以後のデバイスへのアクセスを行えるようにします 書式 C 言語 HANDLE IfHnlOpen( CHAR * NodeName, DWORD Flag ); Visual Basic Declare Function IfHnlOpen Lib "IfHnl.DLL"( _ ByVal NodeName As String, _ ByVal Flag As Long _ )As Long Visual Basic.NET Declare Function IfHnlOpen Lib "IFHNL.DLL"( _ ByVal NodeName As String, _ ByVal Flag As Integer _ )As IntPtr Visual C# [DllImport("IFHNL.DLL")] public static extern IntPtr IfHnlOpen( String NodeName, uint Flag ); パラメータ NodeName オープンするノード名を指定してください Flag オープンフラグを指定してください 指定可能な識別子は下記のものから選択します 識別子 値 意味 IFHNL_FLAG_NORMAL 0 通常のオープン時に使用するフラグです これを指定すると重複してオープンすることはできません IFHNL_FLAG_SHARE 1 1 つのデバイスを複数のプロセス ( アプリケーション ) から重複 ( 共有 ) して制御することを許可するフラグです 25

26 戻り値 正常に終了した場合には 有効なデバイスハンドルが返されます 他の関数は 本関数により取得したデバイスハンドルを使用してデバイスの制御を行います オープンに失敗した場合には INVALID_HANDLE_VALUE(-1) が返されます 拡張エラー情報を取得するには GetLastError 関数を使います 拡張エラー情報の内容は 5.5 戻り値一覧 をご参照ください 一覧に記載されていないエラーコードは標準のエラーコードです FormatMessage 関数や ウィンドウズのリファレンスを参照し 内容の確認を行ってください 備考 IFHNL_FLAG_SHARE の動作について本フラグを指定することにより 同じデバイスを 2 つ以上のアプリケーションで共有することが可能となります IFHNL_FLAG_SHARE を指定せずにオープンされているデバイスに対して IFHNL_FLAG_SHARE を指定したオープンを実行した場合 オープンは失敗します オープン (IfHnlOpen 関数 ) とクローズ (IfHnlClose 関数 ) の実行回数は必ず一致しなければなりません また 同時にシェアオープンできる回数は 255 までです ノード名についてオープンするにはノード名を指定します ノード名はデフォルトは IFHNLx_y (x はデバイス認識順 y はスレーブデバイスの RSW の値 (0~16)) となります 各ノード名の確認は 7.1 設定ユーティリティ (IfHnlSet.exe) にて確認できます また ノード名は 7.1 設定ユーティリティ (IfHnlSet.exe) にて変更ができます Windows Vista 以降では 本関数の実行は 管理者の権限で行ってください 管理者の権限でない場合 エラーとなり GetLastError 関数で取得できるエラーコードは IFHNL_ERROR_NOT_FOUND_NAME となります 使用例 5.6 使用例一覧 をご参照ください 26

27 2. IfHnlClose 機能 デバイスをクローズします デバイスアクセスのために使用されていた各種リソースの解放を行い 以後のデバイスへのアクセスを禁止します 書式 C 言語 DWORD IfHnlClose( HANDLE DeviceHandle ); Visual Basic Declare Function IfHnlClose Lib "IFHNL.DLL"( _ ByVal DeviceHandle As Long _ )As Long Visual Basic.NET Declare Function IfHnlClose Lib "IFHNL.DLL"( _ ByVal DeviceHandle As IntPtr _ )As Long Visual C# [DllImport("IFHNL.DLL")] public static extern uint IfHnlClose( IntPtr DeviceHandle ); パラメータ DeviceHandle IfHnlOpen 関数で取得したデバイスハンドルを指定してください 戻り値 正常終了した場合は IFHNL_ERROR_SUCCESS が返されます IFHNL_ERROR_SUCCESS 以外の値が返された場合については 5.5 戻り値一覧 をご参照ください 備考 再度 デバイスへのアクセスを行う場合にはオープン処理 (IfHnlOpen 関数 ) を呼び出してください デバイスクローズ後の各種設定はクリアされます 使用例 5.6 使用例一覧 をご参照ください 27

28 3. IfHnlGetInfo 機能 光メモリンクネットワーク上のノードの情報を取得します 現在の共有メモリ ウィンドウの設定状態を取得できます 書式 C 言語 DWORD IfHnlGetInfo ( HANDLE DWORD PIFHNL_NODE_INFO ); DeviceHandle, Index, Nodeinfo Visual Basic Declare Function IfHnlGetInfo Lib "IFHNL.DLL"( _ ByVal DeviceHandle As Long, _ ByVal Index As Long, _ ByRef Nodeinfo As IFHNL_NODE_INFO _ )As Long Visual Basic.NET Declare Function IfHnlGetInfo Lib "IFHNL.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByVal Index As Integer, _ ByRef Nodeinfo As IFHNL_NODE_INFO _ )As Long Visual C# [DllImport("IFHNL.DLL")] public static extern uint IfHnlGetInfo ( IntPtr DeviceHandle, uint Index, out IFHNL_NODE_INFO Nodeinfo ); パラメータ DeviceHandle IfHnlOpen 関数で取得したデバイスハンドルを指定してください Index ノードのインデックス番号を指定します ( 値 :0~64) 複数ノードがある場合は何個目のノードの情報を取得するか指定します 自身のノードの情報を取得したい場合は 0 を指定しても取得できます Nodeinfo ノード情報を格納する IFHNL_NODE_INFO 構造体 への参照渡しを指定してください 28

29 戻り値 正常終了した場合は IFHNL_ERROR_SUCCESS が返されます IFHNL_ERROR_SUCCESS 以外の値が返された場合については 5.5 戻り値一覧 をご参照ください 使用例 5.6 使用例一覧 をご参照ください 29

30 4. IfHnlMemoryMap 機能 自身のコンピュータで光メモリンクの使用領域として保持している共有メモリを仮想メモリに割り当てます 書式 C 言語 PVOID IfHnlMemoryMap( HANDLE DeviceHandle, ULONG StartAddr, ULONG Size ); Visual Basic Declare Function IfHnlMemoryMap Lib "IfHnl.DLL"( _ ByVal DeviceHandle As Long, _ ByVal StartAddr As Long, _ ByVal Size As Long _ )As Long Visual Basic.NET Declare Function IfHnlMemoryMap Lib "IFHNL.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByVal StartAddr As Integer, _ ByVal Size As Integer _ )As IntPtr Visual C# [DllImport("IFHNL.DLL")] public static extern IntPtr IfHnlMemoryMap ( IntPtr DeviceHandle, uint StartAddr, uint Size ); パラメータ DeviceHandle IfHnlOpen 関数で取得したデバイスハンドルを指定してください StartAddr 割り当て先の共有メモリの先頭アドレスからのオフセット ( 単位 :MB) を指定してください Size 割り当て先のメモリサイズ ( 単位 :MB) 30

31 戻り値 正常に終了した場合には 割り当てられた領域へのポインタを返します 割り当てに失敗した場合には NULL が返されます 拡張エラー情報を取得するには GetLastError 関数を使います 拡張エラー情報の内容は 5.5 戻り値一覧 をご参照ください 一覧に記載されていないエラーコードは標準のエラーコードです FormatMessage 関数や ウィンドウズのリファレンスを参照し 内容の確認を行ってください 使用例 5.6 使用例一覧 をご参照ください 31

32 5. IfHnlMemoryUnmap 機能 自身コンピュータで光メモリンクの使用領域として保持している共有メモリをクローズします メモリアクセスのために使用されていた各種リソースの解放を行い 以後のアクセスを禁止します 書式 C 言語 DWORD IfHnlMemoryUnmap ( HANDLE DeviceHandle, PVOID Pointer ); Visual Basic Declare Function IfHnlMemoryUnmap Lib "IFHNL.DLL"( _ ByVal DeviceHandle As Long, _ ByVal Pointer As Long _ )As Long Visual Basic.NET Declare Function IfHnlMemoryUnmap Lib "IFHNL.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByVal Pointer As IntPtr _ )As Long Visual C# [DllImport("IFHNL.DLL")] public static extern uint IfHnlMemoryUnmap ( IntPtr DeviceHandle, IntPtr Pointer ); パラメータ DeviceHandle IfHnlOpen 関数で取得したデバイスハンドルを指定してください Pointer IfHnlMemoryMap 関数で取得したメモリハンドルを指定してください 戻り値 正常終了した場合は IFHNL_ERROR_SUCCESS が返されます IFHNL_ERROR_SUCCESS 以外の値が返された場合については 5.5 戻り値一覧 をご参照ください 使用例 5.6 使用例一覧 をご参照ください 32

33 6. IfHnlWindowOpen 機能 デバイスの保持しているウィンドウのオープンを行い 以後のアクセスを行えるようにします ウィンドウへ別コンピュータの共有メモリの割り当てを行います 書式 C 言語 HANDLE IfHnlWindowOpen( HANDLE DeviceHandle, ULONG Ch, ULONG StartAddr, ULONG Size, PIFHNL_LINKWINDOW LinkWindow ); Visual Basic Declare Function IfHnlWindowOpen Lib "IfHnl.DLL"( _ ByVal DeviceHandle As Long, _ ByVal Ch As Long, _ ByVal StartAddr As Long, _ ByVal Size As Long, _ ByRef LinkWindow As IFHNL_LINKWINDOW _ )As Long Visual Basic.NET Declare Function IfHnlWindowOpen Lib "IFHNL.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByVal Ch As Integer, _ ByVal StartAddr As Integer, _ ByVal Size As Integer, _ ByRef LinkWindow As IFHNL_LINKWINDOW _ )As IntPtr Visual C# [DllImport("IFHNL.DLL")] public static extern IntPtr IfHnlWindowOpen( IntPtr DeviceHandle, uint Ch, uint StartAddr, uint Size, ref IFHNL_LINKWINDOW LinkWindow ); パラメータ DeviceHandle IfHnlOpen 関数で取得したデバイスハンドルを指定してください 33

34 Ch オープンする Link ウィンドウまたは Virtual ウィンドウのチャンネルを指定してください ウィンドウのチャンネルは環境により下記のようにチャンネル数が異なります マスタコンピュータまたはスレーブコンピュータが x64 環境の場合 : 同時に 2 チャンネルまでマスタコンピュータかつスレーブコンピュータが x86 環境の場合 : 同時に 4 チャンネルまで StartAddr 割り当て先の共有メモリの先頭アドレスからのオフセット ( 単位 :MB) を指定してください Size 割り当て先のメモリサイズ ( 単位 :MB) 下記計算式で算出される設定可能サイズ以下の値を設定してください A = StartAddr(MB) ウィンドウサイズ設定値 (MB) StartAddr(MB) が 0 または A が整数の場合設定可能サイズ (MB) = ウィンドウサイズ設定値 (MB) 上記以外の場合 B = StartAddr(MB) ウィンドウサイズ設定値 (MB) の余り設定可能サイズ (MB) = ウィンドウサイズ設定値 (MB) - B 例 1) ウィンドウサイズが 32[MB] StartAddr を 40[MB] とした場合 A = = 1.25 A が整数でないため 下記を計算 B = 40 % 32 = 8 設定可能サイズ (MB) = 32 8 = 24 Size に指定する値は 24 以下を設定してください 例 2) ウィンドウサイズが 32[MB] StartAddr を 64[MB] とした場合 A = = 2 A が整数のため設定可能サイズ (MB) = 32 Size に指定する値は 32 以下を設定してください LinkWindow スレーブコンピュータスレーブコンピュータ間の共有メモリの割り当てを行う場合 アクセスを行う Link ウィンドウの情報を入力した IFHNL_LINKWINDOW 構造体 への参照渡しを指定します マスタコンピュータスレーブコンピュータ間の共有メモリの割り当てを行う場合 NULL を指定します 戻り値 正常に終了した場合には 有効なウィンドウハンドルが返されます 他の関数は 本関数により取得したウィンドウハンドルを使用してウィンドウの制御を行います オープンに失敗した場合には INVALID_HANDLE_VALUE(-1) が返されます 34

35 拡張エラー情報を取得するには GetLastError 関数を使います 拡張エラー情報の内容は 5.5 戻り値一覧 をご参照ください 一覧に記載されていないエラーコードは標準のエラーコードです FormatMessage 関数や ウィンドウズのリファレンスを参照し 内容の確認を行ってください 備考 同チャンネルをシェアオープンできません 相手がダウンした際は 戻り値にエラーが返ります Virtual ウィンドウ Link ウィンドウについては 1.5 ウィンドウとは を参照ください 使用例 5.6 使用例一覧 をご参照ください 35

36 7. IfHnlWindowClose 機能 デバイスの保持しているウィンドウをクローズします メモリアクセスのために使用されていた各種リソースの解放を行い 以後のアクセスを禁止します 書式 C 言語 DWORD IfHnlWindowClose( HANDLE WindowHandle ); Visual Basic Declare Function IfHnlWindowClose Lib "IFHNL.DLL"( _ ByVal WindowHandle As Long _ )As Long Visual Basic.NET Declare Function IfHnlWindowClose Lib "IFHNL.DLL"( _ ByVal WindowHandle As IntPtr _ )As Long Visual C# [DllImport("IFHNL.DLL")] public static extern uint IfHnlWindowClose( IntPtr WindowHandle ); パラメータ WindowHandle IfHnlWindowOpen 関数で取得したウィンドウハンドルを指定してください 戻り値 正常終了した場合は IFHNL_ERROR_SUCCESS が返されます IFHNL_ERROR_SUCCESS 以外の値が返された場合については 5.5 戻り値一覧 をご参照ください 備考 相手がダウンした際は 戻り値にエラーが返ります 再度 ウィンドウへのアクセスを行う場合にはオープン処理 (IfHnlWindowOpen 関数 ) を呼び出してください ウィンドウクローズ後に下記が実行されます 1. マッピングされた仮想メモリなどが解放されます 2.DMA 転送中の場合 DMA 転送は強制停止されます 3. ウィンドウに割り当てられた共有メモリを解放します 使用例 5.6 使用例一覧 をご参照ください 36

37 8. IfHnlWindowMap 機能 共有メモリを仮想メモリに割り当てます 書式 C 言語 PVOID IfHnlWindowMap ( HANDLE DeviceHandle, HANDLE Handle ); Visual Basic Declare Function IfHnlWindowMap Lib "IFHNL.DLL"( _ ByVal DeviceHandle As Long, _ ByVal Handle As Long _ )As Long Visual Basic.NET Declare Function IfHnlWindowMap Lib "IFHNL.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByVal Handle As IntPtr _ )As IntPtr Visual C# [DllImport("IFHNL.DLL")] public static extern IntPtr IfHnlWindowMap ( IntPtr DeviceHandle, IntPtr Handle ); パラメータ DeviceHandle IfHnlOpen 関数で取得したデバイスハンドルを指定してください Handle 割り当てを行う共有メモリまたはウィンドウのハンドル (IfHnlMemoryMap 関数または IfHnlWindowOpen 関数で取得したハンドル ) を指定してください 戻り値 正常終了した場合は 割り当てられた領域へのポインタを返します 割り当てに失敗した場合には NULL が返されます 拡張エラー情報を取得するには GetLastError 関数を使います 拡張エラー情報の内容は 5.5 戻り値一覧 をご参照ください 一覧に記載されていないエラーコードは標準のエラーコードです FormatMessage 関数やウィンドウズのリファレンスを参照し 内容の確認を行ってください 相手がダウンした際は メモリから読み取れる値がすべて FFhとなります 戻り値は返りませんのでご注意ください 37

38 備考 同じハンドルで複数回実行しても 同じ仮想メモリを返します 使用例 5.6 使用例一覧 をご参照ください 38

39 9. IfHnlWindowUnmap 機能 IfHnlWindowMap 関数によって割り当てられた仮想メモリを解放します 書式 C 言語 DWORD IfHnlWindowUnmap ( HANDLE DeviceHandle, PVOID Pointer ); Visual Basic Declare Function IfHnlWindowUnmap Lib "IFHNL.DLL"( _ ByVal DeviceHandle As Long, _ ByVal Pointer As Long _ )As Long Visual Basic.NET Declare Function IfHnlWindowUnmap Lib "IFHNL.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByVal Pointer As IntPtr _ )As Long Visual C# [DllImport("IFHNL.DLL")] public static extern uint IfHnlWindowUnmap ( IntPtr DeviceHandle, IntPtr Pointer ); パラメータ DeviceHandle IfHnlOpen 関数で取得したデバイスハンドルを指定してください Pointer IfHnlWindowMap 関数で取得したポインタを指定してください 戻り値 正常終了した場合は IFHNL_ERROR_SUCCESS が返されます IFHNL_ERROR_SUCCESS 以外の値が返された場合については 5.5 戻り値一覧 をご参照ください 備考 IfHnlWindowMap 関数を同じハンドルで複数回実行して取得したポインタは同じポインタのため一回の IfHnlWindowUnmap 関数で解放されます 相手がダウンした際は メモリから読み取れる値がすべて FFh となります 戻り値は返りませんのでご注意ください 39

40 使用例 5.6 使用例一覧 をご参照ください 40

41 10.IfHnlWindowGetHandle 機能 IfHnlWindowOpen 関数によって割り当てられたウィンドウのハンドルを取得します ウィンドウをシェアして使う場合に使用してください 書式 C 言語 DWORD IfHnlWindowGetHandle ( HANDLE DeviceHandle, ULONG Ch ); Visual Basic Declare Function IfHnlWindowGetHandle Lib "IFHNL.DLL"( _ ByVal DeviceHandle As Long, _ ByVal Ch As Long _ )As Long Visual Basic.NET Declare Function IfHnlWindowGetHandle Lib "IFHNL.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByVal Ch As Integer _ )As Long Visual C# [DllImport("IFHNL.DLL")] public static extern uint IfHnlWindowGetHandle ( IntPtr DeviceHandle, uint Ch ); パラメータ DeviceHandle IfHnlOpen 関数で取得したデバイスハンドルを指定してください Ch IfHnlWindowOpen 関数によってオープンしている Link ウィンドウまたは Virtual ウィンドウのチャンネルを指定してください 戻り値 正常に終了した場合には 有効なウィンドウハンドルが返されます 本関数により取得したウィンドウハンドルを使用してウィンドウの制御を行えます オープンに失敗した場合には INVALID_HANDLE_VALUE(-1) が返されます 拡張エラー情報を取得するには GetLastError 関数を使います 拡張エラー情報の内容は 5.5 戻り値一覧 をご参照ください 一覧に記載されていないエラーコードは標準のエラーコードです FormatMessage 関数や ウィンドウズのリファレンスを参照し 内容の確認を行ってください 41

42 備考 IfHnlWindowOpen 関数によってオープンしていない場合 ハンドルは取得できません IfHnlWindowOpen 関数実行時の戻り値で INVALID_HANDLE_VALUE(-1) が返され GetLastError 関数を使い 拡張エラー情報を取得し IFHNL_ERROR_ALREADY_OPEN(C h) が取得できた場合 この関数でのハンドル取得が可能です IfHnlWindowClose 関数によってクローズしてしまったウィンドウのハンドルでは共有メモリへアクセスできません ウィンドウのクローズは使用しなくなったときに行ってください 使用例 5.6 使用例一覧 をご参照ください 42

43 11.IfHnlDmaSet 機能 DMA 転送の初期設定をします 書式 C 言語 DWORD IfHnlDmaSet ( HANDLE DWORD DWORD ); DeviceHandle, Func, Data Visual Basic Declare Function IfHnlDmaStatus Lib "IFHNL.DLL"( _ ByVal DeviceHandle As Long, _ ByVal Func As Long, _ ByVal Data As Long _ )As Long Visual Basic.NET Declare Function IfHnlDmaStatus Lib "IFHNL.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByVal Func As Integer, _ ByVal Data As Integer _ )As Long Visual C# [DllImport("IFHNL.DLL")] public static extern uint IfHnlDmaStatus ( IntPtr DeviceHandle, uint Func, uint Data ); パラメータ DeviceHandle IfHnlOpen 関数で取得したデバイスハンドルを指定してください Func 設定を行うパラメータの識別子を指定します 識別子 値 意味 IFHNL_DMA_TRANSFER_SIZE 0 DMA 転送の最大転送サイズを設定します 43

44 Data 設定を行うデータを指定します パラメータ 説明 IFHNL_DMA_TRANSFER_SIZE DMA 転送の最大転送サイズを設定します 下記のパラメータのいずれかを設定してください 識別子 値 意味 IFHNL_DMA_SIZE_4 7 4byte IFHNL_DMA_SIZE_ byte( デフォルト ) IFHNL_DMA_SIZE_ byte IFHNL_DMA_SIZE_ byte IFHNL_DMA_SIZE_ byte IFHNL_DMA_SIZE_1K 4 1KB IFHNL_DMA_SIZE_2K 5 2KB 戻り値 正常終了した場合は IFHNL_ERROR_SUCCESS が返されます IFHNL_ERROR_SUCCESS 以外の値が返された場合については 5.5 戻り値一覧 をご参照ください 備考 この関数は下記 製品型式のみ対応しています ご注意ください PCI , PEX , CPZ IFHNL_DMA_TRANSFER_SIZE の設定に関して十分な注意が必要です DMA 転送開始時にコンピュータがフリーズしたり 処理が戻ってこない状態などになります 設定を変更される場合は お客様の責任をもって変更をお願いします IFHNL_DMA_TRANSFER_SIZE の設定を大きくすることで DMA 転送速度が向上します この関数は IfHnlDmaTransfer 関数実行前に設定を行ってください この関数は同設定の場合は設定変更しません よってシェアオープンなどで IfHnlDmaTransfer 関数実行後にこの関数で同じ設定を行っても問題ありません 使用例 5.6 使用例一覧 をご参照ください 44

45 12.IfHnlDmaTransfer 機能 DMA 転送を開始します 書式 C 言語 DWORD IfHnlDmaTransfer ( HANDLE DWORD DWORD IFHNL_DMA_PARAMS * IFHNL_DMA_PARAMS * HANDLE ); DeviceHandle, DMAChannel, Size, Source, Dest, EventHandle Visual Basic Declare Function IfHnlDmaTransfer Lib "IFHNL.DLL"( _ ByVal DeviceHandle As Long, _ ByVal DMAChannel As Long, _ ByVal Size As Long, _ ByRef Source As IFHNL_DMA_PARAMS, _ ByRef Dest As IFHNL_DMA_PARAMS, _ ByVal EventHandle As Long _ )As Long Visual Basic.NET Declare Function IfHnlDmaTransfer Lib "IFHNL.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByVal DMAChannel As Integer, _ ByVal Size As Integer, _ ByRef Source As IFHNL_DMA_PARAMS, _ ByRef Dest As IFHNL_DMA_PARAMS, _ ByRef EventHandle As IntPtr _ )As Long Visual C# [DllImport("IFHNL.DLL")] public static extern uint IfHnlDmaTransfer ( IntPtr DeviceHandle, uint DMAChannel, uint Size, ref IFHNL_DMA_PARAMS Source, ref IFHNL_DMA_PARAMS Dest, IntPtr EventHandle ); 45

46 パラメータ DeviceHandle IfHnlOpen 関数で取得したデバイスハンドルを指定してください DMAChannel DMA 転送のチャンネルを指定します 1~4 の値が指定できます Size 転送するサイズを Byte 単位で指定してください (1~7FFFFFh) Source 送信元の情報を入力した IFHNL_DMA_PARAMS 構造体 の参照渡しを指定します Dest 受信先の情報を入力した IFHNL_DMA_PARAMS 構造体 の参照渡しを指定します EventHandle 非同期実行を行う場合 作業が完了したときにシグナル状態に設定されるイベントオブジェクトのハンドルを指定します 同期実行を行う場合 NULL または 0 を指定します 戻り値 正常終了した場合は IFHNL_ERROR_SUCCESS が返されます IFHNL_ERROR_SUCCESS 以外の値が返された場合については 5.5 戻り値一覧 をご参照ください 備考 ユーザバッファ同士は DMA 転送できません DMA デバイスが搭載されていないデバイスは使用できません この関数は下記 製品型式のみ対応しています ご注意ください PCI , PEX , CPZ コンピュータによって先頭アドレスは 4byte 区切りの値でしか転送できません 注意してください 使用例 5.6 使用例一覧 をご参照ください 46

47 13.IfHnlDmaStatus 機能 DMA 転送の情報を取得します 書式 C 言語 DWORD IfHnlDmaStatus ( HANDLE DWORD ); DeviceHandle, DMAChannel Visual Basic Declare Function IfHnlDmaStatus Lib "IFHNL.DLL"( _ ByVal DeviceHandle As Long, _ ByVal DMAChannel As Long _ )As Long Visual Basic.NET Declare Function IfHnlDmaStatus Lib "IFHNL.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByVal DMAChannel As Integer _ )As Long Visual C# [DllImport("IFHNL.DLL")] public static extern uint IfHnlDmaStatus ( IntPtr DeviceHandle, uint DMAChannel ); パラメータ DeviceHandle IfHnlOpen 関数で取得したデバイスハンドルを指定してください DMAChannel DMA 転送のチャンネルを指定します 1~4 の値が指定できます 戻り値 正常終了した場合は 下記の値が返されます 識別子 値 意味 IFHNL_DMA_READY 0 DMA 転送できる状態です IFHNL_DMA_PAUSED 1 DMA 転送の待機状態です IFHNL_DMA_INPROGRESS 2 DMA 転送中です それ以外の値が返された場合については 5.5 戻り値一覧 をご参照ください 47

48 備考 この関数は下記 製品型式のみ対応しています ご注意ください PCI , PEX , CPZ 使用例 5.6 使用例一覧 をご参照ください 48

49 14.IfHnlDmaStop 機能 DMA 転送を強制停止させます 書式 C 言語 DWORD IfHnlDmaStop ( HANDLE DWORD ); DeviceHandle, DMAChannel Visual Basic Declare Function IfHnlDmaStop Lib "IFHNL.DLL"( _ ByVal DeviceHandle As Long, _ ByVal DMAChannel As Long _ )As Long Visual Basic.NET Declare Function IfHnlDmaStop Lib "IFHNL.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByVal DMAChannel As Integer _ )As Long Visual C# [DllImport("IFHNL.DLL")] public static extern uint IfHnlDmaStop ( IntPtr DeviceHandle, uint DMAChannel ); パラメータ DeviceHandle IfHnlOpen 関数で取得したデバイスハンドルを指定してください DMAChannel DMA 転送のチャンネルを指定します 1~4 の値が指定できます 戻り値 正常終了した場合は IFHNL_ERROR_SUCCESS が返されます IFHNL_ERROR_SUCCESS 以外の値が返された場合については 5.5 戻り値一覧 をご参照ください 備考 この関数は下記 製品型式のみ対応しています ご注意ください PCI , PEX , CPZ

50 使用例 5.6 使用例一覧 をご参照ください 50

51 15.IfHnlInterruptRequest 機能 割り込みを発生させます 書式 C 言語 DWORD IfHnlInterruptRequest ( HANDLE DeviceHandle, CHAR * NodeName ); Visual Basic Declare Function IfHnlInterruptRequest Lib "IFHNL.DLL"( _ ByVal DeviceHandle As Long, _ ByVal NodeName As String _ )As Long Visual Basic.NET Declare Function IfHnlInterruptRequest Lib "IFHNL.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByVal NodeName As String _ )As Long Visual C# [DllImport("IFHNL.DLL")] public static extern uint IfHnlInterruptRequest ( IntPtr DeviceHandle, String NodeName ); パラメータ DeviceHandle IfHnlOpen 関数で取得したデバイスハンドルを指定してください NodeName 割り込みを発生させるノード名を指定してください スレーブコンピュータからマスタコンピュータ マスタコンピュータからスレーブコンピュータに対して割り込みを発生させる場合は 自身のノード名を指定してください スレーブコンピュータから他のスレーブコンピュータへ対して割り込みを発生させる場合には 割り込み発生先のスレーブコンピュータのノード名を指定してください 戻り値 正常終了した場合は IFHNL_ERROR_SUCCESS が返されます IFHNL_ERROR_SUCCESS 以外の値が返された場合については 5.5 戻り値一覧 をご参照ください 51

52 備考 マスタコンピュータを介して割り込みを発生させます マスタコンピュータのスペックによっても割り込み発生が遅延する可能性があります また マスタコンピュータに負荷がかかります この関数が戻ってくれば 割り込みの発生要求は出し終えていますが 要求先の割り込み処理が完了していない可能性があります 相手がダウンした際は 戻り値にエラーが返ります 使用例 5.6 使用例一覧 をご参照ください 52

53 16.IfHnlSetEvent 機能 イベントを設定します 書式 C 言語 DWORD IfHnlSetEvent ( HANDLE ULONG PIFHNLCALLBACK PVOID ULONG HWND UINT ); DeviceHandle, EventBuffer, CallBackProc, UserData, CallBackFlag, Wnd, InterruptMsg Visual Basic Declare Function IfHnlSetEvent Lib "IFHNL.DLL"( _ ByVal DeviceHandle As Long, _ ByVal EventBuffer As Long, _ ByVal CallBackProc As Long, _ ByVal UserData As Long, _ ByVal CallBackFlag As Long, _ ByVal Wnd As Long, _ ByVal InterruptMsg As Long _ )As Long Visual Basic.NET Declare Function IfHnlSetEvent Lib "IFHNL.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByVal EventBuffer As Integer, _ ByVal CallBackProc As PIFHNLCALLBACK, _ ByVal UserData As IntPtr, _ ByVal CallBackFlag As Integer, _ ByVal Wnd As IntPtr, _ ByVal InterruptMsg As Integer _ )As Long 53

54 Visual C# [DllImport("IFHNL.DLL")] public static extern uint IfHnlSetEvent ( IntPtr DeviceHandle, uint EventBuffer, PIFHNLCALLBACK CallBackProc, IntPtr UserData, uint CallBackFlag, IntPtr Wnd, uint InterruptMsg ); パラメータ DeviceHandle IfHnlOpen 関数で取得したデバイスハンドルを指定してください EventBuffer 指定した数分のデバイスのイベントで取得するノード名の内部入力バッファを確保します 1 単位につき 16byte の内部入力バッファを取得します CallBackProc コールバック関数の参照渡しを指定します コールバック関数を使用しない場合は C 言語では NULL Visual Basic Visual Basic.NET Visual C# では 0 を指定してください UserData 任意のデータを指定します CallBackFlag コールバック関数の呼び出し方法を指定します 値 説明 IFHNL_SYNC 0 コールバックを同期実行します コールバック処理が完了しないと次のコールバック処理が実行されません IFHNL_ASYNC 1 コールバックを非同期実行します 同時に複数のコールバックが実行されることがあります 同期処理など行ってください Wnd メッセージ送出ウィンドウハンドル 各種割り込み発生時に送出するメッセージのポスト先ウィンドウハンドルを指定します メッセージポストを行わない場合には C 言語では NULL,Visual Basic Visual Basic.NET Visual C# では 0 を指定してください 54

55 InterruptMsg 割り込みメッセージ 割り込み発生時に送出するメッセージコードを指定します メッセージポストを行わない場合には C 言語では WM_NULL,Visual Basic Visual Basic.NET Visual C# では 0 を指定してください 戻り値 正常終了した場合は IFHNL_ERROR_SUCCESS が返されます IFHNL_ERROR_SUCCESS 以外の値が返された場合については 5.5 戻り値一覧 をご参照ください 備考 各オープンしたデバイスハンドルに対して 1 つ設定できます デバイスに対しての割り込み要求のすべてを各イベントで取得できます 登録したイベントは IfHnlKillEvent 関数にて 削除できます Visual Basic 6.0 ではコールバック関数が使用できません メッセージ機能を使用してください コールバック関数 メッセージ機能については 5.3 イベントについて を参照ください 使用例 5.6 使用例一覧 をご参照ください 55

56 17.IfHnlKillEvent 機能 イベント処理を解放します 書式 C 言語 DWORD IfHnlKillEvent ( HANDLE DeviceHandle ); Visual Basic Declare Function IfHnlKillEvent Lib "IFHNL.DLL"( _ ByVal DeviceHandle As Long _ )As Long Visual Basic.NET Declare Function IfHnlKillEvent Lib "IFHNL.DLL"( _ ByVal DeviceHandle As IntPtr _ )As Long Visual C# [DllImport("IFHNL.DLL")] public static extern uint IfHnlKillEvent ( IntPtr DeviceHandle ); パラメータ DeviceHandle IfHnlOpen 関数で取得したデバイスハンドルを指定してください 戻り値 正常終了した場合は IFHNL_ERROR_SUCCESS が返されます IFHNL_ERROR_SUCCESS 以外の値が返された場合については 5.5 戻り値一覧 をご参照ください 使用例 5.6 使用例一覧 をご参照ください 56

57 18.IfHnlFinishMessage 機能 メッセージ使用時の終了処理を行います GetMessage 関数 PeekMessage 関数などでメッセージ情報を取得した後 処理が完了したことをこの関数で知らせてください この関数を実行しない限り 正常にメッセージ情報が開放されません 書式 C 言語 DWORD IfHnlFinishMessage ( HANDLE DeviceHandle, PVOID wparam ); Visual Basic Declare Function IfHnlFinishMessage Lib "IFHNL.DLL"( _ ByVal DeviceHandle As Long, _ ByVal wparam As Long _ )As Long Visual Basic.NET Declare Function IfHnlFinishMessage Lib "IFHNL.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByVal wparam As IntPtr _ )As Long Visual C# [DllImport("IFHNL.DLL")] public static extern uint IfHnlFinishMessage ( IntPtr DeviceHandle, IntPtr wparam ); パラメータ DeviceHandle IfHnlOpen 関数で取得したデバイスハンドルを指定してください wparam GetMessage 関数などで取得したノード名が格納されているメッセージ情報を入力してください 戻り値 正常終了した場合は IFHNL_ERROR_SUCCESS が返されます IFHNL_ERROR_SUCCESS 以外の値が返された場合については 5.5 戻り値一覧 をご参照ください 57

58 備考 GetMessage 関数 PeekMessage 関数 MSG 構造体 Message 構造体などメッセージの使用方法については MSDN ライブラリを参照してください 使用例 5.6 使用例一覧 をご参照ください 58

59 19.IfHnlGetLinkStatus 機能 光メモリンクのリンク状態を取得します デバイスハンドルがスレーブの場合 光拡張ハブのリンク状態は取得することができません 自身のデバイスのリンク状態は下記製品でのみ取得することができます インタフェースモジュール製品 (PCI , PEX , CPZ ) Classembly Devices ( マスタ スレーブデバイス切り替え可能製品のみ ) C 言語 unsigned long IfHnlGetLinkStatus( HANDLE DeviceHandle, // デバイスハンドル PIFHNL_LINK_STATUS plinkstatus // ステータス構造体 ); Visual Basic Declare Function IfHnlGetLinkStatusLib "IFHNL.DLL"( _ ByVal DeviceHandle As Long, _ ByRef plinkstatus As IFHNL_LINK_STATUS _ )As Long Visual Basic.NET Declare Function IfHnlGetLinkStatusLib "IFHNL.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByRef plinkstatus As IFHNL_LINK_STATUS _ )As Long Visual C# [DllImport("IFHNL.DLL")] public static extern uint IfHnlGetLinkStatus( IntPtr DeviceHandle, ref IFHNL_LINK_STATUS plinkstatus ); パラメータ DeviceHandle IfHnlOpen 関数で取得したデバイスハンドルを指定してください plinkstatus リンク状態を格納する IFHNL_LINK_STATUS 構造体 への参照渡しを指定してください 戻り値 正常終了した場合は IFHNL_ERROR_SUCCESS が返されます IFHNL_ERROR_SUCCESS 以外の値が返された場合については 5.5 戻り値一覧 をご参照ください 59

60 20.IfHnlResponseCheck 接続先の光メモリンクデバイスの応答を確認します C 言語 unsigned long IfHnlResponseCheck( HANDLE DeviceHandle, // デバイスハンドル CHAR * NodeName, // ノード名 HANDLE EventHandle, // イベントオブジェクト DWORD TimeOutValue // タイムアウト時間 ); Visual Basic Declare Function IfHnlResponseCheckLib "IFHNL.DLL"( _ ByVal DeviceHandle As Long, _ ByVal NodeName As String, _ ByVal EventHandle As Long, _ ByVal TimeOutValue As Long _ )As Long Visual Basic.NET Declare Function IfHnlResponseCheckLib "IFHNL.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByVal NodeName As String, _ ByRef EventHandle As IntPtr, _ ByVal TimeOutValue As Integer _ )As Long Visual C# [DllImport("IFHNL.DLL")] public static extern uint IfHnlResponseCheck( IntPtr DeviceHandle, String NodeName, IntPtr EventHandl,e uint TimeOutValue ); パラメータ DeviceHandle IfHnlOpen 関数で取得したデバイスハンドルを指定してください NodeName 応答を確認するノード名を指定してください マスタのデバイスハンドルから実行した場合のみ有効な引数です スレーブのデバイスハンドルから実行する場合 自身のノード名を指定してください 自身のノードのマスタの応答を確認します 60

61 EventHandle 非同期実行を行う場合 作業が完了またはタイムアウトしたときにシグナル状態に設定されるイベントオブジェクトのハンドルを指定します 同期実行を行う場合 NULL または 0 を指定します TimeOutValut 同期実行を行う場合 タイムアウトとして処理が戻るまでの時間 [ms] を指定します 応答待ちの状態で指定した時間が経過すると IFHNL_ERROR_TIMEOUT が返されます 同期実行を行う場合のみ有効な引数です 非同期実行を行う場合には 0 を指定します 精度はご使用の環境のシステムクロックに依存します 精密な時間測定などには使用できません ご注意下さい 戻り値 正常終了した場合は IFHNL_ERROR_SUCCESS が返されます IFHNL_ERROR_SUCCESS 以外の値が返された場合については 5.5 戻り値一覧 をご参照ください 備考 別プロセス または非同期実行にて応答の確認中に本関数を実行した場合 IFHNL_ERROR_RESPONSE_CHECK_NOW が返ります 61

62 5.3 イベントについて コールバック関数 IfHnlSetEvent 関数にて登録し 割り込みイベントが発生した時にコールされるコールバックルーチンです Visual Basic 6.0 ではコールバック関数が使用できません メッセージ機能を使用してください 書式 コールバックルーチンを使用する場合 下記のように記述します ( 下記はコールバックルーチンを EventProc とする場合の例です ) C 言語 void CALLBACK EventProc(HANDLE DeviceHandle, PVOID UserData, CHAR * NodeName) { // 割り込みイベントに対応する処理を記述します コールバックルーチンの関数型 PIFHNLCALLBACK は下記のように定義されます #define IFHNLCALLBACK CALLBACK typedef void (IFHNLCALLBACK *PIFHNLCALLBACK)(DWORD DeviceHandle, PVOID UserData, CHAR * NodeName); Visual Basic.NET Public Sub EventProc(ByVal DeviceHandle As IntPtr, ByVal UserData As IntPtr, ByVal NodeName As String) 割り込みイベントに対応する処理を記述します End Function コールバックルーチンの関数型 PIFHNLCALLBACK は下記のように定義されます Delegate Sub PIFHNLCALLBACK (ByVal DeviceHandle As IntPtr, ByVal UserData As IntPtr, _ ByVal NodeName As String) Visual C# private void EventProc(IntPtr DeviceHandle, IntPtr UserData,string NodeName) { // 割り込みイベントに対応する処理を記述します コールバックルーチンの関数型 PIFHNLCALLBACK は下記のように定義されます public delegate void PIFHNLCALLBACK(IntPtr DeviceHandle, IntPtr UserData, string NodeName); 62

63 パラメータ DeviceHandle デバイスハンドルが格納されます UserData ユーザデータが格納されます NodeName 割り込み要求先のノード名が格納されます ( 最大 16 文字 ) 戻り値 コールバックルーチンに戻り値はありません 備考 エラーの場合 NodeName に NULL が入り UserData にエラー情報が入ります エラー内容は 5.5 戻り値一覧 をご参照ください 使用例 5.6 使用例一覧 をご参照ください 63

64 5.3.2 メッセージ機能割り込みイベントが発生した時に IfHnlSetEvent 関数にて登録したウィンドウハンドル (Wnd) のウィンドウに関連付けられているメッセージキューに メッセージをポストします メッセージを PeekMessage 関数などで取得する必要があります 書式 PeekMessage 関数を使用する場合 下記のように記述します Visual Basic Const WM_IFHNL = &H Private Sub Command1_Click() Dim message As MSG Dim i As Long i = 0 Do Ret = PeekMessage(message, Me.hwnd, WM_IFHNL, WM_IFHNL, 1) If Ret <> 0 Then Exit Do i = i + 1 If i = 100 Then 終了処理 Exit Sub Sleep (100) Loop While Ret = 0 'It confirms interrupt request ahead. CopyMemory EvNodeName(0), ByVal message.wparam, 16 Ret = IfHnlFinishMessage(DeviceHandle, message.wparam) End Sub 64

65 MSG 構造体のパラメータ hwnd メッセージ送出ウィンドウハンドルが格納されます message IfHnlSetEvent 関数にて登録した割り込みメッセージ (InterruptMsg) が格納されます wparam 割り込み要求先のノード名が格納されます ( 最大 16 文字 ) lparam IfHnlSetEvent 関数にて登録した任意のデータ (UserData) が格納されます 戻り値 メッセージ処理の結果を返してください 備考 エラーの場合 wparam に 0 が入り lparam にエラー情報が入ります エラー内容は 5.5 戻り値一覧 をご参照ください エラーではない場合 データの抜き取りが完了したら IfHnlFinishMessage 関数を呼び出してメッセージの終了処理を行ってください 使用例 5.6 使用例一覧 をご参照ください 65

66 5.4 構造体説明 IFHNL_LINKWINDOW 構造体 C 言語 typedef struct{ CHAR NodeName[16]; ULONG Ch; IFHNL_LINKWINDOW, *PIFHNL_LINKWINDOW; Visual Basic Type IFHNL_LINKWINDOW NodeName(0 To 23) Ch End Type As Char As Long Visual Basic.NET <StructLayout(LayoutKind.Sequential)> Structure IFHNL_LINKWINDOW <MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> _ Dim NodeName() As Char Dim Ch As Integer Public Sub InitializeArray() ReDim NodeName(16) End Sub End Structure Visual C# [StructLayout(LayoutKind.Sequential)] public struct IFHNL_LINKWINDOW { [MarshalAs(UnmanagedType.ByValArray, SizeConst=16)] public char[] NodeName; public uint Ch; public void InitializeArray() { NodeName = new char[16]; メンバ説明 NodeName 割り当て先のノード名スレーブコンピュータスレーブコンピュータ間時に設定が必要です Ch 割り当て先のノードの Link ウィンドウチャンネルスレーブコンピュータスレーブコンピュータ間時に設定が必要です Link ウィンドウチャンネルはシェアアクセスできません 66

67 5.4.2 IFHNL_WINDOW_INFO 構造体 C 言語 typedef struct{ ULONG WindowSize; CHAR NodeName[16]; ULONG Ch; ULONG StartAddr; ULONG Size; IFHNL_WINDOW_INFO, *PIFHNL_WINDOW_INFO; Visual Basic Type IFHNL_WINDOW_INFO WindowSize NodeName(0 To 23) Ch StartAddr Size End Type As Long As Char As Long As Long As Long Visual Basic.NET <StructLayout(LayoutKind.Sequential)> Structure IFHNL_WINDOW_INFO Dim WindowSize As Integer <MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> _ Dim NodeName() As Char Dim Ch As Integer Dim StartAddr As Integer Dim Size As Integer Public Sub InitializeArray() ReDim NodeName(16) End Sub End Structure Visual C# [StructLayout(LayoutKind.Sequential)] public struct IFHNL_WINDOW_INFO { public uint WindowSize; [MarshalAs(UnmanagedType.ByValArray, SizeConst=16)] public char[] NodeName; public uint Ch; public uint StartAddr; public uint Size; public void InitializeArray() { NodeName = new char[16]; 67

68 メンバ WindowSize NodeName Ch StartAddr Size 説明ウィンドウのサイズ ( 単位 :MB) ノード名 Virtual ウィンドウの情報の場合 割り当て先のノード名 Link ウィンドウの情報の場合 割り当て元のノード名ウィンドウチャンネル Virtual ウィンドウの情報の場合 割り当て先の Link ウィンドウチャンネル Link ウィンドウの情報の場合 割り当て元の Virtual ウィンドウチャンネルマスタコンピュータ スレーブコンピュータ間での使用の場合 0 が入ります 割り当て先の共有メモリの先頭アドレスからのオフセット ( 単位 :MB) 割り当て先のメモリサイズ ( 単位 :MB) 68

69 5.4.3 IFHNL_NODE_INFO 構造体 C 言語 typedef struct { CHAR NodeName[16]; ULONG MasterSharedMemSize; ULONG SlaveSharedMemSize; IFHNL_WINDOW_INFO VirtualWindowInfo [4]; IFHNL_WINDOW_INFO LinkWindowInfo [4]; ULONG MaxChannelNum; ULONG IsMaster; IFHNL_NODE_INFO, *PIFHNL_NODE_INFO; Visual Basic Type IFHNL_NODE_INFO NodeName(0 To 23) MasterSharedMemSize SlaveSharedMemSize VirtualWindowInfo (0 To 4) LinkWindowInfo (0 To 4) MaxChannelNum IsMaster End Type As Char As Long As Long As IFHNL_WINDOW_INFO As IFHNL_WINDOW_INFO As Long As Long Visual Basic.NET <StructLayout(LayoutKind.Sequential)> Structure IFHNL_NODE_INFO <MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> _ Dim NodeName() As Char Dim MasterSharedMemSize As Integer Dim SlaveSharedMemSize As Integer <MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> _ Dim VirtualWindowInfo () As IFHNL_WINDOW_INFO <MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> _ Dim LinkWindowInfo () As IFHNL_WINDOW_INFO Dim MaxChannelNum As Integer Dim IsMaster As Integer Public Sub InitializeArray() ReDim NodeName(16) ReDim VirtualWindowInfo (4) ReDim LinkWindowInfo (4) End Sub End Structure 69

70 Visual C# [StructLayout(LayoutKind.Sequential)] public struct IFHNL_NODE_INFO { [MarshalAs(UnmanagedType.ByValArray, SizeConst=16)] public char[] NodeName; public uint MasterSharedMemSize; public uint SlaveSharedMemSize; [MarshalAs(UnmanagedType.ByValArray, SizeConst=4)] public IFHNL_WINDOW_INFO[] VirtualWindowInfo; [MarshalAs(UnmanagedType.ByValArray, SizeConst=4)] public IFHNL_WINDOW_INFO[] LinkWindowInfo; public uint MaxChannelNum; public uint IsMaster; public void InitializeArray() { NodeName = new char [16]; VirtualWindowInfo = new IFHNL_WINDOW_INFO [4]; LinkWindowInfo = new IFHNL_WINDOW_INFO [4]; メンバ説明 NodeName ノード名 (16 文字まで ) MasterSharedMemSize マスタコンピュータが保有している共有メモリのサイズ SlaveSharedMemSize スレーブコンピュータで保有している共有メモリのサイズ VirtualWindowInfo Virtual ウィンドウの情報 値はチャンネル順に入力されます 割り当ててない場合は WindowSize メンバが 0 になります ウィンドウを使用されていない場合は Size メンバが 0 になります LinkWindowInfo Link ウィンドウの情報 値はチャンネル順に入力されます 割り当ててない場合は WindowSize メンバが 0 になります ウィンドウを使用されていない場合は Size メンバが 0 になります MaxChannelNum ノードが使用できる最大ウィンドウチャンネル数 IsMaster デバイスハンドルがマスタデバイス スレーブデバイスの情報 自分自身のノード情報を取得するときにのみ有効 1 = マスタデバイスから Open しているノード 0 = スレーブデバイスから Open しているノード 70

71 5.4.4 IFHNL_DMA_PARAMS 構造体 C 言語 typedef struct { DWORD Num; HANDLE Handle; SIZE_T StartAddr; PVOID Buffer; IFHNL_DMA_PARAMS, *PIFHNL_DMA_PARAMS; Visual Basic Type IFHNL_DMA_PARAMS Num Handle StartAddr Buffer End Type As Long As Long As Long As Long Visual Basic.NET <StructLayout(LayoutKind.Sequential)> Structure IFHNL_DMA_PARAMS Dim Num As Integer Dim Handle As IntPtr Dim StartAddr As IntPtr Dim Buffer As IntPtr End Structure Visual C# [StructLayout(LayoutKind.Sequential)] public struct IFHNL_DMA_PARAMS { public uint Num; public IntPtr Handle; public IntPtr StartAddr; public IntPtr Buffer; メンバ Num 説明 どの領域を DMA 転送をする値として使用するかの識別子 識別子 値 説明 IFHNL_MEMORY 0 物理メモリ IFHNL_WINDOW 1 ウィンドウ IFHNL_USERBUFFER 2 ユーザバッファ StartAddr 先頭アドレスからのオフセット (Byte 単位 ) Num で物理メモリ ウィンドウを指定した場合に指定してください Visual Basic では StartAddr(0) に値を指定してください StartAddr(1) は使用できません コンピュータによって先頭アドレスは 4byte 区切りの値でしか転送できません 注意してください 71

72 Handle Buffer ウィンドウハンドル Num でウィンドウを指定した場合に指定してください ユーザで確保したバッファ Num でユーザバッファを指定した場合に指定してください 72

73 5.4.5 IFHNL_LINK_STATUS 構造体 C 言語 typedef struct { DWORD MyLinkStatus; DWORD HubLinkStatus[16]; IFHNL_LINK_STATUS, *PIFHNL_LINK_STATUS; Visual Basic Type IFHNL_LINK_STATUS MyLinkStatus HubLinkStatus(0 To 16) End Type As Long As Long Visual Basic.NET <StructLayout(LayoutKind.Sequential)> Structure IFHNL_LINK_STATUS <MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> _ Dim MyLinkStatus As Integer Dim HubLinkStatus() As Integer Public Sub InitializeArray() ReDim HubLinkStatus(16) End Sub End Structure Visual C# [StructLayout(LayoutKind.Sequential)] public struct IFHNL_LINK_STATUS { [MarshalAs(UnmanagedType.ByValArray, SizeConst=16)] public uint MyLinkStatus; public uint[] HubLinkStatus(); public void InitializeArray() { HubLinkStatus= new uint[16]; メンバ MyLinkStatus 説明自身のデバイスのリンク状態を表します ビット bit31~bit1 bit0 自身の予約 Status ステータス 73

74 Status 自身のリンク状態を表します 1: リンクしている状態 0: リンクが切れている状態 HubLinkStatus[16] 予約には 0 が入ります 本メンバは下記製品でのみ取得することができます インタフェースモジュール製品 (PCI , PEX , CPZ ) Classembly Devices ( マスタ スレーブデバイス切り替え可能製品のみ ) 上記以外の型式の場合 0 が入ります 光拡張ハブのリンク状態を表します 配列の添え字はハブの RSW1 の番号を表します (0~15) ビット Bit31 bit30~bit6 bit5 bit4 bit3 bit2 bit1 bit0 光拡張ハブのステータス ハブの有無 予約 Opt6 Opt5 Opt4 Opt3 Opt2 Opt1 Opt1~Opt6 各光拡張ハブの Opt1~Opt6 のリンク状態を表します 1: リンクしている状態 0: リンクが切れている状態ハブの有無 RSW1 の値のハブが光メモリンクネットワーク上に存在するかどうかを表します 1: 存在している 0: 存在しない 予約には 0 が入ります 本メンバはデバイスハンドルがマスタの場合のみ値を取得できます デバイスハンドルがスレーブの場合 0 が入ります 74

75 5.4.6 OVERLAPPED 構造体 C 言語 typedef struct _OVERLAPPED { DWORD Internal; DWORD InternalHigh; DWORD Offset; DWORD OffsetHigh; HANDLE hevent; OVERLAPPED; Visual Basic Type OVERLAPPED Internal InternalHigh Offset OffsetHigh hevent End Type As Long As Long As Long As Long As Long Visual Basic.NET <StructLayout(LayoutKind.Sequential)> Structure OVERLAPPED Dim Internal As Integer Dim InternalHigh As Integer Dim Offset As Integer Dim OffsetHigh As Integer Dim hevent As Integer End Structure Visual C# [StructLayout(LayoutKind.Sequential)] public struct OVERLAPPED { public uint Internal; public uint InternalHigh; public uint Offset; public uint OffsetHigh; public uint hevent; 75

76 メンバ Internal InternalHigh Offset OffsetHigh hevent 説明オペレーティングシステムの使用のために予約されています このメンバには システムに依存する状態が指定されます このメンバは GetOverlappedResult 関数が拡張エラー情報を ERROR_IO_PENDING に設定しないで制御を戻したときだけ有効です オペレーティングシステムの使用のために予約されています このメンバには 転送されるデータの長さが指定されます このメンバは GetOverlappedResult 関数が 0 でない値を返したときだけ有効です 転送を開始するファイル位置を指定します 通信ポートに対してこれらの関数が読み取りや書き込みをするときには このメンバは無視されます 転送を開始するバイトオフセットの上位ワードを指定します 通信ポートに対してこれらの関数が読み取りや書き込みをするときには このメンバは無視されます 転送が完了したときにシグナル状態に設定されるイベントを識別します 呼び出し側プロセスは IfHnlDmaTransfer 関数を呼び出す前に このメンバを設定します 76

77 5.5 戻り値一覧エラー識別子値意味対処方法 IFHNL_ERROR_SUCCESS 0 正常終了 - IFHNL_ERROR_NOT_DEVICE C h ドライバを呼び出せません 指定したデバイスが見つかりませんでした 指定したデバイス番号が存在するかどうかを確認してください IFHNL_ERROR_NOT_OPEN C h ドライバを OPEN できませ ん IFHNL_ERROR_INVALID_HANDLE C h デバイスハンドルが正し くありません IFHNL_ERROR_ALREADY_OPEN C h すでにオープン済みです IFHNL_ERROR_INSUFFICIENT_BUFFER C h データ領域が小さすぎで す IFHNL_ERROR_IO_PENDING C h 非同期実行中です IFHNL_ERROR_NOT_SUPPORTED C h 未サポートです IFHNL_ERROR_MEMORY_NOTALLOCATED C h メモリ確保に失敗しました IFHNL_ERROR_INVALID_PARAMETER C h 引数に誤りがあります IFHNL_ERROR_NOT_FOUND_DEVICE C000000Ah デバイスが見つかりません IFHNL_ERROR_KEEP_MAP C000000Bh すでにマップ済みです IFHNL_ERROR_NOT_FOUND_NAME C000000Ch ノード名が見つかりません マスタ側でこのエラーが発生する場合 マスタがスレーブデバイスを検出出来ない可能性があります スレーブ側の Link ウィンドサイズが 0 になっている可能性がありますので 0 以外に設定してご確認下さい デバイスのオープン時 何らかのエラーが発生しました ドライバ内部のメモリ確保に失敗したなど 不正なデバイスハンドルで呼び出しを行おうとしました OPEN 関数で返されたデバイスハンドルを使用してください IfhnlWindowOpen 実行時の場合は Window のリソースの領域が確保できていません Window の再設定を行ってください 設定されているノード名が指定されているか確認してください また Windows Vista 以降で実行されている場合 管理者として実行しているか確認してください IFHNL_ERROR_MEMORY_SIZE_OVER C000000Dh メモリサイズを超えています IFHNL_ERROR_NOT_FOUND_TERMINAL C000000Eh 接続先が見つかりません IFHNL_ERROR_NETWORK_RESPONSE C000000Fh リンクできません マスタデバイスとの接続が切れている可能性があります IFHNL_ERROR_DMA_TRANSFER C h DMA 転送中です IFHNL_ERROR_ALREADY_SET_EVENT C h すでにイベントが登録されています IFHNL_ERROR_NOT_INITIALIZE C h 初期化されていません IFHNL_ERROR_INVALID_CANNEL C h チャンネルが正しくありません IFHNL_ERROR_INVALID_CONBINATION C h DMA 転送の転送元 転送先 77

78 の組み合わせが正しくありません IFHNL_ERROR_EVENT_THREAD C h イベントスレッドを立ち上げることができません IFHNL_ERROR_EVENT_OVER_FLOW C h イベントバッファのオーバーフローが発生しました IFHNL_ERROR_NOT_FOUND_DMA_DEVICE C h DMA デバイスが見つかりま せん IFHNL_ERROR_RESPONSE_TIMEOUT C h 応答が無いままタイムア ウトしました IFHNL_ERROR_RESPONSE_CHECK_NOW C h 応答確認中です 5.6 使用例一覧 共有メモリのマッピング下記のように動作する使用例を記載します 下記はサンプルプログラム (WriteFile) の抜粋になります IfHnlSetEvent 関数の EventBuffer に十分な大きさを指定してださい C 言語 #define MAX_NAMESIZE 16 #define MAX_DATA (0x ) // 1MB - (File name size) - (file size) #define NODENAME "Optical1" int main(void) { ULONG Ret; // Return value HANDLE DeviceHandle; // Device handle BYTE * Memory; // Pointer of Memory ULONG FileSize; // Size of file CHAR FileName[MAX_NAMESIZE]; // Name of file FILE *fp; // Pointer of file int i; // Open a node name is "Optical1". DeviceHandle = IfHnlOpen(NODENAME, IFHNL_FLAG_SHARE); if (DeviceHandle == (HANDLE)-1) { printf("error: Open(ErrorCode:%lx)\n",GetLastError()); return 0; //Mapping shared memory (Top Address + 0MB,Size: 1MB) Memory = IfHnlMemoryMap(DeviceHandle, 0,1); if(memory == NULL) { printf("error: Mapping shared memory (ErrorCode:%lx)\n",GetLastError()); IfHnlClose(DeviceHandle); return 0; 78

79 //Open Transmission file sprintf(filename,"%s", "Ifhnl.bmp"); fp = fopen(filename,"r"); if(fp == NULL) { printf("error: file(%s) open \n",filename); IfHnlMemoryUnmap(DeviceHandle, Memory); IfHnlClose(DeviceHandle); return 0; //File name is put from head in 16bytes for(i = 0;i< MAX_NAMESIZE;i++){ *(Memory + i) = FileName[i]; //File Data is put behind file size in file size FileSize = fread((memory + MAX_NAMESIZE + 4), 1, MAX_DATA, fp); //File size is put behind file name in 4bytes *(ULONG *)(Memory + MAX_NAMESIZE) = FileSize; //Interrupt is put out received node. Ret = IfHnlInterruptRequest(DeviceHandle, NODENAME); if(ret!= IFHNL_ERROR_SUCCESS) { printf("error: Interrupt request (ErrorCode:%lx)\n",Ret); fclose(fp); IfHnlMemoryUnmap(DeviceHandle, Memory); IfHnlClose(DeviceHandle); return 0; //Close the file fclose(fp); //Unmapping shared memory Ret = IfHnlMemoryUnmap(DeviceHandle, Memory); if(ret!= IFHNL_ERROR_SUCCESS) { printf("error: Unmapping shared memory (ErrorCode:%lx)\n",Ret); IfHnlClose(DeviceHandle); return 0; //Close the device. Ret = IfHnlClose(DeviceHandle); if(ret!= IFHNL_ERROR_SUCCESS) { printf("error: Close the device (ErrorCode:%lx)\n",Ret); 79

80 return 0; return 1; 80

81 Visual Basic Const MAX_NAMESIZE As Long = &H10 Const MAX_DATA As Long = &H ' 1MB Const NodeName As String = "Optical1" Private Sub Command1_Click() Dim ret As Long Dim DeviceHandle As Long ' Device handle Dim MemoryPointer As Long ' Pointer of Memory Dim FileSize As Long ' Size of file Dim filename As String ' Name of file Dim i As Long Dim Memory(MAX_DATA) As Byte Dim ErrorMsg As String ' Error Message Dim FileData() As Byte ' File Data Dim intfileno As Integer Dim filenamearray() As Byte Dim temp As String ' Open a node name is "Optical1". DeviceHandle = IfHnlOpen(NodeName, IFHNL_FLAG_SHARE) If DeviceHandle = -1 Then ErrorMsg = "Error: Open(ErrorCode:" + GetLastError() + ")" MsgBox (ErrorMsg) Exit Sub 'Mapping shared memory (Top Address + 0MB,Size: 1MB) MemoryPointer = IfHnlMemoryMap(DeviceHandle, 0, 1) If MemoryPointer = 0 Then ErrorMsg = "Error: Mapping shared memory (ErrorCode:" + Hex(GetLastError()) + ")" MsgBox (ErrorMsg) IfHnlClose (DeviceHandle) Exit Sub 'File name is put from head in 16bytes filename = "Ifhnl.bmp" temp = StrConv(filename, vbfromunicode) filenamearray() = temp CopyMemory Memory(0), filenamearray(0), 9 'File Data is put behind file size in file size filename = "..\..\Ifhnl.bmp" 81

82 End Sub FileSize = FileLen(filename) CopyMemory Memory(16), FileSize, 4 'Open Transmission file i = 0 Open filename For Binary Access Read As #1 Do While Not EOF(1) Get #1,, Memory(&H i) i = i + 1 Loop Close #1 'Memory Data Copy CopyMemory ByVal MemoryPointer, Memory(0), MAX_DATA 'Interrupt is put out received node. ret = IfHnlInterruptRequest(DeviceHandle, NodeName) If ret <> IFHNL_ERROR_SUCCESS Then ErrorMsg = "Error: Interrupt request (ErrorCode:" + Hex(ret) + ")" MsgBox (ErrorMsg) IfHnlMemoryUnmap DeviceHandle, MemoryPointer IfHnlClose DeviceHandle Exit Sub 'Unmapping shared memory ret = IfHnlMemoryUnmap(DeviceHandle, MemoryPointer) If ret <> IFHNL_ERROR_SUCCESS Then ErrorMsg = "Error: Unmapping shared memory (ErrorCode:" + Hex(ret) + ")" MsgBox (ErrorMsg) IfHnlClose (DeviceHandle) Exit Sub 'Close the device. ret = IfHnlClose(DeviceHandle) If ret <> IFHNL_ERROR_SUCCESS Then ErrorMsg = "Error: Close the device (ErrorCode:" + Hex(ret) + ")" MsgBox (ErrorMsg) Exit Sub 82

83 Visual Basic.NET Const MAX_NAMESIZE As Integer = 16 Const MAX_DATA As Integer = &H ' 1MB Const NODENAME As String = "Optical1" Sub Main() Dim ret As Integer Dim DeviceHandle As IntPtr ' Device handle Dim MemoryPointer As IntPtr ' Pointer of Memory Dim FileSize As Integer ' Size of file Dim filename As String ' Name of file Dim i As Integer Dim Memory(MAX_DATA) As Byte ' Open a node name is "Optical1". DeviceHandle = IFCHNL.IfHnlOpen(NODENAME, IFCHNL.IFHNL_FLAG_SHARE) If DeviceHandle.Equals(New IntPtr(-1)) Then ret = IFCHNL.GetLastError() Console.WriteLine("Error: Open(ErrorCode:{0:x)", ret) Exit Sub ret) 'Mapping shared memory (Top Address + 0MB,Size: 1MB) MemoryPointer = IFCHNL.IfHnlMemoryMap(DeviceHandle, 0, 1) If (MemoryPointer.Equals(New IntPtr(0))) Then ret = IFCHNL.GetLastError() Console.WriteLine("Error: Mapping shared memory (ErrorCode:{0:x)", IFCHNL.IfHnlClose(DeviceHandle) Exit Sub 'Open Transmission file filename = "..\..\..\\Ifhnl.bmp" Dim fs As FileStream = New FileStream(filename, FileMode.Open, FileAccess.Read) 'File name is put from head in 16bytes Dim temp() As Byte = Encoding.ASCII.GetBytes("Ifhnl.bmp") temp.copyto(memory, 0) 'File Data is put behind file size in file size Dim Data(fs.Length) As Byte fs.read(data, 0, fs.length) 83

84 FileSize = Data.Length - 1 For i = 0 To FileSize Memory(i + MAX_NAMESIZE + 4) = Data(i) Next 'File size is put behind file name in 4bytes Memory(0 + MAX_NAMESIZE) = FileSize And &HFF Memory(1 + MAX_NAMESIZE) = (FileSize And &HFF00) / &H100 Memory(2 + MAX_NAMESIZE) = (FileSize And &HFF0000) / &H10000 Memory(3 + MAX_NAMESIZE) = (FileSize And &HFF000000) / &H 'Memory Data Copy Marshal.Copy(Memory, 0, MemoryPointer, MAX_DATA) 'Interrupt is put out received node. ret = IFCHNL.IfHnlInterruptRequest(DeviceHandle, NODENAME) If ret <> IFCHNL.IFHNL_ERROR_SUCCESS Then Console.WriteLine("Error: Interrupt request (ErrorCode:{0:x)", ret) IFCHNL.IfHnlMemoryUnmap(DeviceHandle, MemoryPointer) IFCHNL.IfHnlClose(DeviceHandle) Exit Sub 'Close the file fs.close() ret) 'Unmapping shared memory ret = IFCHNL.IfHnlMemoryUnmap(DeviceHandle, MemoryPointer) If ret <> IFCHNL.IFHNL_ERROR_SUCCESS Then Console.WriteLine("Error: Unmapping shared memory (ErrorCode:{0:x)", IFCHNL.IfHnlClose(DeviceHandle) Exit Sub End Sub 'Close the device. ret = IFCHNL.IfHnlClose(DeviceHandle) If ret <> IFCHNL.IFHNL_ERROR_SUCCESS Then Console.WriteLine("Error: Close the device (ErrorCode:{0:x)", ret) Exit Sub 84

85 Visual C# const uint MAX_NAMESIZE = 16; const uint MAX_DATA = 0x100000;// 1MB const string NODENAME = "Optical1"; static void Main(string[] args) { uint ret; // Return value IntPtr DeviceHandle; // Device handle IntPtr MemoryPointer; // Pointer of Memory uint FileSize; // Size of file string filename; // Name of file int i; byte[] Memory = new byte[max_data]; // Open a node name is "Optical1". DeviceHandle = IFCHNL.IfHnlOpen(NODENAME, IFCHNL.IFHNL_FLAG_SHARE); if (DeviceHandle.Equals(new IntPtr(-1))) { ret = IFCHNL.GetLastError(); Console.WriteLine("Error: Open(ErrorCode:{0:x)", ret); return; //Mapping shared memory (Top Address + 0MB,Size: 1MB) MemoryPointer = IFCHNL.IfHnlMemoryMap(DeviceHandle, 0, 1); if (MemoryPointer.Equals(new IntPtr(0))) { ret = IFCHNL.GetLastError(); Console.WriteLine("Error: Mapping shared memory (ErrorCode:{0:x)", ret); IFCHNL.IfHnlClose(DeviceHandle); return; //Open Transmission file filename = "Ifhnl.bmp"; FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read); //File name is put from head in 16bytes byte[] temp = Encoding.ASCII.GetBytes(filename); temp.copyto(memory, 0); //File Data is put behind file size in file size byte[] Data = new byte[fs.length]; fs.read(data,0,(int)fs.length); 85

86 FileSize = (uint)data.length; for (i = 0; i < FileSize; i++) { Memory[i + MAX_NAMESIZE + 4] = Data[i]; //File size is put behind file name in 4bytes for (i = 0; i < 4; i++) { Memory[i + MAX_NAMESIZE] = Convert.ToByte((FileSize >> (i * 8)) & 0xFF); //Memory Data Copy Marshal.Copy(Memory, 0, MemoryPointer, (int)max_data); //Interrupt is put out received node. ret = IFCHNL.IfHnlInterruptRequest(DeviceHandle, NODENAME); if (ret!= IFCHNL.IFHNL_ERROR_SUCCESS) { Console.WriteLine("Error: Interrupt request (ErrorCode:{0:x)", ret); IFCHNL.IfHnlMemoryUnmap(DeviceHandle, MemoryPointer); IFCHNL.IfHnlClose(DeviceHandle); return; //Close the file fs.close(); //Unmapping shared memory ret = IFCHNL.IfHnlMemoryUnmap(DeviceHandle, MemoryPointer); if (ret!= IFCHNL.IFHNL_ERROR_SUCCESS) { Console.WriteLine("Error: Unmapping shared memory (ErrorCode:{0:x)", ret); IFCHNL.IfHnlClose(DeviceHandle); return; //Close the device. ret = IFCHNL.IfHnlClose(DeviceHandle); if (ret!= IFCHNL.IFHNL_ERROR_SUCCESS) { Console.WriteLine("Error: Close the device (ErrorCode:{0:x)", ret); return; 86

87 5.6.2 ウィンドウのマッピング下記のように動作する使用例を記載します 下記はサンプルプログラム (ReadFile) の抜粋になります C 言語 #define MAX_NAMESIZE 16 #define MAX_DATA (0x ) // 1MB - (File name size) - (file size) #define NODENAME "Optical1" int main(void) { ULONG Ret; // Return value HANDLE DeviceHandle; // Device handle HANDLE WindowHandle; // Window handle BYTE * Memory; // Pointer of Memory ULONG Timeout = 100; // 10s Timeout // Open a node name is "Optical1". DeviceHandle = IfHnlOpen(NODENAME, IFHNL_FLAG_SHARE); if (DeviceHandle == (HANDLE)-1) { printf("error: Open(ErrorCode:%lx)\n",GetLastError()); return 0; // Exit the program. //Window open in othre party's shared memory.(top Address + 0MB,Size: 1MB) //Between master-slave WindowHandle = IfHnlWindowOpen(DeviceHandle, 1, 0, 1, NULL); if (WindowHandle == (HANDLE)-1) { printf("error: Window open(errorcode:%lx)\n",getlasterror()); IfHnlClose(DeviceHandle); return 0; //Mapping shared memory through window (Top Address + 0MB,Size: 1MB) Memory = IfHnlWindowMap(DeviceHandle, WindowHandle); if(memory == NULL) { printf("error: Mapping shared memory(errorcode:%lx)\n",getlasterror()); IfHnlWindowClose(WindowHandle); IfHnlClose(DeviceHandle); return 0; // // Memory Access // //Unmapping shared memory 87

88 Ret = IfHnlWindowUnmap(DeviceHandle, Memory); if(ret!= IFHNL_ERROR_SUCCESS) { printf("error: Unmapping shared memory(errorcode:%lx)\n",ret); IfHnlWindowClose(WindowHandle); IfHnlClose(DeviceHandle); return 0; // Close the window. Ret = IfHnlWindowClose(WindowHandle); if(ret!= IFHNL_ERROR_SUCCESS) { printf("error: Close the window(errorcode:%lx)\n",ret); IfHnlClose(DeviceHandle); return 0; // Close the device. Ret = IfHnlClose(DeviceHandle); if(ret!= IFHNL_ERROR_SUCCESS) { printf("error: Close the device(errorcode:%lx)\n",ret); return 0; return 1; 88

89 Visual Basic Private Sub Command1_Click() Dim Ret As Long Dim DeviceHandle As Long Dim MemoryPointer As Long Dim FileSize As Long Dim WindowHandle As Long Dim FileName As String Dim EvNodeName(16) As Byte Dim stnodename As String Dim message As Msg Dim i As Long ' Device handle ' Pointer of Memory ' Size of file ' Window handle ' Name of file ' NodeName ' NodeName ' Open a node name is "Optical1". DeviceHandle = IfHnlOpen(NodeName, IFHNL_FLAG_SHARE) If DeviceHandle = -1 Then ErrorMsg = "Error: Open(ErrorCode:" + Hex(GetLastError()) + ")" MsgBox (ErrorMsg) Exit Sub 'Window open in othre party's shared memory.(top Address + 0MB,Size: 1MB) 'Between master-slave WindowHandle = IfHnlWindowOpen(DeviceHandle, 1, 0, 1, 0) If WindowHandle = -1 Then ErrorMsg = "Error:Window Open(ErrorCode:" + Hex(GetLastError()) + ")" MsgBox (ErrorMsg) IfHnlClose (DeviceHandle) Exit Sub 'Mapping shared memory (Top Address + 0MB,Size: 1MB) MemoryPointer = IfHnlWindowMap(DeviceHandle, WindowHandle) If MemoryPointer = 0 Then ErrorMsg = "Error: Mapping shared memory (ErrorCode:" + Hex(GetLastError()) + ")" MsgBox (ErrorMsg) IfHnlWindowClose WindowHandle IfHnlClose (DeviceHandle) Exit Sub 'Event is set Ret = IfHnlSetEvent(DeviceHandle, 10, 0, 0, IFHNL_SYNC, Me.hwnd, WM_IFHNL) If Ret <> IFHNL_ERROR_SUCCESS Then 89

90 ErrorMsg = "Error: Event is set(errorcode:" + Hex(Ret) + ")" MsgBox (ErrorMsg) IfHnlWindowUnmap DeviceHandle, MemoryPointer IfHnlWindowClose WindowHandle IfHnlClose DeviceHandle Exit Sub i = 0 Do Ret = PeekMessage(message, Me.hwnd, WM_IFHNL, WM_IFHNL, 1) If Ret <> 0 Then Exit Do i = i + 1 If i = 100 Then ErrorMsg = "Error: Event timeout" MsgBox (ErrorMsg) IfHnlWindowUnmap DeviceHandle, MemoryPointer IfHnlWindowClose WindowHandle IfHnlClose DeviceHandle Exit Sub Sleep (100) Loop While Ret = 0 'It confirms interrupt request ahead. CopyMemory EvNodeName(0), ByVal message.wparam, 16 Ret = IfHnlFinishMessage(DeviceHandle, message.wparam) If Ret <> IFHNL_ERROR_SUCCESS Then ErrorMsg = "Error: Finish Message(ErrorCode:" + Hex(Ret) + ")" MsgBox (ErrorMsg) IfHnlWindowUnmap DeviceHandle, MemoryPointer IfHnlWindowClose WindowHandle IfHnlClose DeviceHandle Exit Sub For i = 0 To 15 stnodename = stnodename + Chr(EvNodeName(i)) If EvNodeName(i) = 0 Then Exit For Next If stnodename = NodeName Then ErrorMsg = "Error: NodeName is unmatch:" + stnodename MsgBox (ErrorMsg) 90

91 IfHnlWindowUnmap DeviceHandle, MemoryPointer IfHnlWindowClose WindowHandle IfHnlClose DeviceHandle Exit Sub 'File name is put from head in 16bytes CopyMemory Memory(0), ByVal MemoryPointer, MAX_DATA For i = 0 To 15 If Memory(i) = 0 Then Exit For FileName = FileName + Chr(Memory(i)) Next 'File Data is put behind file size in file size CopyMemory FileSize, Memory(16), 4 'Open the file Open FileName For Binary As #1 'Write the file For i = 0 To (FileSize - 1) Put #1,, Memory(20 + i) Next 'Close the file Close #1 ErrorMsg = "File(" + FileName + ") output completed." MsgBox (ErrorMsg) 'Event is kill Ret = IfHnlKillEvent(DeviceHandle) If Ret <> IFHNL_ERROR_SUCCESS Then ErrorMsg = "Error: Event is kill(errorcode:" + Hex(Ret) + ")" MsgBox (ErrorMsg) IfHnlWindowUnmap DeviceHandle, MemoryPointer IfHnlWindowClose WindowHandle IfHnlClose DeviceHandle Exit Sub 'Unmapping shared memory Ret = IfHnlWindowUnmap(DeviceHandle, MemoryPointer) If Ret <> IFHNL_ERROR_SUCCESS Then ErrorMsg = "Error: Unmapping shared memory(errorcode:" + Hex(Ret) + ")" MsgBox (ErrorMsg) IfHnlWindowClose (WindowHandle) 91

92 End Sub IfHnlClose (DeviceHandle) Exit Sub ' Close the window. Ret = IfHnlWindowClose(WindowHandle) If Ret <> IFHNL_ERROR_SUCCESS Then ErrorMsg = "Error: Close the window(errorcode:" + Hex(Ret) + ")" MsgBox (ErrorMsg) IfHnlClose (DeviceHandle) Exit Sub 'Close the device. Ret = IfHnlClose(DeviceHandle) If Ret <> IFHNL_ERROR_SUCCESS Then ErrorMsg = "Error: Close the device (ErrorCode:" + Hex(Ret) + ")" MsgBox (ErrorMsg) Exit Sub 92

93 Visual Basic.NET Sub Main() Dim ret As Integer Dim DeviceHandle As IntPtr Dim WindowHandle As IntPtr Dim MemoryPointer As IntPtr ' Device handle ' Window handle ' Pointer of Memory ' Open a node name is "Optical1". DeviceHandle = IFCHNL.IfHnlOpen(NODENAME, IFCHNL.IFHNL_FLAG_SHARE) If DeviceHandle.Equals(New IntPtr(-1)) Then ret = IFCHNL.GetLastError() Console.WriteLine("Error: Open(ErrorCode:{0:x)", ret) Exit Sub 'Window open in othre party's shared memory.(top Address + 0MB,Size: 1MB) 'Between master-slave WindowHandle = IFCHNL.IfHnlWindowOpen(DeviceHandle, 1, 0, 1, IntPtr.Zero) If (WindowHandle.Equals(New IntPtr(-1))) Then ret = IFCHNL.GetLastError() Console.WriteLine("Error: Window open(errorcode:{0:x)", ret) IFCHNL.IfHnlClose(DeviceHandle) Exit Sub 'Mapping shared memory (Top Address + 0MB,Size: 1MB) MemoryPointer = IFCHNL.IfHnlWindowMap(DeviceHandle, WindowHandle) If (MemoryPointer.Equals(New IntPtr(0))) Then ret = IFCHNL.GetLastError() Console.WriteLine("Error: Mapping shared memory (ErrorCode:{0:x)", ret) IFCHNL.IfHnlWindowClose(WindowHandle) IFCHNL.IfHnlClose(DeviceHandle) Exit Sub 'Event is set Dim proc As IFCHNL.PIFHNLCALLBACK = New IFCHNL.PIFHNLCALLBACK(AddressOf EventProc) ret = IFCHNL.IfHnlSetEvent(DeviceHandle, 10, proc, MemoryPointer, IFCHNL.IFHNL_SYNC, IntPtr.Zero, 0) If ret <> IFCHNL.IFHNL_ERROR_SUCCESS Then Console.WriteLine("Error: Event is set(errorcode:{0:x)", ret) IFCHNL.IfHnlWindowUnmap(DeviceHandle, MemoryPointer) IFCHNL.IfHnlWindowClose(WindowHandle) IFCHNL.IfHnlClose(DeviceHandle) Exit Sub 93

94 'Wait Event Dim Timeout As Integer = 100 ' 10s Timeout Do While True If EventFlag Then Exit Do System.Threading.Thread.Sleep(100) Timeout = Timeout - 1 If Timeout = 0 Then Exit Do Loop 'Event is kill ret = IFCHNL.IfHnlKillEvent(DeviceHandle) If ret <> IFCHNL.IFHNL_ERROR_SUCCESS Then Console.WriteLine("Error: Event is kill(errorcode:{0:x)", ret) IFCHNL.IfHnlWindowUnmap(DeviceHandle, MemoryPointer) IFCHNL.IfHnlWindowClose(WindowHandle) IFCHNL.IfHnlClose(DeviceHandle) Exit Sub 'Unmapping shared memory ret = IFCHNL.IfHnlWindowUnmap(DeviceHandle, MemoryPointer) If ret <> IFCHNL.IFHNL_ERROR_SUCCESS Then Console.WriteLine("Error: Unmapping shared memory(errorcode:{0:x)", ret) IFCHNL.IfHnlWindowClose(WindowHandle) IFCHNL.IfHnlClose(DeviceHandle) Exit Sub ' Close the window. ret = IFCHNL.IfHnlWindowClose(WindowHandle) If ret <> IFCHNL.IFHNL_ERROR_SUCCESS Then Console.WriteLine("Error: Close the window(errorcode:{0:x)", ret) IFCHNL.IfHnlClose(DeviceHandle) Exit Sub 'Close the device. ret = IFCHNL.IfHnlClose(DeviceHandle) If ret <> IFCHNL.IFHNL_ERROR_SUCCESS Then Console.WriteLine("Error: Close the device (ErrorCode:{0:x)", ret) Exit Sub 94

95 End Sub 95

96 Visual C# static void Main(string[] args) { uint ret; // Return value IntPtr DeviceHandle; // Device handle IntPtr WindowHandle; // Window handle IntPtr MemoryPointer; // Pointer of Memory // Open a node name is "Optical1". DeviceHandle = IFCHNL.IfHnlOpen(NODENAME, IFCHNL.IFHNL_FLAG_SHARE); if (DeviceHandle.Equals(new IntPtr(-1))) { ret = IFCHNL.GetLastError(); Console.WriteLine("Error: Open(ErrorCode:{0:x)", ret); return; //Window open in othre party's shared memory.(top Address + 0MB,Size: 1MB) //Between master-slave WindowHandle = IFCHNL.IfHnlWindowOpen(DeviceHandle, 1, 0, 1, IntPtr.Zero); if (WindowHandle.Equals(new IntPtr(-1))) { ret = IFCHNL.GetLastError(); Console.WriteLine("Error: Window open(errorcode:{0:x)",ret); IFCHNL.IfHnlClose(DeviceHandle); return; //Mapping shared memory (Top Address + 0MB,Size: 1MB) MemoryPointer = IFCHNL.IfHnlWindowMap(DeviceHandle, WindowHandle); if (MemoryPointer.Equals(new IntPtr(0))) { ret = IFCHNL.GetLastError(); Console.WriteLine("Error: Mapping shared memory (ErrorCode:{0:x)", ret); IFCHNL.IfHnlWindowClose(WindowHandle); IFCHNL.IfHnlClose(DeviceHandle); return; //Event is set IFCHNL.PIFHNLCALLBACK proc = new IFCHNL.PIFHNLCALLBACK(EventProc); ret = IFCHNL.IfHnlSetEvent(DeviceHandle, 10, proc, MemoryPointer, IFCHNL.IFHNL_SYNC, IntPtr.Zero, 0); if(ret!= IFCHNL.IFHNL_ERROR_SUCCESS) { 96

97 Console.WriteLine("Error: Event is set(errorcode:{0:x)",ret); IFCHNL.IfHnlWindowUnmap(DeviceHandle, MemoryPointer); IFCHNL.IfHnlWindowClose(WindowHandle); IFCHNL.IfHnlClose(DeviceHandle); return; //Wait Event uint Timeout = 100; // 10s Timeout while(true) { if(eventflag) break; System.Threading.Thread.Sleep(100); Timeout--; if(timeout == 0) break; //Event is kill ret = IFCHNL.IfHnlKillEvent(DeviceHandle); if(ret!= IFCHNL.IFHNL_ERROR_SUCCESS) { Console.WriteLine("Error: Event is kill(errorcode:{0:x)",ret); IFCHNL.IfHnlWindowUnmap(DeviceHandle, MemoryPointer); IFCHNL.IfHnlWindowClose(WindowHandle); IFCHNL.IfHnlClose(DeviceHandle); return; //Unmapping shared memory ret = IFCHNL.IfHnlWindowUnmap(DeviceHandle, MemoryPointer); if(ret!= IFCHNL.IFHNL_ERROR_SUCCESS) { Console.WriteLine("Error: Unmapping shared memory(errorcode:{0:x)",ret); IFCHNL.IfHnlWindowClose(WindowHandle); IFCHNL.IfHnlClose(DeviceHandle); return; // Close the window. ret = IFCHNL.IfHnlWindowClose(WindowHandle); if(ret!= IFCHNL.IFHNL_ERROR_SUCCESS) { Console.WriteLine("Error: Close the window(errorcode:{0:x)",ret); IFCHNL.IfHnlClose(DeviceHandle); return; 97

98 //Close the device. ret = IFCHNL.IfHnlClose(DeviceHandle); if (ret!= IFCHNL.IFHNL_ERROR_SUCCESS) { Console.WriteLine("Error: Close the device (ErrorCode:{0:x)", ret); return; 98

99 5.6.3 DMA 転送下記のように動作する使用例を記載します 下記はサンプルプログラム (DMATransfer) の抜粋になります C 言語 int main(void) { ULONG Ret; // Return value HANDLE DeviceHandle; // Device handle HANDLE WindowHandle; // Window handle IFHNL_DMA_PARAMS Source; // DMA Source data IFHNL_DMA_PARAMS Dest; // DMA Dest data ULONG Timeout = 10; // 1s Timeout HANDLE DmaEventHandle; // DMA event hanele CHAR TxDMABuffer[DMADATA_SIZE]; //Tx DMA Buffer CHAR RxDMABuffer[DMADATA_SIZE]; //Rx DMA Buffer // Open a node name is "Optical1". DeviceHandle = IfHnlOpen(NODENAME, IFHNL_FLAG_SHARE); if (DeviceHandle == (HANDLE)-1) { printf("error: Open(ErrorCode:%lx)\n",GetLastError()); return 0; // Exit the program. // DMA Maxinum Transfer Size is setting. Ret = IfHnlDmaSet(DeviceHandle, IFHNL_DMA_TRANSFER_SIZE, IFHNL_DMA_SIZE_64); if(ret!= IFHNL_ERROR_SUCCESS){ printf("error: DMA Set (ErrorCode:%lx)\n",Ret); IfHnlClose(DeviceHandle); return 0; //Window open in othre party's shared memory.(top Address + 0MB,Size: 1MB) //Between master-slave WindowHandle = IfHnlWindowOpen(DeviceHandle, 1, 0, 1, NULL); if (WindowHandle == (HANDLE)-1) { printf("error: Window open(errorcode:%lx)\n",getlasterror()); IfHnlClose(DeviceHandle); return 0; printf("please input comment that Transmittion DMA(Max:%ld byte):\n",dmadata_size); scanf("%s",txdmabuffer); 99

100 // DMA Transfer of asynchronization (userbuffer -> shared memory) //Create Event DmaEventHandle = CreateEvent(NULL, TRUE, FALSE, NULL); //DMA Source Data(userbuffer) is set Source.Num = IFHNL_USERBUFFER; Source.Buffer = TxDMABuffer; Source.StartAddr = 0; //Unused Source.Handle = NULL; //Unused //DMA Dest Data(shared memory) is set Dest.Num = IFHNL_MEMORY; Dest.StartAddr = 0; Dest.Handle = NULL; //Unused Dest.Buffer = NULL; //Unused //DMA Transfer Ret = IfHnlDmaTransfer(DeviceHandle, 1, DMADATA_SIZE, &Source, &Dest, DmaEventHandle); if(ret == IFHNL_ERROR_IO_PENDING){ // Waiting by event Ret = WaitForSingleObject(DmaEventHandle, 1000); if(ret!= WAIT_OBJECT_0){ //DMA Transfer Stop Ret = IfHnlDmaStop(DeviceHandle, 1); if(ret!= IFHNL_ERROR_SUCCESS){ printf("error: DMA Stop(ErrorCode:%lx)\n",Ret); CloseHandle(DmaEventHandle); IfHnlWindowClose(WindowHandle); IfHnlClose(DeviceHandle); return 0; else if(ret!= IFHNL_ERROR_SUCCESS){ printf("error: DMA Transfer(ErrorCode:%lx)\n",Ret); CloseHandle(DmaEventHandle); IfHnlWindowClose(WindowHandle); IfHnlClose(DeviceHandle); return 0; //Close Event Handle CloseHandle(DmaEventHandle); printf("dma Transfer (shared memory -> userbuffer) completed.\n"); // Close the window. 100

101 Ret = IfHnlWindowClose(WindowHandle); if(ret!= IFHNL_ERROR_SUCCESS) { printf("error: Close the window(errorcode:%lx)\n",ret); IfHnlClose(DeviceHandle); return 0; // Close the device. Ret = IfHnlClose(DeviceHandle); if(ret!= IFHNL_ERROR_SUCCESS) { printf("error: Close the device(errorcode:%lx)\n",ret); return 0; return 1; 101

102 Visual Basic Private Sub Command1_Click() Dim Ret As Long Dim DeviceHandle As Long ' Device handle Dim WindowHandle As Long ' Window handle Dim Source As IFHNL_DMA_PARAMS ' DMA Source data Dim dest As IFHNL_DMA_PARAMS ' DMA Dest data Dim Timeout As Long ' 1s Timeout Dim DmaEventHandle As Long ' DMA event hanele 'Dim TxDMABuffer(DMADATA_SIZE) As Byte ' Tx DMA Buffer Dim RxDMABuffer(DMADATA_SIZE) As Byte ' Rx DMA Buffer Dim comment As String Dim Temp() As Byte ' Tx DMA Buffer Dim TxBufferPointer As Long ' Tx DMA Buffer Pointer Dim RxBufferPointer As Long ' Rx DMA Buffer Pointer Dim hep As Long hep = GetProcessHeap() TxBufferPointer = HeapAlloc(hep, 1, DMADATA_SIZE) RxBufferPointer = HeapAlloc(hep, 1, DMADATA_SIZE) ' Open a node name is "Optical1". DeviceHandle = IfHnlOpen(NodeName, IFHNL_FLAG_SHARE) If DeviceHandle = -1 Then ErrorMsg = "Error: Open(ErrorCode:" + Hex(GetLastError()) + ")" MsgBox (ErrorMsg) HeapFree hep, 1, TxBufferPointer HeapFree hep, 1, RxBufferPointer Exit Sub 'Window open in othre party's shared memory.(top Address + 0MB,Size: 1MB) 'Between master-slave WindowHandle = IfHnlWindowOpen(DeviceHandle, 1, 0, 1, 0) If WindowHandle = -1 Then ErrorMsg = "Error:Window Open(ErrorCode:" + Hex(GetLastError()) + ")" MsgBox (ErrorMsg) HeapFree hep, 1, TxBufferPointer HeapFree hep, 1, RxBufferPointer Exit Sub comment = StrConv(TransferData.Text, vbfromunicode) + Chr(0) Temp() = comment 'CopyMemory TxDMABuffer(0), Temp(0), Len(TransferData.Text) ' DMA Transfer of asynchronization (userbuffer -> shared memory) 'Create Event 102

103 DmaEventHandle = CreateEvent(0, 1, 0, 0) 'DMA Source Data(userbuffer) is set CopyMemory ByVal TxBufferPointer, Temp(0), Len(TransferData.Text) 'CopyMemory ByVal TxBufferPointer, TxDMABuffer(0), DMADATA_SIZE Source.Num = IFHNL_USERBUFFER Source.Buffer = TxBufferPointer Source.StartAddr = 0 'Unused Source.Handle = 0 'Unused 'DMA Dest Data(shared memory) is set dest.num = IFHNL_MEMORY dest.startaddr = 0 dest.handle = 0 'Unused dest.buffer = 0 'Unused 'DMA Transfer Ret = IfHnlDmaTransfer(DeviceHandle, 1, DMADATA_SIZE, Source, dest, DmaEventHandle) If (Ret = IFHNL_ERROR_IO_PENDING) Then ' Waiting by event Ret = WaitForSingleObject(DmaEventHandle, 1000) If (Ret <> WAIT_OBJECT_0) Then 'DMA Transfer Stop Ret = IfHnlDmaStop(DeviceHandle, 1) If (Ret <> IFHNL_ERROR_SUCCESS) Then ErrorMsg = "Error: DMA Stop(ErrorCode:" + Hex(Ret) + ")" MsgBox (ErrorMsg) CloseHandle (DmaEventHandle) IfHnlWindowClose (WindowHandle) IfHnlClose (DeviceHandle) HeapFree hep, 1, TxBufferPointer HeapFree hep, 1, RxBufferPointer Exit Sub ElseIf (Ret <> IFHNL_ERROR_SUCCESS) Then ErrorMsg = "Error: DMA Transfer(ErrorCode:" + Hex(Ret) + ")" MsgBox (ErrorMsg) CloseHandle (DmaEventHandle) IfHnlWindowClose (WindowHandle) IfHnlClose (DeviceHandle) HeapFree hep, 1, TxBufferPointer HeapFree hep, 1, RxBufferPointer Exit Sub 'Close Event Handle 103

104 CloseHandle (DmaEventHandle) Log.Text = Log.Text + "DMA Transfer (userbuffer -> shared memory) completed." + vbcrlf End Sub ' Memory Free HeapFree hep, 1, TxBufferPointer HeapFree hep, 1, RxBufferPointer ' Close the window. Ret = IfHnlWindowClose(WindowHandle) If Ret <> IFHNL_ERROR_SUCCESS Then ErrorMsg = "Error: Close the window(errorcode:" + Hex(Ret) + ")" MsgBox (ErrorMsg) IfHnlClose (DeviceHandle) Exit Sub 'Close the device. Ret = IfHnlClose(DeviceHandle) If Ret <> IFHNL_ERROR_SUCCESS Then ErrorMsg = "Error: Close the device (ErrorCode:" + Hex(Ret) + ")" MsgBox (ErrorMsg) Exit Sub 104

105 Visual Basic.NET Sub Main() Dim Ret As Integer Dim DeviceHandle As IntPtr ' Device handle Dim WindowHandle As IntPtr ' Window handle Dim Timeout As Integer = 10 ' 1s Timeout Dim DmaEventHandle As IntPtr ' DMA event hanele Dim TxDMABuffer(DMADATA_SIZE) As Byte ' Tx DMA Buffer Dim RxDMABuffer(DMADATA_SIZE) As Byte ' Rx DMA Buffer ParameterAlloc() ' Open a node name is "Optical1". DeviceHandle = IFCHNL.IfHnlOpen(NODENAME, IFCHNL.IFHNL_FLAG_SHARE) If DeviceHandle.Equals(New IntPtr(-1)) Then Ret = IFCHNL.GetLastError() Console.WriteLine("Error: Open(ErrorCode:{0:x)", Ret) ParameterFree() Exit Sub 'Window open in othre party's shared memory.(top Address + 0MB,Size: 1MB) 'Between master-slave WindowHandle = IFCHNL.IfHnlWindowOpen(DeviceHandle, 1, 0, 1, IntPtr.Zero) If (WindowHandle.Equals(New IntPtr(-1))) Then Console.WriteLine("Error: Window open(errorcode:{0:x)", IFCHNL.GetLastError()) IFCHNL.IfHnlClose(DeviceHandle) ParameterFree() Exit Sub Console.WriteLine("Please input comment that Transmittion DMA(Max:{0 byte):", DMADATA_SIZE) Dim comment As String = Console.ReadLine() Dim commentbyte() As Byte = Encoding.ASCII.GetBytes(comment) commentbyte.copyto(txdmabuffer, 0) ' DMA Transfer of asynchronization (userbuffer -> shared memory) 'Create Event DmaEventHandle = IFCHNL.CreateEvent(IntPtr.Zero, 1, 0, IntPtr.Zero) 'DMA Source Data(userbuffer) is set Marshal.Copy(TxDMABuffer, 0, TxBufferPointer, TxDMABuffer.Length) Source.Num = IFCHNL.IFHNL_USERBUFFER Source.Buffer = TxBufferPointer 105

106 Source.StartAddr = IntPtr.Zero 'Unused Source.Handle = IntPtr.Zero 'Unused 'DMA Dest Data(shared memory) is set Dest.Num = IFCHNL.IFHNL_MEMORY Dest.StartAddr = New IntPtr(0) Dest.Handle = IntPtr.Zero 'Unused Dest.Buffer = IntPtr.Zero 'Unused 'DMA Transfer Ret = IFCHNL.IfHnlDmaTransfer(DeviceHandle, 1, DMADATA_SIZE, Source, Dest, DmaEventHandle) If (Ret = IFCHNL.IFHNL_ERROR_IO_PENDING) Then ' Waiting by event Ret = IFCHNL.WaitForSingleObject(DmaEventHandle, 1000) If (Ret <> IFCHNL.WAIT_OBJECT_0) Then 'DMA Transfer Stop Ret = IFCHNL.IfHnlDmaStop(DeviceHandle, 1) If (Ret <> IFCHNL.IFHNL_ERROR_SUCCESS) Then Console.WriteLine("Error: DMA Stop(ErrorCode:{0:x)", Ret) IFCHNL.CloseHandle(DmaEventHandle) IFCHNL.IfHnlWindowClose(WindowHandle) IFCHNL.IfHnlClose(DeviceHandle) ParameterFree() Exit Sub ElseIf (Ret <> IFCHNL.IFHNL_ERROR_SUCCESS) Then Console.WriteLine("Error: DMA Transfer(ErrorCode:{0:x)", Ret) IFCHNL.CloseHandle(DmaEventHandle) IFCHNL.IfHnlWindowClose(WindowHandle) IFCHNL.IfHnlClose(DeviceHandle) ParameterFree() Exit Sub 'Close Event Handle IFCHNL.CloseHandle(DmaEventHandle) Console.WriteLine("DMA Transfer (userbuffer -> shared memory) completed.") ParameterFree() ' Close the window. Ret = IFCHNL.IfHnlWindowClose(WindowHandle) If Ret <> IFCHNL.IFHNL_ERROR_SUCCESS Then 106

107 Console.WriteLine("Error: Close the window(errorcode:{0:x)", Ret) IFCHNL.IfHnlClose(DeviceHandle) Exit Sub 'Close the device. Ret = IFCHNL.IfHnlClose(DeviceHandle) If Ret <> IFCHNL.IFHNL_ERROR_SUCCESS Then Console.WriteLine("Error: Close the device (ErrorCode:{0:x)", Ret) Exit Sub End Sub 107

108 Visual C# static void Main(string[] args) { uint Ret; // Return value IntPtr DeviceHandle; // Device handle IntPtr WindowHandle; // Window handle uint Timeout = 10; // 1s Timeout IntPtr DmaEventHandle; // DMA event hanele byte[] TxDMABuffer = new byte[dmadata_size]; byte[] RxDMABuffer = new byte[dmadata_size]; //Tx DMA Buffer //Rx DMA Buffer ParameterAlloc(); // Open a node name is "Optical1". DeviceHandle = IFCHNL.IfHnlOpen(NODENAME, IFCHNL.IFHNL_FLAG_SHARE); if (DeviceHandle.Equals(new IntPtr(-1))) { Console.WriteLine("Error: Open(ErrorCode:{0:x)",IFCHNL.GetLastError()); ParameterFree(); return; // Exit the program. //Window open in othre party's shared memory.(top Address + 0MB,Size: 1MB) //Between master-slave WindowHandle = IFCHNL.IfHnlWindowOpen(DeviceHandle, 1, 0, 1, IntPtr.Zero); if (WindowHandle.Equals(new IntPtr(-1))) { Console.WriteLine("Error: Window open(errorcode:{0:x)",ifchnl.getlasterror()); IFCHNL.IfHnlClose(DeviceHandle); ParameterFree(); return; Console.WriteLine("Please input comment that Transmittion DMA(Max:{0 byte):",dmadata_size); string comment = Console.ReadLine() + "\0"; byte[] commentbyte = System.Text.Encoding.ASCII.GetBytes(comment); commentbyte.copyto(txdmabuffer, 0); // DMA Transfer of asynchronization (userbuffer -> shared memory) //Create Event DmaEventHandle = IFCHNL.CreateEvent(IntPtr.Zero, 1, 0, IntPtr.Zero); //DMA Source Data(userbuffer) is set Marshal.Copy(TxDMABuffer, 0, TxBufferPointer, (int)txdmabuffer.length); Source.Num = IFCHNL.IFHNL_USERBUFFER; 108

109 Source.Buffer = TxBufferPointer; Source.StartAddr = IntPtr.Zero; //Unused Source.Handle = IntPtr.Zero; //Unused //DMA Dest Data(shared memory) is set Dest.Num = IFCHNL.IFHNL_MEMORY; Dest.StartAddr = new IntPtr(0); Dest.Handle = IntPtr.Zero; //Unused Dest.Buffer = IntPtr.Zero; //Unused //DMA Transfer Ret = IFCHNL.IfHnlDmaTransfer(DeviceHandle, 1, DMADATA_SIZE, ref Source, ref Dest, DmaEventHandle); if(ret == IFCHNL.IFHNL_ERROR_IO_PENDING) { // Waiting by event Ret = IFCHNL.WaitForSingleObject(DmaEventHandle, 1000); if(ret!= IFCHNL.WAIT_OBJECT_0) { //DMA Transfer Stop Ret = IFCHNL.IfHnlDmaStop(DeviceHandle, 1); if(ret!= IFCHNL.IFHNL_ERROR_SUCCESS) { Console.WriteLine("Error: DMA Stop(ErrorCode:{0:x)",Ret); IFCHNL.CloseHandle(DmaEventHandle); IFCHNL.IfHnlWindowClose(WindowHandle); IFCHNL.IfHnlClose(DeviceHandle); ParameterFree(); return; else if(ret!= IFCHNL.IFHNL_ERROR_SUCCESS) { Console.WriteLine("Error: DMA Transfer(ErrorCode:{0:x)",Ret); IFCHNL.CloseHandle(DmaEventHandle); IFCHNL.IfHnlWindowClose(WindowHandle); IFCHNL.IfHnlClose(DeviceHandle); ParameterFree(); return; //Close Event Handle IFCHNL.CloseHandle(DmaEventHandle); Console.WriteLine("DMA Transfer (userbuffer -> shared memory) completed."); 109

110 //parameter is Free ParameterFree(); // Close the window. Ret = IFCHNL.IfHnlWindowClose(WindowHandle); if(ret!= IFCHNL.IFHNL_ERROR_SUCCESS) { Console.WriteLine("Error: Close the window(errorcode:{0:x)",ret); IFCHNL.IfHnlClose(DeviceHandle); return; // Close the device. Ret = IFCHNL.IfHnlClose(DeviceHandle); if(ret!= IFCHNL.IFHNL_ERROR_SUCCESS) { Console.WriteLine("Error: Close the device(errorcode:{0:x)",ret); return; return; 110

111 5.6.4 割り込み要求使用例を記載します 下記はサンプルプログラム (WriteFile) の抜粋になります C 言語 int main(void) { ULONG Ret; // Return value HANDLE DeviceHandle; // Device handle BYTE * Memory; // Pointer of Memory ULONG FileSize; // Size of file CHAR FileName[MAX_NAMESIZE]; // Name of file FILE *fp; // Pointer of file int i; // Open a node name is "Optical1". DeviceHandle = IfHnlOpen(NODENAME, IFHNL_FLAG_SHARE); if (DeviceHandle == (HANDLE)-1) { printf("error: Open(ErrorCode:%lx)\n",GetLastError()); return 0; //Interrupt is put out received node. Ret = IfHnlInterruptRequest(DeviceHandle, NODENAME); if(ret!= IFHNL_ERROR_SUCCESS) { printf("error: Interrupt request (ErrorCode:%lx)\n",Ret); fclose(fp); IfHnlMemoryUnmap(DeviceHandle, Memory); IfHnlClose(DeviceHandle); return 0; //Close the device. Ret = IfHnlClose(DeviceHandle); if(ret!= IFHNL_ERROR_SUCCESS) { printf("error: Close the device (ErrorCode:%lx)\n",Ret); return 0; return 1; 111

112 Visual Basic Private Sub Command1_Click() Dim ret As Long Dim DeviceHandle As Long ' Device handle Dim MemoryPointer As Long ' Pointer of Memory Dim FileSize As Long ' Size of file Dim filename As String ' Name of file Dim i As Long Dim Memory(MAX_DATA) As Byte Dim ErrorMsg As String ' Error Message Dim FileData() As Byte ' File Data Dim intfileno As Integer Dim filenamearray() As Byte Dim temp As String End Sub ' Open a node name is "Optical1". DeviceHandle = IfHnlOpen(NodeName, IFHNL_FLAG_SHARE) If DeviceHandle = -1 Then ErrorMsg = "Error: Open(ErrorCode:" + GetLastError() + ")" MsgBox (ErrorMsg) Exit Sub 'Interrupt is put out received node. ret = IfHnlInterruptRequest(DeviceHandle, NodeName) If ret <> IFHNL_ERROR_SUCCESS Then ErrorMsg = "Error: Interrupt request (ErrorCode:" + Hex(ret) + ")" MsgBox (ErrorMsg) IfHnlMemoryUnmap DeviceHandle, MemoryPointer IfHnlClose DeviceHandle Exit Sub 'Close the device. ret = IfHnlClose(DeviceHandle) If ret <> IFHNL_ERROR_SUCCESS Then ErrorMsg = "Error: Close the device (ErrorCode:" + Hex(ret) + ")" MsgBox (ErrorMsg) Exit Sub 112

113 Visual Basic.NET Sub Main() Dim ret As Integer Dim DeviceHandle As IntPtr ' Device handle Dim MemoryPointer As IntPtr ' Pointer of Memory Dim FileSize As Integer ' Size of file Dim filename As String ' Name of file Dim i As Integer Dim Memory(MAX_DATA) As Byte End Sub ' Open a node name is "Optical1". DeviceHandle = IFCHNL.IfHnlOpen(NODENAME, IFCHNL.IFHNL_FLAG_SHARE) If DeviceHandle.Equals(New IntPtr(-1)) Then ret = IFCHNL.GetLastError() Console.WriteLine("Error: Open(ErrorCode:{0:x)", ret) Exit Sub 'Interrupt is put out received node. ret = IFCHNL.IfHnlInterruptRequest(DeviceHandle, NODENAME) If ret <> IFCHNL.IFHNL_ERROR_SUCCESS Then Console.WriteLine("Error: Interrupt request (ErrorCode:{0:x)", ret) IFCHNL.IfHnlMemoryUnmap(DeviceHandle, MemoryPointer) IFCHNL.IfHnlClose(DeviceHandle) Exit Sub 'Close the device. ret = IFCHNL.IfHnlClose(DeviceHandle) If ret <> IFCHNL.IFHNL_ERROR_SUCCESS Then Console.WriteLine("Error: Close the device (ErrorCode:{0:x)", ret) Exit Sub 113

114 Visual C# static void Main(string[] args) { uint ret; // Return value IntPtr DeviceHandle; // Device handle IntPtr MemoryPointer; // Pointer of Memory uint FileSize; // Size of file string filename; // Name of file int i; byte[] Memory = new byte[max_data]; // Open a node name is "Optical1". DeviceHandle = IFCHNL.IfHnlOpen(NODENAME, IFCHNL.IFHNL_FLAG_SHARE); if (DeviceHandle.Equals(new IntPtr(-1))) { ret = IFCHNL.GetLastError(); Console.WriteLine("Error: Open(ErrorCode:{0:x)", ret); return; //Interrupt is put out received node. ret = IFCHNL.IfHnlInterruptRequest(DeviceHandle, NODENAME); if (ret!= IFCHNL.IFHNL_ERROR_SUCCESS) { Console.WriteLine("Error: Interrupt request (ErrorCode:{0:x)", ret); IFCHNL.IfHnlMemoryUnmap(DeviceHandle, MemoryPointer); IFCHNL.IfHnlClose(DeviceHandle); return; //Close the device. ret = IFCHNL.IfHnlClose(DeviceHandle); if (ret!= IFCHNL.IFHNL_ERROR_SUCCESS) { Console.WriteLine("Error: Close the device (ErrorCode:{0:x)", ret); return; 114

115 5.6.5 イベント ( コールバック ) 使用例を記載します 下記はサンプルプログラム (ReadFile) の抜粋になります C 言語 void CALLBACK EventProc(HANDLE DeviceHandle, PVOID UserData, CHAR * NodeName) { CHAR FileName[MAX_NAMESIZE]; // Name of file BYTE * Memory = (BYTE *)UserData; // Pointer of Memory ULONG FileSize; // Size of file FILE *fp; // Pointer of file //It confirms interrupt request ahead. if(strcmp(nodename,nodename)){ return; //File name is get memcpy(filename, Memory, MAX_NAMESIZE); FileSize = *(ULONG *)(Memory + MAX_NAMESIZE); //Open the file fp = fopen(filename,"w"); if(fp == NULL) { printf("error: file(%s) open\n",filename); return; //Write the file fwrite((memory + MAX_NAMESIZE + 4), 1, FileSize, fp); //Close the file fclose(fp); printf("file(%s) output completed.\n",filename); EventFlag = TRUE; int main(void) { ULONG Ret; // Return value HANDLE DeviceHandle; // Device handle HANDLE WindowHandle; // Window handle BYTE * Memory; // Pointer of Memory ULONG Timeout = 100; // 10s Timeout 115

116 // Open a node name is "Optical1". DeviceHandle = IfHnlOpen(NODENAME, IFHNL_FLAG_SHARE); if (DeviceHandle == (HANDLE)-1) { printf("error: Open(ErrorCode:%lx)\n",GetLastError()); return 0; // Exit the program. //Window open in othre party's shared memory.(top Address + 0MB,Size: 1MB) //Between master-slave WindowHandle = IfHnlWindowOpen(DeviceHandle, 1, 0, 1, NULL); if (WindowHandle == (HANDLE)-1) { printf("error: Window open(errorcode:%lx)\n",getlasterror()); IfHnlClose(DeviceHandle); return 0; //Mapping shared memory through window (Top Address + 0MB,Size: 1MB) Memory = IfHnlWindowMap(DeviceHandle, WindowHandle); if(memory == NULL) { printf("error: Mapping shared memory(errorcode:%lx)\n",getlasterror()); IfHnlWindowClose(WindowHandle); IfHnlClose(DeviceHandle); return 0; //Event is set Ret = IfHnlSetEvent(DeviceHandle, 10,EventProc, Memory, IFHNL_SYNC, NULL, WM_NULL); if(ret!= IFHNL_ERROR_SUCCESS) { printf("error: Event is set(errorcode:%lx)\n",ret); IfHnlMemoryUnmap(DeviceHandle, Memory); IfHnlWindowClose(WindowHandle); IfHnlClose(DeviceHandle); return 0; //Wait Event while(1) { if(eventflag) break; Sleep(100); Timeout--; if(timeout == 0) break; 116

117 //Event is kill Ret = IfHnlKillEvent(DeviceHandle); if(ret!= IFHNL_ERROR_SUCCESS) { printf("error: Event is kill(errorcode:%lx)\n",ret); IfHnlWindowUnmap(DeviceHandle, Memory); IfHnlWindowClose(WindowHandle); IfHnlClose(DeviceHandle); return 0; //Unmapping shared memory Ret = IfHnlWindowUnmap(DeviceHandle, Memory); if(ret!= IFHNL_ERROR_SUCCESS) { printf("error: Unmapping shared memory(errorcode:%lx)\n",ret); IfHnlWindowClose(WindowHandle); IfHnlClose(DeviceHandle); return 0; // Close the window. Ret = IfHnlWindowClose(WindowHandle); if(ret!= IFHNL_ERROR_SUCCESS) { printf("error: Close the window(errorcode:%lx)\n",ret); IfHnlClose(DeviceHandle); return 0; // Close the device. Ret = IfHnlClose(DeviceHandle); if(ret!= IFHNL_ERROR_SUCCESS) { printf("error: Close the device(errorcode:%lx)\n",ret); return 0; return 1; 117

118 Visual Basic.NET Dim EventFlag As Boolean = False Public Sub EventProc(ByVal DeviceHandle As IntPtr, ByVal UserData As IntPtr, ByVal NodeName As String) Dim bfilename(max_namesize) As Byte ' Name of file Dim stfilename As String ' Name of file Dim MemoryPointer As IntPtr = UserData ' Pointer of Memory Dim FileSize As Integer ' Size of file 'It confirms interrupt request ahead. If NodeName.CompareTo(NODENAME) <> 0 Then Exit Sub 'File name is get Marshal.Copy(MemoryPointer, bfilename, 0, MAX_NAMESIZE) 'File size is get Dim Sizebyte(4) As Byte Dim addr As Long = MemoryPointer.ToInt64() + MAX_NAMESIZE Marshal.Copy(New IntPtr(addr), Sizebyte, 0, 4) FileSize = (Sizebyte(3) * &H ) + (Sizebyte(2) * &H10000) + (Sizebyte(1) * &H100) + (Sizebyte(0)) 'Open the file Dim temp As String = Encoding.ASCII.GetString(bFileName) Dim sptemp() As String = temp.split(chr(0)) stfilename = sptemp(0) Dim fs As FileStream = New FileStream(stFileName, FileMode.CreateNew, FileAccess.Write) End Sub 'Write the file Dim Data([FileSize]) As Byte addr = MemoryPointer.ToInt64() + MAX_NAMESIZE + 4 Marshal.Copy(New IntPtr(addr), Data, 0, FileSize) fs.write(data, 0, FileSize) 'Close the file fs.close() Console.WriteLine("File({0) output completed.", stfilename) EventFlag = True 118

119 Sub Main() Dim ret As Integer Dim DeviceHandle As IntPtr Dim WindowHandle As IntPtr Dim MemoryPointer As IntPtr ' Device handle ' Window handle ' Pointer of Memory ' Open a node name is "Optical1". DeviceHandle = IFCHNL.IfHnlOpen(NODENAME, IFCHNL.IFHNL_FLAG_SHARE) If DeviceHandle.Equals(New IntPtr(-1)) Then ret = IFCHNL.GetLastError() Console.WriteLine("Error: Open(ErrorCode:{0:x)", ret) Exit Sub 'Window open in othre party's shared memory.(top Address + 0MB,Size: 1MB) 'Between master-slave WindowHandle = IFCHNL.IfHnlWindowOpen(DeviceHandle, 1, 0, 1, IntPtr.Zero) If (WindowHandle.Equals(New IntPtr(-1))) Then ret = IFCHNL.GetLastError() Console.WriteLine("Error: Window open(errorcode:{0:x)", ret) IFCHNL.IfHnlClose(DeviceHandle) Exit Sub 'Mapping shared memory (Top Address + 0MB,Size: 1MB) MemoryPointer = IFCHNL.IfHnlWindowMap(DeviceHandle, WindowHandle) If (MemoryPointer.Equals(New IntPtr(0))) Then ret = IFCHNL.GetLastError() Console.WriteLine("Error: Mapping shared memory (ErrorCode:{0:x)", ret) IFCHNL.IfHnlWindowClose(WindowHandle) IFCHNL.IfHnlClose(DeviceHandle) Exit Sub 'Event is set Dim proc As IFCHNL.PIFHNLCALLBACK = New IFCHNL.PIFHNLCALLBACK(AddressOf EventProc) ret = IFCHNL.IfHnlSetEvent(DeviceHandle, 10, proc, MemoryPointer, IFCHNL.IFHNL_SYNC, IntPtr.Zero, 0) If ret <> IFCHNL.IFHNL_ERROR_SUCCESS Then Console.WriteLine("Error: Event is set(errorcode:{0:x)", ret) IFCHNL.IfHnlWindowUnmap(DeviceHandle, MemoryPointer) IFCHNL.IfHnlWindowClose(WindowHandle) IFCHNL.IfHnlClose(DeviceHandle) Exit Sub 'Wait Event 119

120 Dim Timeout As Integer = 100 ' 10s Timeout Do While True If EventFlag Then Exit Do System.Threading.Thread.Sleep(100) Timeout = Timeout - 1 If Timeout = 0 Then Exit Do Loop 'Event is kill ret = IFCHNL.IfHnlKillEvent(DeviceHandle) If ret <> IFCHNL.IFHNL_ERROR_SUCCESS Then Console.WriteLine("Error: Event is kill(errorcode:{0:x)", ret) IFCHNL.IfHnlWindowUnmap(DeviceHandle, MemoryPointer) IFCHNL.IfHnlWindowClose(WindowHandle) IFCHNL.IfHnlClose(DeviceHandle) Exit Sub 'Unmapping shared memory ret = IFCHNL.IfHnlWindowUnmap(DeviceHandle, MemoryPointer) If ret <> IFCHNL.IFHNL_ERROR_SUCCESS Then Console.WriteLine("Error: Unmapping shared memory(errorcode:{0:x)", ret) IFCHNL.IfHnlWindowClose(WindowHandle) IFCHNL.IfHnlClose(DeviceHandle) Exit Sub ' Close the window. ret = IFCHNL.IfHnlWindowClose(WindowHandle) If ret <> IFCHNL.IFHNL_ERROR_SUCCESS Then Console.WriteLine("Error: Close the window(errorcode:{0:x)", ret) IFCHNL.IfHnlClose(DeviceHandle) Exit Sub 'Close the device. ret = IFCHNL.IfHnlClose(DeviceHandle) If ret <> IFCHNL.IFHNL_ERROR_SUCCESS Then Console.WriteLine("Error: Close the device (ErrorCode:{0:x)", ret) Exit Sub End Sub 120

121 Visual C# static bool EventFlag = false; static void EventProc(IntPtr DeviceHandle, IntPtr UserData, string NodeName) { byte[] bfilename = new byte[max_namesize]; string stfilename; // Name of file IntPtr MemoryPointer = UserData; // Pointer of Memory uint FileSize; // Size of file //It confirms interrupt request ahead. if (NodeName.CompareTo(NODENAME)!= 0) { return; //File name is get Marshal.Copy(MemoryPointer,bFileName,0,(int)MAX_NAMESIZE); //File size is get byte[] Sizebyte = new byte[4]; long addr = MemoryPointer.ToInt64() + (long)max_namesize; Marshal.Copy(new IntPtr(addr), Sizebyte, 0, 4); FileSize = (uint)((sizebyte[3] * 0x ) + (Sizebyte[2]* 0x10000) + (Sizebyte[1]* 0x100) + (Sizebyte[0])); //Open the file string temp = Encoding.ASCII.GetString(bFileName); string[] sptemp = temp.split('\0'); stfilename = sptemp[0]; FileStream fs = new FileStream(stFileName.ToString(), FileMode.CreateNew, FileAccess.Write); //Write the file byte[] Data = new byte[filesize]; addr = MemoryPointer.ToInt64() + (long)max_namesize + 4; Marshal.Copy(new IntPtr(addr), Data, 0, (int)filesize); fs.write(data,0,(int)filesize); //Close the file fs.close(); Console.WriteLine("File({0) output completed.", stfilename); EventFlag = true; 121

122 static void Main(string[] args) { uint ret; // Return value IntPtr DeviceHandle; // Device handle IntPtr WindowHandle; // Window handle IntPtr MemoryPointer; // Pointer of Memory // Open a node name is "Optical1". DeviceHandle = IFCHNL.IfHnlOpen(NODENAME, IFCHNL.IFHNL_FLAG_SHARE); if (DeviceHandle.Equals(new IntPtr(-1))) { ret = IFCHNL.GetLastError(); Console.WriteLine("Error: Open(ErrorCode:{0:x)", ret); return; //Window open in othre party's shared memory.(top Address + 0MB,Size: 1MB) //Between master-slave WindowHandle = IFCHNL.IfHnlWindowOpen(DeviceHandle, 1, 0, 1, IntPtr.Zero); if (WindowHandle.Equals(new IntPtr(-1))) { ret = IFCHNL.GetLastError(); Console.WriteLine("Error: Window open(errorcode:{0:x)",ret); IFCHNL.IfHnlClose(DeviceHandle); return; //Mapping shared memory (Top Address + 0MB,Size: 1MB) MemoryPointer = IFCHNL.IfHnlWindowMap(DeviceHandle, WindowHandle); if (MemoryPointer.Equals(new IntPtr(0))) { ret = IFCHNL.GetLastError(); Console.WriteLine("Error: Mapping shared memory (ErrorCode:{0:x)", ret); IFCHNL.IfHnlWindowClose(WindowHandle); IFCHNL.IfHnlClose(DeviceHandle); return; //Event is set IFCHNL.PIFHNLCALLBACK proc = new IFCHNL.PIFHNLCALLBACK(EventProc); ret = IFCHNL.IfHnlSetEvent(DeviceHandle, 10, proc, MemoryPointer, IFCHNL.IFHNL_SYNC, IntPtr.Zero, 0); if(ret!= IFCHNL.IFHNL_ERROR_SUCCESS) { Console.WriteLine("Error: Event is set(errorcode:{0:x)",ret); IFCHNL.IfHnlWindowUnmap(DeviceHandle, MemoryPointer); 122

123 IFCHNL.IfHnlWindowClose(WindowHandle); IFCHNL.IfHnlClose(DeviceHandle); return; //Wait Event uint Timeout = 100; // 10s Timeout while(true) { if(eventflag) break; System.Threading.Thread.Sleep(100); Timeout--; if(timeout == 0) break; //Event is kill ret = IFCHNL.IfHnlKillEvent(DeviceHandle); if(ret!= IFCHNL.IFHNL_ERROR_SUCCESS) { Console.WriteLine("Error: Event is kill(errorcode:{0:x)",ret); IFCHNL.IfHnlWindowUnmap(DeviceHandle, MemoryPointer); IFCHNL.IfHnlWindowClose(WindowHandle); IFCHNL.IfHnlClose(DeviceHandle); return; //Unmapping shared memory ret = IFCHNL.IfHnlWindowUnmap(DeviceHandle, MemoryPointer); if(ret!= IFCHNL.IFHNL_ERROR_SUCCESS) { Console.WriteLine("Error: Unmapping shared memory(errorcode:{0:x)",ret); IFCHNL.IfHnlWindowClose(WindowHandle); IFCHNL.IfHnlClose(DeviceHandle); return; // Close the window. ret = IFCHNL.IfHnlWindowClose(WindowHandle); if(ret!= IFCHNL.IFHNL_ERROR_SUCCESS) { Console.WriteLine("Error: Close the window(errorcode:{0:x)",ret); IFCHNL.IfHnlClose(DeviceHandle); return; //Close the device. 123

124 ret = IFCHNL.IfHnlClose(DeviceHandle); if (ret!= IFCHNL.IFHNL_ERROR_SUCCESS) { Console.WriteLine("Error: Close the device (ErrorCode:{0:x)", ret); return; 124

125 5.6.6 イベント ( メッセージ ) 下記のように動作する使用例を記載します 下記は Visual Basic のサンプルプログラム (ReadFile) の抜粋になります Visual Basic Private Sub Command1_Click() Dim Ret As Long Dim DeviceHandle As Long Dim MemoryPointer As Long Dim FileSize As Long Dim WindowHandle As Long Dim FileName As String Dim EvNodeName(16) As Byte Dim stnodename As String Dim message As Msg Dim i As Long ' Device handle ' Pointer of Memory ' Size of file ' Window handle ' Name of file ' NodeName ' NodeName ' Open a node name is "Optical1". DeviceHandle = IfHnlOpen(NodeName, IFHNL_FLAG_SHARE) If DeviceHandle = -1 Then ErrorMsg = "Error: Open(ErrorCode:" + Hex(GetLastError()) + ")" MsgBox (ErrorMsg) Exit Sub 'Window open in othre party's shared memory.(top Address + 0MB,Size: 1MB) 'Between master-slave WindowHandle = IfHnlWindowOpen(DeviceHandle, 1, 0, 1, 0) If WindowHandle = -1 Then ErrorMsg = "Error:Window Open(ErrorCode:" + Hex(GetLastError()) + ")" MsgBox (ErrorMsg) IfHnlClose (DeviceHandle) Exit Sub 'Mapping shared memory (Top Address + 0MB,Size: 1MB) MemoryPointer = IfHnlWindowMap(DeviceHandle, WindowHandle) If MemoryPointer = 0 Then ErrorMsg = "Error: Mapping shared memory (ErrorCode:" + Hex(GetLastError()) + ")" MsgBox (ErrorMsg) IfHnlWindowClose WindowHandle IfHnlClose (DeviceHandle) Exit Sub 125

126 'Event is set Ret = IfHnlSetEvent(DeviceHandle, 10, 0, 0, IFHNL_SYNC, Me.hwnd, WM_IFHNL) If Ret <> IFHNL_ERROR_SUCCESS Then ErrorMsg = "Error: Event is set(errorcode:" + Hex(Ret) + ")" MsgBox (ErrorMsg) IfHnlWindowUnmap DeviceHandle, MemoryPointer IfHnlWindowClose WindowHandle IfHnlClose DeviceHandle Exit Sub i = 0 Do Ret = PeekMessage(message, Me.hwnd, WM_IFHNL, WM_IFHNL, 1) If Ret <> 0 Then Exit Do i = i + 1 If i = 100 Then ErrorMsg = "Error: Event timeout" MsgBox (ErrorMsg) IfHnlWindowUnmap DeviceHandle, MemoryPointer IfHnlWindowClose WindowHandle IfHnlClose DeviceHandle Exit Sub Sleep (100) Loop While Ret = 0 'It confirms interrupt request ahead. CopyMemory EvNodeName(0), ByVal message.wparam, 16 Ret = IfHnlFinishMessage(DeviceHandle, message.wparam) If Ret <> IFHNL_ERROR_SUCCESS Then ErrorMsg = "Error: Finish Message(ErrorCode:" + Hex(Ret) + ")" MsgBox (ErrorMsg) IfHnlWindowUnmap DeviceHandle, MemoryPointer IfHnlWindowClose WindowHandle IfHnlClose DeviceHandle Exit Sub For i = 0 To 15 stnodename = stnodename + Chr(EvNodeName(i)) If EvNodeName(i) = 0 Then Exit For Next 126

127 If stnodename = NodeName Then ErrorMsg = "Error: NodeName is unmatch:" + stnodename MsgBox (ErrorMsg) IfHnlWindowUnmap DeviceHandle, MemoryPointer IfHnlWindowClose WindowHandle IfHnlClose DeviceHandle Exit Sub 'File name is put from head in 16bytes CopyMemory Memory(0), ByVal MemoryPointer, MAX_DATA For i = 0 To 15 If Memory(i) = 0 Then Exit For FileName = FileName + Chr(Memory(i)) Next 'File Data is put behind file size in file size CopyMemory FileSize, Memory(16), 4 'Open the file Open FileName For Binary As #1 'Write the file For i = 0 To (FileSize - 1) Put #1,, Memory(20 + i) Next 'Close the file Close #1 ErrorMsg = "File(" + FileName + ") output completed." MsgBox (ErrorMsg) 'Event is kill Ret = IfHnlKillEvent(DeviceHandle) If Ret <> IFHNL_ERROR_SUCCESS Then ErrorMsg = "Error: Event is kill(errorcode:" + Hex(Ret) + ")" MsgBox (ErrorMsg) IfHnlWindowUnmap DeviceHandle, MemoryPointer IfHnlWindowClose WindowHandle IfHnlClose DeviceHandle Exit Sub 'Unmapping shared memory Ret = IfHnlWindowUnmap(DeviceHandle, MemoryPointer) 127

128 End Sub If Ret <> IFHNL_ERROR_SUCCESS Then ErrorMsg = "Error: Unmapping shared memory(errorcode:" + Hex(Ret) + ")" MsgBox (ErrorMsg) IfHnlWindowClose (WindowHandle) IfHnlClose (DeviceHandle) Exit Sub ' Close the window. Ret = IfHnlWindowClose(WindowHandle) If Ret <> IFHNL_ERROR_SUCCESS Then ErrorMsg = "Error: Close the window(errorcode:" + Hex(Ret) + ")" MsgBox (ErrorMsg) IfHnlClose (DeviceHandle) Exit Sub 'Close the device. Ret = IfHnlClose(DeviceHandle) If Ret <> IFHNL_ERROR_SUCCESS Then ErrorMsg = "Error: Close the device (ErrorCode:" + Hex(Ret) + ")" MsgBox (ErrorMsg) Exit Sub 128

129 5.6.7 Window のプロセス間シェア使用例を記載します 下記はサンプルプログラム (ShareTransfer) の抜粋になります C 言語 int main(int argc, char *argv[]) { ULONG Ret; // Return value HANDLE DeviceHandle; // Device handle HANDLE WindowHandle; // Window handle IFHNL_DMA_PARAMS Source; // DMA Source data IFHNL_DMA_PARAMS Dest; // DMA Dest data ULONG Timeout = 10; // 1s Timeout ULONG CH = 1; // Open a node name is "Optical1". DeviceHandle = IfHnlOpen(NODENAME, IFHNL_FLAG_SHARE); if (DeviceHandle == (HANDLE)-1) { printf("error: Open(ErrorCode:%lx)\n", GetLastError()); return 0; // Exit the program. //Window open in othre party's shared memory.(top Address + 0MB,Size: 16MB) //Between master-slave WindowHandle = IfHnlWindowOpen(DeviceHandle, 1, 0, 1, NULL); if (WindowHandle == (HANDLE)-1) { if(getlasterror() == IFHNL_ERROR_ALREADY_OPEN){ //Get window handle if window is already opened. WindowHandle = IfHnlWindowGetHandle(DeviceHandle, 1); if (WindowHandle == (HANDLE)-1) { printf("error: Get window handle(errorcode:%lx)\n", GetLastError()); IfHnlClose(DeviceHandle); return 0; else{ printf("error: Window open(errorcode:%lx)\n", GetLastError()); IfHnlClose(DeviceHandle); return 0; // Close the window. 129

130 if (WindowHandle!= (HANDLE)-1) { Ret = IfHnlWindowClose(WindowHandle); if(ret!= IFHNL_ERROR_SUCCESS) { printf("error: Close the window(errorcode:%lx)\n",ret); IfHnlClose(DeviceHandle); return 0; // Close the device. Ret = IfHnlClose(DeviceHandle); if(ret!= IFHNL_ERROR_SUCCESS) { printf("error: Close the device(errorcode:%lx)\n",ret); return 0; Visual Basic Private Sub Command1_Click() Dim Ret As Long Dim DeviceHandle As Long ' Device handle Dim WindowHandle As Long ' Window handle Dim Source As IFHNL_DMA_PARAMS ' DMA Source data Dim dest As IFHNL_DMA_PARAMS ' DMA Dest data Dim CH As Long Dim WindowOpenFlag As Boolean Dim RxBufferPointer As Long ' Rx DMA Buffer Pointer Dim hep As Long hep = GetProcessHeap() WindowOpenFlag = True ' Open a node name is "Optical1". DeviceHandle = IfHnlOpen(NodeName, IFHNL_FLAG_SHARE) If DeviceHandle = -1 Then ErrorMsg = "Error: Open(ErrorCode:" + Hex(GetLastError()) + ")" MsgBox (ErrorMsg) Exit Sub 'Window open in othre party's shared memory.(top Address + 0MB,Size: 1MB) 'Between master-slave WindowHandle = IfHnlWindowOpen(DeviceHandle, 1, 0, 1, 0) If WindowHandle = -1 Then WindowOpenFlag = False If GetLastError() = IFHNL_ERROR_ALREADY_OPEN Then 130

131 'Get window handle if window is already opened. WindowHandle = IfHnlWindowGetHandle(DeviceHandle, 1) If WindowHandle = -1 Then ErrorMsg = "Error:Get window handle(errorcode:" + Hex(GetLastError()) + ")" MsgBox (ErrorMsg) Exit Sub Else ErrorMsg = "Error:Window Open(ErrorCode:" + Hex(GetLastError()) + ")" MsgBox (ErrorMsg) Exit Sub ' Close the window. If WindowOpenFlag Then Ret = IfHnlWindowClose(WindowHandle) If Ret <> IFHNL_ERROR_SUCCESS Then ErrorMsg = "Error: Close the window(errorcode:" + Hex(Ret) + ")" MsgBox (ErrorMsg) IfHnlClose (DeviceHandle) Exit Sub 'Close the device. Ret = IfHnlClose(DeviceHandle) If Ret <> IFHNL_ERROR_SUCCESS Then ErrorMsg = "Error: Close the device (ErrorCode:" + Hex(Ret) + ")" MsgBox (ErrorMsg) Exit Sub End Sub 131

132 5.6.8 光メモリンクの障害検出使用例を記載します 下記はサンプルプログラム (ASyncCheckState) の抜粋になります C 言語 int main(void) { ULONG Ret, i; // Return value HANDLE DeviceHandle; // Device handle HANDLE EventHandle; // Event Hanele IFHNL_LINK_STATUS LinkStatus; // LinkStatus BOOL ResponseFlag = 0; // Open a node name is "Optical1". DeviceHandle = IfHnlOpen(NODENAME, IFHNL_FLAG_SHARE); if (DeviceHandle == INVALID_HANDLE_VALUE) { printf("error: Open(ErrorCode:%lx[h])\n",GetLastError()); return 0; // Exit the program. // Start Check printf("push Any Key : Check Start\n"); getch(); // Create Event EventHandle = CreateEvent(NULL, TRUE, FALSE, NULL); // Response Check Ret = IfHnlResponseCheck(DeviceHandle, NODENAME, EventHandle, 0); if(ret!= IFHNL_ERROR_SUCCESS){ if(ret == IFHNL_ERROR_IO_PENDING){ // Waiting by event 1000ms Ret = WaitForSingleObject(EventHandle, 1000); if(ret!= WAIT_OBJECT_0){ ResponseFlag = FALSE; else{ ResponseFlag = TRUE; else if(ret == IFHNL_ERROR_NETWORK_RESPONSE){ ResponseFlag = FALSE; else{ printf("error: IfHnlResponseCheck(ErrorCode:%lx[h])\n",Ret); IfHnlClose(DeviceHandle); CloseHandle(EventHandle); return 0; // Exit the program. 132

133 else{ ResponseFlag = TRUE; if(responseflag){ printf("node[%s] is OK\n",NODENAME); else{// No ResPonse printf("node[%s] is NG\n",NODENAME); Ret = IfHnlGetLinkStatus(DeviceHandle, &LinkStatus); if(ret!= IFHNL_ERROR_SUCCESS){ printf("error: IfHnlGetLinkStatus(ErrorCode:%lx[h])\n",Ret); IfHnlClose(DeviceHandle); CloseHandle(EventHandle); return 0; // Exit the program. printf("mylinkstatus:%x[h]\n",linkstatus.mylinkstatus); for(i=0;i<16;i++){ printf("hublinkstatus[%x]:%x[h]\n",i,linkstatus.hublinkstatus[i]); //Close the device. Ret = IfHnlClose(DeviceHandle); if(ret!= IFHNL_ERROR_SUCCESS) { printf("error: Close the device (ErrorCode:%lx[h])\n",Ret); CloseHandle(EventHandle); return 0; CloseHandle(EventHandle); return 1; Visual Basic Const NodeName As String = "Optical1" Private Sub Command1_Click() Dim Ret As Long Dim i As Long Dim DeviceHandle As Long ' Device handle Dim EventHandle As Long ' Event hanele Dim ErrorMsg As String ' Error Message Dim LinkStatus As IFHNL_LINK_STATUS ' LinkStatus 133

134 ")" Dim ResponseFlag As Boolean ' Open a node name is "Optical1". DeviceHandle = IfHnlOpen(NodeName, IFHNL_FLAG_SHARE) If DeviceHandle = -1 Then ErrorMsg = "Error: Open(ErrorCode:" + Err.LastDllError + ")" MsgBox (ErrorMsg) Exit Sub 'Create Event EventHandle = CreateEvent(0, 1, 0, 0) ' Response Check Ret = IfHnlResponseCheck(DeviceHandle, NodeName, EventHandle, 0) If Ret <> IFHNL_ERROR_SUCCESS Then If (Ret = IFHNL_ERROR_IO_PENDING) Then ' Waiting by event 1000ms Ret = WaitForSingleObject(EventHandle, 1000) If Ret <> WAIT_OBJECT_0 Then ResponseFlag = False Else ResponseFlag = True ElseIf (Ret = IFHNL_ERROR_NETWORK_RESPONSE) Then ResponseFlag = False Else ErrorMsg = "Error: IfHnlResponseCheck(ErrorCode:" + Hex(Ret) + Else MsgBox (ErrorMsg) IfHnlClose (DeviceHandle) CloseHandle (EventHandle) Exit Sub ResponseFlag = True If ResponseFlag Then Text1.Text = Text1.Text + "Node[" + NodeName + "] is OK" + vbcrlf Else Text1.Text = Text1.Text + "Node[" + NodeName + "] is NG" + vbcrlf ")" Ret = IfHnlGetLinkStatus(DeviceHandle, LinkStatus) If Ret <> IFHNL_ERROR_SUCCESS Then ErrorMsg = "Error: IfHnlGetLinkStatus(ErrorCode:" + Hex(Ret) + 134

135 MsgBox (ErrorMsg) IfHnlClose (DeviceHandle) CloseHandle (EventHandle) Exit Sub Text1.Text = Text1.Text + "MyLinkStatus:" + Hex(LinkStatus.MyLinkStatus) + vbcrlf For i = 0 To 15 Text1.Text = Text1.Text + "HubLinkStatus:[" + Hex(i) + "]:" + Hex(LinkStatus.HubLinkStatus(i)) + vbcrlf Next End Sub 'Close the device. Ret = IfHnlClose(DeviceHandle) If Ret <> IFHNL_ERROR_SUCCESS Then ErrorMsg = "Error: Close the device (ErrorCode:" + Hex(Ret) + ")" MsgBox (ErrorMsg) Exit Sub CloseHandle (EventHandle) Visual Basic.NET Const MAX_NAMESIZE As Integer = 16 Const MAX_DATA As Integer = &H ' 1MB Const NODENAME As String = "Optical1" Dim LinkStatus As IFCHNL.IFHNL_LINK_STATUS = New IFCHNL.IFHNL_LINK_STATUS Sub Main() Dim Ret As Integer Dim i As Integer Dim DeviceHandle As IntPtr Dim EventHandle As IntPtr ' Device handle ' Event hanele Dim ResponseFlag As Boolean ' Open a node name is "Optical1". DeviceHandle = IFCHNL.IfHnlOpen(NODENAME, IFCHNL.IFHNL_FLAG_SHARE) If DeviceHandle.Equals(New IntPtr(-1)) Then Ret = IFCHNL.GetLastError() Console.WriteLine("Error: Open(ErrorCode:{0:x)", Ret) Exit Sub 135

136 'Create Event EventHandle = IFCHNL.CreateEvent(IntPtr.Zero, 1, 0, IntPtr.Zero) Ret) ' Response Check Ret = IFCHNL.IfHnlResponseCheck(DeviceHandle, NODENAME, EventHandle, 0) If Ret <> IFCHNL.IFHNL_ERROR_SUCCESS Then If (Ret = IFCHNL.IFHNL_ERROR_IO_PENDING) Then ' Waiting by event 1000ms Ret = IFCHNL.WaitForSingleObject(EventHandle, 1000) If Ret <> IFCHNL.WAIT_OBJECT_0 Then ResponseFlag = False Else ResponseFlag = True ElseIf (Ret = IFCHNL.IFHNL_ERROR_NETWORK_RESPONSE) Then ResponseFlag = False Else Console.WriteLine("Error: IfHnlResponseCheck(ErrorCode:{0:x)", IFCHNL.IfHnlClose(DeviceHandle) IFCHNL.CloseHandle(EventHandle) Exit Sub Else ResponseFlag = True If ResponseFlag Then Console.WriteLine("Node[" + NODENAME + "] is OK") Else Console.WriteLine("Node[" + NODENAME + "] is NG") Ret = IFCHNL.IfHnlGetLinkStatus(DeviceHandle, LinkStatus) If Ret <> IFCHNL.IFHNL_ERROR_SUCCESS Then Console.WriteLine("Error: IfHnlGetLinkStatus(ErrorCode:{0:x)", Ret) IFCHNL.IfHnlClose(DeviceHandle) IFCHNL.CloseHandle(EventHandle) Exit Sub Console.WriteLine("MyLinkStatus:{0:x[h]\n", LinkStatus.MyLinkStatus) For i = 0 To 15 Console.WriteLine("HubLinkStatus[{0:x]:{1:x[h]\n", i, LinkStatus.HubLinkStatus(i)) 136

137 Next End Sub 'Close the device. Ret = IFCHNL.IfHnlClose(DeviceHandle) If Ret <> IFCHNL.IFHNL_ERROR_SUCCESS Then Console.WriteLine("Error: Close the device (ErrorCode:{0:x)", Ret) Exit Sub IFCHNL.CloseHandle(EventHandle) Visual C# const string NODENAME = "Optical1"; static IFCHNL.IFHNL_LINK_STATUS LinkStatus = new IFCHNL.IFHNL_LINK_STATUS(); static void Main(string[] args) { uint Ret, i; // Return value IntPtr DeviceHandle; // Device handle IntPtr EventHandle; // Device handle bool ResponseFlag = false; // Open a node name is "Optical1". DeviceHandle = IFCHNL.IfHnlOpen(NODENAME, IFCHNL.IFHNL_FLAG_SHARE); if (DeviceHandle.Equals(new IntPtr(-1))) { Ret = IFCHNL.GetLastError(); Console.WriteLine("Error: Open(ErrorCode:{0:x)", Ret); return; // Start Check Console.WriteLine("Push Any Key : Check Start"); Console.Read(); // Create Event EventHandle = IFCHNL.CreateEvent(IntPtr.Zero, 1, 0, IntPtr.Zero); // Response Check Ret = IFCHNL.IfHnlResponseCheck(DeviceHandle, NODENAME, EventHandle, 0); if(ret!= IFCHNL.IFHNL_ERROR_SUCCESS){ 137

138 Ret); if(ret == IFCHNL.IFHNL_ERROR_IO_PENDING){ // Waiting by event 1000ms Ret = IFCHNL.WaitForSingleObject(EventHandle, 1000); if (Ret!= IFCHNL.WAIT_OBJECT_0) { ResponseFlag = false; else{ ResponseFlag = true; else if(ret == IFCHNL.IFHNL_ERROR_NETWORK_RESPONSE){ ResponseFlag = false; else{ Console.WriteLine("Error: IfHnlResponseCheck(ErrorCode:{0:x)", IFCHNL.IfHnlClose(DeviceHandle); IFCHNL.CloseHandle(EventHandle); return; // Exit the program. else{ ResponseFlag = true; if(responseflag){ Console.WriteLine("Node[" + NODENAME + "] is OK"); else{// No ResPonse Console.WriteLine("Node[" + NODENAME + "] is OK"); Ret); Ret = IFCHNL.IfHnlGetLinkStatus(DeviceHandle, out LinkStatus); if(ret!= IFCHNL.IFHNL_ERROR_SUCCESS){ Console.WriteLine("Error: IfHnlGetLinkStatus(ErrorCode:{0:x)", IFCHNL.IfHnlClose(DeviceHandle); IFCHNL.CloseHandle(EventHandle); return; // Exit the program. Console.WriteLine("MyLinkStatus:{0:x[h]",LinkStatus.MyLinkStatus); for(i=0;i<16;i++){ Console.WriteLine("HubLinkStatus[{0:x]:{1:x[h]",i,LinkStatus.HubLinkStatus[i ]); //Close the device. Ret = IFCHNL.IfHnlClose(DeviceHandle); 138

139 if (Ret!= IFCHNL.IFHNL_ERROR_SUCCESS) { Console.WriteLine("Error: Close the device (ErrorCode:{0:x)", Ret); return; IFCHNL.CloseHandle(EventHandle); 139

140 第 6 章サンプルプログラム 以下 各サンプルプログラムの概要を説明します サンプルプログラム名 説明 WriteFile ファイル出力サンプルプログラム ReadFile ファイル取得サンプルプログラム DMATransfer DMA 転送出力サンプルプログラム ShareTransfer プロセス間でのシェア処理のサンプルプログラム AsyncCheckState 光メモリンク状態取得サンプルプログラム ( 非同期 ) SyncCheckState 光メモリンク状態取得サンプルプログラム ( 同期 ) 6.1 WriteFile 概要 ファイル出力を行うサンプルプログラムです 1MB 以下のファイルを 共有メモリの 1 チャンネルを使用して Ifhnl.bmp ファイルを出力します マスタコンピュータスレーブコンピュータ間で動作します ファイルの取得は ReadFile サンプルプログラムで行ってください 実行手順 Node 名を Optical1 としてください 共有メモリを 1MB 以上所有してください サンプルプログラムには実行形式のファイルが付属していません ソースコードをコンパイルして実行ファイルを生成してから 動作させてください Visual C++ の場合 Visual C++ の場合 (Microsoft Visual C++.NET 2003~2008) プロジェクトファイル WriteFile.vcproj を開き ビルドしてください Visual C++ の場合 (Microsoft Visual C++.NET 2010 以降 ) プロジェクトファイル WriteFile.vcxproj を開き ビルドしてください (Visual Studio 2010 より新しい Version で実行する場合には後述の注意事項を参照下さい ) Visual Basic の場合 Visual Basic を起動し プロジェクトファイル WriteFile.vbp を開き ビルドしてください Visual C#.NET の場合 Visual Studio を起動し ファイル メニューから 開く プロジェクト を選び プロジェクトファイル WriteFile.csproj を開き ビルドしてください Visual Basic.NET の場合 Visual Studio を起動し ファイル メニューから 開く プロジェクト を選び プロ 140

141 ジェクトファイル WriteFile.vbproj を開き ビルドしてください Samples フォルダ内にある ifhnl.bmp を実行ファイルと同じフォルダにコピーしてください Visual C++.NET の場合 Visual Studio を起動し ファイル メニューから 開く からプロジェクトファイル WriteFile.cproj を開き ビルドしてください 作成後 ReadFile サンプルプログラム起動後 WriteFile を起動してください 内容 1. ノード (Optical1) をオープンします 2. 共有メモリの 1 チャンネルをマップします 3. ファイルをバイナリに変換して 共有メモリに書き込みます データは下記のデータ構造で入力されます ファイル名 (0~15byte) サイズ (16~19byte) ファイルのバイナリデータ (20byte~) 4. ノード (Optical1) に割り込みを要求します 5. 共有メモリをアンマップします 6. 共有メモリをクローズします 7. ノード (IFHNL1) をクローズします 141

142 6.2 ReadFile 概要 ファイル入力を行うサンプルプログラムです 1MB 以下のファイルを 共有メモリの 1 チャンネルから入力します マスタコンピュータスレーブコンピュータ間で動作します ファイルの出力は WriteFile サンプルプログラムで行ってください 実行手順 Node 名を Optical1 としてください 実行するコンピュータがマスタコンピュータの場合 Link ウィンドウの 1 チャンネルに 1MB 以上の領域を確保してください 実行するコンピュータがスレーブコンピュータの場合 Virtual ウィンドウの 1 チャンネルに 1MB 以上の領域を確保してください サンプルプログラムには実行形式のファイルが付属していません ソースコードをコンパイルして実行ファイルを生成してから 動作させてください Visual C++ の場合 Visual C++ の場合 (Microsoft Visual C++.NET 2003~2008) プロジェクトファイル ReadFile.vcproj を開き ビルドしてください Visual C++ の場合 (Microsoft Visual C++.NET 2010 以降 ) プロジェクトファイル ReadFile.vcxproj を開き ビルドしてください (Visual Studio 2010 より新しい Version で実行する場合には後述の注意事項を参照下さい ) Visual Basic の場合 Visual Basic を起動し プロジェクトファイル ReadFile.vbp を開き ビルドしてください Visual C#.NET の場合 Visual Studio を起動し ファイル メニューから 開く プロジェクト を選び プロジェクトファイル ReadFile.csproj を開き ビルドしてください Visual Basic.NET の場合 Visual Studio を起動し ファイル メニューから 開く プロジェクト を選び プロジェクトファイル ReadFile.vbproj を開き ビルドしてください Visual C++.NET の場合 Visual Studio を起動し ファイル メニューから 開く からプロジェクトファイル ReadFile.cproj を開き ビルドしてください 作成後 ReadFile サンプルプログラム起動後 ReadFile を起動してください 142

143 内容 1. ノード (Optical1) をオープンする 2. ウィンドウの 1 チャンネルのオープンする 3. ウィンドウの 1 チャンネルをマップする 4. イベントを登録します VB 以外はコールバックを登録します VB はメッセージを登録します 5. イベント発生を待機し もし 10 秒かかってもイベントが発生しなかったら強制終了させてプログラムを終了します 6. イベントが発生すると下記のデータ構造のデータを取り出します ファイル名 (0~15byte) サイズ (16~19byte) ファイルのバイナリデータ (20byte~) 7. バイナリをファイルに変換して 実行ファイルと同じフォルダに保存します 8. ウィンドウをアンマップします 9. ウィンドウをクローズします 10. ノード (Optical1) をクローズします 143

144 6.3 DMATransfer 概要 入力されたコメントを DMA 転送で行うサンプルプログラムです 1KB 以下のコメントを ユーザバッファ 共有メモリ ウィンドウの 1 チャンネルに割り当てられている共有メモリ ユーザバッファという順に DMA 転送を行います 実行手順 Node 名を Optical1 としてください 共有メモリを 1MB 以上所有してください 実行するコンピュータがマスタコンピュータの場合 Link ウィンドウの 1 チャンネルに 1MB 以上の領域を確保してください 実行するコンピュータがスレーブコンピュータの場合 Virtual ウィンドウの 1 チャンネルに 1MB 以上の領域を確保してください サンプルプログラムには実行形式のファイルが付属していません ソースコードをコンパイルして実行ファイルを生成してから 動作させてください Visual C++ の場合 Visual C++ の場合 (Microsoft Visual C++.NET 2003~2008) プロジェクトファイル DMATransfer.vcproj を開き ビルドしてください Visual C++ の場合 (Microsoft Visual C++.NET 2010 以降 ) プロジェクトファイル DMATransfer.vcxproj を開き ビルドしてください (Visual Studio 2010 より新しい Version で実行する場合には後述の注意事項を参照下さい ) Visual Basic の場合 Visual Basic を起動し プロジェクトファイル DMATransfer.vbp を開き ビルドしてください Visual C#.NET の場合 Visual Studio を起動し ファイル メニューから 開く プロジェクト を選び プロジェクトファイル DMATransfer.csproj を開き ビルドしてください Visual Basic.NET の場合 Visual Studio を起動し ファイル メニューから 開く プロジェクト を選び プロジェクトファイル DMATransfer.vbproj を開き ビルドしてください Visual C++.NET の場合 Visual Studio を起動し ファイル メニューから 開く からプロジェクトファイル DMATransfer.cproj を開き ビルドしてください 作成後 ReadFile サンプルプログラム起動後 DMATransfer を起動してください 144

145 内容 1. ノード (Optical1) をオープンする 2. ウィンドウの 1 チャンネルのオープンする 3. ユーザバッファ 共有メモリへの DMA 転送を行います イベントを使用した非同期転送を行います 非同期で待機し もし DMA 転送に 1 秒かかったら強制停止させてプログラムを終了します 4. 共有メモリ ウィンドウの 1 チャンネルに割り当てられている共有メモリへの DMA 転送を行います DMA 転送の状態を取得しながら行う非同期転送を行います 非同期で待機し もし DMA 転送に 1 秒かかったら強制停止させてプログラムを終了します 5. ウィンドウの 1 チャンネルに割り当てられている共有メモリ ユーザバッファへの DMA 転送を行います 同期転送を行います 6. ウィンドウをクローズします 7. ノード (Optical1) をクローズします 145

146 6.4 ShareTransfer 概要 一つのウィンドウを別プロセスで DMA 転送のチャンネルを変えてを繰り返し行うサンプルプログラムです このプログラムを起動させ DMA チャンネルを設定すると ウィンドウからユーザバッファへ転送が開始されます DMA チャンネルを各プロセスごとに変えることで同じウィンドウの別領域で 同時に DMA 転送を行うことができます 実行手順 Node 名を Optical1 としてください 共有メモリを 1MB 以上所有してください 実行するコンピュータがマスタコンピュータの場合 Link ウィンドウの 1 チャンネルに 1MB 以上の領域を確保してください 実行するコンピュータがスレーブコンピュータの場合 Virtual ウィンドウの 1 チャンネルに 1MB 以上の領域を確保してください サンプルプログラムには実行形式のファイルが付属していません ソースコードをコンパイルして実行ファイルを生成してから 動作させてください Visual C++ の場合 Visual C++ の場合 (Microsoft Visual C++.NET 2003~2008) プロジェクトファイル ShareTransfer.vcproj を開き ビルドしてください Visual C++ の場合 (Microsoft Visual C++.NET 2010 以降 ) プロジェクトファイル ShareTransfer.vcxproj を開き ビルドしてください (Visual Studio 2010 より新しい Version で実行する場合には後述の注意事項を参照下さい ) Visual Basic の場合 Visual Basic を起動し プロジェクトファイル ShareTransfer.vbp を開き ビルドしてください Visual C++.NET の場合 Visual Studio を起動し ファイル メニューから 開く からプロジェクトファイル ShareTransfer.cproj を開き ビルドしてください 146

147 内容 1. ノード (Optical1) をオープンする 2. ウィンドウの 1 チャンネルのオープンする すでにオープンされていれば ウィンドウハンドルを取得します 3.DMA 転送をどのチャンネルで行うかを入力する チャンネル 1 の場合 : オフセット 0~1023 バイトをデータ転送します チャンネル 2 の場合 : オフセット 1024~2047 バイトをデータ転送します チャンネル 3 の場合 : オフセット 2048~3071 バイトをデータ転送します チャンネル 4 の場合 : オフセット 3072~4095 バイトをデータ転送します 4. ウィンドウ 共有メモリへの DMA 転送を行います 5. 自身がオープンしていれば ウィンドウをクローズします 6. ノード (Optical1) をクローズします 147

148 6.5 AsyncCheckState 概要 自身と接続先とのノード間の障害を検出するサンプルプログラムです 非同期実行で応答を確認し 応答が無かった場合 リンクの状態を表示します 実行手順 Node 名を Optical1 としてください 実行するコンピュータがマスタコンピュータの場合 実行するコンピュータがスレーブコンピュータの場合 サンプルプログラムには実行形式のファイルが付属していません ソースコードをコンパイルして実行ファイルを生成してから 動作させてください Visual C++ の場合 Visual C++ の場合 (Microsoft Visual C++.NET 2003~2008) プロジェクトファイル AsyncCheckState.vcproj を開き ビルドしてください Visual C++ の場合 (Microsoft Visual C++.NET 2010 以降 ) プロジェクトファイル AsyncCheckState.vcxproj を開き ビルドしてください (Visual Studio 2010 より新しい Version で実行する場合には後述の注意事項を参照下さい ) Visual Basic の場合 Visual Basic を起動し プロジェクトファイル AsyncCheckState.vbp を開き ビルドしてください Visual C#.NET の場合 Visual Studio を起動し ファイル メニューから 開く プロジェクト を選び プロジェクトファイル AsyncCheckState.csproj を開き ビルドしてください Visual Basic.NET の場合 Visual Studio を起動し ファイル メニューから 開く プロジェクト を選び プロジェクトファイル AsyncCheckState.vbproj を開き ビルドしてください Visual C++.NET の場合 Visual Studio を起動し ファイル メニューから 開く からプロジェクトファイル AsyncCheckState.cproj を開き ビルドしてください 内容 1. ノード (Optical1) をオープンする 2. 任意のキー入力後 自身のノードの接続先に対して応答の確認を行います 非同期実行を行い 約 1000ms でタイムアウトとします 3. 応答があった場合 障害はなしと判定し結果を表示し プログラムを終了します 応答が無かった場合 障害ありと判定し結果を表示します 4. 障害がありと判断した場合 リンクステータスを取得し リンク状態を表示します 5. ノード (Optical1) をクローズします 148

149 6.6 SyncCheckState 概要 自身と接続先とのノード間の障害を検出するサンプルプログラムです 同期実行で応答を確認し 応答が無かった場合 リンクの状態を表示します 実行手順 Node 名を Optical1 としてください 実行するコンピュータがマスタコンピュータの場合 実行するコンピュータがスレーブコンピュータの場合 サンプルプログラムには実行形式のファイルが付属していません ソースコードをコンパイルして実行ファイルを生成してから 動作させてください Visual C++ の場合 Visual C++ の場合 (Microsoft Visual C++.NET 2003~2008) プロジェクトファイル SyncCheckState.vcproj を開き ビルドしてください Visual C++ の場合 (Microsoft Visual C++.NET 2010 以降 ) プロジェクトファイル SyncCheckState.vcxproj を開き ビルドしてください (Visual Studio 2010 より新しい Version で実行する場合には後述の注意事項を参照下さい ) Visual Basic の場合 Visual Basic を起動し プロジェクトファイル SyncCheckState.vbp を開き ビルドしてください Visual C#.NET の場合 Visual Studio を起動し ファイル メニューから 開く プロジェクト を選び プロジェクトファイル SyncCheckState.csproj を開き ビルドしてください Visual Basic.NET の場合 Visual Studio を起動し ファイル メニューから 開く プロジェクト を選び プロジェクトファイル SyncCheckState.vbproj を開き ビルドしてください Samples フォルダ内にある ifhnl.bmp を実行ファイルと同じフォルダにコピーしてください Visual C++.NET の場合 Visual Studio を起動し ファイル メニューから 開く からプロジェクトファイル SyncCheckState.cproj を開き ビルドしてください 内容 1. ノード (Optical1) をオープンする 2. 任意のキー入力後 自身のノードの接続先に対して応答の確認を行います 同期実行を行い 約 1000ms でタイムアウトとします 3. 応答があった場合 障害はなしと判定し結果を表示し プログラムを終了します 応答が無かった場合 障害ありと判定し結果を表示します 4. 障害がありと判断した場合 リンクステータスを取得し リンク状態を表示します 149

150 5. ノード (Optical1) をクローズします 6.7 注意事項 Visual C#.NET, Visual Basic.NET のサンプルプログラムは.NET Framework 2.0 を使用したサンプルプログラムとなっております.NET Framework 2.0 がインストールされていない環境では インストール または別 Version の.NET Framework への変換が必要になります ご注意下さい *.vcxproj ファイルは Visual Studio 2010 で作成しております Visual Studio 2010 より新しい Version で実行する場合には 下記設定を行ってください Visual Studio のメニューから プロジェクト - プロパティ - 構成プロパティ - 全般 を開き プラットフォームツールセット を使用している環境に合わせて変更 例 ) Visual Studio 2012 を使用している場合 Visual Studio 2012(v110) を選択 ( プルダウンメニューより選択できます ) 150

151 第 7 章ユーティリティ 以下 各ユーティリティの概要を説明します 7.1 設定ユーティリティ (IfHnlSet.exe) 設定ユーティリティの設定により デバイス使用時の物理メモリの確保やウィンドウサイズの確保 ノード名の設定を行います 設定ユーティリティは管理者権限が必要です Classembly Devices に EWF( ライトフィルタ ) 機能がある場合は無効にしてください EWF( ライトフィルタ ) 機能についてはシステム構築ガイドを参照してください システム構築ガイドは弊社 WEB よりダウンロードできます # パラメータ説明 1 Shared Memory Size 自身のコンピュータ上で共有メモリとして確保する物理メモリサイズです ( 単位 :MB) 詳細については 1.4 共有メモリとは を参照ください Max の値は物理メモリから各 OS のシステム要件の最小メモリ値を差し引いた値です OS が動作するためある程度の容量を残しておいてください OS が動作しなくなる可能性があります OSが動作しなくなった場合の復旧方法は 復旧方法 を参照ください 2 No 任意に割り振られたナンバーです 3 PC Name マスタコンピュータの名前です スレーブコンピュータがマスタコンピュータと接続されていない場合 Unknown PCName と表示されます 151

152 4 Node Name 光メモリンクネットワーク上にいるノードに対して任意の名前を指定することができます ノード名により光メモリンクの制御を行います 同じ名前は設定できません 最大文字数は 16 文字です 指定できる文字はアルファベット (a~z,a~z), 数字 (0~9), ハイフン (-) です 5 CH ウィンドウのチャンネル番号です 6 Link Size Link ウィンドウの最大サイズです 値は 2 n で設定できます ( 単位 :MB) 最大 4 チャンネル設定することができます 指定サイズはマスタコンピュータのメモリリソースを要求します リソース不足などにならないよう注意してください ウィンドウサイズの設定最大値は環境が x86 環境でも指定できる最大値となります (x86 環境でも ) 7 Virtual Size Virtual ウィンドウの最大サイズです 値は 2 n で設定できます ( 単位 :MB) 最大 4 チャンネル設定することができます 指定サイズはスレーブコンピュータのメモリリソースを要求します リソース不足などにならないよう注意してください Virtualウィンドウ Linkウィンドウについては 1.5 ウィンドウとは を参照ください Virtualウィンドウ Linkウィンドウの要求するサイズが大きい場合 コンピュータがメモリリソースを割り当てられず コンピュータが起動しなくなる可能性があります コンピュータの構成などよく理解した上で設定を行ってください また 起動した場合でもデバイスがこのユーティリティからも見えなくなります その場合 スレーブデバイスのリフレッシュを行って再設定してください (7.1.2リフレッシュ ( 共有メモリ デバイス ) 参照 ) 152

153 7.1.1 設定方法 ユーザインタフェースでの操作方法 1. ドライバソフトウェアのインストール完了後 スタート メニューより プログラム - Interface GPC IFHNLSet を開きます 2. マスタコンピュータと接続していない場合はマスタコンピュータの OS の確認が表示されます OS の情報を選択してください 3. Shared Memory Size Node Name Link Size Virtual Size のパラメータ内で設定したいノードの箇所の値を変更します 4. OK ボタンをクリックします 5. これで設定は完了です リフレッシュ ( 共有メモリ デバイス ) 共有メモリのリフレッシュ操作方法 物理メモリの増設など物理メモリ容量の変更を行った場合は 共有メモリの再設定が必要です この機能を使用して一度設定のリフレッシュを行って設定を行ってください 行わなければ正常動作は保証いたしかねます 1. ドライバソフトウェアのインストール完了後 スタート メニューより プログラム - Interface GPC IFHNLSet を開きます 2. File - Reflesh - Shared Memory を選択 3. 再起動を行ってください 4. これで共有メモリのリフレッシュは完了です リフレッシュは設定ユーティリティで取得していた共有メモリについてリフレッシュを行います 他の使用目的で物理メモリを確保されている場合 その値は確保されたままになります 対策については 1.4 共有メモリとは を参照ください 153

154 インタフェースモジュールのリフレッシュ操作方法 インタフェースモジュールのスレーブデバイスをマスタデバイスに戻す場合は 下記の操作が必要です 1. スレーブデバイスを挿しているコンピュータで ドライバソフトウェアのインストール完了後 スタート メニューより プログラム - Interface GPC IFHNLSet を開きます 2. File - Reflesh - Device を選択 3. DeviceRefresh ダイアログが表示されますので リフレッシュを行うスレーブデバイスをノード名で選択してください OK ボタンを押すとスレーブデバイスの設定がリフレッシュされます 4. 以上で デバイスのリフレッシュは完了です 5. マスタデバイスに切り替えたい場合は コンピュータの電源を切り コンピュータからデバイスを抜き DSW1 の 4 を OFF に設定してください Classembly Devices の光拡張スロットにこのリフレッシュを実行してはいけません Classembly Devices の光拡張スロットのリフレッシュ操作方法 Classembly Devices の光拡張スロットは Classembly Devices の光拡張スロットの設定 を行ってださい 154

155 7.1.3 Classembly Devices の光拡張スロットの設定 設定ユーティリティを実行しているコンピュータが 64bitOS の場合 本設定を行うためには デバイスアクセス用ドライバのインストールが必要です インストール方法については README.HTM の デバイスアクセス用ドライバのインストール を参照してください パラメータ Bus Bridge Master Device( ) Slave Device( ) 説明光拡張スロットをバスブリッジにします 光拡張スロットを光メモリンクのマスタデバイスにします 光拡張スロットを光メモリンクのスレーブデバイスにします Classembly Devices の光拡張スロットを光メモリンクのマスタデバイス スレーブデバイスまたはバスブリッジへと切り替えを行う場合は下記の操作が必要です 1. スレーブデバイスを挿しているコンピュータで ドライバソフトウェアのインストール完了後 スタート メニューより プログラム - Interface GPC IFHNLSet を開きます 2. File - Setting - Classembly Devices を選択 このときドライバのロードを実行しています 環境によっては時間がかかる場合があります 3. Classembly Devices Setting ダイアログが表示されますので 切り替えを行う設定を選択し OK ボタンを押してください 4. 再起動を行ってください 5. これで光拡張スロットの設定は完了です インタフェースモジュールにこの設定を実行してはいけません 155

156 7.1.4 PCI Express Native の設定 設定ユーティリティを実行しているコンピュータが 64bitOS の場合 本設定を行うためには デバイスアクセス用ドライバのインストールが必要です インストール方法については README.HTM の デバイスアクセス用ドライバのインストール を参照してください パラメータ Enable Disable 説明 PCI Express Native 構成に設定します PCI Express Native 構成に設定しません 光メモリンクのスレーブデバイスを PCI Express Native 構成に設定する場合は 下記の操作が必要です Windows Vista Windows Sever 2008 およびそれ以降のバージョンの Windows において PCI Express Native の環境では PCI ,CPZ を使用することはできません PEX のみ上記設定を Enable にすることで光メモリンクを使用することができます 1. スレーブデバイスを挿しているコンピュータで ドライバソフトウェアのインストール完了後 スタート メニューより プログラム - Interface GPC IFHNLSet を開きます 2. File - PCI Express Native を選択 3. PCI Express Native Setting ダイアログが表示されますので PCI Express Native 構成に設定する場合には Enable を 設定しない場合には Disable を選択し OK ボタンを押してください 4. 再起動を行ってください 5. これで PCI Express Native の設定は完了です 設定を実行したコンピュータのスレーブデバイスに対して設定が行われます 156

157 7.1.5 コマンドプロンプトでの操作方法下記コマンド一覧のコマンドを使用して設定ができます 実行にはコマンドプロンプトを管理者権限で実行してください 例 : すべての情報表示 IFHNLSet.exe /V コマンド一覧 コマ サブコマンド 名称 説明 ンド /V すべての情報表示 すべての情報の表示を行う /V Net ネットワーク構成表示 光メモリンクネットワーク構成の表示を行う /V Memory 共有メモリ情報表示 共有メモリ情報の表示を行う /V Memory x 共有メモリ情報表示 共有メモリ情報の表示を行う x にはパーティション番号を指定する 本設定は /V または /V Memory 実行時にパーティション番号の取得に失敗した場合に実行してください パーティション番号の確認方法は パーティション番号の確認方法 を参照してください /V PC x コンピュータ情報表示 コンピュータ名 x 上にいるノードの情報( ウィンドウ設定 ノード名 コンピュータ名 ) の表示を行う /V Node x ノード情報表示 ノード名 x の情報( ウィンドウ設定 ノード名 コンピュータ名 ) の表示を行う /V No x ノード情報表示 No x のノード情報( ウィンドウ設定 ノード名 コンピュータ名 ) の表示を行う /V /? 説明表示 説明を表示する /S OS x y OS 環境の設定 ( ノード名指定 ) /S OS No:x y OS 環境の設定 ( メモリンク No 指定 ) /S OS ALL y OS 環境の設定 ( 全ノード ) ノード名 x のデバイスの OS 環境の設定を行う y には 32(32bit 環境 ) または 64(64bit 環境 ) を指定する ( 1) メモリンク No x のデバイスの OS 環境の設定を行う y には 32(32bit 環境 ) または 64(64bit 環境 ) を指定する ( 1) すべてのノードの OS 環境の設定を行う y には 32(32bit 環境 ) または 64(64bit 環境 ) を指定する ( 1) /S Memory x 物理メモリのサイズ設定 xのサイズ ( 単位 MB) を指定する /S Memory x y 物理メモリのサイズ設定 xのサイズ ( 単位 MB) を指定する y にはパーティション番号を指定する 本設定は /S Memory x 実行時にパーティション番号の取得に失敗した場合に指定してください パーティション番号の確認方法は パーティション番号の確認方法 を参照してください /S Virtual x CH1 CH2 CH3 CH4 Virtual ウィンドウ設定 ノード名 x のデバイスの Virtual ウィンドウ設定を行う ( 2) CH1 CH2 CH3 CH4 にはチャンネル番号順にサイズ ( 単位 MB) を指定する 64bit 環境の場合 CH1 と CH2 のみの設定を行っ てください 157

158 /S Virtual No:x CH1 CH2 CH3 CH4 Virtual ウィンドウ設定 メモリンク No x のデバイスの Link ウィンドウ設定を行う ( 2) CH1 CH2 CH3 CH4 にはチャンネル番号順にサイズ ( 単位 MB) を指定する 64bit 環境の場合 CH1 と CH2 のみの設定を行ってください /S Link x CH1 CH2 CH3 CH4 Link ウィンドウ設定 ノード名 x のデバイスの Link ウィンドウ設定を行う ( 2) CH1 CH2 CH3 CH4 にはチャンネル番号順にサイズ ( 単位 MB) を指定する 64bit 環境の場合 CH1 と CH2 のみの設定を行ってください /S Link No:x CH1 CH2 CH3 CH4 Link ウィンドウ設定 メモリンク No x のデバイスの Link ウィンドウ設定を行う ( 2) CH1 CH2 CH3 CH4 にはチャンネル番号順にサイズ ( 単位 MB) を指定する 64bit 環境の場合 CH1 と CH2 のみの設定を行ってください /S Node x y ノード名の設定 現ノード名 x を y に変更する /S Node No:x y ノード名の設定 No x のノード名を y に変更する /S CD x Classembly Devices の光 拡張スロットの設定 /S PEN x PCI Express Native の設 定 Classembly Devices の光拡張スロットの設定を行う ( 3)( 6) 下記を x に入力します 値説明 Busbridge バスブリッジ Slave メモリンクスレーブデバイス Master メモリンクマスタデバイス PCI Native Express の設定を行う ( 5)( 6) 下記を x に入力します 値説明 Enable PCI Express Native に設定する Disable PCI Express Native に設定しない /S /? 説明表示 説明を表示する /R Memory 共有メモリのリフレッシュ 共有メモリのリフレッシュを実行します リフレッシュ 参照 /R Memory x 共有メモリのリフレッシュ 共有メモリのリフレッシュを実行します リフレッシュ 参照 x にはパーティション番号を指定する 本設定は /R Memory 実行時にパーティション番号の取得に失敗した場合に指定してください パーティション番号の確認方法は パーティション番号の確認方法 を参照してください /R Device x インタフェースモジュー ルのリフレッシュ /R Device RSW:x インタフェースモジュー ルのリフレッシュ ノード名 x のインタフェースモジュールのリフレッシュを実行します ( 4) リフレッシュ 参照 ロータリスイッチ RSW1 の設定値 x のインタフェースモジュールのリフレッシュを実行します ( 4) リフレッシュ 参照 /R /? 説明表示 説明を表示する /? 説明表示 説明を表示する 1 デフォルトは 32bit 環境です 一度設定するとその設定は保存されます マスタデバイスと接続されていれば自動に 158

159 設定がされます 2 Virtual ウィンドウ Link ウィンドウの要求するサイズが大きい場合 コンピュータがメモリリソースを割り当てられず コンピュータが起動しなくなる可能性があります コンピュータの構成などよく理解した上で設定を行ってください 3 インタフェースモジュールにこのコマンドを実行してはいけません 4 Classembly Devices の光拡張スロットにこのコマンドを実行してはいけません 5 設定を実行したコンピュータのスレーブデバイスに対して設定が行われます 6 設定ユーティリティを実行しているコンピュータが 64bitOS の場合 本設定を行うためには デバイスアクセス用ドライバのインストールが必要です インストール方法については README.HTM の デバイスアクセス用ドライバのインストール を参照してください 159

160 7.2 ユーティリティ (IfHnlUtil.exe) 共有メモリのダンプ表示 データの書き込み 割り込み監視 割り込み要求 データ転送を行うことができます このユーティリティで使用できる領域は 4GB までです ユーティリティは管理者権限が必要です # パラメータ説明 1 Dump Memory Window を 4CH のいずれかを選択することで Dump 表示されます 500ms ごとに表示が更新されます 2 Interrupt Monitoring 割り込み監視です 割り込みが入ったら割り込み要求元の Node 名にカウントされます 3 Start position of Dump 選択した開始アドレスを表示します 160

161 7.2.1 起動方法 1. ドライバソフトウェアのインストール 設定ユーティリティでの設定完了後 スタート メニューより プログラム - Interface GPC IfHnlUtil を開きます 2. File - Device Open を選択してください Select a Device よりデバイスを指定して OK ボタンを押してください 3. 次に Map が立ち上がるので Map する領域を指定します 161

162 4. Window の選択時にスレーブコンピュータ - スレーブコンピュータ間での接続を選択する場合は Link window channel を選択してください マップ変更方法 1. Edit - Mapping change を選択してください 2. 次に Map フォームが立ち上がるのでマップする領域を指定します 3. OK ボタンを押すと マップ領域が変更されます Map できる最大サイズは 4GB までです データ転送 DMA 転送でデータ転送をします PCI , PEX , CPZ 以外の製品の場合はメモリのリードライトで転送を行います 1. Edit - Data Transfer の中から転送方法を選択してください Memory -> File マップしているメモリからファイルへデータ転送します File -> Memory ファイルからマップしているメモリへデータ転送します Memory -> Memory マップしているメモリからメモリへデータ転送します ファイルはバイナリ CSV データファイルのどちらかを選択できます CSV データファイルは 16 進で値をカンマ区切りに Byte 単位で入力したファイルです 2. 各転送方法のフォームが立ち上がります 3. 転送データの情報を指定して OK ボタンを押すと 転送が開始されます 4. ファイルの選択は ファイルの種類 から バイナリ CSV ファイル のどちらかを選択して 転送するファイルを選択してください 5. Option で DMA チャンネルの指定ができます データ転送の最大サイズは 8MB です 162

163 7.2.4 割り込み要求 1. Edit - Interrupt request を選択してください 2. 次にフォームが立ち上がります 3. ノード名を選択してください OK ボタンを押すと そのノードに対して割り込みを発生させます 割り込み監視表示のクリア割り込み監視表示をクリアできます 1. View - Clear of interrupt monitoring を選択してください 2. 割り込み監視のカウントがクリアされます 163

FBWFMemoryWatcher

FBWFMemoryWatcher IFFBWFMEMORYWATCHER.WIN FBWF Memory Watcher Classembly Devices 用 Windows ドライバソフトウェア Help for Windows www.interface.co.jp 目次 第 1 章はじめに 3 1.1 概要...3 1.2 特長...3 第 2 章製品仕様 4 2.1 基本仕様...4 2.2 製品構成...4 第 3 章導入方法

More information

BPC-0821 Help for Windows

BPC-0821 Help for Windows IFMEM4G.WIN BPC-0821 Windows 用メモリアクセスツール Help for Windows www.interface.co.jp 目次 第 1 章はじめに 2 1.1 概要...2 1.2 特長...2 第 2 章製品仕様 3 2.1 基本仕様...3 2.2 製品構成...3 第 3 章導入方法 4 3.1 インストール手順...4 3.2 実行手順...4 第 4 章リファレンス

More information

EWF管理ソフトウェア

EWF管理ソフトウェア IFEWF.WIN EWF 管理ソフトウェア Classembly Devices /FA コントローラ用 Windows ソフトウェア Help for Windows www.interface.co.jp 目次 第 1 章はじめに 3 1.1 概要...3 1.2 特長...3 第 2 章 製品仕様 4 2.1 基本仕様...4 2.2 製品構成...4 第 3 章 導入方法 5 3.1 インストール手順...5

More information

DPC-0401

DPC-0401 Interface USB Driver (I/O-CD) DPC-0401 USB 拡張 I/O 用 Windows ドライバ Help for Windows www.interface.co.jp 目次 第 1 章はじめに...3 1.1 概要...3 1.2 各 I/O に対応したドライバ...3 第 2 章製品仕様...4 2.1 基本仕様...4 2.2 製品構成...4 2.3 クラスライブラリの参照方法...5

More information

GPC-6105

GPC-6105 PULSE4(PCI)GEN GPC-6105 パルス出力製品 Windows 対応ドライバソフトウェア Help for Windows www.interface.co.jp 目次 第 1 章はじめに 2 1.1 概要...2 1.2 特長...2 第 2 章製品仕様 3 2.1 基本仕様...3 第 3 章導入方法 4 3.1 インストール手順...4 3.2 実行手順...4 3.3 クラスライブラリの参照方法...7

More information

システム監視ライブラリ

システム監視ライブラリ IFCPMGR.WIN システム監視ライブラリ ATX マザーボード用 Windows ドライバソフトウェア www.interface.co.jp 目次 第 1 章はじめに 3 1.1 概要...3 1.2 特長...3 第 2 章製品仕様 4 2.1 基本仕様...4 2.2 製品構成...4 第 3 章導入方法 5 3.1 インストール手順...5 3.2 クラスライブラリの参照方法...5

More information

DPC-0244

DPC-0244 DIO(PCI/C-PCI) DPC-0224 汎用入出力モジュール用 Windows ライブラリ Help for Windows www.interface.co.jp 目次 第 1 章はじめに 3 1.1 概要...3 第 2 章導入方法 4 2.1 インストール手順...4 2.2 使用方法...4 2.3 実行手順...7 第 3 章リファレンス 9 3.1 関数一覧...9 3.2 未サポート関数...10

More information

<4D F736F F D20B6BCB5D7B2CCDED7D8CFC6ADB1D9315F43532E444F43>

<4D F736F F D20B6BCB5D7B2CCDED7D8CFC6ADB1D9315F43532E444F43> CASSIOPEIA DT-10 ライブラリマニュアル for C# Bluetooth 編 Ver 1.00 変更履歴 No Revision 更新日 項 改訂内容 1 1.00 05/2/22 初版初版発行 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 目次 1. 概要...1 2. 動作環境...1 3. 開発環境...1

More information

CashDrawer ライブラリ API 仕様書 2014/07/09 CashDrawer ライブラリ API 仕様書 Rev / 10

CashDrawer ライブラリ API 仕様書 2014/07/09 CashDrawer ライブラリ API 仕様書 Rev / 10 2014/07/09 CashDrawer ライブラリ API 仕様書 Rev. 00.0.04 1 / 10 目次 1. ファイル構成... 3 2. 環境 3 2.1. 動作環境 OS... 3 2.2. コンパイル時の注意点... 3 2.3. USB ドライバ... 3 3. 関数一覧... 4 3.1. USB 接続確認処理 (CD_checkConnect CD_checkConnect)

More information

API 連携方式 外部 DLL の呼び出し宣言 外部 DLL の呼び出し宣言のサンプルコード (Microsoft Visual C#.NET の場合 ) プログラムコードの先頭で using System.Runtime.InteropServices; が必要 クラスの内部に以下のような外部 D

API 連携方式 外部 DLL の呼び出し宣言 外部 DLL の呼び出し宣言のサンプルコード (Microsoft Visual C#.NET の場合 ) プログラムコードの先頭で using System.Runtime.InteropServices; が必要 クラスの内部に以下のような外部 D GS1-128 の描画 DLL について (ver. 2.2) 動作環境など動作環境 WindowsXP Windows Vista Windows7 Windows8/8.1 Windows10 上記 OS について すべて日本語版を対象としております 32bit アプリケーションから呼び出される必要があります 使用条件 プリンタの解像度 300dpi 以上 機能 バーコードの基本幅を 1 ドット単位で指定できる

More information

DPC-0403

DPC-0403 IFUSBIO(I/O-CD) DPC-0403 CoolIOs USB 製品用 Windows ドライバ Help for Windows www.interface.co.jp 目次 第 1 章はじめに 3 1.1 概要...3 1.2 特長...3 第 2 章製品仕様 4 2.1 基本仕様...4 2.2 製品構成...5 第 3 章導入方法 7 3.1 インストール手順...7 3.2 実行手順...7

More information

GPC-4851

GPC-4851 CAN(PCI/C-PCI) GPC-4851 CAN インタフェースモジュール用 Windows ドライバ Help for Windows www.interface.co.jp 目次 第 1 章はじめに 3 1.1 概要...3 1.2 特長...3 第 2 章製品仕様 4 2.1 基本仕様...4 2.2 対応型式...5 2.3 製品構成...8 2.4 注意事項...11 第 3 章導入方法

More information

目次 目次... 1 はじめに... 3 概要... 4 サポート環境... 5 関数... 6 MEC_OpenDevice... 7 MECDevice_Release... 8 MECDevice_GetFirmVersion... 9 MECDevice_GetCoreTemperature

目次 目次... 1 はじめに... 3 概要... 4 サポート環境... 5 関数... 6 MEC_OpenDevice... 7 MECDevice_Release... 8 MECDevice_GetFirmVersion... 9 MECDevice_GetCoreTemperature MECodecAPI Reference Manual 2015 年 9 月 1 日 MEDIAEDGE 株式会社 目次 目次... 1 はじめに... 3 概要... 4 サポート環境... 5 関数... 6 MEC_OpenDevice... 7 MECDevice_Release... 8 MECDevice_GetFirmVersion... 9 MECDevice_GetCoreTemperature...

More information

GS1-128 の描画 DLL について (ver. 2.3) 動作環境など動作環境 WindowsXP Windows Vista Windows7 Windows8/8.1 Windows10 上記 OS について すべて日本語版を対象としております 32bit アプリケーションから呼び出される

GS1-128 の描画 DLL について (ver. 2.3) 動作環境など動作環境 WindowsXP Windows Vista Windows7 Windows8/8.1 Windows10 上記 OS について すべて日本語版を対象としております 32bit アプリケーションから呼び出される GS1-128 の描画 DLL について (ver. 2.3) 動作環境など動作環境 WindowsXP Windows Vista Windows7 Windows8/8.1 Windows10 上記 OS について すべて日本語版を対象としております 32bit アプリケーションから呼び出される必要があります 使用条件 プリンタの解像度 300dpi 以上 機能 バーコードの基本幅を 1 ドット単位で指定できる

More information

プロセス間通信

プロセス間通信 プロセス間通信 プロセス間通信 (SendMessage) プロセス間通信とは 同一コンピューター上で起動して居るアプリケーション間でデータを受け渡し度い事は時々有る Framework には リモート処理 と謂う方法でデータの受け渡しを行なう方法が有る 此処では 此の方法では無く 従来の方法の API を使用したプロセス間通信を紹介する 此の方法は 送信側は API の SendMessage で送り

More information

型名 RF007 ラジオコミュニケーションテスタ Radio Communication Tester ソフトウェア開発キット マニュアル アールエフネットワーク株式会社 RFnetworks Corporation RF007SDK-M001 RF007SDK-M001 参考資料 1

型名 RF007 ラジオコミュニケーションテスタ Radio Communication Tester ソフトウェア開発キット マニュアル アールエフネットワーク株式会社 RFnetworks Corporation RF007SDK-M001 RF007SDK-M001 参考資料 1 型名 RF007 ラジオコミュニケーションテスタ Radio Communication Tester ソフトウェア開発キット マニュアル アールエフネットワーク株式会社 RFnetworks Corporation RF007SDK-M001 RF007SDK-M001 参考資料 1 第 1 章製品概要本開発キットは RF007 ラジオコミュニケーションテスタ ( 本器 ) を使用したソフトウェアを開発するためのライブラリソフトウェアです

More information

AquesTalk プログラミングガイド

AquesTalk プログラミングガイド AquesTalk プログラミングガイド ( 株 ) アクエスト 1. 概要 本文書は 規則音声合成ライブラリ AquesTalk をアプリケーションに組み込んで使用するためのプログラミングに関して 方法および注意点を示したものです AquesTalk には 2 種類のライブラリがあります 音声データをメモリ上に生成するものと サウンドデバイスに出力する 2 種類があります 使用するアプリケーションに応じて選択してください

More information

ごあいさつ このたびは ESMPRO/AC Advance マルチサーバオプション Ver3.6(1 ライセンス ) をお買い上げ頂き 誠にありがとうございます 本書は お買い上げ頂きましたセットの内容確認 セットアップの内容 注意事項を中心に構成されています ESMPRO/AC Advance マ

ごあいさつ このたびは ESMPRO/AC Advance マルチサーバオプション Ver3.6(1 ライセンス ) をお買い上げ頂き 誠にありがとうございます 本書は お買い上げ頂きましたセットの内容確認 セットアップの内容 注意事項を中心に構成されています ESMPRO/AC Advance マ NEC Express5800 シリーズ ESMPRO /AC Advance マルチサーバオプション Ver3.6 1 ライセンス セットアップカード 1 ごあいさつ このたびは ESMPRO/AC Advance マルチサーバオプション Ver3.6(1 ライセンス ) をお買い上げ頂き 誠にありがとうございます 本書は お買い上げ頂きましたセットの内容確認 セットアップの内容 注意事項を中心に構成されています

More information

Microsoft Word - 7_rusb.doc

Microsoft Word - 7_rusb.doc お客様各位 有限会社らびっとはうす Windows 7 でのドライバ インストール方法 平素は弊社製品をご愛用いただき 誠にありがとうございます 以下に Windows 7 でのドライバ インストール方法を説明いたします ご使用になるパソコンは Windows XP が動作可能な環境を前提としています 対象製品 :R-USB シリーズ (R-USB-PIO8/8R, R-USB-PIO8/8, R-USB-PI16,

More information

データ移行ツール ユーザーガイド Data Migration Tool User Guide SK kynix Inc Rev 1.01

データ移行ツール ユーザーガイド Data Migration Tool User Guide SK kynix Inc Rev 1.01 データ移行ツール ユーザーガイド Data Migration Tool User Guide SK kynix Inc. 2014 Rev 1.01 1 免責事項 SK hynix INC は 同社の製品 情報および仕様を予告なしに変更できる権利を有しています 本資料で提示する製品および仕様は参考情報として提供しています 本資料の情報は 現状のまま 提供されるものであり 如何なる保証も行いません

More information

型名 RF014 デジタル ラジオコミュニケーションテスタ Digital Radio Communication Tester ソフトウェア開発キット マニュアル アールエフネットワーク株式会社 RFnetworks Corporation 参考資料 RF014SDK-M001 第 1 章製品概要本開発キットは RF014 デジタルラジオコミュニケーションテスタ ( 本器 ) を使用したソフトウェアを開発するためのライブラリソフトウェアです

More information

AquesTalk for WinCE プログラミングガイド

AquesTalk for WinCE プログラミングガイド AquesTalk for WinCE プログラミングガイド ( 株 ) アクエスト 1. 概要 本文書は 規則音声合成ライブラリ AquesTalk for WinCE ( 以下 AquesTalk) をアプリケーションに組み込んで使用するためのプログラミングに関して 方法および注意点を示したものです AquesTalk には 2 種類のライブラリがあります 音声データをメモリ上に生成するものと

More information

1. UART について UART は Universal Asynchronous Receiver Transmitter の頭文字をとったもので 非同期シリアル通信と呼ばれます シリアル通信とは 一本の信号線でデータをやりとりするために 1bit ずつデータを送出することをいいます データを受

1. UART について UART は Universal Asynchronous Receiver Transmitter の頭文字をとったもので 非同期シリアル通信と呼ばれます シリアル通信とは 一本の信号線でデータをやりとりするために 1bit ずつデータを送出することをいいます データを受 STM32L_UART1 の説明 V004 2014/03/30 STM32L-Discovery の UART 1 の送受信を行うプログラムです 無料の開発ツール Atollic TrueSTUDIO for ARM Lite( 試用版 ) で作成したプロジェクトです プログラムの開始番地は 0x08000000 です デバッグが可能です PC アプリケーションの Access_SerialPort

More information

AquesTalk Win Manual

AquesTalk Win Manual AquesTalk Win マニュアル 株式会社アクエスト http://www.a-quest.com/ 1. 概要 本文書は 規則音声合成ライブラリ AquesTalk をアプリケーションに組み込んで使用するためのプログラミングに関して 方法および注意点を示したものです AquesTalk には 2 種類のライブラリがあります 音声データをメモリ上に生成するものと サウンドデバイスに出力する 2

More information

このダイナミックリンクライブラリ GaugeC48.dll は 8CH から 48CH 用の DigitalGaugeCounterDG3000 シリーズ共通の DLL です この説明書は GaugeC48.dll を使ったアプリケーションを作成するためのものです 開発環境は MicrosoftVi

このダイナミックリンクライブラリ GaugeC48.dll は 8CH から 48CH 用の DigitalGaugeCounterDG3000 シリーズ共通の DLL です この説明書は GaugeC48.dll を使ったアプリケーションを作成するためのものです 開発環境は MicrosoftVi DigitalGaugeCounter DG3000 シリーズ ダイナミックリンクライブラリ GaugeC48.dll(DLL) 取扱説明書 このダイナミックリンクライブラリ GaugeC48.dll は 8CH から 48CH 用の DigitalGaugeCounterDG3000 シリーズ共通の DLL です この説明書は GaugeC48.dll を使ったアプリケーションを作成するためのものです

More information

1. A/D 入力について分解能 12bit の A/D コンバータ入力です A/D 入力電圧とディジタル値との対応は理論上 入力電圧 0V : 0 入力電圧 +3V : 4095 です 実際はオフセットと傾きがあり ぴったりこの数値にはなりません 2. A/D 入力に使用する信号 STM32L_A

1. A/D 入力について分解能 12bit の A/D コンバータ入力です A/D 入力電圧とディジタル値との対応は理論上 入力電圧 0V : 0 入力電圧 +3V : 4095 です 実際はオフセットと傾きがあり ぴったりこの数値にはなりません 2. A/D 入力に使用する信号 STM32L_A STM32L_ADC の説明 V003 2014/03/30 STM32L-Discovery の A/D 入力を行うプログラムです A/D CH0 ~ A/D CH3 の 4 本の入力が可能です 提供する PC のアプリケーション Access_SerialPort を使用して UART( 非同期シリアル通信 ) により A/D 入力の表示を行うことができます 無料の開発ツール Atollic TrueSTUDIO

More information

CONTEC DIOプロバイダ ユーザーズガイド

CONTEC DIOプロバイダ ユーザーズガイド DIO プロバイダユーザーズガイド - 1 - DIO プロバイダ CONTEC DIO ボード Version 1.1.2 ユーザーズガイド July 17, 2012 備考 ORiN2SDK2.0.14 以降, このプロバイダは CONTEC 社の API-DIO(WDM) を使用しています. 以前 までの API-DIO(98PC) を使用する場合は,DIO98 プロバイダを使用してください.

More information

User Support Tool 操作ガイド

User Support Tool 操作ガイド User Support Tool - 操作ガイド - User Support Tool とは? User Support Tool は ファームウェアを更新するためのユーティリティソフトウェアです 本書では User Support Tool を使用して プリンタのファームウェアを更新する方法を解説しています ご使用前に必ず本書をお読みください 1 準備する 1-1 必要なシステム環境...P.

More information

RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for

RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for ARM Lite 4.2.0 で作成した STM32F4 Discovery 基板用のプロジェクトです

More information

UIOUSBCOM.DLLコマンドリファレンス

UIOUSBCOM.DLLコマンドリファレンス UIOUSBCOM.DLL UIOUSBCOM.DLL Command Reference Rev A.1.0 2008/11/24 オールブルーシステム (All Blue System) ウェブページ : www.allbluesystem.com コンタクト :contact@allbluesystem.com 1 このマニュアルについて...3 1.1 著作権および登録商標...3 1.2

More information

Microsoft Word - DT-5100Lib_Manual_DotNet.doc

Microsoft Word - DT-5100Lib_Manual_DotNet.doc CASSIOPEIA DT-5100 シリーズ.NET ライブラリマニュアル 概要編 Ver 3.00 変更履歴 No Revision 更新日項改訂内容 1 1.00 03/1/20 初版初版発行 2 3.00 05/03/15 3 カシオライブラリマニュアル (.NET) 開発マニュアルの 1~4 をひとまとめ にしました 4 5 6 7 8 9 10 11 12 13 14 15 16 17

More information

REX-USB56 「FAX送信」編 第6.0版

REX-USB56 「FAX送信」編 第6.0版 OS 付属ソフトの設定から まで REX-USB56 2016 年 3 月第 6.0 版 Windows 10 Vista の場合の場合 付属の FAX ソフトの設定など詳細は Microsoft 社にお問い合せください 1. FAX の設定をする 1-1. 1-3. 1 ツール をクリック 2 すべてのアプリ をクリック 2 FAX の設定 をクリック 1 スタート をクリック 1-2. 1-4.

More information

利用ガイド

利用ガイド Linux/Dos 版起動 CD の使用方法について この資料では LB コピーワークスの Linux/Dos 版起動 CD の使用方法についてご紹介します 1-1 起動 CD からの起動方法起動 CD をドライブにセットして PC を再起動 ( 起動 ) します CD からブートされ LB コピーワークス 10 のメインメニューが表示されます この画面が表示されずに OS が起動してしまう場合には

More information

SAMBA Stunnel(Windows) 編 1. インストール 1 セキュア SAMBA の URL にアクセスし ログインを行います xxx 部分は会社様によって異なります xxxxx 2 Windows 版ダウンロード ボ

SAMBA Stunnel(Windows) 編 1. インストール 1 セキュア SAMBA の URL にアクセスし ログインを行います   xxx 部分は会社様によって異なります xxxxx 2 Windows 版ダウンロード ボ 操作ガイド Ver.2.3 目次 1. インストール... - 2-2. SAMBA Stunnel 利用... - 8-2.1. 接続確認... - 8-2.2. 編集... - 11-2.3. インポート... - 14-2.4. 削除... - 15-2.5 フォルダショートカットの作成... - 16-3. 動作環境... - 18-4. 参考資料 ( 接続状況が不安定な場合の対処方法について

More information

CoIDE 用 F4D_VCP の説明 V /07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x

CoIDE 用 F4D_VCP の説明 V /07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x CoIDE 用 F4D_VCP の説明 V001 2014/07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x08000000 です デバッグが可能です 目次 1. USB の VCP( 仮想 COM ポート )

More information

GHS混合物分類判定システムインストールマニュアル

GHS混合物分類判定システムインストールマニュアル GHS 混合物分類判定システムインストールマニュアル ~ ダウンロード版 ~ Ver.3.0 目次 1 はじめに... 1 1.1 目的... 1 1.2 本手順書について... 1 1.3 動作環境... 2 2 インストール... 3 2.1 Windows 8(8.1) Windows10 のセットアップ事前準備... 3 2.2 セットアップツールの実行... 5 2.3 必須コンポーネント...

More information

Taro-82ADAカ.jtd

Taro-82ADAカ.jtd デジタル & アナログ絶縁入出力ユニット解説書製品型式 8 2 A D A - K C 製品型式 8 2 A D A - B D 製品型式 D A C S - 8 2 0 0 この解説書は 8 2 A D A または D A C S - 8 2 0 0 の動作と使用方法について簡単に説明したものです D A C S - 8 2 0 0 の場合は この解説書の 8 2 A D A という表現を 一部

More information

CompuSec SW 強制削除手順

CompuSec SW 強制削除手順 CompuSec SW 強制削除手順 CompuSec SW Ver.5.2 Windows 7, Vista 機能 仕様は予告なく変更される場合があります 2012/08/29 - はじめに - CompuSec を導入直後から OS が起動しない USB 機器や SD カードの類は接続されておらず USB に関する BIOS 設定を変更しても回避できないなど PC 固有の問題や原因が特定できない場合は

More information

1. USB の VCP( 仮想 COM ポート ) について USB の VCP( 仮想 COM ポート ) は USB を非同期シリアル通信として使用するための USB のドライバです PC には VCP ドライバをインストールする必要があります USB の VCP( 仮想 COM ポート )

1. USB の VCP( 仮想 COM ポート ) について USB の VCP( 仮想 COM ポート ) は USB を非同期シリアル通信として使用するための USB のドライバです PC には VCP ドライバをインストールする必要があります USB の VCP( 仮想 COM ポート ) TrueSTUDIO 用 F4D_VCP の説明 V001 2014/07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです 無料の試用版開発ツール Atollic TrueSTUDIO for ARM Lite で作成したプロジェクトです ビルド可能なプログラムのコードサイズが 32Kbyte 以内の制限があります プログラムの開始番地は 0x08000000

More information

プロバイダ ユーザーズガイド

プロバイダ ユーザーズガイド AIO プロバイダユーザーズガイド 1 AIO プロバイダ CONTEC AIO ボード Version 1.0.1 ユーザーズガイド July 17,2012 備考 AIO プロバイダユーザーズガイド 2 改版履歴 バージョン 日付 内容 1.0.0.0 2011712 初版. 1.0.1.0 2012529 メタモード追加. 1.0.1 2012717 ドキュメントのバージョンルールを変更. 対応機器

More information

『テクノス』V2プログラムインストール説明書

『テクノス』V2プログラムインストール説明書 土木積算システム テクノス V2 プログラム インストール説明書 ( 第 3 版 ) 目 次 1. テクノス V2 プログラム インストールの概要...3 2. テクノス V2 のプログラム ドライバ インストール...4 3. テクノス V2 の初期起動...10 4. アンインストール...11 5. 補足 ( 動作環境 )...11 2. 1. テクノス V2 プログラム インストールの概要

More information

REX-C56EX FAX送信 第5.0版

REX-C56EX FAX送信 第5.0版 OS 付属ソフトの設定から FAX 送信まで FAX 送信 REX-C56EX 2015 年 10 月第 5.0 版 Windows 10 Vista の場合の場合 付属の FAX ソフトの設定など詳細は Microsoft 社にお問い合せください 1. FAX の設定をする 1-1. 1-3. 1 ツール をクリック 2 すべてのアプリ をクリック 2 FAX の設定 をクリック 1 スタート をクリック

More information

Windows2000/XPインストール手順

Windows2000/XPインストール手順 日歯生涯研修事業 IC カード用研修受付ソフト インストール手順書 (NFC Port Software 用 ) 日本歯科医師会 1 IC カード用研修受付ソフト の NFC Port Software のインストール手順... 3 1. インストール前の確認事項... 3 2. インストール手順の概略説明... 4 3. 新規インストール... 5 4. 既に FeliCa Port Software

More information

はじめに 京セラ製スマートフォンを指定の microusb ケーブル ( 別売 ) またはこれと共通仕様の microusb ケーブル ( 別売 )( 以下 USB ケーブル ) と接続して USB テザリング機能をご使用いただくためには あらかじめパソコンに USB ドライバ をインストールしてい

はじめに 京セラ製スマートフォンを指定の microusb ケーブル ( 別売 ) またはこれと共通仕様の microusb ケーブル ( 別売 )( 以下 USB ケーブル ) と接続して USB テザリング機能をご使用いただくためには あらかじめパソコンに USB ドライバ をインストールしてい 京セラ製スマートフォン用 USB ドライバインストールマニュアル 本書内で使用されている表示画面は説明用に作成されたものです OS のバージョンやお使いのパソコンの環境 セキュリティ設定によっては表示画面の有無 詳細内容 名称が異なる場合があります 本書は お客様が Windows の基本操作に習熟していることを前提にしています パソコンの操作については お使いのパソコンの取扱説明書をご覧ください

More information

Windows AIKを使用したPE2

Windows AIKを使用したPE2 Windows AIK を使用した PE2.0 ベースの起動 CD 作成方法 この資料では マイクロソフト社から提供されている Windows AIK( 自動インストールキット ) を使用して Windows PE 2.0 ベースの起動 CD を作成する方法をご紹介します Image Backup や LB コピーコマンダーなどの製品 CD やリカバリーメディアは 主に DOS や Linux 環境で動作するため

More information

CommCheckerManual_Ver.1.0_.doc

CommCheckerManual_Ver.1.0_.doc 通信チェックツール (CommChecker) 取扱説明書 (Ver.1.0) 2009 ESPEC Corp. 目次 1. 使用条件 4 2. ダウンロード & インストール 5 3. 環境設定 6 3-1.RS-485 通信 6 3-2.RS-232C 通信 7 3-3.GPIB 通信 8 4. ソフトウェアの使用方法 9 4-1. 起動 9 4-2. 通信設定 10 (1)RS485 通信 10

More information

2. セットアップ手順の開始 セットアップ手順を進める前に OS をインストールするパーティションのサイズを決定して ください システムをインストールするパーティションのサイズは 次の計算式から求めること ができます インストールに必要なサイズ + ページングファイルサイズ + ダンプファイルサイズ

2. セットアップ手順の開始 セットアップ手順を進める前に OS をインストールするパーティションのサイズを決定して ください システムをインストールするパーティションのサイズは 次の計算式から求めること ができます インストールに必要なサイズ + ページングファイルサイズ + ダンプファイルサイズ 大切に保管してください Express5800/ R320a-M4, R320a-E4 Windows Server 2008 32bit インストール手順書 表記対象製品に Windows Server 2008 Enterprise 32-bit(x86) Edition をインストールする手順について説明します Windows Server 2008 Enterprise 32-bit(x86)

More information

Windows2000/XPインストール手順

Windows2000/XPインストール手順 日歯生涯研修事業 IC カード用研修受付ソフト インストール手順書 (Windows 10 用 ) 日本歯科医師会 1 IC カード用研修受付ソフト の Windows 10 へのインストール手順... 3 1. インストール前の確認事項... 3 2. インストール手順の概略説明... 4 3. 新規インストール... 5 4. 既に IC カード用研修受付ソフト がインストールされている場合...

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プロシージャ プロシージャの種類 Subプロシージャ Functionプロシージャ Propertyプロシージャ Sub プロシージャ Subステートメント~ステートメントで囲まれる 実行はするけど 値は返さない 途中で抜けたいときは Exit Sub を行なう Public Sub はマクロの実行候補に表示される Sub プロシージャの例 Public Sub TestSubProc() Call

More information

商標類 Microsoft は, 米国およびその他の国における米国 Microsoft Corp. の登録商標です Microsoft Office は, 米国 Microsoft Corp. の商品名称です Microsoft Excel は, 米国 Microsoft Corp. の商品名称です

商標類 Microsoft は, 米国およびその他の国における米国 Microsoft Corp. の登録商標です Microsoft Office は, 米国 Microsoft Corp. の商品名称です Microsoft Excel は, 米国 Microsoft Corp. の商品名称です 報告書集計システム 集計ツール Version 08-03/CL セットアップガイド 株式会社日立システムズ 商標類 Microsoft は, 米国およびその他の国における米国 Microsoft Corp. の登録商標です Microsoft Office は, 米国 Microsoft Corp. の商品名称です Microsoft Excel は, 米国 Microsoft Corp. の商品名称です

More information

はじめに URBANO PROGRESSO を microusb ケーブル 01 ( 別売 ) またはこれと共通の仕様の microusb ケーブル ( 別売 )( 以下 USB ケーブル ) と接続して USB テザリング機能をご使用いただくためには あらかじめパソコンに USB ドライバ をイン

はじめに URBANO PROGRESSO を microusb ケーブル 01 ( 別売 ) またはこれと共通の仕様の microusb ケーブル ( 別売 )( 以下 USB ケーブル ) と接続して USB テザリング機能をご使用いただくためには あらかじめパソコンに USB ドライバ をイン はじめに URBANO PROGRESSO を microusb ケーブル 01 ( 別売 ) またはこれと共通の仕様の microusb ケーブル ( 別売 )( 以下 USB ケーブル ) と接続して USB テザリング機能をご使用いただくためには あらかじめパソコンに USB ドライバ をインストールしていただく必要があります USB ドライバをインストールする 3 パソコンに接続する 4 接続状態を確認する

More information

地図 SD カードを取り外す 最初に ナビゲーション本体から地図 SD カードを取り外します 本操作は地図 SD カードを初めて ROAD EXPLORER Updater に登録するときや パソコンにダウンロードしたデータを地図 SD カードに保存するときに実行してください 1 ナビゲーション本体

地図 SD カードを取り外す 最初に ナビゲーション本体から地図 SD カードを取り外します 本操作は地図 SD カードを初めて ROAD EXPLORER Updater に登録するときや パソコンにダウンロードしたデータを地図 SD カードに保存するときに実行してください 1 ナビゲーション本体 ROAD EXPLORER Updater 取扱説明書 205-0001-06 Version:1.4.0.0 ROAD EXPLORER Updater を使用する前に必ずお読みください ROAD EXPLORER Updater の操作手順は Microsoft Windows XP の画面を例に説明しています 画面例は実際と異なる場合があります 目次 ROAD EXPLORER Updater

More information

1. はじめに Systemwalker Desktop Patrol V 以降でセキュリティ監査として BIOS パスワード設定の監査 を提供しています しかし Systemwalker Desktop Patrol メインメニュー のセキュリティ情報に表示される起動パスワード 設定パ

1. はじめに Systemwalker Desktop Patrol V 以降でセキュリティ監査として BIOS パスワード設定の監査 を提供しています しかし Systemwalker Desktop Patrol メインメニュー のセキュリティ情報に表示される起動パスワード 設定パ Systemwalker Desktop Patrol BIOS パスワード設定状況確認ツール利用ガイド 第 1.1 版 2011 年 4 月 5 日 1. はじめに Systemwalker Desktop Patrol V13.0.0 以降でセキュリティ監査として BIOS パスワード設定の監査 を提供しています しかし Systemwalker Desktop Patrol メインメニュー のセキュリティ情報に表示される起動パスワード

More information

1. はじめに (1) 本書の位置づけ 本書ではベジフルネット Ver4 の導入に関連した次の事項について記載する ベジフルネット Ver4 で改善された機能について 新機能の操作に関する概要説明 ベジフルネット Ver4 プログラムのインストールについて Ver4 のインストール手順についての説明

1. はじめに (1) 本書の位置づけ 本書ではベジフルネット Ver4 の導入に関連した次の事項について記載する ベジフルネット Ver4 で改善された機能について 新機能の操作に関する概要説明 ベジフルネット Ver4 プログラムのインストールについて Ver4 のインストール手順についての説明 システム名称 : ベジフルネットシステム第 3 期 ベジフルネット Ver4 操作説明資料 目次 1. はじめに P1 2. 新機能の操作について (1) マスタ更新機能操作概要 P2 (2) 履歴出力機能操作概要 P6 (3) チェック機能操作概要 P7 (4)CSV 出力機能 P8 3. ベジフルネット Ver4 プログラムのインストール (1) ベジフルネット Ver4 インストール手順 P9

More information

K006/ K006 < カメラなしモデル >

K006/ K006 < カメラなしモデル > K006/ K006 < カメラなしモデル > はじめに 本書は K006 K006 < カメラなしモデル > ( 以降 K006 ) とパソコンを指定の USB ケーブル ( 別売 ) を使用して接続し インターネット通信や au ホームページで公開している各種ツールをご利用になるための USB ドライバ のインストール方法を説明しています USB ドライバをインストールする 3 パソコンに接続する

More information

PowerTyper マイクロコードダウンロード手順

PowerTyper マイクロコードダウンロード手順 必ずお読みください Interface Card 用マイクロコードを Ver 1.3.0 をVer 1.3.1 以降に変更する場合 または Ver 1.4.5 以前のマイクロコードを Ver 1.5.0 以降に変更する場合 ダウンロード前後に必ず以下の作業を行ってください ( バージョンは Webブラウザ上または付属ソフトウェア Print Manager のSystem Status 上で確認できます

More information

HDDコピーツール CloneDrive2

HDDコピーツール CloneDrive2 裸族のお立ち台 DJ Revolution CROS2U3RV 専用アプリ 2018 04/24 HDD コピーツール CloneDrive2 取扱説明書 HDD コピーツール CloneDrive2 1. 概要 3 2. 対応 OS 対応機種 4 3. ソフトウェアを起動する 5 4. 用方法 8 もくじ2 1概要HDDコピーツール CloneDrive2 OS がインストールされた HDDやSSDのデータを

More information

TFU-RW811A ドライバインストール手順書

TFU-RW811A ドライバインストール手順書 FUJITSU RFID センサーソリューションカウンターセンサースリム TFU-RW811A (USB 接続 920MHz 帯 RFID リーダライタ ) ( 特定小電力仕様 ) ドライバインストール手順書 1.1 版 2017/03/02 富士通フロンテック株式会社 1 変更履歴 版数 変更日 内容 1.0 2016/12/06 初版 1.1 2017/03/02 P.14,15: 誤記訂正 ドライバインストール後の動作確認時のパス名修正

More information

Windows Server 2003 Service Pack 適用手順書

Windows Server 2003 Service Pack 適用手順書 CLUSTERPRO X 1.0 for Windows Windows Server 2003 Service Pack 適用手順書 第 1 版 2007 年 5 月 21 日 本手順書では CLUSTERPRO X 環境における Windows Server 2003 Service Pack 1/2 の適用方法を説明します 以降 特に記述のない場合 Service Pack は Windows

More information

ホストプログラム操作説明書

ホストプログラム操作説明書 様 インストール操作説明書 USB ドライバインストール操作説明 JT-KP41U 32bit 対応カードリーダー用 NOTE: Windows XP / Server 2003 / Windows Vista / Server 2008 / Windows 7 / Windows 8 対応 バージョン :1.1.0.0 受領印欄 パナソニックシステムネットワークス株式会社モビリティビジネスユニット

More information

SAMBA Stunnel(Mac) 編 1. インストール 1 セキュア SAMBA の URL にアクセスし ログインを行います xxxxx 部分は会社様によって異なります xxxxx 2 Mac OS 版ダウンロー

SAMBA Stunnel(Mac) 編 1. インストール 1 セキュア SAMBA の URL にアクセスし ログインを行います   xxxxx 部分は会社様によって異なります xxxxx 2 Mac OS 版ダウンロー 操作ガイド Ver.2.3 目次 1. インストール... - 2-2. SAMBA Stunnel 利用... - 5-2.1. 接続確認... - 5-2.2. 編集... - 9-2.3. インポート... - 12-2.4. 削除... - 14-3. 動作環境... - 15-4. 参考資料 ( 接続状況が不安定な場合の対処方法について )... - 16-4.1. サービスの再起動...

More information

スライド 1

スライド 1 XCoveryTB インストール時エラーコード対応マニュアル インストール前の HDD 診断方法について P2 よく発生するエラーコード一覧 エラーコード 1030 1040 原因 C ドライブがブートドライブでない場合 (XP/VISTA の場合 ) C ドライブがブートドライブでない場合 (Windows7 の場合 ) 1400 C ドライブの残余スペースが少ない場合 (5GB 未満の場合 )

More information

改版履歴 版数 改訂日 該当頁 / 該当項目 改訂の要点 /03/31 6 対応 OSの変更に伴う修正 動作環境 の OS に以下を追加 Windows 8.1 Update (64Bit) Windows 8.1 Update Pro (64Bit) 動作環境 の OS から以

改版履歴 版数 改訂日 該当頁 / 該当項目 改訂の要点 /03/31 6 対応 OSの変更に伴う修正 動作環境 の OS に以下を追加 Windows 8.1 Update (64Bit) Windows 8.1 Update Pro (64Bit) 動作環境 の OS から以 平成 28 年 4 月 国民健康保険中央会 改版履歴 版数 改訂日 該当頁 / 該当項目 改訂の要点 4.0.0 2015/03/31 6 対応 OSの変更に伴う修正 動作環境 の OS に以下を追加 Windows 8.1 Update (64Bit) Windows 8.1 Update Pro (64Bit) 動作環境 の OS から以下を削除 Windows 8.1 (64Bit) Windows

More information

SecureLock Manager Liteの使いかた

SecureLock Manager Liteの使いかた 35005706 ver.15 SecureLock Manager Lite の使いかた 本書は 暗号化機能搭載 USB メモリー用の機能制限版管理者用ソフトウェア SecureLock Manager Lite について説明します SecureLock Manager Lite とは 暗号化機能搭載 USB メモリーの設定を行うソフトウェアです このソフトウェアを使用すれば 管理者の方があらかじめパスワードを設定したり

More information

スライド 1

スライド 1 Multimeter Version 1. 3. 3 簡易取扱説明書 2009 年 9 月 9 日 この簡易説明書は Multimeter Version 1. 3. 3 ( 以後 IntuiLink) の簡易説明書です サポートしておりますマルチメータは 34401A, 34405A, 34410A, 34411A, L4411A, 34420A です IntuiLink Multimeter は

More information

microsd メモリカード (microsdhc メモリカードを含む ) を IS11LG 本体にセットして データを保存することができます また 連絡先 メール ブックマークなどを microsd メモリカードに控えておくことができます アプリケーションによっては microsdメモリカードをセ

microsd メモリカード (microsdhc メモリカードを含む ) を IS11LG 本体にセットして データを保存することができます また 連絡先 メール ブックマークなどを microsd メモリカードに控えておくことができます アプリケーションによっては microsdメモリカードをセ ファイル管理 microsdメモリカードを利用する 227 microsdメモリカードを取り付ける 228 microsdメモリカードを取り外す 229 microusbケーブルでパソコンと接続する 230 メモリの使用量を確認する 232 226 microsd メモリカード (microsdhc メモリカードを含む ) を IS11LG 本体にセットして データを保存することができます また 連絡先

More information

Kyocera Mita KXドライバインストール手順書

Kyocera Mita KXドライバインストール手順書 Kyocera Mita KX ドライバインストール手順 古いバージョンの KX ドライバがインストールされている PC は インストール途中に表示される [ ソフトウェアコンポーネントのアップグレード ] からドライバのアップデートを行なっていただきます様お願い致します また インストール後 ( オプション機器のある方はプリンタのプロパティ画面よりデバイス設定をした後 ) プロパティ画面全般タブよりテストページの印刷

More information

ホストプログラム操作説明書

ホストプログラム操作説明書 様 インストール操作説明書 USB ドライバインストール操作説明 JT-KP41U 64bit 対応カードリーダー用 NOTE: Windows XP / Server 2003 / Windows Vista / Server 2008 / Windows 7 / Windows 8 / Server2012 対応 バージョン :1.1.0.0 受領印欄 パナソニックシステムネットワークス株式会社モビリティビジネスユニット

More information

Driver Specification for JX65x, 67x, 598

Driver Specification for JX65x, 67x, 598 .12 自販機プロトコル 12-1. 機能 自販機プロトコルは ASK 方式の赤外線通信で JVMA( 日本自動販売機工業会 ) 仕様の自販機と交信 するプロトコルです 12-2. 動作環境 機種 DT-9700 OS Microsoft WindowsCE.NET 4.1 12-3. 開発環境 Microsoft embedded C++ Version4.0 + SP1 Microsoft Visual

More information

ウィンドウ操作 応用

ウィンドウ操作 応用 Win32API 関数 ウィンドウ操作 ウィンドウ名でトップレベルウィンドウ ( 親を持たないウィンドウ ) のハンドルを取得 メモ帳や電卓等のウィンドウ名でトップレベルウィンドウ ( 親を持たないウィンドウ ) のハンドルを取得する方法を 下記に示す Visual Basic Imports System.Runtime.InteropServices Public Class WindowFromWindowName

More information

インストールの前に

インストールの前に インストールガイド 本書は CADSUPER Lite を新規インストールする際の手順を説明するものです インストールの前に... 2 ID-BOX ドライバの注意点... 2 CADSUPER シェル拡張について... 3 Andor アップデートサービスについて... 4 インストールの方法... 5 CADSUPER Lite インストールの手順... 5 CADSUPER シェル拡張インストールの手順...

More information

Microsoft Word - ssVPN MacOS クライアントマニュアル_120版.doc

Microsoft Word - ssVPN  MacOS クライアントマニュアル_120版.doc Mac OS クライアントソフトマニュアル 第 1.10/1.20 版 2014 年 1 月 7 日 - 目次 - はじめに... 3 1 動作環境... 3 2 インストール... 3 3 ssvpn の起動... 3 4 システム環境設定 ( Mac OS X 10.8, 10.9 )... 5 4.1 システム環境設定手順... 5 5 接続先設定 編集 削除... 8 5.1 新規接続先を設定する...

More information

(2) [ バックアップツール ] が表示されます [1] [2] [3] [4] [5] [6] Windows Storage Server 2012 バックアップ手順 (V_01) < 画面の説明 > [1] バックアップ項目リスト登録されているバックアップセットの一覧です [2] 新規 ボタ

(2) [ バックアップツール ] が表示されます [1] [2] [3] [4] [5] [6] Windows Storage Server 2012 バックアップ手順 (V_01) < 画面の説明 > [1] バックアップ項目リスト登録されているバックアップセットの一覧です [2] 新規 ボタ バックアップ手順 (Windows Storage Server 2012) V_01 1 バックアップツール を用いた定期バックアップ バックアップツール は Windows Storage Server 2012 標準の Windows Server バックアップ の制限事項を解消するためのオリジナルのツールです バックアップツール はバックアップ設定を複数作成出来るものになります < バックアップツール

More information

フォーマット/メンテナンスガイド

フォーマット/メンテナンスガイド 35020248-02 2015.10 フォーマット ( 初期化 ) について フォーマットとは ハードディスクや SSD USB メモリーをお使いのパソコンで使用できるようにする作業で す 本製品をフォーマットする場合は 本書の記載を参照して行ってください フォーマットの形式 フォーマットにはいくつかの形式があり お使いの OS によって認識できる形式が異なります 本製品を フォーマットするときは

More information

USB_IR_Remote_Controller_Advance_Library 取扱説明書 2016/06/23 R03 Assembly Desk USB_IR_Remote_Controller_Advance_Library を使用すると 弊社製 USB IR Remote controll

USB_IR_Remote_Controller_Advance_Library 取扱説明書 2016/06/23 R03 Assembly Desk USB_IR_Remote_Controller_Advance_Library を使用すると 弊社製 USB IR Remote controll USB_IR_Remote_Controller_Advance_Library 取扱説明書 2016/06/23 R03 Assembly Desk USB_IR_Remote_Controller_Advance_Library を使用すると 弊社製 USB IR Remote controller Advance から赤外線コードを送信する Windows アプリケーション (x86 版 )

More information

目次 1. 概要 動作環境

目次 1. 概要 動作環境 Asaka Data Entry for RS-232C (ADE-RS) Personal Edition ユーザーズガイド (Ver 1.1) 株式会社アサカ理研 目次 1. 概要 -------------------------------------------------------------------- 2 2. 動作環境 ------------------------------------------------------------------

More information

マニュアル訂正連絡票

マニュアル訂正連絡票 < マニュアル訂正連絡票 > ASP PC ファイルサーバ説明書 V28 [J2K0-5740-01C2] 2017 年 12 月 26 日発行 修正箇所 ( 章節項 )5.3.2.3 サーバ環境の設定 作成時のアクセス権 PC ファイルサーバ上に,Windows がファイルまたはディレクトリを作成する際のアクセス権を設定する. 所有者, グループ, その他に対してそれぞれ, 読み込み, 書き込み,

More information

スライド 1

スライド 1 ReadCache3.6 変更点資料 株式会社シー オー コンヴ 1 2011 年 1 月 18 日 Citrix XenDesktop 5 Enterprise/Platinum Edition(Provisioning Services 5.6) Provisioning Services 5.6SP1 Provisioning Services 5.1SP2 は Citrix Systems,

More information

AN178 USB仮想シリアルドライバ インストールガイド

AN178 USB仮想シリアルドライバ インストールガイド アルファボードシリーズ USB 仮想シリアルドライバインストールガイド 第 2 版 2015 年 12 月 15 日 1. 概要 1.1 概要 本アプリケーションノートでは USB Function 機能を持つアルファボードシリーズに付属する USB 仮想シリアルドライバのインストール方法について解説します USB 仮想シリアルを使用する場合の各ボードの設定方法 動作方法につきましては 各ボードのサンプルプログラム解説

More information

PC にソフトをインストールすることによって OpenVPN でセキュア SAMBA へ接続することができます 注意 OpenVPN 接続は仮想 IP を使用します ローカル環境にて IP 設定が被らない事をご確認下さい 万が一仮想 IP とローカル環境 IP が被るとローカル環境内接続が行えなくな

PC にソフトをインストールすることによって OpenVPN でセキュア SAMBA へ接続することができます 注意 OpenVPN 接続は仮想 IP を使用します ローカル環境にて IP 設定が被らない事をご確認下さい 万が一仮想 IP とローカル環境 IP が被るとローカル環境内接続が行えなくな 操作ガイド Ver.2.3 目次 1. インストール... - 2-2. SAMBA Remote 利用... - 9-2.1. 接続確認... - 9-2.2. 自動接続... - 11-2.3. 編集... - 13-2.4. インポート... - 16-2.5. 削除... - 18-2.6. 参考資料 ( 接続状況が不安定な場合の対処方法について )... - 19-2.6.1. サービスの再起動...

More information

Microsoft Word - SREX_SDK2_R31.doc

Microsoft Word - SREX_SDK2_R31.doc 2017 年 4 月 - 目次 - 1-1. はじめに 2 1-2. 動作環境 2 1-3. ファイル構成 2 1-4. 注意事項 2 2-1. セットアップ 3 2-2. アンインストール 4 3-1. アプリケーション開発について 5 3-2. サンプルアプリケーションについて 10 3-3. ライブラリ関数仕様 13 3-4. 指紋情報構造体について 19 3-5. 通知メッセージ一覧 20

More information

目次 第 1 章概要....1 第 2 章インストールの前に... 2 第 3 章 Windows OS でのインストール...2 第 4 章 Windows OS でのアプリケーション設定 TP-LINK USB プリンターコントローラーを起動 / 終了するには

目次 第 1 章概要....1 第 2 章インストールの前に... 2 第 3 章 Windows OS でのインストール...2 第 4 章 Windows OS でのアプリケーション設定 TP-LINK USB プリンターコントローラーを起動 / 終了するには プリントサーバー 設定 ガイド このガイドは以下のモデルに該当します TL-WR842ND TL-WR1042ND TL-WR1043ND TL-WR2543ND TL-WDR4300 目次 第 1 章概要....1 第 2 章インストールの前に... 2 第 3 章 Windows OS でのインストール...2 第 4 章 Windows OS でのアプリケーション設定...7 4.1 TP-LINK

More information

はじめに 本書は GRATINA2 とパソコンを指定の USB ケーブル ( 別売 ) を使用して接続し インターネット通信や au ホームページで公開している各種ツールをご利用になるための USB ドライバ のインストール方法を説明しています USB ドライバをインストールする 3 パソコンに接続

はじめに 本書は GRATINA2 とパソコンを指定の USB ケーブル ( 別売 ) を使用して接続し インターネット通信や au ホームページで公開している各種ツールをご利用になるための USB ドライバ のインストール方法を説明しています USB ドライバをインストールする 3 パソコンに接続 本書内で使用されている表示画面は説明用に作成されたものです OS のバージョンやお使いのパソコンの環境 セキュリティ設定によっては表示画面の有無 詳細内容 名称が異なる場合があります 本書は お客様が Windows の基本操作に習熟していることを前提にしています パソコンの操作については お使いのパソコンの取扱説明書をご覧ください 本書の内容の一部または全部を無断転載することは 禁止されています

More information

FSUx-SDK2

FSUx-SDK2 2008 年 11 月 - 目次 - 1-1. はじめに 2 1-2. 動作環境 2 1-3. ファイル構成 2 1-4. 注意事項 2 2-1. セットアップ 3 2-2. アンインストール 4 3-1. アプリケーション開発について 5 3-2. サンプルアプリケーションについて 10 3-3. ライブラリ関数仕様 13 3-4. 指紋情報構造体について 17 3-5. 通知メッセージ一覧 18

More information

GPC-4116

GPC-4116 HDLC(PCI/C-PCI) GPC-4116 HDLC 通信インタフェースモジュール用 Windows ドライバ Help for Windows www.interface.co.jp 目次 第 1 章はじめに 3 1.1 概要... 3 1.2 特長... 3 第 2 章製品仕様 4 2.1 基本仕様... 4 2.2 製品構成... 6 第 3 章導入方法 8 3.1 インストール手順...

More information

ファイル管理 microsdメモリカードを利用する 232 microsdメモリカードを取り付ける 233 microsdメモリカードを取り外す 234 microusbケーブルでパソコンと接続する 235 メモリの使用量を確認する

ファイル管理 microsdメモリカードを利用する 232 microsdメモリカードを取り付ける 233 microsdメモリカードを取り外す 234 microusbケーブルでパソコンと接続する 235 メモリの使用量を確認する ファイル管理 microsdメモリカードを利用する 232 microsdメモリカードを取り付ける 233 microsdメモリカードを取り外す 234 microusbケーブルでパソコンと接続する 235 メモリの使用量を確認する 237 231 ファイル管理232 microsd メモリカードを利用する microsd メモリカード (microsdhc メモリカードを含む ) を IS11LG

More information

Imation Encryption Manager Plus Imation Encryption Manager Plus ソフトウェアにより 対応 USB フラッシュドライブにパスワード保護に対応した総合セキュリティーを設定することができます Imation Encryption Manage

Imation Encryption Manager Plus Imation Encryption Manager Plus ソフトウェアにより 対応 USB フラッシュドライブにパスワード保護に対応した総合セキュリティーを設定することができます Imation Encryption Manage IMATION ENCRYPTION MANAGER PLUS ユーザーマニュアル Imation Encryption Manager Plus Imation Encryption Manager Plus ソフトウェアにより 対応 USB フラッシュドライブにパスワード保護に対応した総合セキュリティーを設定することができます Imation Encryption Manager Plus には

More information

2015/04/01 改定 オムロン DeviceNet ユニット CJ1W-DRM21 に関するコンフィグレーション作業について 1. 概要 DeviceNet ユニット CJ1W-DRM21 を装着したオムロン製 CJ2 シリーズと WAGO-I/0-SYSTEM DeviceNet 対応バスカ

2015/04/01 改定 オムロン DeviceNet ユニット CJ1W-DRM21 に関するコンフィグレーション作業について 1. 概要 DeviceNet ユニット CJ1W-DRM21 を装着したオムロン製 CJ2 シリーズと WAGO-I/0-SYSTEM DeviceNet 対応バスカ オムロン DeviceNet ユニット CJ1W-DRM21 に関するコンフィグレーション作業について 1. 概要 DeviceNet ユニット CJ1W-DRM21 を装着したオムロン製 CJ2 シリーズと WAGO-I/0-SYSTEM DeviceNet 対応バスカプラ 750-306 を使ったリモート I/O システムとの接続に関するコンフィグレーション方法について説明いたします 2. システム構成本書で用いるシステム構成例の内容を以下の表に示します

More information

インテル(R) Visual Fortran コンパイラ 10.0

インテル(R) Visual Fortran コンパイラ 10.0 インテル (R) Visual Fortran コンパイラー 10.0 日本語版スペシャル エディション 入門ガイド 目次 概要インテル (R) Visual Fortran コンパイラーの設定はじめに検証用ソースファイル適切なインストールの確認コンパイラーの起動 ( コマンドライン ) コンパイル ( 最適化オプションなし ) 実行 / プログラムの検証コンパイル ( 最適化オプションあり ) 実行

More information

もくじ 2 はじめに... 3 概要... 4 動作環境... 4 利用制限モードについて... 4 本マニュアルの見かた... 4 HOME アプリマネージャの基本操作... 5 HOME アプリマネージャをインストールする... 6 HOME アプリマネージャを起動する... 8 HOME アプ

もくじ 2 はじめに... 3 概要... 4 動作環境... 4 利用制限モードについて... 4 本マニュアルの見かた... 4 HOME アプリマネージャの基本操作... 5 HOME アプリマネージャをインストールする... 6 HOME アプリマネージャを起動する... 8 HOME アプ HOME アプリマネージャ HOME アプリマネージャユーザーマニュアル 最終更新日 204 年 7 月 8 日 もくじ 2 はじめに... 3 概要... 4 動作環境... 4 利用制限モードについて... 4 本マニュアルの見かた... 4 HOME アプリマネージャの基本操作... 5 HOME アプリマネージャをインストールする... 6 HOME アプリマネージャを起動する... 8 HOME

More information

1. 対象装置 (1) 日立仮想 Fibre Channel アダプタ 適用装置 : EP8000 7xx/S8xx/E8xx/S9xx 2. 仮想 FC アダプタドライバ来歴 この仮想 FC アダプタドライバは 次の機能拡張とバグ修正を含みます バージョン内容 新規追加 7

1. 対象装置 (1) 日立仮想 Fibre Channel アダプタ 適用装置 : EP8000 7xx/S8xx/E8xx/S9xx 2. 仮想 FC アダプタドライバ来歴 この仮想 FC アダプタドライバは 次の機能拡張とバグ修正を含みます バージョン内容 新規追加 7 ================================================================================ HITACHI エンタープライズサーバ EP8000 シリーズマシンコード更新手順 ================================================================================

More information

Section 16-7 Mac で Windows も使う (Boot Camp) 光学式ドライブ DVD が読み取れる光学式ドライブを使った方がスムーズにインストールできます 光学式ドライブの付 いていない Mac は Windows インストールディスクの ISO イメージデータを使ってもイン

Section 16-7 Mac で Windows も使う (Boot Camp) 光学式ドライブ DVD が読み取れる光学式ドライブを使った方がスムーズにインストールできます 光学式ドライブの付 いていない Mac は Windows インストールディスクの ISO イメージデータを使ってもイン Section 16-7 移動 メニュー ユーティリティ フォルダ Boot Camp アシスタント Mac で Windows も使う (Boot Camp) Boot Camp を使い Windows をインストールすると Mac だけでなく Windows に切り替えて起動できるようになります Mac と Windows の両方を使うユーザには便利な機能です Boot Camp の準備 Mac

More information

1.dll の配置場所配布時はプログラムの実行フォルダーへ配置 2. 開発環境での使用 プロジェクトのプロパティーで [USBPIO.dll] を参照追加してください 開発環境 dll ファイルの場所 VB.Net Express Edition 境プロジェクトのフォルダ \bin\release VB.Netebugビルドの場合プロジェクトのフォルダ \bin\debug VB.Net Releaseビルドの場合プロジェクトのフォルダ

More information

Windows ログオンサービス インストールマニュアル 2018/12/21 1

Windows ログオンサービス インストールマニュアル 2018/12/21 1 Windows ログオンサービス インストールマニュアル 2018/12/21 1 目次 1. 注意事項... 3 2. インストール方法... 4 3. 設定ツールを起動する... 6 4. 利用者の情報を登録する... 7 4.1. 管理者メンバーの場合... 7 4.2. 一般メンバーの場合...10 5. アンインストール方法...11 6. その他...13 6.1. ソフトウェアバージョンの確認方法...13

More information

ESMPRO/JMSS Ver6.0

ESMPRO/JMSS Ver6.0 NEC Express5800 シリーズ ESMPRO /JMSS EventManager セットアップカード ごあいさつ このたびは ESMPRO/JMSS EventManager をお買い上げ頂き まことにありがとうございま す 本書は セットアップ方法について説明しています 製品をお使いになる前に必ずお読みくだ さい また ESMPRO/JMSS EventManager の説明書として次のものがあります

More information

Microsoft Word - DTX7LM.doc

Microsoft Word - DTX7LM.doc カシオハンディターミナル DT-X7 LMWIN 操作ガイド Rev 1.00 カシオ計算機株式会社 目次 1 IO-BOX...2 1-1.B.S.( ブリッジ サテライト ) クレイドル...2 1-2.B.S クレイドルの機能...3 2. ドライバのインストール...4 2-1.USB ドライバのインストール...4 2-2.USB モード使用時の設定...8 3. アップダウンロードシステム

More information

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用 RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用体型のローカル変数を文字列操作関数で操作する場合の注意事項 (RXC#013) 配列型構造体または共用体の配列型メンバから読み出した値を動的初期化に用いる場合の注意事項

More information

Imation Lock の使用 Imation Lock を使用しますとフラッシュドライブにパスワードで保護されたセキュリティエリアを設定すること ができます フラッシュドライブ全体をセキュリティエリアに設定することも 一部容量をセキュリティエリアに 設定することも可能です 一部容量をセキュリティ

Imation Lock の使用 Imation Lock を使用しますとフラッシュドライブにパスワードで保護されたセキュリティエリアを設定すること ができます フラッシュドライブ全体をセキュリティエリアに設定することも 一部容量をセキュリティエリアに 設定することも可能です 一部容量をセキュリティ Imation Lock 使用説明 Imation Lock を使用すると Nano Pro フラッシュドライブ ( 以下フラッシュドライブ ) にパスワードで保護された セキュリティエリアを設定することができます 対応環境 Microsoft Windows 2000 Professional Windows XP Vista 7 (Windows 2000 XP Vista 7 は管理者権限でのログイン時に限る

More information

フォーマット(初期化)について

フォーマット(初期化)について フォーマット ( 初期化 ) について 35020248-04 2017.01 フォーマットとは ハードディスクや SSD USB メモリーをお使いのパソコンで使用できるようにする作業で す 本製品をフォーマットする場合は 本書の記載を参照して行ってください フォーマットの形式 フォーマットにはいくつかの形式があり お使いの OS によって認識できる形式が異なります 本製品を フォーマットするときは

More information

V-CUBE One

V-CUBE One V-CUBE One Office 365 連携マニュアル ブイキューブ 2017/06/02 この文書は V-CUBE One の Office 365 連携用ご利用マニュアルです 更新履歴 更新日 内容 2016/02/09 新規作成 2016/03/11 Office 365 ID を既存の One 利用者と紐付ける機能に関する記述の追加 2016/04/01 V-CUBE ミーティング Outlook

More information