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_rx/trunk/app2_light/src/echonet_main.c

    r351 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 */
     
    116116{
    117117        /* サイズが1以外は受け付けない */
    118         if(size != 1)
     118        if (size != 1)
    119119                return 0;
    120120
    121121        *anno = *((uint8_t *)item->exinf) != *((uint8_t *)src);
    122122
    123         switch(*(uint8_t *)src){
     123        switch (*(uint8_t *)src) {
    124124        /* ONの場合 */
    125125        case 0x30:
     
    152152{
    153153        /* サイズが1以外は受け付けない */
    154         if(size != 1)
     154        if (size != 1)
    155155                return 0;
    156156
    157157        *anno = *((uint8_t *)item->exinf) != *((uint8_t *)src);
    158158
    159         switch(*(uint8_t *)src){
     159        switch (*(uint8_t *)src) {
    160160        /* 異常発生ありの場合 */
    161161        case 0x41:
     
    180180
    181181        /* サイズが1以外は受け付けない */
    182         if(size != 1)
    183                 return 0;
    184 
    185         switch(*(uint8_t *)src){
     182        if (size != 1)
     183                return 0;
     184
     185        switch (*(uint8_t *)src) {
    186186        /* 自動の場合 */
    187187        case 0x41:
     
    224224        uint8_t data[2];
    225225
    226         if(size != 1)
    227                 return 0;
    228 
    229         switch(*(uint8_t *)src){
     226        if (size != 1)
     227                return 0;
     228
     229        switch (*(uint8_t *)src) {
    230230        /* 人体検出ありの場合 */
    231231        case 0x41:
     
    236236                data[1] = *(uint8_t *)src;
    237237                ret = ecn_brk_wai(data, sizeof(data));
    238                 if(ret != E_OK){
     238                if (ret != E_OK) {
    239239                        syslog(LOG_ERROR, "ecn_brk_wai");
    240240                        return 1;
     
    249249                data[1] = *(uint8_t *)src;
    250250                ret = ecn_brk_wai(data, sizeof(data));
    251                 if(ret != E_OK){
     251                if (ret != E_OK) {
    252252                        syslog(LOG_ERROR, "ecn_brk_wai");
    253253                        return 1;
     
    269269        uint8_t *p_src;
    270270
    271         if(size != 2)
     271        if (size != 2)
    272272                return 0;
    273273
     
    288288        uint8_t *p_dst;
    289289
    290         if(size != 2)
     290        if (size != 2)
    291291                return 0;
    292292
     
    306306        uint8_t *p_src;
    307307
    308         if(size != 4)
     308        if (size != 4)
    309309                return 0;
    310310
     
    326326        uint8_t *p_dst;
    327327
    328         if(size != 4)
     328        if (size != 4)
    329329                return 0;
    330330
     
    361361
    362362        ret2 = get_tim(&now);
    363         if (ret2 != E_OK){
     363        if (ret2 != E_OK) {
    364364                syslog(LOG_ERROR, "get_tim");
    365365                return;
    366366        }
    367367
    368         for(;;){
     368        for (;;) {
    369369                prev = now;
    370370
     
    374374                /* 応答電文待ち */
    375375                ret = ecn_trcv_esv(&esv, timer);
    376                 if ((ret != E_OK) && (ret != E_BRK) && (ret != E_TMOUT)){
     376                if ((ret != E_OK) && (ret != E_BRK) && (ret != E_TMOUT)) {
    377377                        syslog(LOG_ERROR, "ecn_trcv_esv");
    378378                        break;
     
    380380
    381381                ret2 = get_tim(&now);
    382                 if (ret2 != E_OK){
     382                if (ret2 != E_OK) {
    383383                        syslog(LOG_ERROR, "get_tim");
    384384                        break;
     
    395395                        /* 領域解放 */
    396396                        ret = ecn_rel_esv(esv);
    397                         if (ret != E_OK){
     397                        if (ret != E_OK) {
    398398                                syslog(LOG_ERROR, "ecn_rel_esv");
    399399                                break;
     
    404404                        /* 応答電文待ちの割り込みデータ取得 */
    405405                        ret = ecn_get_brk_dat(esv, brkdat, sizeof(brkdat), &len);
    406                         if (ret != E_OK){
     406                        if (ret != E_OK) {
    407407                                syslog(LOG_ERROR, "ecn_get_brk_dat");
    408408                                break;
     
    414414                        /* 領域解放 */
    415415                        ret = ecn_rel_esv(esv);
    416                         if (ret != E_OK){
     416                        if (ret != E_OK) {
    417417                                syslog(LOG_ERROR, "ecn_rel_esv");
    418418                                break;
     
    425425}
    426426
    427 bool_t started = false;
    428 
    429427void echonet_change_netif_link(uint8_t link_up, uint8_t up)
    430428{
     
    434432                return;
    435433
    436         if (up && !started) {
    437                 started = true;
    438 
    439                 /* ECHONETミドルウェアを起動 */
    440                 ret = ecn_sta_svc();
    441                 if (ret != E_OK)
    442                         return;
    443 
    444                 /* ECHONETミドルウェアを起動するのを待つ */
    445                 dly_tsk(100);
     434        if (up) {
     435                /* インスタンスリスト通知の送信 */
     436                ret = ecn_ntf_inl();
     437                if (ret != E_OK) {
     438                        syslog(LOG_ERROR, "ecn_ntf_inl");
     439                }
    446440        }
    447441
     
    457451}
    458452
    459 enum main_state_t{
     453enum main_state_t {
     454        main_state_start,
    460455        main_state_idle,
    461456        main_state_search,
     
    464459int main_timer = TMO_FEVR;
    465460int main_btn_timer = TMO_FEVR;
    466 enum main_state_t main_state = main_state_idle;
     461enum main_state_t main_state = main_state_start;
    467462bool_t main_btn1_state;
    468463int main_btn1_count = 0;
     
    480475        sil_wrb_mem((uint8_t *)0x0008C02A, 0x00);
    481476
    482         /* 1秒後に人体検知センサを検索 */
    483         main_state = main_state_search;
     477        /* ECHONETミドルウェアを起動するのを待つ */
     478        main_state = main_state_start;
    484479        main_timer = 1000 * 1000;
    485480
     
    490485        btn1 = sil_reb_mem((uint8_t *)0x0008C04A);
    491486        /*btn1 = sil_reb_mem((uint8_t *)0x0008C040);*/
    492         btn2 = sil_reb_mem((uint8_t *) 0x0008C040);
     487        btn2 = sil_reb_mem((uint8_t *)0x0008C040);
    493488        main_btn1_state = (btn1 & 0x80/*0x0x20*/) != 0;
    494489        main_btn2_state = (btn2 & 0x80) != 0;
    495490
     491        /* メインタスクを起動 */
    496492        ER ret = act_tsk(MAIN_TASK);
    497493        if (ret != E_OK) {
     
    507503        int result = main_timer;
    508504
    509         if((result == TMO_FEVR)
    510                 || ((main_btn_timer != TMO_FEVR) && (main_btn_timer < result))){
     505        if ((result == TMO_FEVR)
     506                || ((main_btn_timer != TMO_FEVR) && (main_btn_timer < result))) {
    511507                result = main_btn_timer;
    512508        }
     
    520516static void main_progress(int interval)
    521517{
    522         if(main_timer != TMO_FEVR){
     518        if (main_timer != TMO_FEVR) {
    523519                main_timer -= interval;
    524                 if(main_timer < 0){
     520                if (main_timer < 0) {
    525521                        main_timer = 0;
    526522                }
    527523        }
    528524
    529         if(main_btn_timer != TMO_FEVR){
     525        if (main_btn_timer != TMO_FEVR) {
    530526                main_btn_timer -= interval;
    531                 if(main_btn_timer < 0){
     527                if (main_btn_timer < 0) {
    532528                        main_btn_timer = 0;
    533529                }
     
    548544
    549545        eobjid = ecn_get_eobj(esv);
    550         if(eobjid == EOBJ_NULL){
     546        if (eobjid == EOBJ_NULL) {
    551547                syslog(LOG_ERROR, "ecn_get_eobj");
    552548        }
    553549
    554550        ret = ecn_itr_ini(&enm, esv);
    555         if(ret != E_OK){
     551        if (ret != E_OK) {
    556552                syslog(LOG_ERROR, "ecn_itr_ini");
    557553                return;
    558554        }
    559555
    560         for(;;) {
    561                 while((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) {
     556        for (;;) {
     557                while ((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) {
    562558                        switch (epc) {
    563559                        case 0xD6:
    564                                 switch(main_state){
     560                                switch (main_state) {
    565561                                case main_state_search:
    566562                                        if (eobjid == HUMAN_DETECTION_SENSER_ENOD) {
     
    574570                        }
    575571                }
    576                 if(ret != E_BOVR){
     572                if (ret != E_BOVR) {
    577573                        syslog(LOG_ERROR, "ecn_itr_nxt");
    578574                        break;
    579575                }
    580                 if(enm.is_eof)
     576                if (enm.is_eof)
    581577                        break;
    582578        }
     
    592588        ER ret;
    593589
    594         switch(main_state){
     590        switch (main_state) {
    595591        case main_state_idle:
    596592                if (len < 2)
     
    616612static void main_timeout()
    617613{
    618         if(main_timer == 0){
     614        if (main_timer == 0) {
    619615                main_ontimer();
    620616        }
    621617
    622         if(main_btn_timer == 0){
     618        if (main_btn_timer == 0) {
    623619                main_btn_ontimer();
    624620        }
     
    629625static void main_ontimer()
    630626{
    631         switch(main_state){
     627        ER ret;
     628
     629        switch (main_state) {
     630        case main_state_start:
     631                /* ECHONETミドルウェアを起動 */
     632                ret = ecn_sta_svc();
     633                if (ret != E_OK) {
     634                        syslog(LOG_ERROR, "ecn_sta_svc");
     635                }
     636
     637                /* 1秒後に人体検知センサを検索 */
     638                main_state = main_state_search;
     639                main_timer = 1000 * 1000;
     640                break;
    632641        case main_state_search:
    633642                /* 人体検知センサ再検索 */
     
    646655        /* 人体検知センサ検索 */
    647656        ret = ecn_esv_inf_req(&esv, EOBJ_NULL, 0xD6);
    648         if(ret != E_OK){
     657        if (ret != E_OK) {
    649658                syslog(LOG_ERROR, "ecn_esv_inf_req");
    650659                return;
     
    653662        /* 電文送信 */
    654663        ret = ecn_snd_esv(esv);
    655         if(ret != E_OK){
     664        if (ret != E_OK) {
    656665                syslog(LOG_ERROR, "ecn_snd_esv");
    657666        }
     
    674683        btn1 = sil_reb_mem((uint8_t *)0x0008C04A);
    675684        /*btn1 = sil_reb_mem((uint8_t *)0x0008C040);*/
    676         btn2 = sil_reb_mem((uint8_t *) 0x0008C040);
     685        btn2 = sil_reb_mem((uint8_t *)0x0008C040);
    677686
    678687        /* ボタン1の処理 */
    679         if(((btn1 & 0x80/*0x20*/) != 0) && !main_btn1_state){
     688        if (((btn1 & 0x80/*0x20*/) != 0) && !main_btn1_state) {
    680689                main_btn1_count++;
    681                 if(main_btn1_count > 10){
     690                if (main_btn1_count > 10) {
    682691                        main_btn1_count = 0;
    683692                        main_btn1_state = true;
     
    686695                }
    687696        }
    688         else if(((btn1 & 0x80/*0x20*/) == 0) && main_btn1_state){
     697        else if (((btn1 & 0x80/*0x20*/) == 0) && main_btn1_state) {
    689698                main_btn1_count++;
    690                 if(main_btn1_count > 10){
     699                if (main_btn1_count > 10) {
    691700                        main_btn1_count = 0;
    692701                        main_btn1_state = false;
     
    697706
    698707        /* ボタン2の処理 */
    699         if(((btn2 & 0x80) != 0) && !main_btn2_state){
     708        if (((btn2 & 0x80) != 0) && !main_btn2_state) {
    700709                main_btn2_count++;
    701                 if(main_btn2_count > 10){
     710                if (main_btn2_count > 10) {
    702711                        main_btn2_count = 0;
    703712                        main_btn2_state = true;
     
    706715                }
    707716        }
    708         else if(((btn2 & 0x80) == 0) && main_btn2_state){
     717        else if (((btn2 & 0x80) == 0) && main_btn2_state) {
    709718                main_btn2_count++;
    710                 if(main_btn2_count > 10){
     719                if (main_btn2_count > 10) {
    711720                        main_btn2_count = 0;
    712721                        main_btn2_state = false;
     
    717726}
    718727
    719 enum lighting_mode_t{
     728enum lighting_mode_t {
    720729        lighting_mode_auto,             /* 自動の場合 */
    721730        lighting_mode_normal,   /* 通常灯の場合 */
     
    736745
    737746        /* 押されて戻った時に処理する */
    738         if(push)
     747        if (push)
    739748                return;
    740749
     
    745754        /* プロパティ設定電文作成 */
    746755        ret = ecn_esv_setc(&esv, GENERAL_LIGHTING_CLASS_EOBJ, 0x80, 1, p_edt);
    747         if(ret != E_OK){
     756        if (ret != E_OK) {
    748757                syslog(LOG_ERROR, "ecn_esv_setc");
    749758                return;
     
    764773
    765774        /* 押されて戻った時に処理する */
    766         if(push)
     775        if (push)
    767776                return;
    768777
    769778        /* 点灯モードの切り替え */
    770         switch(main_mode){
     779        switch (main_mode) {
    771780        /* 自動の場合 */
    772781        case lighting_mode_auto:
     
    798807        /* プロパティ設定電文作成 */
    799808        ret = ecn_esv_setc(&esv, GENERAL_LIGHTING_CLASS_EOBJ, 0xB6, 1, p_edt);
    800         if(ret != E_OK){
     809        if (ret != E_OK) {
    801810                syslog(LOG_ERROR, "ecn_esv_setc");
    802811                return;
     
    814823
    815824        /* 照明がOFFで人体検出ありの場合 */
    816         if(!main_on && state == 0x41){
     825        if (!main_on && state == 0x41) {
    817826                /* 照明をON */
    818827                main_on = true;
    819828        }
    820829        /* 照明がOFFで人体検出ありの場合 */
    821         else if(main_on && state == 0x42){
     830        else if (main_on && state == 0x42) {
    822831                /* 照明をOFF */
    823832                main_on = false;
     
    830839        /* プロパティ設定電文作成 */
    831840        ret = ecn_esv_setc(&esv, GENERAL_LIGHTING_CLASS_EOBJ, 0x80, 1, p_edt);
    832         if(ret != E_OK){
     841        if (ret != E_OK) {
    833842                syslog(LOG_ERROR, "ecn_esv_setc");
    834843                return;
Note: See TracChangeset for help on using the changeset viewer.