Changeset 364 for asp3_tinet_ecnl_arm/trunk/app6_hot_water_pot/src
- Timestamp:
- Feb 1, 2019, 9:57:09 PM (5 years ago)
- Location:
- asp3_tinet_ecnl_arm/trunk/app6_hot_water_pot/src
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
asp3_tinet_ecnl_arm/trunk/app6_hot_water_pot/src/echonet_main.c
r352 r364 1 1 /* 2 2 * TOPPERS ECHONET Lite Communication Middleware 3 * 3 * 4 4 * Copyright (C) 2014-2018 Cores Co., Ltd. Japan 5 * 5 * 6 6 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 7 7 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 … … 26 26 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 27 27 * 免責すること. 28 * 28 * 29 29 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 30 30 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 … … 32 32 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 33 33 * の責任を負わない. 34 * 34 * 35 35 * @(#) $Id$ 36 36 */ 37 37 38 /* 38 /* 39 39 * サンプルプログラム(1)の本体 40 40 */ … … 113 113 { 114 114 /* サイズが1以外は受け付けない */ 115 if (size != 1)115 if (size != 1) 116 116 return 0; 117 117 118 118 *anno = *((uint8_t*)item->exinf) != *((uint8_t*)src); 119 119 120 switch (*(uint8_t *)src){120 switch (*(uint8_t *)src) { 121 121 /* ONの場合 */ 122 122 case 0x30: … … 145 145 { 146 146 /* サイズが1以外は受け付けない */ 147 if (size != 1)147 if (size != 1) 148 148 return 0; 149 149 150 150 *anno = *((uint8_t *)item->exinf) != *((uint8_t *)src); 151 151 152 switch (*(uint8_t *)src){152 switch (*(uint8_t *)src) { 153 153 /* 異常発生ありの場合 */ 154 154 case 0x41: … … 174 174 175 175 /* サイズが1以外は受け付けない */ 176 if (size != 1)176 if (size != 1) 177 177 return 0; 178 178 179 179 *anno = *((uint8_t*)item->exinf) != *((uint8_t*)src); 180 180 181 switch (*(uint8_t *)src){181 switch (*(uint8_t *)src) { 182 182 /* 湯切れ無しの場合 */ 183 183 case 0x40: … … 200 200 data[0] = 0xB1; 201 201 ret = ecn_brk_wai(data, sizeof(data)); 202 if (ret != E_OK){202 if (ret != E_OK) { 203 203 syslog(LOG_ERROR, "ecn_brk_wai"); 204 204 } … … 213 213 { 214 214 /* サイズが1以外は受け付けない */ 215 if (size != 1)215 if (size != 1) 216 216 return 0; 217 217 218 218 *anno = *((uint8_t*)item->exinf) != *((uint8_t*)src); 219 219 220 switch (*(uint8_t *)src){220 switch (*(uint8_t *)src) { 221 221 /* 出湯有の場合 */ 222 222 case 0x41: … … 262 262 263 263 ret2 = get_tim(&now); 264 if (ret2 != E_OK) {264 if (ret2 != E_OK) { 265 265 syslog(LOG_ERROR, "get_tim"); 266 266 return; 267 267 } 268 268 269 for (;;){269 for (;;) { 270 270 prev = now; 271 271 … … 275 275 /* 応答電文待ち */ 276 276 ret = ecn_trcv_esv(&esv, timer); 277 if ((ret != E_OK) && (ret != E_BRK) && (ret != E_TMOUT)) {277 if ((ret != E_OK) && (ret != E_BRK) && (ret != E_TMOUT)) { 278 278 syslog(LOG_ERROR, "ecn_trcv_esv"); 279 279 break; … … 281 281 282 282 ret2 = get_tim(&now); 283 if (ret2 != E_OK) {283 if (ret2 != E_OK) { 284 284 syslog(LOG_ERROR, "get_tim"); 285 285 break; … … 296 296 /* 領域解放 */ 297 297 ret = ecn_rel_esv(esv); 298 if (ret != E_OK) {298 if (ret != E_OK) { 299 299 syslog(LOG_ERROR, "ecn_rel_esv"); 300 300 break; … … 305 305 /* 応答電文待ちの割り込みデータ取得 */ 306 306 ret = ecn_get_brk_dat(esv, brkdat, sizeof(brkdat), &len); 307 if (ret != E_OK) {307 if (ret != E_OK) { 308 308 syslog(LOG_ERROR, "ecn_get_brk_dat"); 309 309 break; … … 315 315 /* 領域解放 */ 316 316 ret = ecn_rel_esv(esv); 317 if (ret != E_OK) {317 if (ret != E_OK) { 318 318 syslog(LOG_ERROR, "ecn_rel_esv"); 319 319 break; … … 326 326 } 327 327 328 bool_t started = false;329 330 328 void echonet_change_netif_link(uint8_t link_up, uint8_t up) 331 329 { … … 335 333 return; 336 334 337 if (up && !started) { 338 started = true; 339 340 /* ECHONETミドルウェアを起動 */ 341 ret = ecn_sta_svc(); 342 if (ret != E_OK) 343 return; 344 345 /* ECHONETミドルウェアを起動するのを待つ */ 346 dly_tsk(100); 335 if (up) { 336 /* インスタンスリスト通知の送信 */ 337 ret = ecn_ntf_inl(); 338 if (ret != E_OK) { 339 syslog(LOG_ERROR, "ecn_ntf_inl"); 340 } 347 341 } 348 342 … … 358 352 } 359 353 360 enum main_state_t{ 354 enum main_state_t { 355 main_state_start, 361 356 main_state_idle, 362 357 main_state_search, … … 365 360 366 361 int main_timer = TMO_FEVR; 367 enum main_state_t main_state = main_state_ idle;362 enum main_state_t main_state = main_state_start; 368 363 int main_retry; 369 364 … … 397 392 gpio_write(&led_red, 0); 398 393 399 /* 1秒後にブザーを検索 */ 400 main_state = main_state_search; 394 395 /* ECHONETミドルウェアを起動するのを待つ */ 396 main_state = main_state_start; 401 397 main_timer = 1000 * 1000; 402 398 … … 410 406 main_btn2_state = btn2 != 0; 411 407 408 /* メインタスクを起動 */ 412 409 ER ret = act_tsk(MAIN_TASK); 413 410 if (ret != E_OK) { … … 423 420 int result = main_timer; 424 421 425 if ((result == TMO_FEVR)426 || ((main_btn_timer != TMO_FEVR) && (main_btn_timer < result))) {422 if ((result == TMO_FEVR) 423 || ((main_btn_timer != TMO_FEVR) && (main_btn_timer < result))) { 427 424 result = main_btn_timer; 428 425 } … … 436 433 static void main_progress(int interval) 437 434 { 438 if (main_timer != TMO_FEVR){435 if (main_timer != TMO_FEVR) { 439 436 main_timer -= interval; 440 if (main_timer < 0){437 if (main_timer < 0) { 441 438 main_timer = 0; 442 439 } 443 440 } 444 441 445 if (main_btn_timer != TMO_FEVR){442 if (main_btn_timer != TMO_FEVR) { 446 443 main_btn_timer -= interval; 447 if (main_btn_timer < 0){444 if (main_btn_timer < 0) { 448 445 main_btn_timer = 0; 449 446 } … … 464 461 465 462 eobjid = ecn_get_eobj(esv); 466 if (eobjid == EOBJ_NULL){463 if (eobjid == EOBJ_NULL) { 467 464 syslog(LOG_ERROR, "ecn_get_eobj"); 468 465 return; … … 470 467 471 468 ret = ecn_itr_ini(&enm, esv); 472 if (ret != E_OK){469 if (ret != E_OK) { 473 470 syslog(LOG_ERROR, "ecn_itr_ini"); 474 471 return; 475 472 } 476 473 477 for (;;) {478 while ((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) {474 for (;;) { 475 while ((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) { 479 476 switch (epc) { 480 477 case 0xB1: 481 switch (main_state){478 switch (main_state) { 482 479 /* プロパティ通知応答待ちの場合 */ 483 480 case main_state_wait_res: 484 481 /* プロパティ通知応答のみ処理 */ 485 if ((esv->hdr.edata.esv == ESV_INFC_RES) && (eobjid == BUZZER_NODE_EOBJ)){482 if ((esv->hdr.edata.esv == ESV_INFC_RES) && (eobjid == BUZZER_NODE_EOBJ)) { 486 483 /* 応答受信 */ 487 484 main_state = main_state_idle; … … 492 489 break; 493 490 case 0xD6: 494 switch (main_state){491 switch (main_state) { 495 492 case main_state_search: 496 493 if (eobjid == BUZZER_NODE_EOBJ) { … … 504 501 } 505 502 } 506 if (ret != E_BOVR){503 if (ret != E_BOVR) { 507 504 syslog(LOG_ERROR, "ecn_itr_nxt"); 508 505 break; 509 506 } 510 if (enm.is_eof)507 if (enm.is_eof) 511 508 break; 512 509 } … … 526 523 } 527 524 528 switch (main_state){525 switch (main_state) { 529 526 case main_state_idle: 530 527 case main_state_wait_res: 531 if ((len >= 1) && (*brkdat == 0xB1)){528 if ((len >= 1) && (*brkdat == 0xB1)) { 532 529 /* ブザーに湯切れ警告状態通知 */ 533 530 ret = ecn_esv_infc(&esv, BUZZER_NODE_EOBJ, ELECTRIC_HOT_WATER_POT_EOBJ, 0xB1); 534 if (ret != E_OK){531 if (ret != E_OK) { 535 532 syslog(LOG_ERROR, "ecn_esv_infc"); 536 533 return; … … 539 536 /* 電文送信 */ 540 537 ret = ecn_snd_esv(esv); 541 if (ret != E_OK){538 if (ret != E_OK) { 542 539 syslog(LOG_ERROR, "ecn_snd_esv"); 543 540 } … … 560 557 static void main_timeout() 561 558 { 562 if (main_timer == 0){559 if (main_timer == 0) { 563 560 main_ontimer(); 564 561 } 565 562 566 if (main_btn_timer == 0){563 if (main_btn_timer == 0) { 567 564 main_btn_ontimer(); 568 565 } … … 576 573 T_EDATA *esv; 577 574 578 switch(main_state){ 575 switch (main_state) { 576 case main_state_start: 577 /* ECHONETミドルウェアを起動 */ 578 ret = ecn_sta_svc(); 579 if (ret != E_OK) { 580 syslog(LOG_ERROR, "ecn_sta_svc"); 581 } 582 583 /* 1秒後にブザーを検索 */ 584 main_state = main_state_search; 585 main_timer = 1000 * 1000; 586 break; 579 587 case main_state_idle: 580 588 syslog(LOG_ERROR, "timeout faild on main_state_idle"); … … 589 597 case main_state_wait_res: 590 598 /* リトライアウトの場合 */ 591 if (main_retry == 0){599 if (main_retry == 0) { 592 600 /* あきらめる */ 593 601 main_state = main_state_idle; … … 598 606 /* ブザーに湯切れ警告状態通知を再送 */ 599 607 ret = ecn_esv_infc(&esv, BUZZER_NODE_EOBJ, ELECTRIC_HOT_WATER_POT_EOBJ, 0xB1); 600 if (ret != E_OK){608 if (ret != E_OK) { 601 609 syslog(LOG_ERROR, "ecn_esv_infc"); 602 610 main_state = main_state_idle; … … 607 615 /* 電文送信 */ 608 616 ret = ecn_snd_esv(esv); 609 if (ret != E_OK){617 if (ret != E_OK) { 610 618 syslog(LOG_ERROR, "ecn_snd_esv"); 611 619 main_state = main_state_idle; … … 629 637 /* ブザー検索 */ 630 638 ret = ecn_esv_inf_req(&esv, EOBJ_NULL, 0xD6); 631 if (ret != E_OK){639 if (ret != E_OK) { 632 640 syslog(LOG_ERROR, "ecn_esv_inf_req"); 633 641 return; … … 636 644 /* 電文送信 */ 637 645 ret = ecn_snd_esv(esv); 638 if (ret != E_OK){646 if (ret != E_OK) { 639 647 syslog(LOG_ERROR, "ecn_snd_esv"); 640 648 } … … 656 664 657 665 /* ボタン1の処理 */ 658 if ((btn1 != 0) && !main_btn1_state){666 if ((btn1 != 0) && !main_btn1_state) { 659 667 main_btn1_count++; 660 if (main_btn1_count > 10){668 if (main_btn1_count > 10) { 661 669 main_btn1_count = 0; 662 670 main_btn1_state = true; … … 665 673 } 666 674 } 667 else if ((btn1 == 0) && main_btn1_state){675 else if ((btn1 == 0) && main_btn1_state) { 668 676 main_btn1_count++; 669 if (main_btn1_count > 10){677 if (main_btn1_count > 10) { 670 678 main_btn1_count = 0; 671 679 main_btn1_state = false; … … 676 684 677 685 /* ボタン2の処理 */ 678 if ((btn2 != 0) && !main_btn2_state){686 if ((btn2 != 0) && !main_btn2_state) { 679 687 main_btn2_count++; 680 if (main_btn2_count > 10){688 if (main_btn2_count > 10) { 681 689 main_btn2_count = 0; 682 690 main_btn2_state = true; … … 685 693 } 686 694 } 687 else if ((btn2 == 0) && main_btn2_state){695 else if ((btn2 == 0) && main_btn2_state) { 688 696 main_btn2_count++; 689 if (main_btn2_count > 10){697 if (main_btn2_count > 10) { 690 698 main_btn2_count = 0; 691 699 main_btn2_state = false; … … 708 716 709 717 /* 押されて戻った時に処理する */ 710 if (push)718 if (push) 711 719 return; 712 720 … … 718 726 /* プロパティ設定電文作成 */ 719 727 ret = ecn_esv_seti(&esv, ELECTRIC_HOT_WATER_POT_EOBJ, 0xB1, 1, p_edt); 720 if (ret != E_OK){728 if (ret != E_OK) { 721 729 syslog(LOG_ERROR, "ecn_esv_seti"); 722 730 return; … … 725 733 /* 電文送信 */ 726 734 ecn_snd_esv(esv); 727 if (ret != E_OK){735 if (ret != E_OK) { 728 736 syslog(LOG_ERROR, "ecn_snd_esv"); 729 737 } … … 744 752 /* プロパティ設定電文作成 */ 745 753 ret = ecn_esv_seti(&esv, ELECTRIC_HOT_WATER_POT_EOBJ, 0xE2, 1, p_edt); 746 if (ret != E_OK){754 if (ret != E_OK) { 747 755 syslog(LOG_ERROR, "ecn_esv_seti"); 748 756 return; … … 751 759 /* 電文送信 */ 752 760 ecn_snd_esv(esv); 753 if (ret != E_OK){761 if (ret != E_OK) { 754 762 syslog(LOG_ERROR, "ecn_snd_esv"); 755 763 } -
asp3_tinet_ecnl_arm/trunk/app6_hot_water_pot/src/main.c
r359 r364 79 79 80 80 ID ws_api_mailboxid = MAIN_DATAQUEUE; 81 #ifndef NOUSE_MPF_NET_BUF 81 82 ID ws_mempoolid = MPF_NET_BUF_256; 83 #endif 82 84 83 85 #ifdef IF_ETHER_BTUSB … … 111 113 static void main_timeout(); 112 114 115 extern int ntshell_exit; 116 113 117 int uart_read(char *buf, int cnt, void *extobj) 114 118 { 115 return serial_rea_dat(SIO_PORTID, (char *)buf, cnt); 119 struct main_t *obj = (struct main_t *)extobj; 120 int result; 121 ER ret; 122 int timer; 123 124 obj->prev = obj->now; 125 126 /* タイマー取得 */ 127 timer = main_get_timer(); 128 129 /* 待ち */ 130 ret = serial_trea_dat(SIO_PORTID, buf, cnt, timer); 131 if ((ret < 0) && (ret != E_OK) && (ret != E_TMOUT)) { 132 syslog(LOG_NOTICE, "tslp_tsk ret: %s %d", itron_strerror(ret), timer); 133 ntshell_exit = 1; 134 return -1; 135 } 136 result = (int)ret; 137 138 ret = get_tim(&obj->now); 139 if (ret != E_OK) { 140 syslog(LOG_NOTICE, "get_tim ret: %s", itron_strerror(ret)); 141 ntshell_exit = 1; 142 return -1; 143 } 144 145 /* 時間経過 */ 146 int elapse = obj->now - obj->prev; 147 main_progress(elapse); 148 149 /* タイムアウト処理 */ 150 main_timeout(); 151 152 return result; 116 153 } 117 154 … … 119 156 { 120 157 return serial_wri_dat(SIO_PORTID, buf, cnt); 121 }122 123 unsigned char ntstdio_xi(struct ntstdio_t *handle)124 {125 char buf[1];126 if(serial_rea_dat(SIO_PORTID, buf, 1) != 1)127 return -EIO;128 return buf[0];129 }130 131 void ntstdio_xo(struct ntstdio_t *handle, unsigned char c)132 {133 char buf[1];134 buf[0] = c;135 serial_wri_dat(SIO_PORTID, buf, 1);136 158 } 137 159 … … 150 172 main_initialize(); 151 173 152 ntshell_init(&ntshell, uart_read, uart_write, cmd_execute, NULL);174 ntshell_init(&ntshell, uart_read, uart_write, cmd_execute, &main_obj); 153 175 ntshell_set_prompt(&ntshell, "NTShell>"); 154 176 ntshell_execute(&ntshell); … … 168 190 ER ret; 169 191 170 ntshell_task_init(); 192 #ifdef TOPPERS_OMIT_TECS 193 serial_opn_por(SIO_PORTID); 194 #endif 195 serial_ctl_por(SIO_PORTID, IOCTL_FCSND | IOCTL_FCRCV); 196 197 ntshell_task_init(uart_read, uart_write, &main_obj); 171 198 172 199 main_obj.timer = TMO_FEVR; -
asp3_tinet_ecnl_arm/trunk/app6_hot_water_pot/src/main.cfg
r352 r364 54 54 INCLUDE("tinet/tinet_asp.cfg"); 55 55 INCLUDE("tinet_main.cfg"); 56 INCLUDE("netinet/ip_igmp.cfg");57 56 58 57 /* DHCP クライアント */
Note:
See TracChangeset
for help on using the changeset viewer.