RXduino  1.20a
RXduinoマニュアル 最終更新日 平成26年6月29日
Public メソッド | Static Public メソッド | すべてのメンバ一覧
クラス TEthernet

Arduino互換のイーサネットクラス [詳細]

#include <Ethernet.h>

Public メソッド

void setHostname (const char *myhostname)
 自分のホスト名を設定する [詳細]
 
int begin (byte mac[6])
 イーサネットライブラリを開始する [詳細]
 
void begin (byte mac[6], byte ip[4])
 イーサネットライブラリを開始する [詳細]
 
void begin (byte mac[6], byte ip[4], byte dns[4])
 イーサネットライブラリを開始する [詳細]
 
void begin (byte mac[6], byte ip[4], byte dns[4], byte gateway[4])
 イーサネットライブラリを開始する [詳細]
 
void begin (byte mac[6], byte ip[4], byte dns[4], byte gateway[4], byte subnet[4])
 イーサネットライブラリを開始する [詳細]
 
char * localIP ()
 自分のIPアドレスを文字列にして受け取る [詳細]
 
bool isLinkup ()
 LANがリンクアップしているかどうかを返す [詳細]
 
bool Ping (const char *hostname)
 ターゲットホスト名を指定してPingを送る [詳細]
 
bool Ping (byte ip[4])
 ターゲットのIPアドレスを指定してPingを送る [詳細]
 
bytegethostbyname (const char *hostname)
 DNSにアクセスして、ホスト名からIPアドレスを調べる [詳細]
 
bool dhcp (void)
 DHCPでIPアドレスやDNS、ゲートウェイ等の取得を再実行する [詳細]
 
bool sendUDP (byte ipaddr[4], unsigned short dest_port, byte *buf, int len)
 UDPパケットを送る [詳細]
 
void registUdpHandler (UDP_HANDLE_FUNC func)
 UDPを受信したときにコールバックされる関数を登録する [詳細]
 

Static Public メソッド

static unsigned long getVersion (version_info *vi)
 ライブラリのバージョン情報を取得する [詳細]
 
static void processPackets ()
 イーサネットの受信処理を進める [詳細]
 

説明

Arduino互換のイーサネットクラス

このクラスを使うには、include <Ethernet.h>をした後、TEthernet Ethernet;と書いてインスタンスを作る。リンカオプションで -lethernet を指定する。

覚え書き
実体は tkdnip.h をC++でカプセル化するものである。

Ethernet.h48 行で定義されています。

関数

static unsigned long TEthernet::getVersion ( version_info vi)
static

ライブラリのバージョン情報を取得する

引数
[out]vi拡張情報が必要ならばversion_info構造体へのポインタを与える。
構造体の各フィールドがセットされて戻る。各フィールドは文字列へのポインタだが、
static constな文字列を指すので、ユーザプログラムでfreeしてはならない。
拡張情報が不要ならばNULLを指定してもよい
戻り値
バージョン番号を1バイトずつ詰めた16進数で返す 例えば、バージョン1.00ならば、0x01000000を返す バージョン1.23ならば0x010203となる。 メジャーバージョン.マイナーバージョン.サブバージョン.デバッグバージョン
static void TEthernet::processPackets ( )
static

イーサネットの受信処理を進める

この関数が呼び出されると、受信パケットの有無を調べ、 パケットの内容に応じて受信処理を進める。
受信エラーの解除も行われる。

警告
この関数はメインのループの中で繰り返し呼び出さなければならない。
戻り値
なし
void TEthernet::setHostname ( const char *  myhostname)

自分のホスト名を設定する

ここで設定したホスト名はDHCPで使われるので重要 デフォルトは"GR-SAKURA"など、マクロ BOARD_NAME になっている。
beginより前に呼び出すこと。

引数
myhostname設定したいホスト名
戻り値
なし
int TEthernet::begin ( byte  mac[6])

イーサネットライブラリを開始する

IPアドレス、ネームサーバ、デフォルトゲートウェイ、サブネットマスクはDHCPで取得される。

引数
macMACアドレス
戻り値
成功したら1を返す。失敗したら0を返す。
void TEthernet::begin ( byte  mac[6],
byte  ip[4] 
)

イーサネットライブラリを開始する

ネームサーバ、デフォルトゲートウェイ、サブネットマスクはDHCPで取得される。

引数
macMACアドレス
ipIPアドレス
戻り値
なし
void TEthernet::begin ( byte  mac[6],
byte  ip[4],
byte  dns[4] 
)

イーサネットライブラリを開始する

デフォルトゲートウェイ、サブネットマスクはDHCPで取得される。

引数
macMACアドレス
ipIPアドレス
dnsネームサーバのアドレス
戻り値
なし
void TEthernet::begin ( byte  mac[6],
byte  ip[4],
byte  dns[4],
byte  gateway[4] 
)

イーサネットライブラリを開始する

サブネットマスクはDHCPで取得される。

引数
macMACアドレス
ipIPアドレス
dnsネームサーバのアドレス
gatewayデフォルトゲートウェイのアドレス
戻り値
なし
void TEthernet::begin ( byte  mac[6],
byte  ip[4],
byte  dns[4],
byte  gateway[4],
byte  subnet[4] 
)

イーサネットライブラリを開始する

MACアドレス、IPアドレス、DNS、デフォルトゲートウェイ、サブネットマスクを指定してイーサネットライブラリを開始する

引数
macMACアドレス
ipIPアドレス
dnsネームサーバのアドレス
gatewayデフォルトゲートウェイのアドレス
subnetサブネットマスク
戻り値
なし
char* TEthernet::localIP ( )

自分のIPアドレスを文字列にして受け取る

覚え書き
返される文字列はライブラリの中でstaticに確保された領域にあるので、ユーザプログラムでfreeしないこと。
戻り値
自分のIPアドレス
警告
返された文字列をfreeしないこと
bool TEthernet::isLinkup ( )

LANがリンクアップしているかどうかを返す

覚え書き
RXduinoの拡張。Arduinoにはない。
戻り値
自分のIPアドレス
bool TEthernet::Ping ( const char *  hostname)

ターゲットホスト名を指定してPingを送る

引数
hostnamePingを送りたいホスト名 (例 : "www.tokudenkairo.co.jp")
戻り値
1回でも成功したらtrueを返す。すべて失敗したらfalseを返す
bool TEthernet::Ping ( byte  ip[4])

ターゲットのIPアドレスを指定してPingを送る

引数
ipPingを送りたいIPアドレス
戻り値
1回でも成功したらtrueを返す。すべて失敗したらfalseを返す
byte* TEthernet::gethostbyname ( const char *  hostname)

DNSにアクセスして、ホスト名からIPアドレスを調べる

引数
hostname調べたいホスト名 (例 : "www.tokudenkairo.co.jp")
戻り値
成功したらIPアドレスが格納された配列を返す。失敗したら0.0.0.0が格納された配列を返す
覚え書き
返される4バイトの配列はライブラリ内でstaticに確保された領域にある
警告
返された配列をfreeしないこと
bool TEthernet::dhcp ( void  )

DHCPでIPアドレスやDNS、ゲートウェイ等の取得を再実行する

戻り値
成功したらtrueを返す。失敗したらfalseを返す。
覚え書き
取得したIPアドレスは localIP() 関数で調べる
bool TEthernet::sendUDP ( byte  ipaddr[4],
unsigned short  dest_port,
byte buf,
int  len 
)

UDPパケットを送る

引数
[in]ipaddr送信先のIPアドレスが格納された配列
[in]dest_port送信先のポート番号
[in]buf送信したいデータが格納されたバッファ
[in]len送信したいデータの長さ
戻り値
成功したらtrueを返す。失敗したらfalseを返す。
void TEthernet::registUdpHandler ( UDP_HANDLE_FUNC  func)

UDPを受信したときにコールバックされる関数を登録する

この関数は tketh_regist_udp_handler() を呼び出しているにすぎない。引数の UDP_HANDLE_FUNC 型関数ポインタについての説明は tkdnip.h を参照。

引数
[in]funcUDPを受信したときにコールバックされる関数。

登録された関数がTRUEを返すとユーザで処理したものと解釈され、システムでは処理されない。FALSEを返すとシステムで処理される。

覚え書き
登録される関数は processPackets() の中から呼び出される。したがって、processPackets()を繰り返し呼び出していないと受信処理は行われない。
#include <rxduino.h>
#include <ethernet.h>
TEthernet ethernet;
byte mac[] = {2,0,0,0,0,1};
BOOL onReceiveUDP( // UDPを受信したときに呼び出される関数
unsigned char dest_ip[4],
unsigned char src_ip[4],
unsigned short dest_port,
unsigned short src_port,
unsigned char *data,
short datalen)
{
printf("UDP Received %d.%d.%d.%d (%d) =>",src_ip[0],src_ip[1],src_ip[2],src_ip[3],src_port);
printf(" %d.%d.%d.%d (%d) ",dest_ip[0],dest_ip[1],dest_ip[2],dest_ip[3],dest_port);
printf(" length = %d \n",datalen);
for(int i=0;i<datalen;i++)
{
if((i & 15) == 0) printf("%04X ",i);
printf("%02X ",data[i]);
if((i & 15) == 15) printf("\n");
}
printf("\n");
return TRUE;
}
void setup()
{
Serial.begin(38400,SCI_AUTO);
Serial.setDefault();
setvbuf(stdout, (char *)NULL, _IONBF, 0);
printf("RXduino ethernet UDP receive test program\n");
ethernet.setHostname("test01");
ethernet.begin(mac);
printf("%s\n",ethernet.localIP());
ethernet.registUdpHandler(onReceiveUDP);
}
void loop()
{
}