- Timestamp:
- Feb 1, 2019, 9:57:09 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
asp3_tinet_ecnl_arm/trunk/app1_usb_watt_meter/src/echonet_main.c
r352 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 */ … … 164 164 { 165 165 /* サイズが1以外は受け付けない */ 166 if (size != 1)166 if (size != 1) 167 167 return 0; 168 168 169 169 *anno = *((uint8_t*)item->exinf) != *((uint8_t*)src); 170 170 171 switch (*(uint8_t *)src){171 switch (*(uint8_t *)src) { 172 172 /* ONの場合 */ 173 173 case 0x30: … … 196 196 { 197 197 /* サイズが1以外は受け付けない */ 198 if (size != 1)198 if (size != 1) 199 199 return 0; 200 200 201 201 *anno = *((uint8_t *)item->exinf) != *((uint8_t *)src); 202 202 203 switch (*(uint8_t *)src){203 switch (*(uint8_t *)src) { 204 204 /* 異常発生ありの場合 */ 205 205 case 0x41: … … 271 271 int date_prop_set(const EPRPINIB *item, const void *src, int size, bool_t *anno) 272 272 { 273 uint8_t *p_src;273 const uint8_t *p_src; 274 274 time_t temp; 275 275 struct tm _tm; … … 283 283 /* 年月日設定 */ 284 284 p_src = (uint8_t *)src; 285 _tm.tm_year = (* (p_src++)* 100) + *p_src++;285 _tm.tm_year = (*p_src++ * 100) + *p_src++; 286 286 _tm.tm_mon = (*p_src++) - 1; 287 287 _tm.tm_mday = *p_src++; … … 325 325 326 326 /* サイズが4以外は受け付けない */ 327 if (size != 4)327 if (size != 4) 328 328 return 0; 329 329 … … 345 345 346 346 len = 48 - meter->current_pos; 347 if (len > 0)347 if (len > 0) 348 348 memcpy(dst, &meter->integral_electric_energy_measurement_log[meter->current_pos], sizeof(uint32_t) * len); 349 349 dst = &((uint8_t *)dst)[len]; … … 404 404 405 405 ret2 = get_tim(&now); 406 if (ret2 != E_OK) {406 if (ret2 != E_OK) { 407 407 syslog(LOG_ERROR, "get_tim"); 408 408 return; 409 409 } 410 410 411 for (;;){411 for (;;) { 412 412 prev = now; 413 413 … … 417 417 /* 応答電文待ち */ 418 418 ret = ecn_trcv_esv(&esv, timer); 419 if ((ret != E_OK) && (ret != E_BRK) && (ret != E_TMOUT)) {419 if ((ret != E_OK) && (ret != E_BRK) && (ret != E_TMOUT)) { 420 420 syslog(LOG_ERROR, "ecn_trcv_esv"); 421 421 break; … … 423 423 424 424 ret2 = get_tim(&now); 425 if (ret2 != E_OK) {425 if (ret2 != E_OK) { 426 426 syslog(LOG_ERROR, "get_tim"); 427 427 break; … … 438 438 /* 領域解放 */ 439 439 ret = ecn_rel_esv(esv); 440 if (ret != E_OK) {440 if (ret != E_OK) { 441 441 syslog(LOG_ERROR, "ecn_rel_esv"); 442 442 break; … … 447 447 /* 応答電文待ちの割り込みデータ取得 */ 448 448 ret = ecn_get_brk_dat(esv, brkdat, sizeof(brkdat), &len); 449 if (ret != E_OK) {449 if (ret != E_OK) { 450 450 syslog(LOG_ERROR, "ecn_get_brk_dat"); 451 451 break; … … 457 457 /* 領域解放 */ 458 458 ret = ecn_rel_esv(esv); 459 if (ret != E_OK) {459 if (ret != E_OK) { 460 460 syslog(LOG_ERROR, "ecn_rel_esv"); 461 461 break; … … 468 468 } 469 469 470 bool_t started = false;471 472 470 void echonet_change_netif_link(uint8_t link_up, uint8_t up) 473 471 { … … 477 475 return; 478 476 479 if (up && !started) { 480 started = true; 481 482 /* ECHONETミドルウェアを起動 */ 483 ret = ecn_sta_svc(); 484 if (ret != E_OK) 485 return; 486 487 /* ECHONETミドルウェアを起動するのを待つ */ 488 dly_tsk(100); 477 if (up) { 478 /* インスタンスリスト通知の送信 */ 479 ret = ecn_ntf_inl(); 480 if (ret != E_OK) { 481 syslog(LOG_ERROR, "ecn_ntf_inl"); 482 } 489 483 } 490 484 … … 500 494 } 501 495 502 enum main_state_t{ 496 enum main_state_t { 497 main_state_start, 503 498 main_state_idle, 504 499 }; 505 500 506 501 int main_timer = TMO_FEVR; 507 enum main_state_t main_state = main_state_ idle;502 enum main_state_t main_state = main_state_start; 508 503 int main_lcd_state = 0; 509 504 int main_lcd_timer = TMO_FEVR; … … 557 552 analogin_init(&joystick, P1_12); 558 553 559 /* 10ms後にボタン状態を確認*/560 main_ timer = 10 * 1000;561 562 /* ボタン状態読み込み */ 554 /* ECHONETミドルウェアを起動するのを待つ */ 555 main_state = main_state_start; 556 main_timer = 1000 * 1000; 557 563 558 btn = main_read_button(&joystick); 564 559 main_btn1_state = btn == BUTTON_LEFT; … … 568 563 spi_init(&lcd.hspi, P10_14, P10_15, P10_12, NC); 569 564 spi_format(&lcd.hspi, 8, 0, 0); 570 spi_frequency(&lcd.hspi, 1000000);565 spi_frequency(&lcd.hspi, 4000000); 571 566 572 567 gpio_init_out(&lcd.cs_pin, P10_13); … … 590 585 main_adv_timer = 1000 * 1000; 591 586 587 /* メインタスクを起動 */ 592 588 ER ret = act_tsk(MAIN_TASK); 593 589 if (ret != E_OK) { … … 603 599 int result = main_timer; 604 600 605 if ((result == TMO_FEVR)606 || ((main_lcd_timer != TMO_FEVR) && (main_lcd_timer < result))) {601 if ((result == TMO_FEVR) 602 || ((main_lcd_timer != TMO_FEVR) && (main_lcd_timer < result))) { 607 603 result = main_lcd_timer; 608 604 } … … 621 617 static void main_progress(int interval) 622 618 { 623 if (main_timer != TMO_FEVR){619 if (main_timer != TMO_FEVR) { 624 620 main_timer -= interval; 625 if (main_timer < 0){621 if (main_timer < 0) { 626 622 main_timer = 0; 627 623 } 628 624 } 629 625 630 if (main_lcd_timer != TMO_FEVR){626 if (main_lcd_timer != TMO_FEVR) { 631 627 main_lcd_timer -= interval; 632 if (main_lcd_timer < 0){628 if (main_lcd_timer < 0) { 633 629 main_lcd_timer = 0; 634 630 } … … 655 651 656 652 ret = ecn_itr_ini(&enm, esv); 657 if (ret != E_OK){653 if (ret != E_OK) { 658 654 syslog(LOG_ERROR, "ecn_itr_ini"); 659 655 return; 660 656 } 661 657 662 for (;;) {663 while ((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) {658 for (;;) { 659 while ((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) { 664 660 switch (epc) { 665 661 case 0x80: … … 669 665 } 670 666 } 671 if (ret != E_BOVR){667 if (ret != E_BOVR) { 672 668 syslog(LOG_ERROR, "ecn_itr_nxt"); 673 669 break; 674 670 } 675 if (enm.is_eof)671 if (enm.is_eof) 676 672 break; 677 673 } … … 684 680 { 685 681 char mac_text[30] = "mac: "; 686 char ipaddr_text[30] = "ipad dr: ";687 T_IN4_ADDR *ip4_addr;682 char ipaddr_text[30] = "ipadr: "; 683 const T_IN4_ADDR *ip4_addr; 688 684 int pos; 689 685 690 switch (main_state){686 switch (main_state) { 691 687 case main_state_idle: 692 688 if (len == 0) … … 704 700 pos = str_macaddr(&mac_text[4], sizeof(mac_text) - 4, mac_addr, 0); 705 701 mac_text[pos + 4] = '\0'; 706 lcd_drawString(&lcd, mac_text, X_LINE_TO_PIX(&lcd, 0) + 10, Y_ROW_TO_PIX(&lcd, 14) + 10, ST7735_BLACK, ST7735_WHITE);702 lcd_drawString(&lcd, mac_text, X_LINE_TO_PIX(&lcd, 0), Y_ROW_TO_PIX(&lcd, 11), ST7735_BLACK, ST7735_WHITE); 707 703 708 704 ip4_addr = in4_get_ifaddr(0); 709 pos = str_ipv4addr(&ipaddr_text[ 7], sizeof(ipaddr_text) - 7, ip4_addr, 0);710 ipaddr_text[pos + 7] = '\0';711 lcd_drawString(&lcd, ipaddr_text, X_LINE_TO_PIX(&lcd, 0) + 10, Y_ROW_TO_PIX(&lcd, 15) + 10, ST7735_BLACK, ST7735_WHITE);705 pos = str_ipv4addr(&ipaddr_text[6], sizeof(ipaddr_text) - 6, ip4_addr, 0); 706 ipaddr_text[pos + 6] = '\0'; 707 lcd_drawString(&lcd, ipaddr_text, X_LINE_TO_PIX(&lcd, 0), Y_ROW_TO_PIX(&lcd, 12), ST7735_BLACK, ST7735_WHITE); 712 708 } 713 709 break; … … 724 720 static void main_timeout() 725 721 { 726 if (main_timer == 0){722 if (main_timer == 0) { 727 723 main_ontimer(); 728 724 } 729 725 730 if (main_lcd_timer == 0){726 if (main_lcd_timer == 0) { 731 727 main_lcd_ontimer(); 732 728 } … … 746 742 int port_no, btn; 747 743 748 switch (main_lcd_state) {744 switch (main_lcd_state) { 749 745 case 0: 750 746 case 1: … … 757 753 text[16] = '0' + main_7seg[port_no][2]; 758 754 text[17] = '0' + main_7seg[port_no][3]; 759 lcd_drawString(&lcd, &text[14], X_LINE_HALF_TO_PIX(&lcd, 11) + 10, Y_ROW_TO_PIX(&lcd, main_lcd_state + 4) + 10, ST7735_BLACK, ST7735_WHITE);755 lcd_drawString(&lcd, &text[14], X_LINE_HALF_TO_PIX(&lcd, 11), Y_ROW_TO_PIX(&lcd, main_lcd_state + 2), ST7735_BLACK, ST7735_WHITE); 760 756 main_lcd_state++; 761 757 break; 762 758 case 6: 763 759 btn = main_read_button(&joystick); 764 lcd_drawString(&lcd, btn_texts[btn], X_LINE_TO_PIX(&lcd, 0) + 10, Y_ROW_TO_PIX(&lcd, 10) + 10, ST7735_BLACK, ST7735_WHITE);760 lcd_drawString(&lcd, btn_texts[btn], X_LINE_TO_PIX(&lcd, 0), Y_ROW_TO_PIX(&lcd, 9), ST7735_BLACK, ST7735_WHITE); 765 761 main_lcd_state++; 766 762 break; … … 769 765 break; 770 766 case 10: 771 lcd_drawString(&lcd, "USB電力計", X_LINE_TO_PIX(&lcd, 10) + 10, Y_ROW_TO_PIX(&lcd, 0) + 10, ST7735_BLACK, ST7735_WHITE);767 lcd_drawString(&lcd, "USB電力計", X_LINE_TO_PIX(&lcd, 6), Y_ROW_TO_PIX(&lcd, 0), ST7735_BLACK, ST7735_WHITE); 772 768 for (port_no = 0; port_no < 6; port_no++) { 773 769 text[3] = '1' + port_no; 774 lcd_drawString(&lcd, text, X_LINE_TO_PIX(&lcd, 0) + 10, Y_ROW_TO_PIX(&lcd, port_no + 4) + 10, ST7735_BLACK, ST7735_WHITE);770 lcd_drawString(&lcd, text, X_LINE_TO_PIX(&lcd, 0), Y_ROW_TO_PIX(&lcd, port_no + 2), ST7735_BLACK, ST7735_WHITE); 775 771 } 776 772 main_lcd_state = 0; … … 802 798 static void main_ontimer() 803 799 { 800 ER ret; 804 801 uint8_t btn; 805 802 uint16_t ad_value; 806 803 807 switch(main_state){ 804 switch (main_state) { 805 case main_state_start: 806 /* ECHONETミドルウェアを起動 */ 807 ret = ecn_sta_svc(); 808 if (ret != E_OK) { 809 syslog(LOG_ERROR, "ecn_sta_svc"); 810 } 811 812 /* 10ms後にボタン状態を確認 */ 813 main_state = main_state_idle; 814 main_timer = 10 * 1000; 815 break; 808 816 case main_state_idle: 809 817 /* 10ms後にボタン状態を確認 */ … … 845 853 846 854 /* ボタン1の処理 */ 847 if ((btn == BUTTON_LEFT) && !main_btn1_state){855 if ((btn == BUTTON_LEFT) && !main_btn1_state) { 848 856 main_btn1_count++; 849 if (main_btn1_count > 10){857 if (main_btn1_count > 10) { 850 858 main_btn1_count = 0; 851 859 main_btn1_state = true; … … 854 862 } 855 863 } 856 else if ((btn != BUTTON_LEFT) && main_btn1_state){864 else if ((btn != BUTTON_LEFT) && main_btn1_state) { 857 865 main_btn1_count++; 858 if (main_btn1_count > 10){866 if (main_btn1_count > 10) { 859 867 main_btn1_count = 0; 860 868 main_btn1_state = false; … … 865 873 866 874 /* ボタン2の処理 */ 867 if ((btn == BUTTON_RIGHT) && !main_btn2_state){875 if ((btn == BUTTON_RIGHT) && !main_btn2_state) { 868 876 main_btn2_count++; 869 if (main_btn2_count > 10){877 if (main_btn2_count > 10) { 870 878 main_btn2_count = 0; 871 879 main_btn2_state = true; … … 874 882 } 875 883 } 876 else if ((btn != BUTTON_RIGHT) && main_btn2_state){884 else if ((btn != BUTTON_RIGHT) && main_btn2_state) { 877 885 main_btn2_count++; 878 if (main_btn2_count > 10){886 if (main_btn2_count > 10) { 879 887 main_btn2_count = 0; 880 888 main_btn2_state = false; … … 897 905 static uint8_t main_read_button(analogin_t *obj) 898 906 { 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 907 float a = analogin_read(obj); 908 909 a *= 5.0; 910 911 //printf("Button read analog = %f\r\n",a); 912 if (a < 0.2) 913 return BUTTON_DOWN; 914 if (a < 1.0) 915 return BUTTON_RIGHT; 916 if (a < 1.7) 917 return BUTTON_SELECT; 918 if (a < 2.6) 919 return BUTTON_UP; 920 if (a < 4.6) 921 return BUTTON_LEFT; 922 else 923 return BUTTON_NONE; 916 924 } 917 925 … … 924 932 { 925 933 /* 押されて戻った時に処理する */ 926 if (push)934 if (push) 927 935 return; 928 936 929 937 /* 表示ポート番号 */ 930 if (!main_rev){938 if (!main_rev) { 931 939 main_port_no--; 932 if (main_port_no < 1){940 if (main_port_no < 1) { 933 941 main_port_no = 1; 934 942 main_rev = true; … … 936 944 } 937 945 } 938 else {946 else { 939 947 main_port_no++; 940 if (main_port_no > main_ad_count){948 if (main_port_no > main_ad_count) { 941 949 main_port_no = main_ad_count; 942 950 main_rev = false; … … 952 960 { 953 961 /* 押されて戻った時に処理する */ 954 if (push)962 if (push) 955 963 return; 956 964 … … 961 969 962 970 /* 表示ポート番号 */ 963 if (!main_rev){971 if (!main_rev) { 964 972 main_port_no++; 965 if (main_port_no > main_ad_count){973 if (main_port_no > main_ad_count) { 966 974 main_port_no = main_ad_count; 967 975 main_rev = false; … … 969 977 } 970 978 } 971 else {979 else { 972 980 main_port_no--; 973 if (main_port_no < 1){981 if (main_port_no < 1) { 974 982 main_port_no = 1; 975 983 main_rev = true; … … 988 996 989 997 main_port_no++; 990 if (main_port_no > main_ad_count)998 if (main_port_no > main_ad_count) 991 999 main_port_no = 1; 992 1000
Note:
See TracChangeset
for help on using the changeset viewer.