/*	
 *	clipslip.h
 *
 *	SLIP(Serial Line Internet Protocol)サーバ
 *
 *	CLiP - Common Library for P/ECE
 *	Copyright (C) 2001-2005 Naoyuki Sawa
 *
 *	* Sun Jul 24 11:35:00 JST 2005 Naoyuki Sawa
 *	- 作成開始。
 */
#ifndef __CLIP_SLIP_H__
#define __CLIP_SLIP_H__

/****************************************************************************
 *	
 ****************************************************************************/

/* SLIPを開始します。
 * [in]
 *	mtu		最大転送単位[バイト]。(0 = 既定値)
 *	rxdone		受信完了コールバック。(NULL = 無し)
 *	txdone		送信完了コールバック。(NULL = 無し)
 * [note]
 *	* slip_open()を呼び出したアプリケーションは、終了する前に必ず、
 *	  slip_close()を呼び出してください。
 *	  slip_close()を呼び出さずに終了すると、P/ECEシステムが異常動作となります。
 *	* 最大転送単位に0を指定すると、既定値の1006バイトとなります。
 */
void slip_open(int mtu/*=1006*/, void (*rxdone)(), void (*txdone)());

/* SLIPを切断します。
 * [note]
 *	* slip_close()は、常に安全に呼び出すことができます。
 *	  slip_open()を呼び出していなくても、slip_close()を呼び出しても構いません。
 */
void slip_close();

/* 受信パケットを取り出します。
 * [in]
 *	dat		取り出したパケットを格納するバッファ。
 *	len		取り出すパケットの最大バイト数。
 * [out]
 *	戻り値		実際に取り出したパケットのバイト数。
 *			受信パケットが無かった場合、0を返します。
 */
int slip_recv(void* dat/*[len]*/, int len);

/* 送信パケットを設定します。
 * [out]
 *	dat		送信するパケット。
 *	len		送信するパケットのバイト数。
 * [out]
 *	戻り値		実際に送信したパケットのバイト数。
 *			- lenに最大転送単位以上のバイト数を指定した場合、最大転送単位のバイト数を返します。
 *			- 送信中のパケットが残っていて、送信パケットを設定できなかった場合は、0を返します。
 *			  しばらく待ってから、もう一度slip_send()を呼び出してください。
 */
int slip_send(const void* dat/*[len]*/, int len);

/* 送受信パケット数や、ハンドシェイク回数を取得します。
 * [in]
 *	stat		結果を格納するSILPSTAT構造体へのポインタ。
 */
typedef struct _SLIPSTAT {
	int cslog;	/* "CLIENT"→"CLIENTSERVER"ハンドシェイク回数 */
	//		/* (受信パケット中に偶然含まれた"CLIENT"に対する、無用な応答回数も含みます) */
	int rxlog;	/* 総受信パケット数 (エラーパケットも含みます) */
	int txlog;	/* 総送信パケット数 */
} SLIPSTAT;
void slip_stat(SLIPSTAT* stat);

#endif /*__CLIP_SLIP_H__*/
