Changeset 364 for asp3_tinet_ecnl_arm/trunk/app4_aircon/src/echonet_main.c
- Timestamp:
- Feb 1, 2019, 9:57:09 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
asp3_tinet_ecnl_arm/trunk/app4_aircon/src/echonet_main.c
r352 r364 1 1 /* 2 2 * TOPPERS ECHONET Lite Communication Middleware 3 * 3 * 4 4 * Copyright (C) 2014 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 */ … … 55 55 #include "adafruit_st7735.h" 56 56 #include "draw_font.h" 57 #include <tinet_defs.h> 58 #include <tinet_config.h> 59 #include <netinet/in.h> 60 #include <netinet/in_var.h> 61 #include <net/ethernet.h> 62 #include <net/if_var.h> 63 64 extern uint8_t mac_addr[6]; 57 65 58 66 /* TODO: メーカーコードを設定 */ … … 184 192 185 193 /* サイズが1以外は受け付けない */ 186 if (size != 1)194 if (size != 1) 187 195 return 0; 188 196 189 197 *anno = *((uint8_t *)item->exinf) != *((uint8_t *)src); 190 198 191 switch (*(uint8_t *)src){199 switch (*(uint8_t *)src) { 192 200 /* ONの場合 */ 193 201 case 0x30: … … 198 206 data[0] = 0x80; 199 207 ret = ecn_brk_wai(data, sizeof(data)); 200 if (ret != E_OK){208 if (ret != E_OK) { 201 209 syslog(LOG_ERROR, "ecn_brk_wai"); 202 210 return 2; … … 217 225 { 218 226 /* サイズが1以外は受け付けない */ 219 if (size != 1)227 if (size != 1) 220 228 return 0; 221 229 222 230 *anno = *((uint8_t *)item->exinf) != *((uint8_t *)src); 223 231 224 switch (*(uint8_t *)src){232 switch (*(uint8_t *)src) { 225 233 /* 異常発生ありの場合 */ 226 234 case 0x41: … … 246 254 247 255 /* サイズが1以外は受け付けない */ 248 if (size != 1)256 if (size != 1) 249 257 return 0; 250 258 251 switch (*(uint8_t *)src){259 switch (*(uint8_t *)src) { 252 260 /* 自動の場合 */ 253 261 case 0x41: … … 266 274 data[0] = 0xB0; 267 275 ret = ecn_brk_wai(data, sizeof(data)); 268 if (ret != E_OK){276 if (ret != E_OK) { 269 277 syslog(LOG_ERROR, "ecn_brk_wai"); 270 278 return 2; … … 288 296 289 297 /* サイズが1以外は受け付けない */ 290 if (size != 1)298 if (size != 1) 291 299 return 0; 292 300 293 301 /* 0℃~50℃ */ 294 if ((*(uint8_t *)src >= 0x00) && (*(uint8_t *)src <= 0x32)){302 if ((*(uint8_t *)src >= 0x00) && (*(uint8_t *)src <= 0x32)) { 295 303 *((uint8_t *)item->exinf) = *((uint8_t *)src); 296 304 /* メインタスクに通知 */ 297 305 data[0] = 0xB3; 298 306 ret = ecn_brk_wai(data, sizeof(data)); 299 if (ret != E_OK){307 if (ret != E_OK) { 300 308 syslog(LOG_ERROR, "ecn_brk_wai"); 301 309 return 2; … … 303 311 } 304 312 /* 上記以外は受け付けない */ 305 else {313 else { 306 314 return 0; 307 315 } … … 333 341 334 342 ret2 = get_tim(&now); 335 if (ret2 != E_OK) {343 if (ret2 != E_OK) { 336 344 syslog(LOG_ERROR, "get_tim"); 337 345 return; 338 346 } 339 347 340 for (;;){348 for (;;) { 341 349 prev = now; 342 350 … … 346 354 /* 応答電文待ち */ 347 355 ret = ecn_trcv_esv(&esv, timer); 348 if ((ret != E_OK) && (ret != E_BRK) && (ret != E_TMOUT)) {356 if ((ret != E_OK) && (ret != E_BRK) && (ret != E_TMOUT)) { 349 357 syslog(LOG_ERROR, "ecn_trcv_esv"); 350 358 break; … … 352 360 353 361 ret2 = get_tim(&now); 354 if (ret2 != E_OK) {362 if (ret2 != E_OK) { 355 363 syslog(LOG_ERROR, "get_tim"); 356 364 break; … … 367 375 /* 領域解放 */ 368 376 ret = ecn_rel_esv(esv); 369 if (ret != E_OK) {377 if (ret != E_OK) { 370 378 syslog(LOG_ERROR, "ecn_rel_esv"); 371 379 break; … … 376 384 /* 応答電文待ちの割り込みデータ取得 */ 377 385 ret = ecn_get_brk_dat(esv, brkdat, sizeof(brkdat), &len); 378 if (ret != E_OK) {386 if (ret != E_OK) { 379 387 syslog(LOG_ERROR, "ecn_get_brk_dat"); 380 388 break; … … 386 394 /* 領域解放 */ 387 395 ret = ecn_rel_esv(esv); 388 if (ret != E_OK) {396 if (ret != E_OK) { 389 397 syslog(LOG_ERROR, "ecn_rel_esv"); 390 398 break; … … 397 405 } 398 406 399 bool_t started = false;400 401 407 void echonet_change_netif_link(uint8_t link_up, uint8_t up) 402 408 { … … 406 412 return; 407 413 408 if (up && !started) { 409 started = true; 410 411 /* ECHONETミドルウェアを起動 */ 412 ret = ecn_sta_svc(); 413 if (ret != E_OK) 414 return; 415 416 /* ECHONETミドルウェアを起動するのを待つ */ 417 dly_tsk(100); 414 if (up) { 415 /* インスタンスリスト通知の送信 */ 416 ret = ecn_ntf_inl(); 417 if (ret != E_OK) { 418 syslog(LOG_ERROR, "ecn_ntf_inl"); 419 } 418 420 } 419 421 … … 421 423 uint8_t data[2]; 422 424 data[0] = 0x01; 423 data[1] = up ? 0x01 : 0x02;425 data[1] = (up ? 0x01 : 0x02) | (link_up ? 0x10 : 0x20); 424 426 ret = ecn_brk_wai(data, sizeof(data)); 425 427 if (ret != E_OK) { … … 429 431 } 430 432 431 enum main_state_t{ 433 enum main_state_t { 434 main_state_start, 432 435 main_state_idle, 433 436 main_state_search, … … 440 443 441 444 int main_timer = TMO_FEVR; 442 enum main_state_t main_state = main_state_ idle;445 enum main_state_t main_state = main_state_start; 443 446 int16_t main_ave_templ; 444 447 bool_t main_tmp_fan_on; … … 470 473 LCD_DrawProp_t drawProp; 471 474 472 enum main_rly_state_t {475 enum main_rly_state_t { 473 476 main_rly_state_off, 474 477 main_rly_state_on … … 486 489 uint8_t btn; 487 490 488 /* 1秒後に温度センサーを探す */ 491 /* ECHONETミドルウェアを起動するのを待つ */ 492 main_state = main_state_start; 489 493 main_timer = 1000 * 1000; 490 494 … … 505 509 spi_init(&lcd.hspi, P10_14, P10_15, P10_12, NC); 506 510 spi_format(&lcd.hspi, 8, 0, 0); 507 spi_frequency(&lcd.hspi, 1000000);511 spi_frequency(&lcd.hspi, 4000000); 508 512 509 513 gpio_init_out(&lcd.cs_pin, P10_13); … … 524 528 main_lcd_timer = 1000 * 1000; 525 529 530 /* メインタスクを起動 */ 526 531 ER ret = act_tsk(MAIN_TASK); 527 532 if (ret != E_OK) { … … 537 542 int result = main_timer; 538 543 539 if ((result == TMO_FEVR)540 || ((main_btn_timer != TMO_FEVR) && (main_btn_timer < result))) {544 if ((result == TMO_FEVR) 545 || ((main_btn_timer != TMO_FEVR) && (main_btn_timer < result))) { 541 546 result = main_btn_timer; 542 547 } 543 548 544 if ((result == TMO_FEVR)545 || ((main_lcd_timer != TMO_FEVR) && (main_lcd_timer < result))) {549 if ((result == TMO_FEVR) 550 || ((main_lcd_timer != TMO_FEVR) && (main_lcd_timer < result))) { 546 551 result = main_lcd_timer; 547 552 } 548 553 549 if ((result == TMO_FEVR)550 || ((main_rly_timer != TMO_FEVR) && (main_rly_timer < result))) {554 if ((result == TMO_FEVR) 555 || ((main_rly_timer != TMO_FEVR) && (main_rly_timer < result))) { 551 556 result = main_rly_timer; 552 557 } … … 560 565 static void main_progress(int interval) 561 566 { 562 if (main_timer != TMO_FEVR){567 if (main_timer != TMO_FEVR) { 563 568 main_timer -= interval; 564 if (main_timer < 0){569 if (main_timer < 0) { 565 570 main_timer = 0; 566 571 } 567 572 } 568 573 569 if (main_btn_timer != TMO_FEVR){574 if (main_btn_timer != TMO_FEVR) { 570 575 main_btn_timer -= interval; 571 if (main_btn_timer < 0){576 if (main_btn_timer < 0) { 572 577 main_btn_timer = 0; 573 578 } 574 579 } 575 580 576 if (main_lcd_timer != TMO_FEVR){581 if (main_lcd_timer != TMO_FEVR) { 577 582 main_lcd_timer -= interval; 578 if (main_lcd_timer < 0){583 if (main_lcd_timer < 0) { 579 584 main_lcd_timer = 0; 580 585 } 581 586 } 582 587 583 if (main_rly_timer != TMO_FEVR){588 if (main_rly_timer != TMO_FEVR) { 584 589 main_rly_timer -= interval; 585 if (main_rly_timer < 0){590 if (main_rly_timer < 0) { 586 591 main_rly_timer = 0; 587 592 } … … 605 610 606 611 eobjid = ecn_get_eobj(esv); 607 if (eobjid == EOBJ_NULL){612 if (eobjid == EOBJ_NULL) { 608 613 syslog(LOG_ERROR, "ecn_get_eobj"); 609 614 } 610 615 611 616 ret = ecn_itr_ini(&enm, esv); 612 if (ret != E_OK){617 if (ret != E_OK) { 613 618 syslog(LOG_ERROR, "ecn_itr_ini"); 614 619 return; 615 620 } 616 621 617 for (;;) {618 while ((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) {622 for (;;) { 623 while ((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) { 619 624 switch (epc) { 620 625 case 0xD6: 621 switch (main_state){626 switch (main_state) { 622 627 case main_state_idle: 623 628 case main_state_search: … … 630 635 break; 631 636 case 0xE0: 632 switch (main_state){637 switch (main_state) { 633 638 case main_state_survey_01: 634 639 /* 温度センサー2温度監視 */ … … 660 665 } 661 666 } 662 if (ret != E_BOVR){667 if (ret != E_BOVR) { 663 668 syslog(LOG_ERROR, "ecn_itr_nxt"); 664 669 break; 665 670 } 666 if (enm.is_eof)671 if (enm.is_eof) 667 672 break; 668 673 } … … 685 690 /* 温度センサー動作状態取得電文作成 */ 686 691 ret = ecn_esv_get(&esv, senserids[no - 1], 0x80); 687 if (ret != E_OK){692 if (ret != E_OK) { 688 693 syslog(LOG_ERROR, "ecn_esv_get"); 689 694 return; … … 692 697 /* 温度計測値取得追加 */ 693 698 ret = ecn_add_epc(esv, 0xE0); 694 if (ret != E_OK){699 if (ret != E_OK) { 695 700 syslog(LOG_ERROR, "ecn_add_epc"); 696 701 697 702 ret = ecn_rel_esv(esv); 698 if (ret != E_OK){703 if (ret != E_OK) { 699 704 syslog(LOG_ERROR, "ecn_rel_esv"); 700 705 } … … 704 709 /* 電文送信 */ 705 710 ret = ecn_snd_esv(esv); 706 if (ret != E_OK){711 if (ret != E_OK) { 707 712 syslog(LOG_ERROR, "ecn_snd_esv"); 708 713 } … … 717 722 int templ = 0; 718 723 719 if (temp_sensor_01_data.property80 == 0x30){724 if (temp_sensor_01_data.property80 == 0x30) { 720 725 templ += ((((uint16_t)temp_sensor_01_data.propertyE0) & 0xFF) << 8) 721 726 | ((((uint16_t)temp_sensor_01_data.propertyE0) & 0xFF00) >> 8); 722 727 count++; 723 728 } 724 if (temp_sensor_02_data.property80 == 0x30){729 if (temp_sensor_02_data.property80 == 0x30) { 725 730 templ += ((((uint16_t)temp_sensor_02_data.propertyE0) & 0xFF) << 8) 726 731 | ((((uint16_t)temp_sensor_02_data.propertyE0) & 0xFF00) >> 8); 727 732 count++; 728 733 } 729 if (temp_sensor_03_data.property80 == 0x30){734 if (temp_sensor_03_data.property80 == 0x30) { 730 735 templ += ((((uint16_t)temp_sensor_03_data.propertyE0) & 0xFF) << 8) 731 736 | ((((uint16_t)temp_sensor_03_data.propertyE0) & 0xFF00) >> 8); 732 737 count++; 733 738 } 734 if (temp_sensor_04_data.property80 == 0x30){739 if (temp_sensor_04_data.property80 == 0x30) { 735 740 templ += ((((uint16_t)temp_sensor_04_data.propertyE0) & 0xFF) << 8) 736 741 | ((((uint16_t)temp_sensor_04_data.propertyE0) & 0xFF00) >> 8); … … 738 743 } 739 744 740 if (count > 0){745 if (count > 0) { 741 746 templ = templ / count; 742 if (templ < -2732)747 if (templ < -2732) 743 748 main_ave_templ = 0x8000; 744 else if (templ > 32766)749 else if (templ > 32766) 745 750 main_ave_templ = 0x7FFF; 746 751 else … … 748 753 749 754 /* FANが停止中の場合 */ 750 if (!main_tmp_fan_on){751 if (main_ave_templ > (10 * home_air_conditioner_data.propertyB3 + 5)){755 if (!main_tmp_fan_on) { 756 if (main_ave_templ > (10 * home_air_conditioner_data.propertyB3 + 5)) { 752 757 main_tmp_fan_on = true; 753 758 … … 758 763 } 759 764 /* FANが稼働中の場合 */ 760 else {761 if (main_ave_templ < (10 * home_air_conditioner_data.propertyB3 - 5)){765 else { 766 if (main_ave_templ < (10 * home_air_conditioner_data.propertyB3 - 5)) { 762 767 main_tmp_fan_on = false; 763 768 … … 777 782 static void main_break_wait(uint8_t *brkdat, int32_t len) 778 783 { 784 char mac_text[30] = "mac: "; 785 char ipaddr_text[30] = "ipadr: "; 786 const T_IN4_ADDR *ip4_addr; 787 int pos; 788 bool_t prev; 789 779 790 switch (brkdat[0]) { 780 791 case 0x01: 781 // Link up/down 792 switch (brkdat[1] >> 4) { 793 case 1: 794 break; 795 case 2: 796 break; 797 } 798 799 pos = str_macaddr(&mac_text[4], sizeof(mac_text) - 4, mac_addr, 0); 800 mac_text[pos + 4] = '\0'; 801 lcd_drawString(&lcd, mac_text, X_LINE_TO_PIX(&lcd, 0), Y_ROW_TO_PIX(&lcd, 11), ST7735_BLACK, ST7735_WHITE); 802 803 ip4_addr = in4_get_ifaddr(0); 804 pos = str_ipv4addr(&ipaddr_text[6], sizeof(ipaddr_text) - 6, ip4_addr, 0); 805 ipaddr_text[pos + 6] = '\0'; 806 lcd_drawString(&lcd, ipaddr_text, X_LINE_TO_PIX(&lcd, 0), Y_ROW_TO_PIX(&lcd, 12), ST7735_BLACK, ST7735_WHITE); 782 807 break; 783 808 } 784 809 785 810 /* 運転モードが送風の場合、温度によらずFANをON */ 786 if (*brkdat == 0xB0) { 787 bool_t prev = main_ctl_fan_on; 811 switch (*brkdat) { 812 case 0x80: 813 if (main_ctl_fan_on) { 814 /* リレー出力をON/OFF */ 815 main_rly_onoff(home_air_conditioner_data.property80 == 0x30); 816 } 817 break; 818 case 0xB0: 819 prev = main_ctl_fan_on; 788 820 main_ctl_fan_on = home_air_conditioner_data.propertyB0 == 0x45; 789 821 790 822 if (prev != main_ctl_fan_on) { 791 823 if (main_ctl_fan_on) { 792 /* リレー出力をON */ 793 if (!main_tmp_fan_on) 794 main_rly_onoff(true); 824 /* リレー出力をON/OFF */ 825 main_rly_onoff(home_air_conditioner_data.property80 == 0x30); 795 826 } 796 827 else { 797 /* リレー出力をOFF */ 798 if (!main_tmp_fan_on) 799 main_rly_onoff(false); 828 /* リレー出力をON/OFF */ 829 main_rly_onoff(main_tmp_fan_on); 800 830 } 801 831 } … … 813 843 static void main_timeout() 814 844 { 815 if (main_timer == 0){845 if (main_timer == 0) { 816 846 main_ontimer(); 817 847 } 818 848 819 if (main_btn_timer == 0){849 if (main_btn_timer == 0) { 820 850 main_btn_ontimer(); 821 851 } 822 852 823 if (main_lcd_timer == 0){853 if (main_lcd_timer == 0) { 824 854 main_lcd_ontimer(); 825 855 } 826 856 827 if (main_rly_timer == 0){857 if (main_rly_timer == 0) { 828 858 main_rly_ontimer(); 829 859 } … … 834 864 static void main_ontimer() 835 865 { 836 switch(main_state){ 866 ER ret; 867 868 switch (main_state) { 869 case main_state_start: 870 /* ECHONETミドルウェアを起動 */ 871 ret = ecn_sta_svc(); 872 if (ret != E_OK) { 873 syslog(LOG_ERROR, "ecn_sta_svc"); 874 } 875 876 /* 1秒後に温度センサーを探す */ 877 main_state = main_state_idle; 878 main_timer = 1000 * 1000; 879 break; 837 880 case main_state_idle: 838 881 case main_state_search: … … 891 934 /* 温度センサー検索 */ 892 935 ret = ecn_esv_inf_req(&esv, EOBJ_NULL, 0xD6); 893 if (ret != E_OK){936 if (ret != E_OK) { 894 937 syslog(LOG_ERROR, "ecn_esv_inf_req"); 895 938 return; … … 898 941 /* 電文送信 */ 899 942 ret = ecn_snd_esv(esv); 900 if (ret != E_OK){943 if (ret != E_OK) { 901 944 syslog(LOG_ERROR, "ecn_snd_esv"); 902 945 } … … 919 962 if ((btn == BUTTON_LEFT) && !main_btn1_state) { 920 963 main_btn1_count++; 921 if (main_btn1_count > 10){964 if (main_btn1_count > 10) { 922 965 main_btn1_count = 0; 923 966 main_btn1_state = true; … … 928 971 else if ((btn != BUTTON_LEFT) && main_btn1_state) { 929 972 main_btn1_count++; 930 if (main_btn1_count > 10){973 if (main_btn1_count > 10) { 931 974 main_btn1_count = 0; 932 975 main_btn1_state = false; … … 939 982 if ((btn == BUTTON_RIGHT) && !main_btn2_state) { 940 983 main_btn2_count++; 941 if (main_btn2_count > 10){984 if (main_btn2_count > 10) { 942 985 main_btn2_count = 0; 943 986 main_btn2_state = true; … … 948 991 else if ((btn != BUTTON_RIGHT) && main_btn2_state) { 949 992 main_btn2_count++; 950 if (main_btn2_count > 10){993 if (main_btn2_count > 10) { 951 994 main_btn2_count = 0; 952 995 main_btn2_state = false; … … 963 1006 char temp2[] = "測定温度:+00.0℃"; 964 1007 char mode[] = "運転モード:自動 "; 965 char *mode_texts[] = { " 自動 ", "冷房 ", "暖房 ", "除湿 ", "送風 ", "その他" };1008 char *mode_texts[] = { "その他", "自動 ", "冷房 ", "暖房 ", "除湿 ", "送風 " }; 966 1009 char *btn_texts[] = { "none ", "down ", "left ", "select", "up ", "right " }; 967 1010 int temp, btn; … … 979 1022 power[11] = 'f'; 980 1023 } 981 lcd_drawString(&lcd, &power[9], X_LINE_HALF_TO_PIX(&lcd, 6) + 10, Y_ROW_TO_PIX(&lcd, main_lcd_state + 4) + 10, ST7735_BLACK, ST7735_WHITE);1024 lcd_drawString(&lcd, &power[9], X_LINE_HALF_TO_PIX(&lcd, 6), Y_ROW_TO_PIX(&lcd, main_lcd_state + 2), ST7735_BLACK, ST7735_WHITE); 982 1025 main_lcd_state++; 983 1026 break; … … 992 1035 temp = -temp; 993 1036 temp1[17] = '0' + temp; 994 lcd_drawString(&lcd, &temp1[15], X_LINE_HALF_TO_PIX(&lcd, 10) + 10, Y_ROW_TO_PIX(&lcd, main_lcd_state + 4) + 10, ST7735_BLACK, ST7735_WHITE);1037 lcd_drawString(&lcd, &temp1[15], X_LINE_HALF_TO_PIX(&lcd, 10), Y_ROW_TO_PIX(&lcd, main_lcd_state + 2), ST7735_BLACK, ST7735_WHITE); 995 1038 main_lcd_state++; 996 1039 break; … … 1009 1052 temp = -temp; 1010 1053 temp2[19] = '0' + temp; 1011 lcd_drawString(&lcd, &temp2[15], X_LINE_HALF_TO_PIX(&lcd, 10) + 10, Y_ROW_TO_PIX(&lcd, main_lcd_state + 4) + 10, ST7735_BLACK, ST7735_WHITE);1054 lcd_drawString(&lcd, &temp2[15], X_LINE_HALF_TO_PIX(&lcd, 10), Y_ROW_TO_PIX(&lcd, main_lcd_state + 2), ST7735_BLACK, ST7735_WHITE); 1012 1055 main_lcd_state++; 1013 1056 break; 1014 1057 case 3: 1015 1058 temp = home_air_conditioner_data.propertyB0 - 0x40; 1016 lcd_drawString(&lcd, mode_texts[temp], X_LINE_HALF_TO_PIX(&lcd, 12) + 10, Y_ROW_TO_PIX(&lcd, main_lcd_state + 4) + 10, ST7735_BLACK, ST7735_WHITE);1059 lcd_drawString(&lcd, mode_texts[temp], X_LINE_HALF_TO_PIX(&lcd, 12), Y_ROW_TO_PIX(&lcd, main_lcd_state + 2), ST7735_BLACK, ST7735_WHITE); 1017 1060 main_lcd_state++; 1018 1061 break; … … 1023 1066 case 6: 1024 1067 btn = main_read_button(&joystick); 1025 lcd_drawString(&lcd, btn_texts[btn], X_LINE_TO_PIX(&lcd, 0) + 10, Y_ROW_TO_PIX(&lcd, 10) + 10, ST7735_BLACK, ST7735_WHITE);1068 lcd_drawString(&lcd, btn_texts[btn], X_LINE_TO_PIX(&lcd, 0), Y_ROW_TO_PIX(&lcd, 9), ST7735_BLACK, ST7735_WHITE); 1026 1069 main_lcd_state++; 1027 1070 break; … … 1030 1073 break; 1031 1074 case 10: 1032 lcd_drawString(&lcd, "エアコン", X_LINE_TO_PIX(&lcd, 9) + 10, Y_ROW_TO_PIX(&lcd, 0) + 10, ST7735_BLACK, ST7735_WHITE);1033 lcd_drawString(&lcd, power, X_LINE_TO_PIX(&lcd, 0) + 10, Y_ROW_TO_PIX(&lcd, 0 + 4) + 10, ST7735_BLACK, ST7735_WHITE);1034 lcd_drawString(&lcd, temp1, X_LINE_TO_PIX(&lcd, 0) + 10, Y_ROW_TO_PIX(&lcd, 1 + 4) + 10, ST7735_BLACK, ST7735_WHITE);1035 lcd_drawString(&lcd, temp2, X_LINE_TO_PIX(&lcd, 0) + 10, Y_ROW_TO_PIX(&lcd, 2 + 4) + 10, ST7735_BLACK, ST7735_WHITE);1036 lcd_drawString(&lcd, mode, X_LINE_TO_PIX(&lcd, 0) + 10, Y_ROW_TO_PIX(&lcd, 3 + 4) + 10, ST7735_BLACK, ST7735_WHITE);1075 lcd_drawString(&lcd, "エアコン", X_LINE_TO_PIX(&lcd, 6), Y_ROW_TO_PIX(&lcd, 0), ST7735_BLACK, ST7735_WHITE); 1076 lcd_drawString(&lcd, power, X_LINE_TO_PIX(&lcd, 0), Y_ROW_TO_PIX(&lcd, 0 + 2), ST7735_BLACK, ST7735_WHITE); 1077 lcd_drawString(&lcd, temp1, X_LINE_TO_PIX(&lcd, 0), Y_ROW_TO_PIX(&lcd, 1 + 2), ST7735_BLACK, ST7735_WHITE); 1078 lcd_drawString(&lcd, temp2, X_LINE_TO_PIX(&lcd, 0), Y_ROW_TO_PIX(&lcd, 2 + 2), ST7735_BLACK, ST7735_WHITE); 1079 lcd_drawString(&lcd, mode, X_LINE_TO_PIX(&lcd, 0), Y_ROW_TO_PIX(&lcd, 3 + 2), ST7735_BLACK, ST7735_WHITE); 1037 1080 main_lcd_state = 0; 1038 1081 break; … … 1079 1122 1080 1123 /* 押されて戻った時に処理する */ 1081 if (push)1124 if (push) 1082 1125 return; 1083 1126 1084 1127 /* 設定温度 */ 1085 if (main_templ > 0)1128 if (main_templ > 0) 1086 1129 main_templ--; /* - 1℃ */ 1087 1130 … … 1090 1133 /* プロパティ設定電文作成 */ 1091 1134 ret = ecn_esv_seti(&esv, HOME_AIR_CONDITIONER_EOBJ, 0xB3, 1, p_edt); 1092 if (ret != E_OK){1135 if (ret != E_OK) { 1093 1136 syslog(LOG_ERROR, "ecn_esv_seti"); 1094 1137 return; … … 1096 1139 1097 1140 /* 電文送信 */ 1098 ecn_snd_esv(esv);1099 if (ret != E_OK){1141 ret = ecn_snd_esv(esv); 1142 if (ret != E_OK) { 1100 1143 syslog(LOG_ERROR, "ecn_snd_esv"); 1101 1144 } … … 1112 1155 1113 1156 /* 押されて戻った時に処理する */ 1114 if (push)1157 if (push) 1115 1158 return; 1116 1159 1117 1160 /* 設定温度 */ 1118 if (main_templ < 50)1161 if (main_templ < 50) 1119 1162 main_templ++; /* + 1.0℃ */ 1120 1163 … … 1123 1166 /* プロパティ設定電文作成 */ 1124 1167 ret = ecn_esv_seti(&esv, HOME_AIR_CONDITIONER_EOBJ, 0xB3, 1, p_edt); 1125 if (ret != E_OK){1168 if (ret != E_OK) { 1126 1169 syslog(LOG_ERROR, "ecn_esv_seti"); 1127 1170 return; … … 1129 1172 1130 1173 /* 電文送信 */ 1131 ecn_snd_esv(esv);1132 if (ret != E_OK){1174 ret = ecn_snd_esv(esv); 1175 if (ret != E_OK) { 1133 1176 syslog(LOG_ERROR, "ecn_snd_esv"); 1134 1177 } … … 1137 1180 static void main_rly_onoff(bool_t onoff) 1138 1181 { 1139 if (onoff){1182 if (onoff) { 1140 1183 /* リレー出力をON */ 1141 1184 gpio_write(&relay_sw, 1); 1142 1185 } 1143 else {1186 else { 1144 1187 /* リレー出力をOFF */ 1145 1188 gpio_write(&relay_sw, 0); … … 1159 1202 /* 500msパルス出力 */ 1160 1203 main_rly_state = main_rly_state_on; 1161 main_rly_timer = 500 ;1204 main_rly_timer = 500 * 1000; 1162 1205 } 1163 1206 … … 1167 1210 static void main_rly_ontimer() 1168 1211 { 1169 switch(main_rly_state) 1170 { 1212 switch (main_rly_state) { 1171 1213 case main_rly_state_off: 1172 1214 main_rly_timer = TMO_FEVR;
Note:
See TracChangeset
for help on using the changeset viewer.