Changeset 364 for asp3_tinet_ecnl_rx/trunk/app2_light/src
- Timestamp:
- Feb 1, 2019, 9:57:09 PM (5 years ago)
- Location:
- asp3_tinet_ecnl_rx/trunk/app2_light/src
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
asp3_tinet_ecnl_rx/trunk/app2_light/src/echonet_main.c
r351 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 */ … … 116 116 { 117 117 /* サイズが1以外は受け付けない */ 118 if (size != 1)118 if (size != 1) 119 119 return 0; 120 120 121 121 *anno = *((uint8_t *)item->exinf) != *((uint8_t *)src); 122 122 123 switch (*(uint8_t *)src){123 switch (*(uint8_t *)src) { 124 124 /* ONの場合 */ 125 125 case 0x30: … … 152 152 { 153 153 /* サイズが1以外は受け付けない */ 154 if (size != 1)154 if (size != 1) 155 155 return 0; 156 156 157 157 *anno = *((uint8_t *)item->exinf) != *((uint8_t *)src); 158 158 159 switch (*(uint8_t *)src){159 switch (*(uint8_t *)src) { 160 160 /* 異常発生ありの場合 */ 161 161 case 0x41: … … 180 180 181 181 /* サイズが1以外は受け付けない */ 182 if (size != 1)183 return 0; 184 185 switch (*(uint8_t *)src){182 if (size != 1) 183 return 0; 184 185 switch (*(uint8_t *)src) { 186 186 /* 自動の場合 */ 187 187 case 0x41: … … 224 224 uint8_t data[2]; 225 225 226 if (size != 1)227 return 0; 228 229 switch (*(uint8_t *)src){226 if (size != 1) 227 return 0; 228 229 switch (*(uint8_t *)src) { 230 230 /* 人体検出ありの場合 */ 231 231 case 0x41: … … 236 236 data[1] = *(uint8_t *)src; 237 237 ret = ecn_brk_wai(data, sizeof(data)); 238 if (ret != E_OK){238 if (ret != E_OK) { 239 239 syslog(LOG_ERROR, "ecn_brk_wai"); 240 240 return 1; … … 249 249 data[1] = *(uint8_t *)src; 250 250 ret = ecn_brk_wai(data, sizeof(data)); 251 if (ret != E_OK){251 if (ret != E_OK) { 252 252 syslog(LOG_ERROR, "ecn_brk_wai"); 253 253 return 1; … … 269 269 uint8_t *p_src; 270 270 271 if (size != 2)271 if (size != 2) 272 272 return 0; 273 273 … … 288 288 uint8_t *p_dst; 289 289 290 if (size != 2)290 if (size != 2) 291 291 return 0; 292 292 … … 306 306 uint8_t *p_src; 307 307 308 if (size != 4)308 if (size != 4) 309 309 return 0; 310 310 … … 326 326 uint8_t *p_dst; 327 327 328 if (size != 4)328 if (size != 4) 329 329 return 0; 330 330 … … 361 361 362 362 ret2 = get_tim(&now); 363 if (ret2 != E_OK) {363 if (ret2 != E_OK) { 364 364 syslog(LOG_ERROR, "get_tim"); 365 365 return; 366 366 } 367 367 368 for (;;){368 for (;;) { 369 369 prev = now; 370 370 … … 374 374 /* 応答電文待ち */ 375 375 ret = ecn_trcv_esv(&esv, timer); 376 if ((ret != E_OK) && (ret != E_BRK) && (ret != E_TMOUT)) {376 if ((ret != E_OK) && (ret != E_BRK) && (ret != E_TMOUT)) { 377 377 syslog(LOG_ERROR, "ecn_trcv_esv"); 378 378 break; … … 380 380 381 381 ret2 = get_tim(&now); 382 if (ret2 != E_OK) {382 if (ret2 != E_OK) { 383 383 syslog(LOG_ERROR, "get_tim"); 384 384 break; … … 395 395 /* 領域解放 */ 396 396 ret = ecn_rel_esv(esv); 397 if (ret != E_OK) {397 if (ret != E_OK) { 398 398 syslog(LOG_ERROR, "ecn_rel_esv"); 399 399 break; … … 404 404 /* 応答電文待ちの割り込みデータ取得 */ 405 405 ret = ecn_get_brk_dat(esv, brkdat, sizeof(brkdat), &len); 406 if (ret != E_OK) {406 if (ret != E_OK) { 407 407 syslog(LOG_ERROR, "ecn_get_brk_dat"); 408 408 break; … … 414 414 /* 領域解放 */ 415 415 ret = ecn_rel_esv(esv); 416 if (ret != E_OK) {416 if (ret != E_OK) { 417 417 syslog(LOG_ERROR, "ecn_rel_esv"); 418 418 break; … … 425 425 } 426 426 427 bool_t started = false;428 429 427 void echonet_change_netif_link(uint8_t link_up, uint8_t up) 430 428 { … … 434 432 return; 435 433 436 if (up && !started) { 437 started = true; 438 439 /* ECHONETミドルウェアを起動 */ 440 ret = ecn_sta_svc(); 441 if (ret != E_OK) 442 return; 443 444 /* ECHONETミドルウェアを起動するのを待つ */ 445 dly_tsk(100); 434 if (up) { 435 /* インスタンスリスト通知の送信 */ 436 ret = ecn_ntf_inl(); 437 if (ret != E_OK) { 438 syslog(LOG_ERROR, "ecn_ntf_inl"); 439 } 446 440 } 447 441 … … 457 451 } 458 452 459 enum main_state_t{ 453 enum main_state_t { 454 main_state_start, 460 455 main_state_idle, 461 456 main_state_search, … … 464 459 int main_timer = TMO_FEVR; 465 460 int main_btn_timer = TMO_FEVR; 466 enum main_state_t main_state = main_state_ idle;461 enum main_state_t main_state = main_state_start; 467 462 bool_t main_btn1_state; 468 463 int main_btn1_count = 0; … … 480 475 sil_wrb_mem((uint8_t *)0x0008C02A, 0x00); 481 476 482 /* 1秒後に人体検知センサを検索*/483 main_state = main_state_s earch;477 /* ECHONETミドルウェアを起動するのを待つ */ 478 main_state = main_state_start; 484 479 main_timer = 1000 * 1000; 485 480 … … 490 485 btn1 = sil_reb_mem((uint8_t *)0x0008C04A); 491 486 /*btn1 = sil_reb_mem((uint8_t *)0x0008C040);*/ 492 btn2 = sil_reb_mem((uint8_t *) 487 btn2 = sil_reb_mem((uint8_t *)0x0008C040); 493 488 main_btn1_state = (btn1 & 0x80/*0x0x20*/) != 0; 494 489 main_btn2_state = (btn2 & 0x80) != 0; 495 490 491 /* メインタスクを起動 */ 496 492 ER ret = act_tsk(MAIN_TASK); 497 493 if (ret != E_OK) { … … 507 503 int result = main_timer; 508 504 509 if ((result == TMO_FEVR)510 || ((main_btn_timer != TMO_FEVR) && (main_btn_timer < result))) {505 if ((result == TMO_FEVR) 506 || ((main_btn_timer != TMO_FEVR) && (main_btn_timer < result))) { 511 507 result = main_btn_timer; 512 508 } … … 520 516 static void main_progress(int interval) 521 517 { 522 if (main_timer != TMO_FEVR){518 if (main_timer != TMO_FEVR) { 523 519 main_timer -= interval; 524 if (main_timer < 0){520 if (main_timer < 0) { 525 521 main_timer = 0; 526 522 } 527 523 } 528 524 529 if (main_btn_timer != TMO_FEVR){525 if (main_btn_timer != TMO_FEVR) { 530 526 main_btn_timer -= interval; 531 if (main_btn_timer < 0){527 if (main_btn_timer < 0) { 532 528 main_btn_timer = 0; 533 529 } … … 548 544 549 545 eobjid = ecn_get_eobj(esv); 550 if (eobjid == EOBJ_NULL){546 if (eobjid == EOBJ_NULL) { 551 547 syslog(LOG_ERROR, "ecn_get_eobj"); 552 548 } 553 549 554 550 ret = ecn_itr_ini(&enm, esv); 555 if (ret != E_OK){551 if (ret != E_OK) { 556 552 syslog(LOG_ERROR, "ecn_itr_ini"); 557 553 return; 558 554 } 559 555 560 for (;;) {561 while ((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) {556 for (;;) { 557 while ((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) { 562 558 switch (epc) { 563 559 case 0xD6: 564 switch (main_state){560 switch (main_state) { 565 561 case main_state_search: 566 562 if (eobjid == HUMAN_DETECTION_SENSER_ENOD) { … … 574 570 } 575 571 } 576 if (ret != E_BOVR){572 if (ret != E_BOVR) { 577 573 syslog(LOG_ERROR, "ecn_itr_nxt"); 578 574 break; 579 575 } 580 if (enm.is_eof)576 if (enm.is_eof) 581 577 break; 582 578 } … … 592 588 ER ret; 593 589 594 switch (main_state){590 switch (main_state) { 595 591 case main_state_idle: 596 592 if (len < 2) … … 616 612 static void main_timeout() 617 613 { 618 if (main_timer == 0){614 if (main_timer == 0) { 619 615 main_ontimer(); 620 616 } 621 617 622 if (main_btn_timer == 0){618 if (main_btn_timer == 0) { 623 619 main_btn_ontimer(); 624 620 } … … 629 625 static void main_ontimer() 630 626 { 631 switch(main_state){ 627 ER ret; 628 629 switch (main_state) { 630 case main_state_start: 631 /* ECHONETミドルウェアを起動 */ 632 ret = ecn_sta_svc(); 633 if (ret != E_OK) { 634 syslog(LOG_ERROR, "ecn_sta_svc"); 635 } 636 637 /* 1秒後に人体検知センサを検索 */ 638 main_state = main_state_search; 639 main_timer = 1000 * 1000; 640 break; 632 641 case main_state_search: 633 642 /* 人体検知センサ再検索 */ … … 646 655 /* 人体検知センサ検索 */ 647 656 ret = ecn_esv_inf_req(&esv, EOBJ_NULL, 0xD6); 648 if (ret != E_OK){657 if (ret != E_OK) { 649 658 syslog(LOG_ERROR, "ecn_esv_inf_req"); 650 659 return; … … 653 662 /* 電文送信 */ 654 663 ret = ecn_snd_esv(esv); 655 if (ret != E_OK){664 if (ret != E_OK) { 656 665 syslog(LOG_ERROR, "ecn_snd_esv"); 657 666 } … … 674 683 btn1 = sil_reb_mem((uint8_t *)0x0008C04A); 675 684 /*btn1 = sil_reb_mem((uint8_t *)0x0008C040);*/ 676 btn2 = sil_reb_mem((uint8_t *) 685 btn2 = sil_reb_mem((uint8_t *)0x0008C040); 677 686 678 687 /* ボタン1の処理 */ 679 if (((btn1 & 0x80/*0x20*/) != 0) && !main_btn1_state){688 if (((btn1 & 0x80/*0x20*/) != 0) && !main_btn1_state) { 680 689 main_btn1_count++; 681 if (main_btn1_count > 10){690 if (main_btn1_count > 10) { 682 691 main_btn1_count = 0; 683 692 main_btn1_state = true; … … 686 695 } 687 696 } 688 else if (((btn1 & 0x80/*0x20*/) == 0) && main_btn1_state){697 else if (((btn1 & 0x80/*0x20*/) == 0) && main_btn1_state) { 689 698 main_btn1_count++; 690 if (main_btn1_count > 10){699 if (main_btn1_count > 10) { 691 700 main_btn1_count = 0; 692 701 main_btn1_state = false; … … 697 706 698 707 /* ボタン2の処理 */ 699 if (((btn2 & 0x80) != 0) && !main_btn2_state){708 if (((btn2 & 0x80) != 0) && !main_btn2_state) { 700 709 main_btn2_count++; 701 if (main_btn2_count > 10){710 if (main_btn2_count > 10) { 702 711 main_btn2_count = 0; 703 712 main_btn2_state = true; … … 706 715 } 707 716 } 708 else if (((btn2 & 0x80) == 0) && main_btn2_state){717 else if (((btn2 & 0x80) == 0) && main_btn2_state) { 709 718 main_btn2_count++; 710 if (main_btn2_count > 10){719 if (main_btn2_count > 10) { 711 720 main_btn2_count = 0; 712 721 main_btn2_state = false; … … 717 726 } 718 727 719 enum lighting_mode_t {728 enum lighting_mode_t { 720 729 lighting_mode_auto, /* 自動の場合 */ 721 730 lighting_mode_normal, /* 通常灯の場合 */ … … 736 745 737 746 /* 押されて戻った時に処理する */ 738 if (push)747 if (push) 739 748 return; 740 749 … … 745 754 /* プロパティ設定電文作成 */ 746 755 ret = ecn_esv_setc(&esv, GENERAL_LIGHTING_CLASS_EOBJ, 0x80, 1, p_edt); 747 if (ret != E_OK){756 if (ret != E_OK) { 748 757 syslog(LOG_ERROR, "ecn_esv_setc"); 749 758 return; … … 764 773 765 774 /* 押されて戻った時に処理する */ 766 if (push)775 if (push) 767 776 return; 768 777 769 778 /* 点灯モードの切り替え */ 770 switch (main_mode){779 switch (main_mode) { 771 780 /* 自動の場合 */ 772 781 case lighting_mode_auto: … … 798 807 /* プロパティ設定電文作成 */ 799 808 ret = ecn_esv_setc(&esv, GENERAL_LIGHTING_CLASS_EOBJ, 0xB6, 1, p_edt); 800 if (ret != E_OK){809 if (ret != E_OK) { 801 810 syslog(LOG_ERROR, "ecn_esv_setc"); 802 811 return; … … 814 823 815 824 /* 照明がOFFで人体検出ありの場合 */ 816 if (!main_on && state == 0x41){825 if (!main_on && state == 0x41) { 817 826 /* 照明をON */ 818 827 main_on = true; 819 828 } 820 829 /* 照明がOFFで人体検出ありの場合 */ 821 else if (main_on && state == 0x42){830 else if (main_on && state == 0x42) { 822 831 /* 照明をOFF */ 823 832 main_on = false; … … 830 839 /* プロパティ設定電文作成 */ 831 840 ret = ecn_esv_setc(&esv, GENERAL_LIGHTING_CLASS_EOBJ, 0x80, 1, p_edt); 832 if (ret != E_OK){841 if (ret != E_OK) { 833 842 syslog(LOG_ERROR, "ecn_esv_setc"); 834 843 return; -
asp3_tinet_ecnl_rx/trunk/app2_light/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_rx/trunk/app2_light/src/main.cfg
r342 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 クライアント */ … … 77 76 INCLUDE("ffarch.cfg"); 78 77 78 /* mbed */ 79 INCLUDE("mbed_api.cfg"); 80 79 81 #ifdef IF_ETHER_BTUSB 80 82 INCLUDE("usb_hbth.cfg");
Note:
See TracChangeset
for help on using the changeset viewer.