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/app6_hot_water_pot/src/echonet_main.c

    r352 r364  
    11/*
    22 *  TOPPERS ECHONET Lite Communication Middleware
    3  * 
     3 *
    44 *  Copyright (C) 2014-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 */
     
    113113{
    114114        /* サイズが1以外は受け付けない */
    115         if(size != 1)
     115        if (size != 1)
    116116                return 0;
    117117
    118118        *anno = *((uint8_t*)item->exinf) != *((uint8_t*)src);
    119119
    120         switch(*(uint8_t *)src){
     120        switch (*(uint8_t *)src) {
    121121        /* ONの場合 */
    122122        case 0x30:
     
    145145{
    146146        /* サイズが1以外は受け付けない */
    147         if(size != 1)
     147        if (size != 1)
    148148                return 0;
    149149
    150150        *anno = *((uint8_t *)item->exinf) != *((uint8_t *)src);
    151151
    152         switch(*(uint8_t *)src){
     152        switch (*(uint8_t *)src) {
    153153        /* 異常発生ありの場合 */
    154154        case 0x41:
     
    174174
    175175        /* サイズが1以外は受け付けない */
    176         if(size != 1)
     176        if (size != 1)
    177177                return 0;
    178178
    179179        *anno = *((uint8_t*)item->exinf) != *((uint8_t*)src);
    180180
    181         switch(*(uint8_t *)src){
     181        switch (*(uint8_t *)src) {
    182182        /* 湯切れ無しの場合 */
    183183        case 0x40:
     
    200200        data[0] = 0xB1;
    201201        ret = ecn_brk_wai(data, sizeof(data));
    202         if(ret != E_OK){
     202        if (ret != E_OK) {
    203203                syslog(LOG_ERROR, "ecn_brk_wai");
    204204        }
     
    213213{
    214214        /* サイズが1以外は受け付けない */
    215         if(size != 1)
     215        if (size != 1)
    216216                return 0;
    217217
    218218        *anno = *((uint8_t*)item->exinf) != *((uint8_t*)src);
    219219
    220         switch(*(uint8_t *)src){
     220        switch (*(uint8_t *)src) {
    221221        /* 出湯有の場合 */
    222222        case 0x41:
     
    262262
    263263        ret2 = get_tim(&now);
    264         if (ret2 != E_OK){
     264        if (ret2 != E_OK) {
    265265                syslog(LOG_ERROR, "get_tim");
    266266                return;
    267267        }
    268268
    269         for(;;){
     269        for (;;) {
    270270                prev = now;
    271271
     
    275275                /* 応答電文待ち */
    276276                ret = ecn_trcv_esv(&esv, timer);
    277                 if ((ret != E_OK) && (ret != E_BRK) && (ret != E_TMOUT)){
     277                if ((ret != E_OK) && (ret != E_BRK) && (ret != E_TMOUT)) {
    278278                        syslog(LOG_ERROR, "ecn_trcv_esv");
    279279                        break;
     
    281281
    282282                ret2 = get_tim(&now);
    283                 if (ret2 != E_OK){
     283                if (ret2 != E_OK) {
    284284                        syslog(LOG_ERROR, "get_tim");
    285285                        break;
     
    296296                        /* 領域解放 */
    297297                        ret = ecn_rel_esv(esv);
    298                         if (ret != E_OK){
     298                        if (ret != E_OK) {
    299299                                syslog(LOG_ERROR, "ecn_rel_esv");
    300300                                break;
     
    305305                        /* 応答電文待ちの割り込みデータ取得 */
    306306                        ret = ecn_get_brk_dat(esv, brkdat, sizeof(brkdat), &len);
    307                         if (ret != E_OK){
     307                        if (ret != E_OK) {
    308308                                syslog(LOG_ERROR, "ecn_get_brk_dat");
    309309                                break;
     
    315315                        /* 領域解放 */
    316316                        ret = ecn_rel_esv(esv);
    317                         if (ret != E_OK){
     317                        if (ret != E_OK) {
    318318                                syslog(LOG_ERROR, "ecn_rel_esv");
    319319                                break;
     
    326326}
    327327
    328 bool_t started = false;
    329 
    330328void echonet_change_netif_link(uint8_t link_up, uint8_t up)
    331329{
     
    335333                return;
    336334
    337         if (up && !started) {
    338                 started = true;
    339 
    340                 /* ECHONETミドルウェアを起動 */
    341                 ret = ecn_sta_svc();
    342                 if (ret != E_OK)
    343                         return;
    344 
    345                 /* ECHONETミドルウェアを起動するのを待つ */
    346                 dly_tsk(100);
     335        if (up) {
     336                /* インスタンスリスト通知の送信 */
     337                ret = ecn_ntf_inl();
     338                if (ret != E_OK) {
     339                        syslog(LOG_ERROR, "ecn_ntf_inl");
     340                }
    347341        }
    348342
     
    358352}
    359353
    360 enum main_state_t{
     354enum main_state_t {
     355        main_state_start,
    361356        main_state_idle,
    362357        main_state_search,
     
    365360
    366361int main_timer = TMO_FEVR;
    367 enum main_state_t main_state = main_state_idle;
     362enum main_state_t main_state = main_state_start;
    368363int main_retry;
    369364
     
    397392        gpio_write(&led_red, 0);
    398393
    399         /* 1秒後にブザーを検索 */
    400         main_state = main_state_search;
     394
     395        /* ECHONETミドルウェアを起動するのを待つ */
     396        main_state = main_state_start;
    401397        main_timer = 1000 * 1000;
    402398
     
    410406        main_btn2_state = btn2 != 0;
    411407
     408        /* メインタスクを起動 */
    412409        ER ret = act_tsk(MAIN_TASK);
    413410        if (ret != E_OK) {
     
    423420        int result = main_timer;
    424421
    425         if((result == TMO_FEVR)
    426                 || ((main_btn_timer != TMO_FEVR) && (main_btn_timer < result))){
     422        if ((result == TMO_FEVR)
     423                || ((main_btn_timer != TMO_FEVR) && (main_btn_timer < result))) {
    427424                result = main_btn_timer;
    428425        }
     
    436433static void main_progress(int interval)
    437434{
    438         if(main_timer != TMO_FEVR){
     435        if (main_timer != TMO_FEVR) {
    439436                main_timer -= interval;
    440                 if(main_timer < 0){
     437                if (main_timer < 0) {
    441438                        main_timer = 0;
    442439                }
    443440        }
    444441
    445         if(main_btn_timer != TMO_FEVR){
     442        if (main_btn_timer != TMO_FEVR) {
    446443                main_btn_timer -= interval;
    447                 if(main_btn_timer < 0){
     444                if (main_btn_timer < 0) {
    448445                        main_btn_timer = 0;
    449446                }
     
    464461
    465462        eobjid = ecn_get_eobj(esv);
    466         if(eobjid == EOBJ_NULL){
     463        if (eobjid == EOBJ_NULL) {
    467464                syslog(LOG_ERROR, "ecn_get_eobj");
    468465                return;
     
    470467
    471468        ret = ecn_itr_ini(&enm, esv);
    472         if(ret != E_OK){
     469        if (ret != E_OK) {
    473470                syslog(LOG_ERROR, "ecn_itr_ini");
    474471                return;
    475472        }
    476473
    477         for(;;) {
    478                 while((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) {
     474        for (;;) {
     475                while ((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) {
    479476                        switch (epc) {
    480477                        case 0xB1:
    481                                 switch(main_state){
     478                                switch (main_state) {
    482479                                /* プロパティ通知応答待ちの場合 */
    483480                                case main_state_wait_res:
    484481                                        /* プロパティ通知応答のみ処理 */
    485                                         if((esv->hdr.edata.esv == ESV_INFC_RES) && (eobjid == BUZZER_NODE_EOBJ)){
     482                                        if ((esv->hdr.edata.esv == ESV_INFC_RES) && (eobjid == BUZZER_NODE_EOBJ)) {
    486483                                                /* 応答受信 */
    487484                                                main_state = main_state_idle;
     
    492489                                break;
    493490                        case 0xD6:
    494                                 switch(main_state){
     491                                switch (main_state) {
    495492                                case main_state_search:
    496493                                        if (eobjid == BUZZER_NODE_EOBJ) {
     
    504501                        }
    505502                }
    506                 if(ret != E_BOVR){
     503                if (ret != E_BOVR) {
    507504                        syslog(LOG_ERROR, "ecn_itr_nxt");
    508505                        break;
    509506                }
    510                 if(enm.is_eof)
     507                if (enm.is_eof)
    511508                        break;
    512509        }
     
    526523        }
    527524
    528         switch(main_state){
     525        switch (main_state) {
    529526        case main_state_idle:
    530527        case main_state_wait_res:
    531                 if((len >= 1) && (*brkdat == 0xB1)){
     528                if ((len >= 1) && (*brkdat == 0xB1)) {
    532529                        /* ブザーに湯切れ警告状態通知 */
    533530                        ret = ecn_esv_infc(&esv, BUZZER_NODE_EOBJ, ELECTRIC_HOT_WATER_POT_EOBJ, 0xB1);
    534                         if(ret != E_OK){
     531                        if (ret != E_OK) {
    535532                                syslog(LOG_ERROR, "ecn_esv_infc");
    536533                                return;
     
    539536                        /* 電文送信 */
    540537                        ret = ecn_snd_esv(esv);
    541                         if(ret != E_OK){
     538                        if (ret != E_OK) {
    542539                                syslog(LOG_ERROR, "ecn_snd_esv");
    543540                        }
     
    560557static void main_timeout()
    561558{
    562         if(main_timer == 0){
     559        if (main_timer == 0) {
    563560                main_ontimer();
    564561        }
    565562
    566         if(main_btn_timer == 0){
     563        if (main_btn_timer == 0) {
    567564                main_btn_ontimer();
    568565        }
     
    576573        T_EDATA *esv;
    577574
    578         switch(main_state){
     575        switch (main_state) {
     576        case main_state_start:
     577                /* ECHONETミドルウェアを起動 */
     578                ret = ecn_sta_svc();
     579                if (ret != E_OK) {
     580                        syslog(LOG_ERROR, "ecn_sta_svc");
     581                }
     582
     583                /* 1秒後にブザーを検索 */
     584                main_state = main_state_search;
     585                main_timer = 1000 * 1000;
     586                break;
    579587        case main_state_idle:
    580588                syslog(LOG_ERROR, "timeout faild on main_state_idle");
     
    589597        case main_state_wait_res:
    590598                /* リトライアウトの場合 */
    591                 if(main_retry == 0){
     599                if (main_retry == 0) {
    592600                        /* あきらめる */
    593601                        main_state = main_state_idle;
     
    598606                /* ブザーに湯切れ警告状態通知を再送 */
    599607                ret = ecn_esv_infc(&esv, BUZZER_NODE_EOBJ, ELECTRIC_HOT_WATER_POT_EOBJ, 0xB1);
    600                 if(ret != E_OK){
     608                if (ret != E_OK) {
    601609                        syslog(LOG_ERROR, "ecn_esv_infc");
    602610                        main_state = main_state_idle;
     
    607615                /* 電文送信 */
    608616                ret = ecn_snd_esv(esv);
    609                 if(ret != E_OK){
     617                if (ret != E_OK) {
    610618                        syslog(LOG_ERROR, "ecn_snd_esv");
    611619                        main_state = main_state_idle;
     
    629637        /* ブザー検索 */
    630638        ret = ecn_esv_inf_req(&esv, EOBJ_NULL, 0xD6);
    631         if(ret != E_OK){
     639        if (ret != E_OK) {
    632640                syslog(LOG_ERROR, "ecn_esv_inf_req");
    633641                return;
     
    636644        /* 電文送信 */
    637645        ret = ecn_snd_esv(esv);
    638         if(ret != E_OK){
     646        if (ret != E_OK) {
    639647                syslog(LOG_ERROR, "ecn_snd_esv");
    640648        }
     
    656664
    657665        /* ボタン1の処理 */
    658         if((btn1 != 0) && !main_btn1_state){
     666        if ((btn1 != 0) && !main_btn1_state) {
    659667                main_btn1_count++;
    660                 if(main_btn1_count > 10){
     668                if (main_btn1_count > 10) {
    661669                        main_btn1_count = 0;
    662670                        main_btn1_state = true;
     
    665673                }
    666674        }
    667         else if((btn1 == 0) && main_btn1_state){
     675        else if ((btn1 == 0) && main_btn1_state) {
    668676                main_btn1_count++;
    669                 if(main_btn1_count > 10){
     677                if (main_btn1_count > 10) {
    670678                        main_btn1_count = 0;
    671679                        main_btn1_state = false;
     
    676684
    677685        /* ボタン2の処理 */
    678         if((btn2 != 0) && !main_btn2_state){
     686        if ((btn2 != 0) && !main_btn2_state) {
    679687                main_btn2_count++;
    680                 if(main_btn2_count > 10){
     688                if (main_btn2_count > 10) {
    681689                        main_btn2_count = 0;
    682690                        main_btn2_state = true;
     
    685693                }
    686694        }
    687         else if((btn2 == 0) && main_btn2_state){
     695        else if ((btn2 == 0) && main_btn2_state) {
    688696                main_btn2_count++;
    689                 if(main_btn2_count > 10){
     697                if (main_btn2_count > 10) {
    690698                        main_btn2_count = 0;
    691699                        main_btn2_state = false;
     
    708716
    709717        /* 押されて戻った時に処理する */
    710         if(push)
     718        if (push)
    711719                return;
    712720
     
    718726        /* プロパティ設定電文作成 */
    719727        ret = ecn_esv_seti(&esv, ELECTRIC_HOT_WATER_POT_EOBJ, 0xB1, 1, p_edt);
    720         if(ret != E_OK){
     728        if (ret != E_OK) {
    721729                syslog(LOG_ERROR, "ecn_esv_seti");
    722730                return;
     
    725733        /* 電文送信 */
    726734        ecn_snd_esv(esv);
    727         if(ret != E_OK){
     735        if (ret != E_OK) {
    728736                syslog(LOG_ERROR, "ecn_snd_esv");
    729737        }
     
    744752        /* プロパティ設定電文作成 */
    745753        ret = ecn_esv_seti(&esv, ELECTRIC_HOT_WATER_POT_EOBJ, 0xE2, 1, p_edt);
    746         if(ret != E_OK){
     754        if (ret != E_OK) {
    747755                syslog(LOG_ERROR, "ecn_esv_seti");
    748756                return;
     
    751759        /* 電文送信 */
    752760        ecn_snd_esv(esv);
    753         if(ret != E_OK){
     761        if (ret != E_OK) {
    754762                syslog(LOG_ERROR, "ecn_snd_esv");
    755763        }
Note: See TracChangeset for help on using the changeset viewer.