Index: asp3_tinet_ecnl_rx/trunk/app1_usb_watt_meter/src/echonet_main.c
===================================================================
--- asp3_tinet_ecnl_rx/trunk/app1_usb_watt_meter/src/echonet_main.c	(revision 351)
+++ asp3_tinet_ecnl_rx/trunk/app1_usb_watt_meter/src/echonet_main.c	(revision 364)
@@ -1,7 +1,7 @@
 /*
  *  TOPPERS ECHONET Lite Communication Middleware
- * 
+ *
  *  Copyright (C) 2016-2018 Cores Co., Ltd. Japan
- * 
+ *
  *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
  *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
@@ -26,5 +26,5 @@
  *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
  *      免責すること．
- * 
+ *
  *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
  *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
@@ -32,9 +32,9 @@
  *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
  *  の責任を負わない．
- * 
+ *
  *  @(#) $Id$
  */
 
-/* 
+/*
  *  サンプルプログラム(1)の本体
  */
@@ -152,10 +152,10 @@
 {
 	/* サイズが１以外は受け付けない */
-	if(size != 1)
+	if (size != 1)
 		return 0;
 
 	*anno = *((uint8_t*)item->exinf) != *((uint8_t*)src);
 
-	switch(*(uint8_t *)src){
+	switch (*(uint8_t *)src) {
 	/* ONの場合 */
 	case 0x30:
@@ -184,10 +184,10 @@
 {
 	/* サイズが１以外は受け付けない */
-	if(size != 1)
+	if (size != 1)
 		return 0;
 
 	*anno = *((uint8_t *)item->exinf) != *((uint8_t *)src);
 
-	switch(*(uint8_t *)src){
+	switch (*(uint8_t *)src) {
 	/* 異常発生ありの場合 */
 	case 0x41:
@@ -288,5 +288,5 @@
 
 	/* サイズが4以外は受け付けない */
-	if(size != 4)
+	if (size != 4)
 		return 0;
 
@@ -308,5 +308,5 @@
 
 	len = 48 - meter->current_pos;
-	if(len > 0)
+	if (len > 0)
 		memcpy(dst, &meter->integral_electric_energy_measurement_log[meter->current_pos], sizeof(uint32_t) * len);
 	dst = &((uint8_t *)dst)[len];
@@ -367,10 +367,10 @@
 
 	ret2 = get_tim(&now);
-	if (ret2 != E_OK){
+	if (ret2 != E_OK) {
 		syslog(LOG_ERROR, "get_tim");
 		return;
 	}
 
-	for(;;){
+	for (;;) {
 		prev = now;
 
@@ -380,5 +380,5 @@
 		/* 応答電文待ち */
 		ret = ecn_trcv_esv(&esv, timer);
-		if ((ret != E_OK) && (ret != E_BRK) && (ret != E_TMOUT)){
+		if ((ret != E_OK) && (ret != E_BRK) && (ret != E_TMOUT)) {
 			syslog(LOG_ERROR, "ecn_trcv_esv");
 			break;
@@ -386,5 +386,5 @@
 
 		ret2 = get_tim(&now);
-		if (ret2 != E_OK){
+		if (ret2 != E_OK) {
 			syslog(LOG_ERROR, "get_tim");
 			break;
@@ -401,5 +401,5 @@
 			/* 領域解放 */
 			ret = ecn_rel_esv(esv);
-			if (ret != E_OK){
+			if (ret != E_OK) {
 				syslog(LOG_ERROR, "ecn_rel_esv");
 				break;
@@ -410,5 +410,5 @@
 			/* 応答電文待ちの割り込みデータ取得 */
 			ret = ecn_get_brk_dat(esv, brkdat, sizeof(brkdat), &len);
-			if (ret != E_OK){
+			if (ret != E_OK) {
 				syslog(LOG_ERROR, "ecn_get_brk_dat");
 				break;
@@ -420,5 +420,5 @@
 			/* 領域解放 */
 			ret = ecn_rel_esv(esv);
-			if (ret != E_OK){
+			if (ret != E_OK) {
 				syslog(LOG_ERROR, "ecn_rel_esv");
 				break;
@@ -431,6 +431,4 @@
 }
 
-bool_t started = false;
-
 void echonet_change_netif_link(uint8_t link_up, uint8_t up)
 {
@@ -440,14 +438,10 @@
 		return;
 
-	if (up && !started) {
-		started = true;
-
-		/* ECHONETミドルウェアを起動 */
-		ret = ecn_sta_svc();
-		if (ret != E_OK)
-			return;
-
-		/* ECHONETミドルウェアを起動するのを待つ */
-		dly_tsk(100);
+	if (up) {
+		/* インスタンスリスト通知の送信 */
+		ret = ecn_ntf_inl();
+		if (ret != E_OK) {
+			syslog(LOG_ERROR, "ecn_ntf_inl");
+		}
 	}
 
@@ -463,11 +457,12 @@
 }
 
-enum main_state_t{
+enum main_state_t {
+	main_state_start,
 	main_state_idle,
 };
 
 int main_timer = TMO_FEVR;
-enum main_state_t main_state = main_state_idle;
-int main_led_timer = TMO_FEVR;
+enum main_state_t main_state = main_state_start;
+int main_lcd_timer = TMO_FEVR;
 int main_adv_timer = TMO_FEVR;
 int main_whm_counter;
@@ -508,8 +503,9 @@
 
 	/* 3ms後に7SEG表示を更新 */
-	main_led_timer = 3 * 1000;
-
-	/* 10ms後にボタン状態を確認 */
-	main_timer = 10 * 1000;
+	main_lcd_timer = 3 * 1000;
+
+	/* ECHONETミドルウェアを起動するのを待つ */
+	main_state = main_state_start;
+	main_timer = 1000 * 1000;
 
 	/* 12bitADC初期化 */
@@ -526,4 +522,5 @@
 	main_adv_timer = 1000 * 1000;
 
+	/* メインタスクを起動 */
 	ER ret = act_tsk(MAIN_TASK);
 	if (ret != E_OK) {
@@ -539,7 +536,7 @@
 	int result = main_timer;
 
-	if((result == TMO_FEVR)
-		|| ((main_led_timer != TMO_FEVR) && (main_led_timer < result))){
-		result = main_led_timer;
+	if ((result == TMO_FEVR)
+		|| ((main_lcd_timer != TMO_FEVR) && (main_lcd_timer < result))) {
+		result = main_lcd_timer;
 	}
 
@@ -557,15 +554,15 @@
 static void main_progress(int interval)
 {
-	if(main_timer != TMO_FEVR){
+	if (main_timer != TMO_FEVR) {
 		main_timer -= interval;
-		if(main_timer < 0){
+		if (main_timer < 0) {
 			main_timer = 0;
 		}
 	}
 
-	if(main_led_timer != TMO_FEVR){
-		main_led_timer -= interval;
-		if(main_led_timer < 0){
-			main_led_timer = 0;
+	if (main_lcd_timer != TMO_FEVR) {
+		main_lcd_timer -= interval;
+		if (main_lcd_timer < 0) {
+			main_lcd_timer = 0;
 		}
 	}
@@ -591,11 +588,11 @@
 
 	ret = ecn_itr_ini(&enm, esv);
-	if(ret != E_OK){
+	if (ret != E_OK) {
 		syslog(LOG_ERROR, "ecn_itr_ini");
 		return;
 	}
 
-	for(;;) {
-		while((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) {
+	for (;;) {
+		while ((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) {
 			switch (epc) {
 			case 0x80:
@@ -605,9 +602,9 @@
 			}
 		}
-		if(ret != E_BOVR){
+		if (ret != E_BOVR) {
 			syslog(LOG_ERROR, "ecn_itr_nxt");
 			break;
 		}
-		if(enm.is_eof)
+		if (enm.is_eof)
 			break;
 	}
@@ -619,5 +616,5 @@
 static void main_break_wait(uint8_t *brkdat, int32_t len)
 {
-	switch(main_state){
+	switch (main_state) {
 	case main_state_idle:
 		if (len == 0)
@@ -638,5 +635,5 @@
 
 static void main_ontimer();
-static void main_led_ontimer();
+static void main_lcd_ontimer();
 static void main_adv_ontimer();
 
@@ -646,10 +643,10 @@
 static void main_timeout()
 {
-	if(main_timer == 0){
+	if (main_timer == 0) {
 		main_ontimer();
 	}
 
-	if(main_led_timer == 0){
-		main_led_ontimer();
+	if (main_lcd_timer == 0) {
+		main_lcd_ontimer();
 	}
 
@@ -664,5 +661,5 @@
 const uint8_t led_disp[] = { 0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE4, 0xFE, 0xF6, 0xEE, 0x3E, 0x1A, 0x7A, 0x9E, 0x8E };
 
-static void main_led_ontimer()
+static void main_lcd_ontimer()
 {
 	/* 7Seg表示 */
@@ -697,5 +694,5 @@
 
 	/* 3ms後に7SEG表示を更新 */
-	main_led_timer = 3 * 1000;
+	main_lcd_timer = 3 * 1000;
 }
 
@@ -727,8 +724,20 @@
 static void main_ontimer()
 {
+	ER ret;
 	uint8_t btn;
 	uint16_t ad_value;
 
-	switch(main_state){
+	switch (main_state) {
+	case main_state_start:
+		/* ECHONETミドルウェアを起動 */
+		ret = ecn_sta_svc();
+		if (ret != E_OK) {
+			syslog(LOG_ERROR, "ecn_sta_svc");
+		}
+
+		/* 10ms後にボタン状態を確認 */
+		main_state = main_state_idle;
+		main_timer = 10 * 1000;
+		break;
 	case main_state_idle:
 		/* 10ms後にボタン状態を確認 */
@@ -736,5 +745,5 @@
 
 		/* ADCの変換結果取得 */
-		if((sil_reb_mem((uint8_t *)S12AD_ADCSR_ADDR) & S12AD_ADCSR_ADST_BIT) == 0){
+		if ((sil_reb_mem((uint8_t *)S12AD_ADCSR_ADDR) & S12AD_ADCSR_ADST_BIT) == 0) {
 			for (int i = 0; i < main_ad_count; i++) {
 				main_ad_avelage[i] -= main_ad_table[i][main_ad_pos];
@@ -776,7 +785,7 @@
 
 		/* ボタン１の処理 */
-		if(((btn & 0x20) != 0) && !main_btn1_state){
+		if (((btn & 0x20) != 0) && !main_btn1_state) {
 			main_btn1_count++;
-			if(main_btn1_count > 10){
+			if (main_btn1_count > 10) {
 				main_btn1_count = 0;
 				main_btn1_state = true;
@@ -785,7 +794,7 @@
 			}
 		}
-		else if(((btn & 0x20) == 0) && main_btn1_state){
+		else if (((btn & 0x20) == 0) && main_btn1_state) {
 			main_btn1_count++;
-			if(main_btn1_count > 10){
+			if (main_btn1_count > 10) {
 				main_btn1_count = 0;
 				main_btn1_state = false;
@@ -796,7 +805,7 @@
 
 		/* ボタン２の処理 */
-		if(((btn & 0x80) != 0) && !main_btn2_state){
+		if (((btn & 0x80) != 0) && !main_btn2_state) {
 			main_btn2_count++;
-			if(main_btn2_count > 10){
+			if (main_btn2_count > 10) {
 				main_btn2_count = 0;
 				main_btn2_state = true;
@@ -805,7 +814,7 @@
 			}
 		}
-		else if(((btn & 0x80) == 0) && main_btn2_state){
+		else if (((btn & 0x80) == 0) && main_btn2_state) {
 			main_btn2_count++;
-			if(main_btn2_count > 10){
+			if (main_btn2_count > 10) {
 				main_btn2_count = 0;
 				main_btn2_state = false;
@@ -829,11 +838,11 @@
 {
 	/* 押されて戻った時に処理する */
-	if(push)
+	if (push)
 		return;
 
 	/* 表示ポート番号 */
-	if(!main_rev){
+	if (!main_rev) {
 		main_port_no--;
-		if(main_port_no < 1){
+		if (main_port_no < 1) {
 			main_port_no = 1;
 			main_rev = true;
@@ -841,7 +850,7 @@
 		}
 	}
-	else{
+	else {
 		main_port_no++;
-		if(main_port_no > main_ad_count){
+		if (main_port_no > main_ad_count) {
 			main_port_no = main_ad_count;
 			main_rev = false;
@@ -857,5 +866,5 @@
 {
 	/* 押されて戻った時に処理する */
-	if(push)
+	if (push)
 		return;
 
@@ -866,7 +875,7 @@
 
 	/* 表示ポート番号 */
-	if(!main_rev){
+	if (!main_rev) {
 		main_port_no++;
-		if(main_port_no > main_ad_count){
+		if (main_port_no > main_ad_count) {
 			main_port_no = main_ad_count;
 			main_rev = false;
@@ -874,7 +883,7 @@
 		}
 	}
-	else{
+	else {
 		main_port_no--;
-		if(main_port_no < 1){
+		if (main_port_no < 1) {
 			main_port_no = 1;
 			main_rev = true;
@@ -893,5 +902,5 @@
 
 	main_port_no++;
-	if(main_port_no > main_ad_count)
+	if (main_port_no > main_ad_count)
 		main_port_no = 1;
 
