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/app7_buzzer/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 */
     
    112112{
    113113        /* サイズが1以外は受け付けない */
    114         if(size != 1)
     114        if (size != 1)
    115115                return 0;
    116116
    117117        *anno = *((uint8_t*)item->exinf) != *((uint8_t*)src);
    118118
    119         switch(*(uint8_t *)src){
     119        switch (*(uint8_t *)src) {
    120120        /* ONの場合 */
    121121        case 0x30:
     
    144144{
    145145        /* サイズが1以外は受け付けない */
    146         if(size != 1)
     146        if (size != 1)
    147147                return 0;
    148148
    149149        *anno = *((uint8_t *)item->exinf) != *((uint8_t *)src);
    150150
    151         switch(*(uint8_t *)src){
     151        switch (*(uint8_t *)src) {
    152152        /* 異常発生ありの場合 */
    153153        case 0x41:
     
    170170{
    171171        /* サイズが1以外は受け付けない */
    172         if(size != 1)
    173                 return 0;
    174 
    175         switch(*(uint8_t *)src){
     172        if (size != 1)
     173                return 0;
     174
     175        switch (*(uint8_t *)src) {
    176176        /* 音発生有の場合 */
    177177        case 0x41:
     
    203203
    204204        /* サイズが1以外は受け付けない */
    205         if(size != 1)
     205        if (size != 1)
    206206                return 0;
    207207
     
    212212        data[1] = (*((uint8_t *)src) == 0x41) ? 0x01 : 0x00;
    213213        ret = ecn_brk_wai(data, sizeof(data));
    214         if(ret != E_OK){
     214        if (ret != E_OK) {
    215215                syslog(LOG_ERROR, "ecn_brk_wai");
    216216        }
     
    228228
    229229        /* サイズが1以外は受け付けない */
    230         if(size != 1)
     230        if (size != 1)
    231231                return 0;
    232232
     
    237237        data[1] = (*((uint8_t *)src) == 0x41) ? 0x01 : 0x00;
    238238        ret = ecn_brk_wai(data, sizeof(data));
    239         if(ret != E_OK){
     239        if (ret != E_OK) {
    240240                syslog(LOG_ERROR, "ecn_brk_wai");
    241241        }
     
    267267
    268268        ret2 = get_tim(&now);
    269         if (ret2 != E_OK){
     269        if (ret2 != E_OK) {
    270270                syslog(LOG_ERROR, "get_tim");
    271271                return;
    272272        }
    273273
    274         for(;;){
     274        for (;;) {
    275275                prev = now;
    276276
     
    280280                /* 応答電文待ち */
    281281                ret = ecn_trcv_esv(&esv, timer);
    282                 if ((ret != E_OK) && (ret != E_BRK) && (ret != E_TMOUT)){
     282                if ((ret != E_OK) && (ret != E_BRK) && (ret != E_TMOUT)) {
    283283                        syslog(LOG_ERROR, "ecn_trcv_esv");
    284284                        break;
     
    286286
    287287                ret2 = get_tim(&now);
    288                 if (ret2 != E_OK){
     288                if (ret2 != E_OK) {
    289289                        syslog(LOG_ERROR, "get_tim");
    290290                        break;
     
    301301                        /* 領域解放 */
    302302                        ret = ecn_rel_esv(esv);
    303                         if (ret != E_OK){
     303                        if (ret != E_OK) {
    304304                                syslog(LOG_ERROR, "ecn_rel_esv");
    305305                                break;
     
    310310                        /* 応答電文待ちの割り込みデータ取得 */
    311311                        ret = ecn_get_brk_dat(esv, brkdat, sizeof(brkdat), &len);
    312                         if (ret != E_OK){
     312                        if (ret != E_OK) {
    313313                                syslog(LOG_ERROR, "ecn_get_brk_dat");
    314314                                break;
     
    320320                        /* 領域解放 */
    321321                        ret = ecn_rel_esv(esv);
    322                         if (ret != E_OK){
     322                        if (ret != E_OK) {
    323323                                syslog(LOG_ERROR, "ecn_rel_esv");
    324324                                break;
     
    331331}
    332332
    333 bool_t started = false;
    334 
    335333void echonet_change_netif_link(uint8_t link_up, uint8_t up)
    336334{
     
    340338                return;
    341339
    342         if (up && !started) {
    343                 started = true;
    344 
    345                 /* ECHONETミドルウェアを起動 */
    346                 ret = ecn_sta_svc();
    347                 if (ret != E_OK)
    348                         return;
    349 
    350                 /* ECHONETミドルウェアを起動するのを待つ */
    351                 dly_tsk(100);
     340        if (up) {
     341                /* インスタンスリスト通知の送信 */
     342                ret = ecn_ntf_inl();
     343                if (ret != E_OK) {
     344                        syslog(LOG_ERROR, "ecn_ntf_inl");
     345                }
    352346        }
    353347
     
    363357}
    364358
    365 enum main_state_t{
     359enum main_state_t {
     360        main_state_start,
    366361        main_state_idle,
    367362        main_state_search,
     
    370365
    371366int main_timer = TMO_FEVR;
    372 enum main_state_t main_state = main_state_idle;
     367enum main_state_t main_state = main_state_start;
    373368
    374369int main_nop_timer = TMO_FEVR;
     
    390385        gpio_write(&led_red, 0);
    391386
    392         /* 1秒後にブザーを検索 */
    393         main_state = main_state_search;
     387        /* ECHONETミドルウェアを起動するのを待つ */
     388        main_state = main_state_start;
    394389        main_timer = 1000 * 1000;
    395390
     391        /* メインタスクを起動 */
    396392        ER ret = act_tsk(MAIN_TASK);
    397393        if (ret != E_OK) {
     
    407403        int result = main_timer;
    408404
    409         if((result == TMO_FEVR)
    410                 || ((main_nop_timer != TMO_FEVR) && (main_nop_timer < result))){
     405        if ((result == TMO_FEVR)
     406                || ((main_nop_timer != TMO_FEVR) && (main_nop_timer < result))) {
    411407                result = main_nop_timer;
    412408        }
     
    420416static void main_progress(int interval)
    421417{
    422         if(main_timer != TMO_FEVR){
     418        if (main_timer != TMO_FEVR) {
    423419                main_timer -= interval;
    424                 if(main_timer < 0){
     420                if (main_timer < 0) {
    425421                        main_timer = 0;
    426422                }
    427423        }
    428424
    429         if(main_nop_timer != TMO_FEVR){
     425        if (main_nop_timer != TMO_FEVR) {
    430426                main_nop_timer -= interval;
    431                 if(main_nop_timer < 0){
     427                if (main_nop_timer < 0) {
    432428                        main_nop_timer = 0;
    433429                }
     
    448444
    449445        eobjid = ecn_get_eobj(esv);
    450         if(eobjid == EOBJ_NULL){
     446        if (eobjid == EOBJ_NULL) {
    451447                syslog(LOG_ERROR, "ecn_get_eobj");
    452448                return;
     
    454450
    455451        ret = ecn_itr_ini(&enm, esv);
    456         if(ret != E_OK){
     452        if (ret != E_OK) {
    457453                syslog(LOG_ERROR, "ecn_itr_ini");
    458454                return;
    459455        }
    460456
    461         for(;;) {
    462                 while((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) {
     457        for (;;) {
     458                while ((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) {
    463459                        switch (epc) {
    464460                        case 0xD6:
    465                                 switch(main_state){
     461                                switch (main_state) {
    466462                                case main_state_search:
    467463                                        if (eobjid == POT_NODE_EOBJ) {
     
    475471                        }
    476472                }
    477                 if(ret != E_BOVR){
     473                if (ret != E_BOVR) {
    478474                        syslog(LOG_ERROR, "ecn_itr_nxt");
    479475                        break;
    480476                }
    481                 if(enm.is_eof)
     477                if (enm.is_eof)
    482478                        break;
    483479        }
     
    490486        uint8_t p_edt[1];
    491487
    492         switch(main_state){
     488        switch (main_state) {
    493489        case main_state_idle:
    494490                p_edt[0] = 0x41; /* 音発生有 */
     
    496492                /* プロパティ設定電文作成 */
    497493                ret = ecn_esv_seti(&esv, BUZZER_EOBJ, 0xB1, 1, p_edt);
    498                 if(ret != E_OK){
     494                if (ret != E_OK) {
    499495                        syslog(LOG_ERROR, "ecn_esv_seti");
    500496                        break;
     
    503499                /* 電文送信 */
    504500                ecn_snd_esv(esv);
    505                 if(ret != E_OK){
     501                if (ret != E_OK) {
    506502                        syslog(LOG_ERROR, "ecn_snd_esv");
    507503                        break;
     
    523519        uint8_t p_edt[1];
    524520
    525         switch(main_state){
     521        switch (main_state) {
    526522        case main_state_buzzer_on:
    527523                p_edt[0] = 0x42; /* 音発生無 */
     
    529525                /* プロパティ設定電文作成 */
    530526                ret = ecn_esv_seti(&esv, BUZZER_EOBJ, 0xB1, 1, p_edt);
    531                 if(ret != E_OK){
     527                if (ret != E_OK) {
    532528                        syslog(LOG_ERROR, "ecn_esv_seti");
    533529                        break;
     
    536532                /* 電文送信 */
    537533                ecn_snd_esv(esv);
    538                 if(ret != E_OK){
     534                if (ret != E_OK) {
    539535                        syslog(LOG_ERROR, "ecn_snd_esv");
    540536                        break;
     
    557553        }
    558554
    559         if(len < 2)
    560                 return;
    561 
    562         switch(brkdat[0]){
     555        if (len < 2)
     556                return;
     557
     558        switch (brkdat[0]) {
    563559        case 0x01:
    564                 if(brkdat[1] != 0)
     560                if (brkdat[1] != 0)
    565561                        main_buzzer_on();
    566562                else
     
    568564                break;
    569565        case 0x02:
    570                 if(brkdat[1] == 0)
     566                if (brkdat[1] == 0)
    571567                        main_nop_timer = 5000 * 1000; /* 5秒後にブザーON */
    572568                break;
     
    582578static void main_timeout()
    583579{
    584         if(main_timer == 0){
     580        if (main_timer == 0) {
    585581                main_ontimer();
    586582        }
    587583
    588         if(main_nop_timer == 0){
     584        if (main_nop_timer == 0) {
    589585                main_nop_timeout();
    590586        }
     
    595591static void main_ontimer()
    596592{
    597         switch (main_state)
    598         {
     593        ER ret;
     594
     595        switch (main_state) {
     596        case main_state_start:
     597                /* ECHONETミドルウェアを起動 */
     598                ret = ecn_sta_svc();
     599                if (ret != E_OK) {
     600                        syslog(LOG_ERROR, "ecn_sta_svc");
     601                }
     602
     603                /* 1秒後にブザーを検索 */
     604                main_state = main_state_search;
     605                main_timer = 1000 * 1000;
     606                break;
    599607        case main_state_search:
    600608                /* 電気ポット再検索 */
     
    620628        /* 電気ポット検索 */
    621629        ret = ecn_esv_inf_req(&esv, EOBJ_NULL, 0xD6);
    622         if(ret != E_OK){
     630        if (ret != E_OK) {
    623631                syslog(LOG_ERROR, "ecn_esv_inf_req");
    624632                return;
     
    627635        /* 電文送信 */
    628636        ret = ecn_snd_esv(esv);
    629         if(ret != E_OK){
     637        if (ret != E_OK) {
    630638                syslog(LOG_ERROR, "ecn_snd_esv");
    631639        }
Note: See TracChangeset for help on using the changeset viewer.