- Timestamp:
- Feb 1, 2019, 9:57:09 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
asp3_tinet_ecnl_rx/trunk/app1_usb_watt_meter/src/echonet_main.c
r351 r364 1 1 /* 2 2 * TOPPERS ECHONET Lite Communication Middleware 3 * 3 * 4 4 * Copyright (C) 2016-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 */ … … 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 /* ONの場合 */ 161 161 case 0x30: … … 184 184 { 185 185 /* サイズが1以外は受け付けない */ 186 if (size != 1)186 if (size != 1) 187 187 return 0; 188 188 189 189 *anno = *((uint8_t *)item->exinf) != *((uint8_t *)src); 190 190 191 switch (*(uint8_t *)src){191 switch (*(uint8_t *)src) { 192 192 /* 異常発生ありの場合 */ 193 193 case 0x41: … … 288 288 289 289 /* サイズが4以外は受け付けない */ 290 if (size != 4)290 if (size != 4) 291 291 return 0; 292 292 … … 308 308 309 309 len = 48 - meter->current_pos; 310 if (len > 0)310 if (len > 0) 311 311 memcpy(dst, &meter->integral_electric_energy_measurement_log[meter->current_pos], sizeof(uint32_t) * len); 312 312 dst = &((uint8_t *)dst)[len]; … … 367 367 368 368 ret2 = get_tim(&now); 369 if (ret2 != E_OK) {369 if (ret2 != E_OK) { 370 370 syslog(LOG_ERROR, "get_tim"); 371 371 return; 372 372 } 373 373 374 for (;;){374 for (;;) { 375 375 prev = now; 376 376 … … 380 380 /* 応答電文待ち */ 381 381 ret = ecn_trcv_esv(&esv, timer); 382 if ((ret != E_OK) && (ret != E_BRK) && (ret != E_TMOUT)) {382 if ((ret != E_OK) && (ret != E_BRK) && (ret != E_TMOUT)) { 383 383 syslog(LOG_ERROR, "ecn_trcv_esv"); 384 384 break; … … 386 386 387 387 ret2 = get_tim(&now); 388 if (ret2 != E_OK) {388 if (ret2 != E_OK) { 389 389 syslog(LOG_ERROR, "get_tim"); 390 390 break; … … 401 401 /* 領域解放 */ 402 402 ret = ecn_rel_esv(esv); 403 if (ret != E_OK) {403 if (ret != E_OK) { 404 404 syslog(LOG_ERROR, "ecn_rel_esv"); 405 405 break; … … 410 410 /* 応答電文待ちの割り込みデータ取得 */ 411 411 ret = ecn_get_brk_dat(esv, brkdat, sizeof(brkdat), &len); 412 if (ret != E_OK) {412 if (ret != E_OK) { 413 413 syslog(LOG_ERROR, "ecn_get_brk_dat"); 414 414 break; … … 420 420 /* 領域解放 */ 421 421 ret = ecn_rel_esv(esv); 422 if (ret != E_OK) {422 if (ret != E_OK) { 423 423 syslog(LOG_ERROR, "ecn_rel_esv"); 424 424 break; … … 431 431 } 432 432 433 bool_t started = false;434 435 433 void echonet_change_netif_link(uint8_t link_up, uint8_t up) 436 434 { … … 440 438 return; 441 439 442 if (up && !started) { 443 started = true; 444 445 /* ECHONETミドルウェアを起動 */ 446 ret = ecn_sta_svc(); 447 if (ret != E_OK) 448 return; 449 450 /* ECHONETミドルウェアを起動するのを待つ */ 451 dly_tsk(100); 440 if (up) { 441 /* インスタンスリスト通知の送信 */ 442 ret = ecn_ntf_inl(); 443 if (ret != E_OK) { 444 syslog(LOG_ERROR, "ecn_ntf_inl"); 445 } 452 446 } 453 447 … … 463 457 } 464 458 465 enum main_state_t{ 459 enum main_state_t { 460 main_state_start, 466 461 main_state_idle, 467 462 }; 468 463 469 464 int main_timer = TMO_FEVR; 470 enum main_state_t main_state = main_state_ idle;471 int main_l ed_timer = TMO_FEVR;465 enum main_state_t main_state = main_state_start; 466 int main_lcd_timer = TMO_FEVR; 472 467 int main_adv_timer = TMO_FEVR; 473 468 int main_whm_counter; … … 508 503 509 504 /* 3ms後に7SEG表示を更新 */ 510 main_led_timer = 3 * 1000; 511 512 /* 10ms後にボタン状態を確認 */ 513 main_timer = 10 * 1000; 505 main_lcd_timer = 3 * 1000; 506 507 /* ECHONETミドルウェアを起動するのを待つ */ 508 main_state = main_state_start; 509 main_timer = 1000 * 1000; 514 510 515 511 /* 12bitADC初期化 */ … … 526 522 main_adv_timer = 1000 * 1000; 527 523 524 /* メインタスクを起動 */ 528 525 ER ret = act_tsk(MAIN_TASK); 529 526 if (ret != E_OK) { … … 539 536 int result = main_timer; 540 537 541 if ((result == TMO_FEVR)542 || ((main_l ed_timer != TMO_FEVR) && (main_led_timer < result))){543 result = main_l ed_timer;538 if ((result == TMO_FEVR) 539 || ((main_lcd_timer != TMO_FEVR) && (main_lcd_timer < result))) { 540 result = main_lcd_timer; 544 541 } 545 542 … … 557 554 static void main_progress(int interval) 558 555 { 559 if (main_timer != TMO_FEVR){556 if (main_timer != TMO_FEVR) { 560 557 main_timer -= interval; 561 if (main_timer < 0){558 if (main_timer < 0) { 562 559 main_timer = 0; 563 560 } 564 561 } 565 562 566 if (main_led_timer != TMO_FEVR){567 main_l ed_timer -= interval;568 if (main_led_timer < 0){569 main_l ed_timer = 0;563 if (main_lcd_timer != TMO_FEVR) { 564 main_lcd_timer -= interval; 565 if (main_lcd_timer < 0) { 566 main_lcd_timer = 0; 570 567 } 571 568 } … … 591 588 592 589 ret = ecn_itr_ini(&enm, esv); 593 if (ret != E_OK){590 if (ret != E_OK) { 594 591 syslog(LOG_ERROR, "ecn_itr_ini"); 595 592 return; 596 593 } 597 594 598 for (;;) {599 while ((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) {595 for (;;) { 596 while ((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) { 600 597 switch (epc) { 601 598 case 0x80: … … 605 602 } 606 603 } 607 if (ret != E_BOVR){604 if (ret != E_BOVR) { 608 605 syslog(LOG_ERROR, "ecn_itr_nxt"); 609 606 break; 610 607 } 611 if (enm.is_eof)608 if (enm.is_eof) 612 609 break; 613 610 } … … 619 616 static void main_break_wait(uint8_t *brkdat, int32_t len) 620 617 { 621 switch (main_state){618 switch (main_state) { 622 619 case main_state_idle: 623 620 if (len == 0) … … 638 635 639 636 static void main_ontimer(); 640 static void main_l ed_ontimer();637 static void main_lcd_ontimer(); 641 638 static void main_adv_ontimer(); 642 639 … … 646 643 static void main_timeout() 647 644 { 648 if (main_timer == 0){645 if (main_timer == 0) { 649 646 main_ontimer(); 650 647 } 651 648 652 if (main_led_timer == 0){653 main_l ed_ontimer();649 if (main_lcd_timer == 0) { 650 main_lcd_ontimer(); 654 651 } 655 652 … … 664 661 const uint8_t led_disp[] = { 0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE4, 0xFE, 0xF6, 0xEE, 0x3E, 0x1A, 0x7A, 0x9E, 0x8E }; 665 662 666 static void main_l ed_ontimer()663 static void main_lcd_ontimer() 667 664 { 668 665 /* 7Seg表示 */ … … 697 694 698 695 /* 3ms後に7SEG表示を更新 */ 699 main_l ed_timer = 3 * 1000;696 main_lcd_timer = 3 * 1000; 700 697 } 701 698 … … 727 724 static void main_ontimer() 728 725 { 726 ER ret; 729 727 uint8_t btn; 730 728 uint16_t ad_value; 731 729 732 switch(main_state){ 730 switch (main_state) { 731 case main_state_start: 732 /* ECHONETミドルウェアを起動 */ 733 ret = ecn_sta_svc(); 734 if (ret != E_OK) { 735 syslog(LOG_ERROR, "ecn_sta_svc"); 736 } 737 738 /* 10ms後にボタン状態を確認 */ 739 main_state = main_state_idle; 740 main_timer = 10 * 1000; 741 break; 733 742 case main_state_idle: 734 743 /* 10ms後にボタン状態を確認 */ … … 736 745 737 746 /* ADCの変換結果取得 */ 738 if ((sil_reb_mem((uint8_t *)S12AD_ADCSR_ADDR) & S12AD_ADCSR_ADST_BIT) == 0){747 if ((sil_reb_mem((uint8_t *)S12AD_ADCSR_ADDR) & S12AD_ADCSR_ADST_BIT) == 0) { 739 748 for (int i = 0; i < main_ad_count; i++) { 740 749 main_ad_avelage[i] -= main_ad_table[i][main_ad_pos]; … … 776 785 777 786 /* ボタン1の処理 */ 778 if (((btn & 0x20) != 0) && !main_btn1_state){787 if (((btn & 0x20) != 0) && !main_btn1_state) { 779 788 main_btn1_count++; 780 if (main_btn1_count > 10){789 if (main_btn1_count > 10) { 781 790 main_btn1_count = 0; 782 791 main_btn1_state = true; … … 785 794 } 786 795 } 787 else if (((btn & 0x20) == 0) && main_btn1_state){796 else if (((btn & 0x20) == 0) && main_btn1_state) { 788 797 main_btn1_count++; 789 if (main_btn1_count > 10){798 if (main_btn1_count > 10) { 790 799 main_btn1_count = 0; 791 800 main_btn1_state = false; … … 796 805 797 806 /* ボタン2の処理 */ 798 if (((btn & 0x80) != 0) && !main_btn2_state){807 if (((btn & 0x80) != 0) && !main_btn2_state) { 799 808 main_btn2_count++; 800 if (main_btn2_count > 10){809 if (main_btn2_count > 10) { 801 810 main_btn2_count = 0; 802 811 main_btn2_state = true; … … 805 814 } 806 815 } 807 else if (((btn & 0x80) == 0) && main_btn2_state){816 else if (((btn & 0x80) == 0) && main_btn2_state) { 808 817 main_btn2_count++; 809 if (main_btn2_count > 10){818 if (main_btn2_count > 10) { 810 819 main_btn2_count = 0; 811 820 main_btn2_state = false; … … 829 838 { 830 839 /* 押されて戻った時に処理する */ 831 if (push)840 if (push) 832 841 return; 833 842 834 843 /* 表示ポート番号 */ 835 if (!main_rev){844 if (!main_rev) { 836 845 main_port_no--; 837 if (main_port_no < 1){846 if (main_port_no < 1) { 838 847 main_port_no = 1; 839 848 main_rev = true; … … 841 850 } 842 851 } 843 else {852 else { 844 853 main_port_no++; 845 if (main_port_no > main_ad_count){854 if (main_port_no > main_ad_count) { 846 855 main_port_no = main_ad_count; 847 856 main_rev = false; … … 857 866 { 858 867 /* 押されて戻った時に処理する */ 859 if (push)868 if (push) 860 869 return; 861 870 … … 866 875 867 876 /* 表示ポート番号 */ 868 if (!main_rev){877 if (!main_rev) { 869 878 main_port_no++; 870 if (main_port_no > main_ad_count){879 if (main_port_no > main_ad_count) { 871 880 main_port_no = main_ad_count; 872 881 main_rev = false; … … 874 883 } 875 884 } 876 else {885 else { 877 886 main_port_no--; 878 if (main_port_no < 1){887 if (main_port_no < 1) { 879 888 main_port_no = 1; 880 889 main_rev = true; … … 893 902 894 903 main_port_no++; 895 if (main_port_no > main_ad_count)904 if (main_port_no > main_ad_count) 896 905 main_port_no = 1; 897 906
Note:
See TracChangeset
for help on using the changeset viewer.