#define CM
#ifndef CM
/**
 * Nyarudinoのスケッチシステムを使う場合の実装
 */
#include "boot/sketch.h"
#include "NyLPC_uipService.h"

void setup(void)
{
	//EthernetAddressのセット
	NyLPC_TEtherMacAddr_t mac=NyLPC_TEtherMacAddr_pack(0x00,0x12,0x13,0x10,0x15,0x11);
    //uipサービスの初期化
	NyLPC_cUipService_initialize(&mac);
}
static char dummy[2000];

void loopback(void)
{
	//IPアドレスの設定
	NyLPC_TIpv4Addr_t ipaddr=NyLPC_TIpv4Addr_pack(192,168,128,201);
	NyLPC_TIpv4Addr_t netmask=NyLPC_TIpv4Addr_pack(255,255,255,0);
	NyLPC_TIpv4Addr_t gateway=NyLPC_TIpv4Addr_pack(192,168,128,254);
	NyLPC_TcTcpListener_t li;
	NyLPC_TcTcpSocket_t s;
	NyLPC_TUInt32 sl;
	int i,i2;
	char* d;
	for(i=0;i<2000;i++){
		dummy[i]='0'+i%10;
	}
	NyLPC_cUipService_start(&ipaddr,&netmask,&gateway); //Uipの開始
	NyLPC_cTcpListener_initialize(23,3,&li); 	//リスナ生成
	NyLPC_cUipService_addListener(&li);			//リスナadd
	//ソケット生成
	NyLPC_cTcpSocket_initialize(&s);
	for(;;){
		//listen処理
		if(!NyLPC_cTcpListener_listen(&li,&s,1000/portTICK_RATE_MS)){
			continue;
		}
		i2=0;
		//とりあえずデータ受信して閉じる。
		while(1){
			if(NyLPC_cTcpSocket_recv(&s,&d,&sl,10000/portTICK_RATE_MS)){
				i2+=sl;
				i=0;
				if(sl>0){
					do{
						if(!NyLPC_cTcpSocket_send(&s,d,sl,&i,portMAX_DELAY)){
							goto end;
						}
						sl-=i;
						d+=i;
					}while(sl>0);
				}
			}else{
				goto end;
			}
		}
		NyLPC_cTcpSocket_send_close(&s);
		NyLPC_cTcpSocket_recv_close(&s);
		end:;
		NyLPC_cTcpSocket_send_close(&s);
		NyLPC_cTcpSocket_recv_close(&s);
		NyLPC_Warning();
	}
}
void loop(void)
{
	loopback();
	for(;;){}
}
#endif
