RXduino  1.20a
RXduinoマニュアル 最終更新日 平成26年6月29日
型定義 | 列挙型 | 関数
tkdnip.h

RX62N/RX63N用のTCP/IPプロトコルスタック。 [詳細]

#include "tkdn_hal.h"

ソースコードを見る。

型定義

typedef struct tcp_str tcp_t
 TCPの接続情報を示す構造体 内部構造は知る必要はないため隠蔽されている
 
typedef void(* FUNCTYPE_TCPEVENT )(tcp_t *client)
 TCPのイベントが起きた時にコールバックされる関数の型
 

列挙型

enum  LINK_STATE { LINK_DOWN = 0, LINK_UP = 1, LINK_DOWN_CHANGED = 2, LINK_UP_CHANGED = 3 }
 リンクの状態 [詳細]
 
enum  DNS_REPLY_TYPE { DNS_NONAUTH, DNS_AUTH, DNS_APPENDIX, DNS_UNDEF }
 DNSの応答のタイプ [詳細]
 
enum  DNS_TYPE {
  DNS_A = 1, DNS_NS = 2, DNS_CNAME = 5, DNS_PTR = 12,
  DNS_MX = 15, DNS_AAAA = 28, DNS_ANY = 255
}
 DNSのレコードのタイプ [詳細]
 
enum  DNS_CLASS { DNS_UNKN = 0, DNS_IN = 1 }
 DNSのアドレスのタイプ [詳細]
 
enum  TCP_STATE {
  TCP_CLOSED, TCP_LISTEN, TCP_SYNRCVD, TCP_ESTAB,
  TCP_FIN_WAIT1, TCP_FIN_WAIT2, TCP_CLOSING, TCP_TIME_WAIT,
  TCP_SYN_SENT, TCP_CLOSEWAIT, TCP_LAST_ACK
}
 TCPの接続状態を表す定数 [詳細]
 

関数

void tketh_open (unsigned char *macaddr)
 自分のMACアドレスを設定し、ライブラリを開始する [詳細]
 
LINK_STATE tketh_check_link ()
 イーサネットのリンクアップをチェックする。 [詳細]
 
void tketh_process ()
 イーサネットの受信処理を進める [詳細]
 
void tketh_debug (int level)
 デバッグレベルを設定する [詳細]
 
void tketh_set_hostname (const char *hostname)
 自分の名前を設定する [詳細]
 
char * tketh_get_hostname (void)
 自分の名前を調べる [詳細]
 
void tketh_change_macaddr (const unsigned char macaddr[6])
 MACアドレスを変更する [詳細]
 
void tketh_get_macaddr (unsigned char macaddr[6])
 自分のMACアドレスを調べる [詳細]
 
BOOL tketh_dhcpc (void)
 DHCPを実行して、IPアドレス、GW、DNSサーバを設定する [詳細]
 
void tketh_set_myipaddr (unsigned char ipaddr[4], unsigned char mask[4])
 自分のIPアドレスを設定する [詳細]
 
void tketh_get_myipaddr (unsigned char ipaddr[4], unsigned char mask[4])
 自分のIPアドレスを取得する [詳細]
 
void tketh_set_gateway (unsigned char ipaddr[4])
 デフォルトゲートウェイを設定する [詳細]
 
void tketh_get_gateway (unsigned char ipaddr[4])
 設定されているデフォルトゲートウェイのアドレスを取得する [詳細]
 
void tketh_set_nameserver (unsigned char ipaddr[4])
 DNSサーバのアドレスを設定する [詳細]
 
void tketh_get_nameserver (unsigned char ipaddr[4])
 設定されているDNSサーバのアドレスを取得する [詳細]
 
void tketh_arp_table_show ()
 ARPのテーブルを表示する [詳細]
 
BOOL tketh_send_udp (unsigned char tgtaddr[4], unsigned short dest_port, unsigned short src_port, unsigned char *buf, int len)
 UDPを送信する [詳細]
 
void tketh_regist_udp_handler (UDP_HANDLE_FUNC func)
 UDPを受信したときにコールバックされる関数を登録する [詳細]
 
BOOL tketh_send_ping (unsigned char ipaddr[4], unsigned char *buf, int len)
 PINGを送信する [詳細]
 
BOOL tketh_is_ping_running ()
 PINGが実行中かどうか調べる [詳細]
 
void tketh_cancel_ping ()
 PINGの実行をキャンセルする [詳細]
 
unsigned long tketh_ping_starttime ()
 最後にPINGを送った時刻をus単位で返す [詳細]
 
BOOL tketh_nslookup (char *hostname, unsigned char ipaddr[4])
 DNSサーバにアクセスして名前解決を行う [詳細]
 
dns_records_t * tketh_nslookup_ex (char *hostname)
 DNSサーバにアクセスして名前解決を行い、すべてのレコードを得る [詳細]
 
void tketh_free_dns_records (dns_records_t *dnsrec)
 DNS結果構造体を開放する [詳細]
 
BOOL tketh_ip_to_hostname (unsigned char ipaddr[4], char *hostname, int hostname_maxlen)
 DNSサーバにアクセスしてIPアドレスから名前を調べる [詳細]
 
tcp_ttketh_tcp_connect (unsigned char ipaddr[4], unsigned short dest_port)
 TCPでサーバに接続する [詳細]
 
BOOL tketh_tcp_is_connected (tcp_t *info)
 コネクションが接続中かどうかを調べる [詳細]
 
void tketh_tcp_fin (tcp_t *info)
 コネクションの穏やかな終了 [詳細]
 
char * tketh_tcp_state (tcp_t *info)
 コネクションの状態を文字列で返す [詳細]
 
void tketh_tcp_senddata (tcp_t *info, unsigned char *data, int len)
 TCPの接続先にデータを送信する [詳細]
 
int tketh_tcp_recvcount (tcp_t *info)
 受信バッファに溜まっているデータの量を調べる [詳細]
 
int tketh_tcp_recvdata (tcp_t *info, unsigned char *data, int len)
 受信バッファからデータを取り出す [詳細]
 
tcp_ttketh_tcp_open_server (unsigned short port, FUNCTYPE_TCPEVENT func)
 TCP接続を待ちうけたいポート番号をセットする [詳細]
 
BOOL tketh_tcp_listen (tcp_t *info)
 サーバの受信開始 [詳細]
 
unsigned char * tketh_tcp_target_addr (tcp_t *info)
 接続先のIPアドレスを調べる [詳細]
 
void tketh_tcp_server_terminate (tcp_t *info)
 サーバの待ち受け状態を終了する [詳細]
 
clients_stat_t * tketh_get_client_stats ()
 クライアントの状態を調べる [詳細]
 
void tketh_tcp_set_rbuf_length (unsigned short len)
 TCPの受信バッファの長さを設定する [詳細]
 

説明

RX62N/RX63N用のTCP/IPプロトコルスタック。

このライブラリはTCP/IPレベルでの送受信を行う。Arduino互換ではなく独自実装。
この関数群をArduino風にC++でラッパしたものが Ethernet.h で定義される TEthernet クラスと、 EthernetClient クラスと、 EthernetServer クラスである。ライブラリを使うにはリンカで -ltkdnip を指定すること。

tkdnip.h で定義されています。

列挙型

enum LINK_STATE

リンクの状態

列挙型の値
LINK_DOWN 

リンクダウン

LINK_UP 

リンクアップ

LINK_DOWN_CHANGED 

リンクが切断された

LINK_UP_CHANGED 

リンクが接続された

tkdnip.h40 行で定義されています。

DNSの応答のタイプ

列挙型の値
DNS_NONAUTH 

ノンオーソリティ

DNS_AUTH 

オーソリティ

DNS_APPENDIX 

追加情報

DNS_UNDEF 

不明

tkdnip.h51 行で定義されています。

enum DNS_TYPE

DNSのレコードのタイプ

列挙型の値
DNS_A 

IPv4 アドレス

DNS_NS 

ネームサーバ

DNS_CNAME 

別名

DNS_PTR 

逆引き

DNS_MX 

メールサーバ

DNS_AAAA 

IPv6アドレス

DNS_ANY 

全部

tkdnip.h61 行で定義されています。

enum DNS_CLASS

DNSのアドレスのタイプ

列挙型の値
DNS_UNKN 

不明

DNS_IN 

インターネットアドレス

tkdnip.h75 行で定義されています。

enum TCP_STATE

TCPの接続状態を表す定数

列挙型の値
TCP_CLOSED 

CLOSED 接続は閉じている

TCP_LISTEN 

LISTEN サーバが接続を待っている

TCP_SYNRCVD 

SYN_RCVD SYNを受信した

TCP_ESTAB 

ESTABLISHED 通信が確立している

TCP_FIN_WAIT1 

FIN_WAIT1 相手からのFINを待っている

TCP_FIN_WAIT2 

FIN_WAIT2 相手からのFINを待っている

TCP_CLOSING 

CLOSING FINを送ったらFINを送り返された

TCP_TIME_WAIT 

TIME_WAIT クライアントからCLOSEされた後の待ち

TCP_SYN_SENT 

SYN_SENT SYNを送った。サーバからのACK待ち

TCP_CLOSEWAIT 

CLOSE_WAIT.

TCP_LAST_ACK 

LAST_ACK.

tkdnip.h128 行で定義されています。

関数

void tketh_open ( unsigned char *  macaddr)

自分のMACアドレスを設定し、ライブラリを開始する

引数
[in]macaddrMACアドレス
戻り値
なし
LINK_STATE tketh_check_link ( )

イーサネットのリンクアップをチェックする。

覚え書き
リンクが切断→接続に変わったら自動的にオートネゴーシエーションが実行される。
戻り値
LINK_STATE 型の値。下記のとおり
  • LINK_DOWN (0) : リンクはダウンしている
  • LINK_UP (1) : リンクはアップしている
  • LINK_DOWN_CHANGED (2) : リンクは変化し、切断された
  • LINK_UP_CHANGED (3) : リンクは変化し、接続された
void tketh_process ( )

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

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

警告
この関数はメインのループの中で繰り返し呼び出さなければならない。
戻り値
なし
void tketh_debug ( int  level)

デバッグレベルを設定する

引数
level
  • 0:なし
  • 1:パケットの概要を表示する
  • 2:パケットをダンプする
戻り値
なし
void tketh_set_hostname ( const char *  hostname)

自分の名前を設定する

ここで設定したホスト名はDHCPで使われるので重要

引数
hostnameホスト名
戻り値
なし
char* tketh_get_hostname ( void  )

自分の名前を調べる

tketh_set_hostname() で設定した名前を返す

戻り値
自分のホスト名が格納された文字列バッファへのポインタ
覚え書き
返された文字列はライブラリ内部でmallocして複製したもの
警告
返された文字列をfreeしてはならない
void tketh_change_macaddr ( const unsigned char  macaddr[6])

MACアドレスを変更する

引数
macaddr新しいMACアドレス
戻り値
なし
void tketh_get_macaddr ( unsigned char  macaddr[6])

自分のMACアドレスを調べる

引数
[out]macaddrMACアドレスを格納するバッファへのポインタ
戻り値
なし
覚え書き
バッファを確保するのはユーザルーチンで行うこと
警告
戻り値用に6バイト以上の配列を確保しておくこと
BOOL tketh_dhcpc ( void  )

DHCPを実行して、IPアドレス、GW、DNSサーバを設定する

戻り値
成功するとTRUEを返す。失敗するとFALSEを返す。
void tketh_set_myipaddr ( unsigned char  ipaddr[4],
unsigned char  mask[4] 
)

自分のIPアドレスを設定する

IPアドレスとサブネットマスクを指定する。

引数
[in]ipaddrIPアドレスが格納された4バイトの配列
[in]maskサブネットマスクが格納された4バイトの配列
void tketh_get_myipaddr ( unsigned char  ipaddr[4],
unsigned char  mask[4] 
)

自分のIPアドレスを取得する

DHCP等で設定されたIPアドレスを調べるときに使う

引数
[out]ipaddrIPアドレスを格納する4バイトの配列
[out]maskサブネットマスクを格納する4バイトの配列
覚え書き
この関数はメモリの確保は行わない。配列の実体を確保するのはユーザルーチンで行うこと
戻り値
なし
void tketh_set_gateway ( unsigned char  ipaddr[4])

デフォルトゲートウェイを設定する

引数
[in]ipaddrデフォルトゲートウェイのIPアドレス
戻り値
なし
void tketh_get_gateway ( unsigned char  ipaddr[4])

設定されているデフォルトゲートウェイのアドレスを取得する

DHCP等で設定されたデフォルトゲートウェイアドレスを調べるときに使う

引数
[out]ipaddrデフォルトゲートウェイのIPアドレスを格納する4バイトの配列
覚え書き
この関数はメモリの確保は行わない。配列の実体を確保するのはユーザルーチンで行うこと
戻り値
なし
void tketh_set_nameserver ( unsigned char  ipaddr[4])

DNSサーバのアドレスを設定する

引数
[in]ipaddrDNSサーバのIPアドレス
戻り値
なし
void tketh_get_nameserver ( unsigned char  ipaddr[4])

設定されているDNSサーバのアドレスを取得する

DHCP等で設定されたDNSサーバのアドレスを調べるときに使う

引数
[out]ipaddrDNSサーバのIPアドレスを格納する4バイトの配列
覚え書き
この関数はメモリの確保は行わない。配列の実体を確保するのはユーザルーチンで行うこと
戻り値
なし
void tketh_arp_table_show ( )

ARPのテーブルを表示する

戻り値
なし
覚え書き
デフォルトのシリアルポートに表示する
BOOL tketh_send_udp ( unsigned char  tgtaddr[4],
unsigned short  dest_port,
unsigned short  src_port,
unsigned char *  buf,
int  len 
)

UDPを送信する

引数
[in]tgtaddr相手先のIPアドレス
[in]dest_port送信先ポート番号
[in]src_port送信元ポート番号
[in]buf送信したいデータが格納されたバッファ
[in]len送信したいデータ長
戻り値
成功したらTRUE、失敗したらFALSEを返す
覚え書き
V1.07から、送信元ポート番号を指定できるようにしたため、パラメータ書式が変更になった
void tketh_regist_udp_handler ( UDP_HANDLE_FUNC  func)

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

引数
[in]funcUDPを受信したときにコールバックされる関数
覚え書き
登録される関数は processPackets() の中から呼び出される。したがって、processPackets()を繰り返し呼び出していないと受信処理は行われない。
BOOL tketh_send_ping ( unsigned char  ipaddr[4],
unsigned char *  buf,
int  len 
)

PINGを送信する

引数
[in]ipaddrPingを送りたいホストのIPアドレス
[in]bufPingのデータ部に乗せるデータ。必要なければNULLでよい。
lenデータ部の長さ。必要なければ0を指定してよい。
戻り値
成功したらTRUE、失敗したらFALSEを返す。
BOOL tketh_is_ping_running ( )

PINGが実行中かどうか調べる

tketh_send_ping() で送信したPingが実行中かどうか調べる

戻り値
実行中ならTRUE、実行中でなければFALSEを返す。
void tketh_cancel_ping ( )

PINGの実行をキャンセルする

tketh_send_ping() で開始したPingを中断する。

戻り値
なし
unsigned long tketh_ping_starttime ( )

最後にPINGを送った時刻をus単位で返す

戻り値
Pingを最後に送った時間。システム起動時からの時間がms単位で返される。
BOOL tketh_nslookup ( char *  hostname,
unsigned char  ipaddr[4] 
)

DNSサーバにアクセスして名前解決を行う

引数
[in]hostname調べたいホスト名
[out]ipaddrIPアドレス
戻り値
成功したらTRUE、失敗したらFALSEを返す
dns_records_t* tketh_nslookup_ex ( char *  hostname)

DNSサーバにアクセスして名前解決を行い、すべてのレコードを得る

dns_records_t *型のオブジェクトを返し、すべてのレコードを知ることができるようになっている。

引数
[in]hostname調べたいホスト名
戻り値
結果が格納された dns_records_t *型の構造体へのポインタ
覚え書き
ユーザルーチンはこの関数の戻り値は tketh_free_dns_records() 関数で開放しなければならない。
警告
1500バイト以上の結果が返されたときには最後まで受信できない
void tketh_free_dns_records ( dns_records_t *  dnsrec)

DNS結果構造体を開放する

tketh_nslookup_ex()で得られた結果のオブジェクトを開放する。

引数
[in]dnsrectketh_nslookup_ex() で得られたオブジェクト。
戻り値
なし
BOOL tketh_ip_to_hostname ( unsigned char  ipaddr[4],
char *  hostname,
int  hostname_maxlen 
)

DNSサーバにアクセスしてIPアドレスから名前を調べる

引数
[in]ipaddr調べたいIPアドレス
[out]hostname変換されたホスト名が入るバッファ
[in]hostname_maxlenバッファのサイズ
戻り値
成功したらTRUE、失敗したらFALSEを返す
覚え書き
この関数は実装されていない
tcp_t* tketh_tcp_connect ( unsigned char  ipaddr[4],
unsigned short  dest_port 
)

TCPでサーバに接続する

引数
[in]ipaddr接続したいサーバのIPアドレス
[in]dest_port接続したいポート番号
戻り値
成功したら tcp_t 型のオブジェクトを返す。失敗したらNULLを返す。
BOOL tketh_tcp_is_connected ( tcp_t info)

コネクションが接続中かどうかを調べる

引数
[in]infotketh_tcp_connect() で返されたオブジェクト
戻り値
接続中ならばTRUEを返す。切断されていればFALSEを返す。
void tketh_tcp_fin ( tcp_t info)

コネクションの穏やかな終了

接続先のサーバにFINを送ることでコネクションを終了する

引数
[in]infotketh_tcp_connect() で返されたオブジェクト
覚え書き
この関数はFINを送った後、相手からFINやACKが返るのを待たずに即座に戻る
TODO:
FINタイマなどを実装するべき
char* tketh_tcp_state ( tcp_t info)

コネクションの状態を文字列で返す

引数
[in]infotketh_tcp_connect() で返されたオブジェクト
戻り値
コネクションの状態を表す文字列
覚え書き
この関数の戻り値はライブラリ内でstaticに確保された領域を指している。ユーザがfreeしてはならない。
警告
この関数は実装されていない
void tketh_tcp_senddata ( tcp_t info,
unsigned char *  data,
int  len 
)

TCPの接続先にデータを送信する

引数
[in]infotketh_tcp_connect() で返されたオブジェクト
[in]data送信したいデータが格納されたバッファ
[in]len送信したいデータ長
int tketh_tcp_recvcount ( tcp_t info)

受信バッファに溜まっているデータの量を調べる

TCPのパケットを受信すると受信バッファに格納される。その受信バッファ内のデータ数を返す。

引数
infotketh_tcp_connect() で返されたオブジェクト
戻り値
受信バッファ内のデータ数 (バイト単位)
int tketh_tcp_recvdata ( tcp_t info,
unsigned char *  data,
int  len 
)

受信バッファからデータを取り出す

引数
[in]infotketh_tcp_connect() で返されたオブジェクト
[out]data読み出したデータが格納されるバッファ。バッファは十分なサイズのメモリを確保しておくこと。
[in]len読み出したい長さ。
戻り値
受信したデータ数。データがなければ0を返す。
tcp_t* tketh_tcp_open_server ( unsigned short  port,
FUNCTYPE_TCPEVENT  func 
)

TCP接続を待ちうけたいポート番号をセットする

この関数はあくまでも準備をするだけ。実際にLISTENステートには入れない。

引数
[in]port接続を待ちうけるポート番号
[in]funcTCPのイベントが発生したときにコールバックされる関数 (この機能は未実装)
戻り値
TCPの接続情報を示すオブジェクトが返される
覚え書き
この関数はあくまでもポート番号を指示するだけで、実際にはLISTEN状態にはならない
BOOL tketh_tcp_listen ( tcp_t info)

サーバの受信開始

サーバのTCPステートをLISTEN状態になる

引数
[in]infotketh_tcp_open_server() 関数で返されたオブジェクト
戻り値
成功したらTRUEを返す。失敗したらFALSEを返す。
unsigned char* tketh_tcp_target_addr ( tcp_t info)

接続先のIPアドレスを調べる

引数
[in]infotketh_tcp_open_server() 関数で返されたオブジェクト
戻り値
接続先のIPアドレスが入った配列
覚え書き
この関数の戻り値はライブラリ内でstaticに確保された領域なので、ユーザアプリでfreeをしてはいけない。
void tketh_tcp_server_terminate ( tcp_t info)

サーバの待ち受け状態を終了する

サーバのLISTEN状態を解除して、IDLE状態に戻す。この引数で指定した構造体へのオブジェクト info はもう使えない。

引数
[in]infotketh_tcp_open_server() 関数で返されたオブジェクト
戻り値
なし
clients_stat_t* tketh_get_client_stats ( )

クライアントの状態を調べる

本ライブラリは、サーバ・クライアント合わせて最大16個のセッションを張ることができる。その1つ1つのセッションに関する情報を返す。

戻り値
clients_stat_t *型オブジェクトへのハンドル
void tketh_tcp_set_rbuf_length ( unsigned short  len)

TCPの受信バッファの長さを設定する

引数
[in]len128から32768までの値
戻り値
なし