Ignore:
Timestamp:
Feb 1, 2019, 9:57:09 PM (5 years ago)
Author:
coas-nagasima
Message:

TINETとSocket APIなどを更新

File:
1 edited

Legend:

Unmodified
Added
Removed
  • asp3_tinet_ecnl_arm/trunk/app1_usb_watt_meter/src/echonet_main.c

    r352 r364  
    11/*
    22 *  TOPPERS ECHONET Lite Communication Middleware
    3  * 
     3 *
    44 *  Copyright (C) 2016-2018 Cores Co., Ltd. Japan
    5  * 
     5 *
    66 *  上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
    77 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     
    2626 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
    2727 *      免責すること.
    28  * 
     28 *
    2929 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
    3030 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     
    3232 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
    3333 *  の責任を負わない.
    34  * 
     34 *
    3535 *  @(#) $Id$
    3636 */
    3737
    38 /* 
     38/*
    3939 *  サンプルプログラム(1)の本体
    4040 */
     
    164164{
    165165        /* サイズが1以外は受け付けない */
    166         if(size != 1)
     166        if (size != 1)
    167167                return 0;
    168168
    169169        *anno = *((uint8_t*)item->exinf) != *((uint8_t*)src);
    170170
    171         switch(*(uint8_t *)src){
     171        switch (*(uint8_t *)src) {
    172172        /* ONの場合 */
    173173        case 0x30:
     
    196196{
    197197        /* サイズが1以外は受け付けない */
    198         if(size != 1)
     198        if (size != 1)
    199199                return 0;
    200200
    201201        *anno = *((uint8_t *)item->exinf) != *((uint8_t *)src);
    202202
    203         switch(*(uint8_t *)src){
     203        switch (*(uint8_t *)src) {
    204204        /* 異常発生ありの場合 */
    205205        case 0x41:
     
    271271int date_prop_set(const EPRPINIB *item, const void *src, int size, bool_t *anno)
    272272{
    273         uint8_t *p_src;
     273        const uint8_t *p_src;
    274274        time_t temp;
    275275        struct tm _tm;
     
    283283        /* 年月日設定 */
    284284        p_src = (uint8_t *)src;
    285         _tm.tm_year = (*(p_src++) * 100) + *p_src++;
     285        _tm.tm_year = (*p_src++ * 100) + *p_src++;
    286286        _tm.tm_mon = (*p_src++) - 1;
    287287        _tm.tm_mday = *p_src++;
     
    325325
    326326        /* サイズが4以外は受け付けない */
    327         if(size != 4)
     327        if (size != 4)
    328328                return 0;
    329329
     
    345345
    346346        len = 48 - meter->current_pos;
    347         if(len > 0)
     347        if (len > 0)
    348348                memcpy(dst, &meter->integral_electric_energy_measurement_log[meter->current_pos], sizeof(uint32_t) * len);
    349349        dst = &((uint8_t *)dst)[len];
     
    404404
    405405        ret2 = get_tim(&now);
    406         if (ret2 != E_OK){
     406        if (ret2 != E_OK) {
    407407                syslog(LOG_ERROR, "get_tim");
    408408                return;
    409409        }
    410410
    411         for(;;){
     411        for (;;) {
    412412                prev = now;
    413413
     
    417417                /* 応答電文待ち */
    418418                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)) {
    420420                        syslog(LOG_ERROR, "ecn_trcv_esv");
    421421                        break;
     
    423423
    424424                ret2 = get_tim(&now);
    425                 if (ret2 != E_OK){
     425                if (ret2 != E_OK) {
    426426                        syslog(LOG_ERROR, "get_tim");
    427427                        break;
     
    438438                        /* 領域解放 */
    439439                        ret = ecn_rel_esv(esv);
    440                         if (ret != E_OK){
     440                        if (ret != E_OK) {
    441441                                syslog(LOG_ERROR, "ecn_rel_esv");
    442442                                break;
     
    447447                        /* 応答電文待ちの割り込みデータ取得 */
    448448                        ret = ecn_get_brk_dat(esv, brkdat, sizeof(brkdat), &len);
    449                         if (ret != E_OK){
     449                        if (ret != E_OK) {
    450450                                syslog(LOG_ERROR, "ecn_get_brk_dat");
    451451                                break;
     
    457457                        /* 領域解放 */
    458458                        ret = ecn_rel_esv(esv);
    459                         if (ret != E_OK){
     459                        if (ret != E_OK) {
    460460                                syslog(LOG_ERROR, "ecn_rel_esv");
    461461                                break;
     
    468468}
    469469
    470 bool_t started = false;
    471 
    472470void echonet_change_netif_link(uint8_t link_up, uint8_t up)
    473471{
     
    477475                return;
    478476
    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                }
    489483        }
    490484
     
    500494}
    501495
    502 enum main_state_t{
     496enum main_state_t {
     497        main_state_start,
    503498        main_state_idle,
    504499};
    505500
    506501int main_timer = TMO_FEVR;
    507 enum main_state_t main_state = main_state_idle;
     502enum main_state_t main_state = main_state_start;
    508503int main_lcd_state = 0;
    509504int main_lcd_timer = TMO_FEVR;
     
    557552        analogin_init(&joystick, P1_12);
    558553
    559         /* 10ms後にボタン状態を確認 */
    560         main_timer = 10 * 1000;
    561 
    562         /* ボタン状態読み込み */
     554        /* ECHONETミドルウェアを起動するのを待つ */
     555        main_state = main_state_start;
     556        main_timer = 1000 * 1000;
     557
    563558        btn = main_read_button(&joystick);
    564559        main_btn1_state = btn == BUTTON_LEFT;
     
    568563        spi_init(&lcd.hspi, P10_14, P10_15, P10_12, NC);
    569564        spi_format(&lcd.hspi, 8, 0, 0);
    570         spi_frequency(&lcd.hspi, 1000000);
     565        spi_frequency(&lcd.hspi, 4000000);
    571566
    572567        gpio_init_out(&lcd.cs_pin, P10_13);
     
    590585        main_adv_timer = 1000 * 1000;
    591586
     587        /* メインタスクを起動 */
    592588        ER ret = act_tsk(MAIN_TASK);
    593589        if (ret != E_OK) {
     
    603599        int result = main_timer;
    604600
    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))) {
    607603                result = main_lcd_timer;
    608604        }
     
    621617static void main_progress(int interval)
    622618{
    623         if(main_timer != TMO_FEVR){
     619        if (main_timer != TMO_FEVR) {
    624620                main_timer -= interval;
    625                 if(main_timer < 0){
     621                if (main_timer < 0) {
    626622                        main_timer = 0;
    627623                }
    628624        }
    629625
    630         if(main_lcd_timer != TMO_FEVR){
     626        if (main_lcd_timer != TMO_FEVR) {
    631627                main_lcd_timer -= interval;
    632                 if(main_lcd_timer < 0){
     628                if (main_lcd_timer < 0) {
    633629                        main_lcd_timer = 0;
    634630                }
     
    655651
    656652        ret = ecn_itr_ini(&enm, esv);
    657         if(ret != E_OK){
     653        if (ret != E_OK) {
    658654                syslog(LOG_ERROR, "ecn_itr_ini");
    659655                return;
    660656        }
    661657
    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) {
    664660                        switch (epc) {
    665661                        case 0x80:
     
    669665                        }
    670666                }
    671                 if(ret != E_BOVR){
     667                if (ret != E_BOVR) {
    672668                        syslog(LOG_ERROR, "ecn_itr_nxt");
    673669                        break;
    674670                }
    675                 if(enm.is_eof)
     671                if (enm.is_eof)
    676672                        break;
    677673        }
     
    684680{
    685681        char mac_text[30] = "mac: ";
    686         char ipaddr_text[30] = "ipaddr: ";
    687         T_IN4_ADDR *ip4_addr;
     682        char ipaddr_text[30] = "ipadr: ";
     683        const T_IN4_ADDR *ip4_addr;
    688684        int pos;
    689685
    690         switch(main_state){
     686        switch (main_state) {
    691687        case main_state_idle:
    692688                if (len == 0)
     
    704700                        pos = str_macaddr(&mac_text[4], sizeof(mac_text) - 4, mac_addr, 0);
    705701                        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);
    707703
    708704                        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);
    712708                }
    713709                break;
     
    724720static void main_timeout()
    725721{
    726         if(main_timer == 0){
     722        if (main_timer == 0) {
    727723                main_ontimer();
    728724        }
    729725
    730         if(main_lcd_timer == 0){
     726        if (main_lcd_timer == 0) {
    731727                main_lcd_ontimer();
    732728        }
     
    746742        int port_no, btn;
    747743
    748         switch(main_lcd_state) {
     744        switch (main_lcd_state) {
    749745        case 0:
    750746        case 1:
     
    757753                text[16] = '0' + main_7seg[port_no][2];
    758754                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);
    760756                main_lcd_state++;
    761757                break;
    762758        case 6:
    763759                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);
    765761                main_lcd_state++;
    766762                break;
     
    769765                break;
    770766        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);
    772768                for (port_no = 0; port_no < 6; port_no++) {
    773769                        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);
    775771                }
    776772                main_lcd_state = 0;
     
    802798static void main_ontimer()
    803799{
     800        ER ret;
    804801        uint8_t btn;
    805802        uint16_t ad_value;
    806803
    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;
    808816        case main_state_idle:
    809817                /* 10ms後にボタン状態を確認 */
     
    845853
    846854                /* ボタン1の処理 */
    847                 if((btn == BUTTON_LEFT) && !main_btn1_state){
     855                if ((btn == BUTTON_LEFT) && !main_btn1_state) {
    848856                        main_btn1_count++;
    849                         if(main_btn1_count > 10){
     857                        if (main_btn1_count > 10) {
    850858                                main_btn1_count = 0;
    851859                                main_btn1_state = true;
     
    854862                        }
    855863                }
    856                 else if((btn != BUTTON_LEFT) && main_btn1_state){
     864                else if ((btn != BUTTON_LEFT) && main_btn1_state) {
    857865                        main_btn1_count++;
    858                         if(main_btn1_count > 10){
     866                        if (main_btn1_count > 10) {
    859867                                main_btn1_count = 0;
    860868                                main_btn1_state = false;
     
    865873
    866874                /* ボタン2の処理 */
    867                 if((btn == BUTTON_RIGHT) && !main_btn2_state){
     875                if ((btn == BUTTON_RIGHT) && !main_btn2_state) {
    868876                        main_btn2_count++;
    869                         if(main_btn2_count > 10){
     877                        if (main_btn2_count > 10) {
    870878                                main_btn2_count = 0;
    871879                                main_btn2_state = true;
     
    874882                        }
    875883                }
    876                 else if((btn != BUTTON_RIGHT) && main_btn2_state){
     884                else if ((btn != BUTTON_RIGHT) && main_btn2_state) {
    877885                        main_btn2_count++;
    878                         if(main_btn2_count > 10){
     886                        if (main_btn2_count > 10) {
    879887                                main_btn2_count = 0;
    880888                                main_btn2_state = false;
     
    897905static uint8_t main_read_button(analogin_t *obj)
    898906{
    899     float a = analogin_read(obj);
    900 
    901     a *= 5.0;
    902 
    903     //printf("Button read analog = %f\r\n",a);
    904     if (a < 0.2)
    905         return BUTTON_DOWN;
    906     if (a < 1.0)
    907         return BUTTON_RIGHT;
    908     if (a < 1.7)
    909         return BUTTON_SELECT;
    910     if (a < 2.6)
    911         return BUTTON_UP;
    912     if (a < 4.6)
    913         return BUTTON_LEFT;
    914     else
    915         return BUTTON_NONE;
     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;
    916924}
    917925
     
    924932{
    925933        /* 押されて戻った時に処理する */
    926         if(push)
     934        if (push)
    927935                return;
    928936
    929937        /* 表示ポート番号 */
    930         if(!main_rev){
     938        if (!main_rev) {
    931939                main_port_no--;
    932                 if(main_port_no < 1){
     940                if (main_port_no < 1) {
    933941                        main_port_no = 1;
    934942                        main_rev = true;
     
    936944                }
    937945        }
    938         else{
     946        else {
    939947                main_port_no++;
    940                 if(main_port_no > main_ad_count){
     948                if (main_port_no > main_ad_count) {
    941949                        main_port_no = main_ad_count;
    942950                        main_rev = false;
     
    952960{
    953961        /* 押されて戻った時に処理する */
    954         if(push)
     962        if (push)
    955963                return;
    956964
     
    961969
    962970        /* 表示ポート番号 */
    963         if(!main_rev){
     971        if (!main_rev) {
    964972                main_port_no++;
    965                 if(main_port_no > main_ad_count){
     973                if (main_port_no > main_ad_count) {
    966974                        main_port_no = main_ad_count;
    967975                        main_rev = false;
     
    969977                }
    970978        }
    971         else{
     979        else {
    972980                main_port_no--;
    973                 if(main_port_no < 1){
     981                if (main_port_no < 1) {
    974982                        main_port_no = 1;
    975983                        main_rev = true;
     
    988996
    989997        main_port_no++;
    990         if(main_port_no > main_ad_count)
     998        if (main_port_no > main_ad_count)
    991999                main_port_no = 1;
    9921000
Note: See TracChangeset for help on using the changeset viewer.