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/app2_light/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 */
     
    127127{
    128128        /* サイズが1以外は受け付けない */
    129         if(size != 1)
     129        if (size != 1)
    130130                return 0;
    131131
    132132        *anno = *((uint8_t *)item->exinf) != *((uint8_t *)src);
    133133
    134         switch(*(uint8_t *)src){
     134        switch (*(uint8_t *)src) {
    135135        /* ONの場合 */
    136136        case 0x30:
     
    163163{
    164164        /* サイズが1以外は受け付けない */
    165         if(size != 1)
     165        if (size != 1)
    166166                return 0;
    167167
    168168        *anno = *((uint8_t *)item->exinf) != *((uint8_t *)src);
    169169
    170         switch(*(uint8_t *)src){
     170        switch (*(uint8_t *)src) {
    171171        /* 異常発生ありの場合 */
    172172        case 0x41:
     
    189189{
    190190        /* サイズが1以外は受け付けない */
    191         if(size != 1)
    192                 return 0;
    193 
    194         switch(*(uint8_t *)src){
     191        if (size != 1)
     192                return 0;
     193
     194        switch (*(uint8_t *)src) {
    195195        /* 自動の場合 */
    196196        case 0x41:
     
    241241        uint8_t data[2];
    242242
    243         if(size != 1)
    244                 return 0;
    245 
    246         switch(*(uint8_t *)src){
     243        if (size != 1)
     244                return 0;
     245
     246        switch (*(uint8_t *)src) {
    247247        /* 人体検出ありの場合 */
    248248        case 0x41:
     
    253253                data[1] = *(uint8_t *)src;
    254254                ret = ecn_brk_wai(data, sizeof(data));
    255                 if(ret != E_OK){
     255                if (ret != E_OK) {
    256256                        syslog(LOG_ERROR, "ecn_brk_wai");
    257257                        return 1;
     
    266266                data[1] = *(uint8_t *)src;
    267267                ret = ecn_brk_wai(data, sizeof(data));
    268                 if(ret != E_OK){
     268                if (ret != E_OK) {
    269269                        syslog(LOG_ERROR, "ecn_brk_wai");
    270270                        return 1;
     
    288288        struct tm _tm;
    289289
    290         if(size != 2)
     290        if (size != 2)
    291291                return 0;
    292292
     
    315315        struct tm _tm;
    316316
    317         if(size != 2)
     317        if (size != 2)
    318318                return 0;
    319319
     
    338338        struct tm _tm;
    339339
    340         if(size != 4)
     340        if (size != 4)
    341341                return 0;
    342342
     
    365365        struct tm _tm;
    366366
    367         if(size != 4)
     367        if (size != 4)
    368368                return 0;
    369369
     
    403403
    404404        ret2 = get_tim(&now);
    405         if (ret2 != E_OK){
     405        if (ret2 != E_OK) {
    406406                syslog(LOG_ERROR, "get_tim");
    407407                return;
    408408        }
    409409
    410         for(;;){
     410        for (;;) {
    411411                prev = now;
    412412
     
    416416                /* 応答電文待ち */
    417417                ret = ecn_trcv_esv(&esv, timer);
    418                 if ((ret != E_OK) && (ret != E_BRK) && (ret != E_TMOUT)){
     418                if ((ret != E_OK) && (ret != E_BRK) && (ret != E_TMOUT)) {
    419419                        syslog(LOG_ERROR, "ecn_trcv_esv");
    420420                        break;
     
    422422
    423423                ret2 = get_tim(&now);
    424                 if (ret2 != E_OK){
     424                if (ret2 != E_OK) {
    425425                        syslog(LOG_ERROR, "get_tim");
    426426                        break;
     
    437437                        /* 領域解放 */
    438438                        ret = ecn_rel_esv(esv);
    439                         if (ret != E_OK){
     439                        if (ret != E_OK) {
    440440                                syslog(LOG_ERROR, "ecn_rel_esv");
    441441                                break;
     
    446446                        /* 応答電文待ちの割り込みデータ取得 */
    447447                        ret = ecn_get_brk_dat(esv, brkdat, sizeof(brkdat), &len);
    448                         if (ret != E_OK){
     448                        if (ret != E_OK) {
    449449                                syslog(LOG_ERROR, "ecn_get_brk_dat");
    450450                                break;
     
    456456                        /* 領域解放 */
    457457                        ret = ecn_rel_esv(esv);
    458                         if (ret != E_OK){
     458                        if (ret != E_OK) {
    459459                                syslog(LOG_ERROR, "ecn_rel_esv");
    460460                                break;
     
    467467}
    468468
    469 bool_t started = false;
    470 
    471469void echonet_change_netif_link(uint8_t link_up, uint8_t up)
    472470{
     
    476474                return;
    477475
    478         if (up && !started) {
    479                 started = true;
    480 
    481                 /* ECHONETミドルウェアを起動 */
    482                 ret = ecn_sta_svc();
    483                 if (ret != E_OK)
    484                         return;
    485 
    486                 /* ECHONETミドルウェアを起動するのを待つ */
    487                 dly_tsk(100);
     476        if (up) {
     477                /* インスタンスリスト通知の送信 */
     478                ret = ecn_ntf_inl();
     479                if (ret != E_OK) {
     480                        syslog(LOG_ERROR, "ecn_ntf_inl");
     481                }
    488482        }
    489483
     
    499493}
    500494
    501 enum main_state_t{
     495enum main_state_t {
     496        main_state_start,
    502497        main_state_idle,
    503498        main_state_search,
     
    506501int main_timer = TMO_FEVR;
    507502int main_btn_timer = TMO_FEVR;
    508 enum main_state_t main_state = main_state_idle;
     503enum main_state_t main_state = main_state_start;
    509504bool_t main_btn1_state;
    510505int main_btn1_count = 0;
     
    535530        gpio_write(&led_red, 0);
    536531
    537         /* 1秒後に人体検知センサを検索 */
    538         main_state = main_state_search;
     532        /* ECHONETミドルウェアを起動するのを待つ */
     533        main_state = main_state_start;
    539534        main_timer = 1000 * 1000;
    540535
     
    548543        main_btn2_state = btn2 != 0;
    549544
     545        /* メインタスクを起動 */
    550546        ER ret = act_tsk(MAIN_TASK);
    551547        if (ret != E_OK) {
     
    561557        int result = main_timer;
    562558
    563         if((result == TMO_FEVR)
    564                 || ((main_btn_timer != TMO_FEVR) && (main_btn_timer < result))){
     559        if ((result == TMO_FEVR)
     560                || ((main_btn_timer != TMO_FEVR) && (main_btn_timer < result))) {
    565561                result = main_btn_timer;
    566562        }
     
    574570static void main_progress(int interval)
    575571{
    576         if(main_timer != TMO_FEVR){
     572        if (main_timer != TMO_FEVR) {
    577573                main_timer -= interval;
    578                 if(main_timer < 0){
     574                if (main_timer < 0) {
    579575                        main_timer = 0;
    580576                }
    581577        }
    582578
    583         if(main_btn_timer != TMO_FEVR){
     579        if (main_btn_timer != TMO_FEVR) {
    584580                main_btn_timer -= interval;
    585                 if(main_btn_timer < 0){
     581                if (main_btn_timer < 0) {
    586582                        main_btn_timer = 0;
    587583                }
     
    602598
    603599        eobjid = ecn_get_eobj(esv);
    604         if(eobjid == EOBJ_NULL){
     600        if (eobjid == EOBJ_NULL) {
    605601                syslog(LOG_ERROR, "ecn_get_eobj");
    606602        }
    607603
    608604        ret = ecn_itr_ini(&enm, esv);
    609         if(ret != E_OK){
     605        if (ret != E_OK) {
    610606                syslog(LOG_ERROR, "ecn_itr_ini");
    611607                return;
    612608        }
    613609
    614         for(;;) {
    615                 while((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) {
     610        for (;;) {
     611                while ((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) {
    616612                        switch (epc) {
    617613                        case 0xD6:
    618                                 switch(main_state){
     614                                switch (main_state) {
    619615                                case main_state_search:
    620616                                        if (eobjid == HUMAN_DETECTION_SENSER_ENOD) {
     
    628624                        }
    629625                }
    630                 if(ret != E_BOVR){
     626                if (ret != E_BOVR) {
    631627                        syslog(LOG_ERROR, "ecn_itr_nxt");
    632628                        break;
    633629                }
    634                 if(enm.is_eof)
     630                if (enm.is_eof)
    635631                        break;
    636632        }
     
    646642        ER ret;
    647643
    648         switch(main_state){
     644        switch (main_state) {
    649645        case main_state_idle:
    650646                if (len < 2)
     
    670666static void main_timeout()
    671667{
    672         if(main_timer == 0){
     668        if (main_timer == 0) {
    673669                main_ontimer();
    674670        }
    675671
    676         if(main_btn_timer == 0){
     672        if (main_btn_timer == 0) {
    677673                main_btn_ontimer();
    678674        }
     
    683679static void main_ontimer()
    684680{
    685         switch(main_state){
     681        ER ret;
     682
     683        switch (main_state) {
     684        case main_state_start:
     685                /* ECHONETミドルウェアを起動 */
     686                ret = ecn_sta_svc();
     687                if (ret != E_OK) {
     688                        syslog(LOG_ERROR, "ecn_sta_svc");
     689                }
     690
     691                /* 1秒後に人体検知センサを検索 */
     692                main_state = main_state_search;
     693                main_timer = 1000 * 1000;
     694                break;
    686695        case main_state_search:
    687696                /* 人体検知センサ再検索 */
     
    700709        /* 人体検知センサ検索 */
    701710        ret = ecn_esv_inf_req(&esv, EOBJ_NULL, 0xD6);
    702         if(ret != E_OK){
     711        if (ret != E_OK) {
    703712                syslog(LOG_ERROR, "ecn_esv_inf_req");
    704713                return;
     
    707716        /* 電文送信 */
    708717        ret = ecn_snd_esv(esv);
    709         if(ret != E_OK){
     718        if (ret != E_OK) {
    710719                syslog(LOG_ERROR, "ecn_snd_esv");
    711720        }
     
    730739
    731740        /* ボタン1の処理 */
    732         if((btn1 != 0) && !main_btn1_state){
     741        if ((btn1 != 0) && !main_btn1_state) {
    733742                main_btn1_count++;
    734                 if(main_btn1_count > 10){
     743                if (main_btn1_count > 10) {
    735744                        main_btn1_count = 0;
    736745                        main_btn1_state = true;
     
    739748                }
    740749        }
    741         else if((btn1 == 0) && main_btn1_state){
     750        else if ((btn1 == 0) && main_btn1_state) {
    742751                main_btn1_count++;
    743                 if(main_btn1_count > 10){
     752                if (main_btn1_count > 10) {
    744753                        main_btn1_count = 0;
    745754                        main_btn1_state = false;
     
    750759
    751760        /* ボタン2の処理 */
    752         if((btn2 != 0) && !main_btn2_state){
     761        if ((btn2 != 0) && !main_btn2_state) {
    753762                main_btn2_count++;
    754                 if(main_btn2_count > 10){
     763                if (main_btn2_count > 10) {
    755764                        main_btn2_count = 0;
    756765                        main_btn2_state = true;
     
    759768                }
    760769        }
    761         else if((btn2 == 0) && main_btn2_state){
     770        else if ((btn2 == 0) && main_btn2_state) {
    762771                main_btn2_count++;
    763                 if(main_btn2_count > 10){
     772                if (main_btn2_count > 10) {
    764773                        main_btn2_count = 0;
    765774                        main_btn2_state = false;
     
    770779}
    771780
    772 enum lighting_mode_t{
     781enum lighting_mode_t {
    773782        lighting_mode_auto,             /* 自動の場合 */
    774783        lighting_mode_normal,   /* 通常灯の場合 */
     
    789798
    790799        /* 押されて戻った時に処理する */
    791         if(push)
     800        if (push)
    792801                return;
    793802
     
    798807        /* プロパティ設定電文作成 */
    799808        ret = ecn_esv_setc(&esv, GENERAL_LIGHTING_CLASS_EOBJ, 0x80, 1, p_edt);
    800         if(ret != E_OK){
     809        if (ret != E_OK) {
    801810                syslog(LOG_ERROR, "ecn_esv_setc");
    802811                return;
     
    817826
    818827        /* 押されて戻った時に処理する */
    819         if(push)
     828        if (push)
    820829                return;
    821830
    822831        /* 点灯モードの切り替え */
    823         switch(main_mode){
     832        switch (main_mode) {
    824833        /* 自動の場合 */
    825834        case lighting_mode_auto:
     
    851860        /* プロパティ設定電文作成 */
    852861        ret = ecn_esv_setc(&esv, GENERAL_LIGHTING_CLASS_EOBJ, 0xB6, 1, p_edt);
    853         if(ret != E_OK){
     862        if (ret != E_OK) {
    854863                syslog(LOG_ERROR, "ecn_esv_setc");
    855864                return;
     
    867876
    868877        /* 照明がOFFで人体検出ありの場合 */
    869         if(!main_on && state == 0x41){
     878        if (!main_on && state == 0x41) {
    870879                /* 照明をON */
    871880                main_on = true;
    872881        }
    873882        /* 照明がOFFで人体検出ありの場合 */
    874         else if(main_on && state == 0x42){
     883        else if (main_on && state == 0x42) {
    875884                /* 照明をOFF */
    876885                main_on = false;
     
    883892        /* プロパティ設定電文作成 */
    884893        ret = ecn_esv_setc(&esv, GENERAL_LIGHTING_CLASS_EOBJ, 0x80, 1, p_edt);
    885         if(ret != E_OK){
     894        if (ret != E_OK) {
    886895                syslog(LOG_ERROR, "ecn_esv_setc");
    887896                return;
Note: See TracChangeset for help on using the changeset viewer.