SKSTACK API for Java
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#contents
*はじめに [#b27f1280]
SKSTACK API for Javaは、SKSTACKを実装したデバイスをJavaで...
SKSTACK IPv2.1及びSKSTACK IP for HAN Standard Editionに対...
シリアル通信処理には、RXTX for Javaを用いています。
*ライセンス [#a4adf92f]
SKSTACK API for Javaは、3条項BSDライセンスで配布していま...
RXTX for JavaはMfizz Inc.のバイナリを使っています。
RXTX binary builds provided as a courtesy of Mfizz Inc. ...
Please see http://mfizz.com/oss/rxtx-for-java for more i...
*開発環境 [#kee597d5]
以下の環境で開発、動作確認しています。
- Windows 8.1 Pro(x64であれば、Windows7, 8/8.1無印でも可)
- Eclipse 4.4 Luna(Javaバージョンは1.8)
- [[RXTX for Java Windows-x64 binary:http://fizzed.com/os...
-SKSTACK実装機種:RL7023 Stick
(2015.6.29追記)~
以下の環境で、Linuxでの動作確認をしました。
- Ubuntu 14.04 64bit/32bit
- Eclipse 4.4
- Oracle JDK 1.8
- [[RXTX 2.2 pre2:http://rxtx.qbang.org/wiki/index.php/Do...
-SKSTACK実装機種:RL7023 Stick
*環境構築手順 [#ob379f63]
**Eclipseのインストール [#ja9610a0]
+http://mergedoc.osdn.jp/index.html#/pleiades_distros4.4....
+[Eclipse 4.4 Luna Pleiades All in One]をクリック
+ Java 64bit Full Editionの[Download]をクリック
+インストーラのダウンロードが完了したら、インストーラを起動
**GitHubからソースをクローン [#n6e88e73]
https://github.com/SkyleyNetworks/SKSTACK_API.gitを、適当...
(以下、C:¥Users¥<username>¥Documents¥GitHubにクローンし...
GitHubを初めて使う場合は、以下の手順でセットアップしてく...
+https://windows.github.com/にアクセスし、GitHub for Wino...
+https://github.com/SkyleyNetworks/SKSTACK_APIにアクセス
+画面右側 [Clone in Desktop]をクリック
+ソースの保存先をC:¥Users¥<username>¥Documents¥GitHubに指...
**Eclipse設定 [#p20035ef]
+Eclipseを起動
+ワークスペースを、[C:¥Users¥<username>¥Documents¥GitHub]...
+[ファイル]→[インポート]をクリック
+「インポートソースの選択」にて、[Git]→[Gitからプロジェク...
+[既存ローカル・リポジトリー]を選択し、[次へ]をクリック
+[SKSTACK_IP_API_TEST]を選択し、[次へ]をクリック
(表示されていない場合は、[追加]をクリックし、「ディレク...
+[次へ]をクリック
+[完了]をクリック(ウィンドウ左ペインにSKSTACK_IP_API_TES...
**動作確認 [#l47a2499]
+デバイスをUSBポートに接続
+[src]→[(デフォルトパッケージ)]→[Test.java]を開き、main...
SKDevice device = new SKDevice();
device.connect("COM3"); // "COM3"は実際の接続ポート名に...
System.out.println("IPv6 Address: " + device.getIP6Addre...
System.out.println("Stack Version: " + device.getVersion...
device.close();
>以下のように出力されればOKです。
IPv6 Address: FE80:0000:0000:0000:1034:5678:ABCD:EF01
Stack Version: 1.4.0
>[Configure gnu.io.rxtx.properties]というポップアップが表...
**Linux [#y3b6bfd9]
(2015.6.29追記)~
Linuxでの構築手順は以下の通りです。
+https://eclipse.org/downloads/?osType=linuxからEclipseの...
+Gitをインストールします。
$ sudo apt-get install git
+JDKをインストールします。
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer
+環境変数"JAVA_HOME"を設定します。
(/etc/profileに追記)
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
$ source /etc/profile
+SKSTACK API for Javaのソースを取得します。
$ cd ~/workspace(Eclipseのワークスペースを~/workspaceと...
$ git clone https://github.com/SkyleyNetworks/SKSTACK_AP...
+http://rxtx.qbang.org/wiki/index.php/Downloadの「rxtx-2....
+RXTXソースをコンパイルします。
$ unzip rxtx-2.2pre.zip
$ cd rxtx-2.2pre
$ ./configure
$ make(librxtxParallel.soの生成に関するエラーが出ますが...
+RXTXcomm.jar, librxtxSerial-.soを、SKSTACK_API/libにコピ...
$ cp RXTXcomm.jar ~/workspace/SKSTACK_API/lib
$ cp x86_64-unknown-gnu/.libs/librxtxSerial-2.2pre1.so ~...
$ cd ~/workspace/SKSTACK_API_lib
$ mv librxtxSerial-2.2pre1.so librxtxSerial.so
+デバイスをUSBポートに接続します。
+デバイスファイル、ロックファイルを扱うディレクトリのパー...
$ sudo chmod 666 /dev/ttyUSB*
$ sudo chmod 777 /var/run/lock
*使い方 [#de018529]
**基本構成 [#x6afa3e8]
デバイス1台につき1個のSKDeviceもしくはSKHanDeviceクラスの...
-SKSTACK IPv2.1実装機種を扱う場合
// SKDeviceクラスのインスタンンスを生成
SKDevice device = new SKDevice();
// 接続
device.connect(<接続ポート名>);
...
...
(処理を記述)
...
...
//最後に切断
device.close();
-SKSTACK IP for HAN Standard Edition実装機種を扱う場合
// SKHanDeviceクラスのインスタンンスを生成
SKHanDevice device = new SKHanDevice();
// 接続
device.connect(<接続ポート名>);
...
...
(処理を記述)
...
...
// 最後に切断
device.close();
**コマンド送信 [#wd600fe3]
SKSENDTO, SKSCANなどのSKコマンドをデバイスに送信するには...
例)FE80:0000:0000:0000:1034:5678:ABCD:EF02に0x1234をUDP...
SKDevice device = new SKDevice();
device.connect("COM3");
byte[] data = { 0x12, 0x34 };
device.sendUDP((byte)1, "FE80:0000:0000:0000:1034:5678:A...
メソッドの戻り値は、次の通りです。
-レジスタ値の取得(getLongAddress, getPanIDなど):
取得に成功したらその値、失敗したら-1もしくは空文字("")
-レジスタ値の設定(setLongAddress, setPanIDなど):
設定に成功したらtrue, 失敗したらfalse
-テーブルの取得(getNeighborTable, getTcpHandleTableなど):
取得に成功したらテーブル要素の配列、失敗したらnull
-その他のメソッド(sendUDP, resetStackなど):
コマンド発行に成功したらtrue, 失敗したらfalse
メソッドの詳細は、ソースツリーの[doc]→index.html→[com.sky...
**イベント受信 [#se696bc7]
ERXUDP, ETCP, EPANDESCなどのイベントを受信するには、イン...
SKDevice device = new SKDevice();
device.connect("COM3");
Listener listener = new Listener();
device.setSKEventListener(listener); // イベントリスナー...
...
...
class Listener implements SKEventListener {
...
...
@Override
public void eventNotified(String port, SKEventType type,...
// TODO 自動生成されたメソッド・スタブ
// イベントが発生すると呼び出される
// port: デバイスの接続ポート名
// type: イベントの種類(ERXUDP, ETCPなど)
// event: イベントのパラメータを格納したクラス(getXXXX...
switch (type) {
case ERXUDP:
System.out.println("ERXUDP");
System.out.println("Port: " + port);
SKERxUdp erxudp = (SKERxUdp)event;
System.out.println("senderIP=" + erxudp.getSenderIP6A...
System.out.println("sec=" + erxudp.isSecured()); // ...
System.out.println("dataLength=" + erxudp.getDataLeng...
System.out.println("data=" + erxudp.getData()); // 受...
break;
case EVENT:
SKGeneralEvent gevent = (SKGeneralEvent)event;
short number = gevent.getEventNumber(); // イベント番号
System.out.println("Event: " + SKEventNumber.getEvent...
System.out.println("Port: " + port);
System.out.println("number=" + number);
System.out.println("sender=" + gevent.getSenderAddres...
if (number == SKEventNumber.UDP_TX_DONE.getNumber()) {
System.out.println("Param=" + gevent.getParam());
}
break;
default:
break;
}
}
}
詳細は、ソースツリーの[doc]→index.html→[com.skyley.skstac...
-ERXUDP
-ERXTCP
-ETCP
-EPANDESC
-EEDSCAN
-EVENT
**デバッグ [#w3a4ca81]
インタフェースSKDebugListenerを実装したクラス(デバッグリ...
SKDevice device = new SKDevice();
device.connect("COM3");
Debug debug = new Debug();
device.setSKDebugListener(debug); // デバッグリスナーを...
...
...
class Debug implements SKDebugListener {
...
...
@Override
public void debugOut(String port, String raw) {
// TODO 自動生成されたメソッド・スタブ
// port: デバイスの接続ポート名
// raw: 送受信した文字列
System.err.println(port + ":" + raw);
}
}
**列挙型 [#fb2f10ac]
***コマンド送信で用いる列挙型 [#x8485998]
-SKScanMode: スキャンモード
-SKSecOption: 送信データの暗号化オプション
***イベント受信で用いる列挙型 [#x8030979]
-SKEventType: イベント種類
-SKEventNumber: イベント番号("EVENT"のパラメータ)
詳細は、ソースツリーの[doc]→index.html→[com.skyley.skstac...
**2台使用のサンプル [#q3bcf529]
ソースツリーに含まれているサンプルを用いて、以下のように2...
SKDevice device1 = new SKDevice();
device1.connect("COM3");
SKDevice device2 = new SKDevice();
device2.connect("COM4");
// レジスタ値の取得・設定
RegisterTest rt = new RegisterTest(device1);
rt.doTest();
// テーブルの取得
TableTest tt = new TableTest(device1);
tt.doTest();
// スキャン
ScanTest st = new ScanTest(device1, device2);
st.doTest();
// PANA認証
PanaTest pt = new PanaTest(device1, device2);
pt.doTest();
//UDP送受信
UdpTest udptest = new UdpTest(device1, device2);
byte[] data = {0x12, 0x34, 0x56, 0x78};
udptest.doTest(data, 10, 10); // (送信データ, 送信試行回...
//TCP送受信
TcpTest tcptest = new TcpTest(device1, device2);
tcptest.doTest(data, 10); // (送信データ, 送信回数)
device1.close();
device2.close();
*ローム社製モジュールで使う場合 [#m8e208e5]
BP35A1, 35C0などローム社製モジュールではシリアル通信でコ...
SKDevice#connecメソッドでフロー制御を設定している箇所を
port.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_OU...
port.setDTR(true);
port.setRTS(false);
のように変更してみてください。
(上記変更を行っても他モジュールは動作します)
終了行:
#contents
*はじめに [#b27f1280]
SKSTACK API for Javaは、SKSTACKを実装したデバイスをJavaで...
SKSTACK IPv2.1及びSKSTACK IP for HAN Standard Editionに対...
シリアル通信処理には、RXTX for Javaを用いています。
*ライセンス [#a4adf92f]
SKSTACK API for Javaは、3条項BSDライセンスで配布していま...
RXTX for JavaはMfizz Inc.のバイナリを使っています。
RXTX binary builds provided as a courtesy of Mfizz Inc. ...
Please see http://mfizz.com/oss/rxtx-for-java for more i...
*開発環境 [#kee597d5]
以下の環境で開発、動作確認しています。
- Windows 8.1 Pro(x64であれば、Windows7, 8/8.1無印でも可)
- Eclipse 4.4 Luna(Javaバージョンは1.8)
- [[RXTX for Java Windows-x64 binary:http://fizzed.com/os...
-SKSTACK実装機種:RL7023 Stick
(2015.6.29追記)~
以下の環境で、Linuxでの動作確認をしました。
- Ubuntu 14.04 64bit/32bit
- Eclipse 4.4
- Oracle JDK 1.8
- [[RXTX 2.2 pre2:http://rxtx.qbang.org/wiki/index.php/Do...
-SKSTACK実装機種:RL7023 Stick
*環境構築手順 [#ob379f63]
**Eclipseのインストール [#ja9610a0]
+http://mergedoc.osdn.jp/index.html#/pleiades_distros4.4....
+[Eclipse 4.4 Luna Pleiades All in One]をクリック
+ Java 64bit Full Editionの[Download]をクリック
+インストーラのダウンロードが完了したら、インストーラを起動
**GitHubからソースをクローン [#n6e88e73]
https://github.com/SkyleyNetworks/SKSTACK_API.gitを、適当...
(以下、C:¥Users¥<username>¥Documents¥GitHubにクローンし...
GitHubを初めて使う場合は、以下の手順でセットアップしてく...
+https://windows.github.com/にアクセスし、GitHub for Wino...
+https://github.com/SkyleyNetworks/SKSTACK_APIにアクセス
+画面右側 [Clone in Desktop]をクリック
+ソースの保存先をC:¥Users¥<username>¥Documents¥GitHubに指...
**Eclipse設定 [#p20035ef]
+Eclipseを起動
+ワークスペースを、[C:¥Users¥<username>¥Documents¥GitHub]...
+[ファイル]→[インポート]をクリック
+「インポートソースの選択」にて、[Git]→[Gitからプロジェク...
+[既存ローカル・リポジトリー]を選択し、[次へ]をクリック
+[SKSTACK_IP_API_TEST]を選択し、[次へ]をクリック
(表示されていない場合は、[追加]をクリックし、「ディレク...
+[次へ]をクリック
+[完了]をクリック(ウィンドウ左ペインにSKSTACK_IP_API_TES...
**動作確認 [#l47a2499]
+デバイスをUSBポートに接続
+[src]→[(デフォルトパッケージ)]→[Test.java]を開き、main...
SKDevice device = new SKDevice();
device.connect("COM3"); // "COM3"は実際の接続ポート名に...
System.out.println("IPv6 Address: " + device.getIP6Addre...
System.out.println("Stack Version: " + device.getVersion...
device.close();
>以下のように出力されればOKです。
IPv6 Address: FE80:0000:0000:0000:1034:5678:ABCD:EF01
Stack Version: 1.4.0
>[Configure gnu.io.rxtx.properties]というポップアップが表...
**Linux [#y3b6bfd9]
(2015.6.29追記)~
Linuxでの構築手順は以下の通りです。
+https://eclipse.org/downloads/?osType=linuxからEclipseの...
+Gitをインストールします。
$ sudo apt-get install git
+JDKをインストールします。
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer
+環境変数"JAVA_HOME"を設定します。
(/etc/profileに追記)
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
$ source /etc/profile
+SKSTACK API for Javaのソースを取得します。
$ cd ~/workspace(Eclipseのワークスペースを~/workspaceと...
$ git clone https://github.com/SkyleyNetworks/SKSTACK_AP...
+http://rxtx.qbang.org/wiki/index.php/Downloadの「rxtx-2....
+RXTXソースをコンパイルします。
$ unzip rxtx-2.2pre.zip
$ cd rxtx-2.2pre
$ ./configure
$ make(librxtxParallel.soの生成に関するエラーが出ますが...
+RXTXcomm.jar, librxtxSerial-.soを、SKSTACK_API/libにコピ...
$ cp RXTXcomm.jar ~/workspace/SKSTACK_API/lib
$ cp x86_64-unknown-gnu/.libs/librxtxSerial-2.2pre1.so ~...
$ cd ~/workspace/SKSTACK_API_lib
$ mv librxtxSerial-2.2pre1.so librxtxSerial.so
+デバイスをUSBポートに接続します。
+デバイスファイル、ロックファイルを扱うディレクトリのパー...
$ sudo chmod 666 /dev/ttyUSB*
$ sudo chmod 777 /var/run/lock
*使い方 [#de018529]
**基本構成 [#x6afa3e8]
デバイス1台につき1個のSKDeviceもしくはSKHanDeviceクラスの...
-SKSTACK IPv2.1実装機種を扱う場合
// SKDeviceクラスのインスタンンスを生成
SKDevice device = new SKDevice();
// 接続
device.connect(<接続ポート名>);
...
...
(処理を記述)
...
...
//最後に切断
device.close();
-SKSTACK IP for HAN Standard Edition実装機種を扱う場合
// SKHanDeviceクラスのインスタンンスを生成
SKHanDevice device = new SKHanDevice();
// 接続
device.connect(<接続ポート名>);
...
...
(処理を記述)
...
...
// 最後に切断
device.close();
**コマンド送信 [#wd600fe3]
SKSENDTO, SKSCANなどのSKコマンドをデバイスに送信するには...
例)FE80:0000:0000:0000:1034:5678:ABCD:EF02に0x1234をUDP...
SKDevice device = new SKDevice();
device.connect("COM3");
byte[] data = { 0x12, 0x34 };
device.sendUDP((byte)1, "FE80:0000:0000:0000:1034:5678:A...
メソッドの戻り値は、次の通りです。
-レジスタ値の取得(getLongAddress, getPanIDなど):
取得に成功したらその値、失敗したら-1もしくは空文字("")
-レジスタ値の設定(setLongAddress, setPanIDなど):
設定に成功したらtrue, 失敗したらfalse
-テーブルの取得(getNeighborTable, getTcpHandleTableなど):
取得に成功したらテーブル要素の配列、失敗したらnull
-その他のメソッド(sendUDP, resetStackなど):
コマンド発行に成功したらtrue, 失敗したらfalse
メソッドの詳細は、ソースツリーの[doc]→index.html→[com.sky...
**イベント受信 [#se696bc7]
ERXUDP, ETCP, EPANDESCなどのイベントを受信するには、イン...
SKDevice device = new SKDevice();
device.connect("COM3");
Listener listener = new Listener();
device.setSKEventListener(listener); // イベントリスナー...
...
...
class Listener implements SKEventListener {
...
...
@Override
public void eventNotified(String port, SKEventType type,...
// TODO 自動生成されたメソッド・スタブ
// イベントが発生すると呼び出される
// port: デバイスの接続ポート名
// type: イベントの種類(ERXUDP, ETCPなど)
// event: イベントのパラメータを格納したクラス(getXXXX...
switch (type) {
case ERXUDP:
System.out.println("ERXUDP");
System.out.println("Port: " + port);
SKERxUdp erxudp = (SKERxUdp)event;
System.out.println("senderIP=" + erxudp.getSenderIP6A...
System.out.println("sec=" + erxudp.isSecured()); // ...
System.out.println("dataLength=" + erxudp.getDataLeng...
System.out.println("data=" + erxudp.getData()); // 受...
break;
case EVENT:
SKGeneralEvent gevent = (SKGeneralEvent)event;
short number = gevent.getEventNumber(); // イベント番号
System.out.println("Event: " + SKEventNumber.getEvent...
System.out.println("Port: " + port);
System.out.println("number=" + number);
System.out.println("sender=" + gevent.getSenderAddres...
if (number == SKEventNumber.UDP_TX_DONE.getNumber()) {
System.out.println("Param=" + gevent.getParam());
}
break;
default:
break;
}
}
}
詳細は、ソースツリーの[doc]→index.html→[com.skyley.skstac...
-ERXUDP
-ERXTCP
-ETCP
-EPANDESC
-EEDSCAN
-EVENT
**デバッグ [#w3a4ca81]
インタフェースSKDebugListenerを実装したクラス(デバッグリ...
SKDevice device = new SKDevice();
device.connect("COM3");
Debug debug = new Debug();
device.setSKDebugListener(debug); // デバッグリスナーを...
...
...
class Debug implements SKDebugListener {
...
...
@Override
public void debugOut(String port, String raw) {
// TODO 自動生成されたメソッド・スタブ
// port: デバイスの接続ポート名
// raw: 送受信した文字列
System.err.println(port + ":" + raw);
}
}
**列挙型 [#fb2f10ac]
***コマンド送信で用いる列挙型 [#x8485998]
-SKScanMode: スキャンモード
-SKSecOption: 送信データの暗号化オプション
***イベント受信で用いる列挙型 [#x8030979]
-SKEventType: イベント種類
-SKEventNumber: イベント番号("EVENT"のパラメータ)
詳細は、ソースツリーの[doc]→index.html→[com.skyley.skstac...
**2台使用のサンプル [#q3bcf529]
ソースツリーに含まれているサンプルを用いて、以下のように2...
SKDevice device1 = new SKDevice();
device1.connect("COM3");
SKDevice device2 = new SKDevice();
device2.connect("COM4");
// レジスタ値の取得・設定
RegisterTest rt = new RegisterTest(device1);
rt.doTest();
// テーブルの取得
TableTest tt = new TableTest(device1);
tt.doTest();
// スキャン
ScanTest st = new ScanTest(device1, device2);
st.doTest();
// PANA認証
PanaTest pt = new PanaTest(device1, device2);
pt.doTest();
//UDP送受信
UdpTest udptest = new UdpTest(device1, device2);
byte[] data = {0x12, 0x34, 0x56, 0x78};
udptest.doTest(data, 10, 10); // (送信データ, 送信試行回...
//TCP送受信
TcpTest tcptest = new TcpTest(device1, device2);
tcptest.doTest(data, 10); // (送信データ, 送信回数)
device1.close();
device2.close();
*ローム社製モジュールで使う場合 [#m8e208e5]
BP35A1, 35C0などローム社製モジュールではシリアル通信でコ...
SKDevice#connecメソッドでフロー制御を設定している箇所を
port.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_OU...
port.setDTR(true);
port.setRTS(false);
のように変更してみてください。
(上記変更を行っても他モジュールは動作します)
ページ名: