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

TINETとSocket APIなどを更新

File:
1 edited

Legend:

Unmodified
Added
Removed
  • asp3_tinet_ecnl_rx/trunk/app3_human_detec/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 */
     
    8585{
    8686        /* サイズが1以外は受け付けない */
    87         if(size != 1)
     87        if (size != 1)
    8888                return 0;
    8989
    9090        *anno = *((uint8_t *)item->exinf) != *((uint8_t *)src);
    9191
    92         switch(*(uint8_t *)src){
     92        switch (*(uint8_t *)src) {
    9393        /* ONの場合 */
    9494        case 0x30:
     
    117117{
    118118        /* サイズが1以外は受け付けない */
    119         if(size != 1)
     119        if (size != 1)
    120120                return 0;
    121121
    122122        *anno = *((uint8_t *)item->exinf) != *((uint8_t *)src);
    123123
    124         switch(*(uint8_t *)src){
     124        switch (*(uint8_t *)src) {
    125125        /* 異常発生ありの場合 */
    126126        case 0x41:
     
    143143{
    144144        /* サイズが1以外は受け付けない */
    145         if(size != 1)
    146                 return 0;
    147 
    148         if((*(uint8_t *)src >= 0x31) && (*(uint8_t *)src <= 0x38)){
     145        if (size != 1)
     146                return 0;
     147
     148        if ((*(uint8_t *)src >= 0x31) && (*(uint8_t *)src <= 0x38)) {
    149149                *((uint8_t *)item->exinf) = *((uint8_t *)src);
    150150        }
    151151        /* 上記以外は受け付けない */
    152         else{
     152        else {
    153153                return 0;
    154154        }
     
    171171
    172172        /* サイズが1以外は受け付けない */
    173         if(size != 1)
     173        if (size != 1)
    174174                return 0;
    175175
    176176        *anno = false;
    177177
    178         if((*(uint8_t *)src >= 0x31) && (*(uint8_t *)src <= 0x38)){
     178        if ((*(uint8_t *)src >= 0x31) && (*(uint8_t *)src <= 0x38)) {
    179179                /* 以前の検知レベルを保存 */
    180180                prev_state = eobj->state;
     
    185185
    186186                /* 人体検知状態に変化があった場合 */
    187                 if((prev_state < eobj->threshold) != (eobj->state < eobj->threshold))
    188                 {
     187                if ((prev_state < eobj->threshold) != (eobj->state < eobj->threshold)) {
    189188                        /* プロパティ通知 */
    190189                        *anno = true;
     
    192191        }
    193192        /* 上記以外は受け付けない */
    194         else{
     193        else {
    195194                return 0;
    196195        }
     
    199198}
    200199
    201 /* 
     200/*
    202201 * 人体検知状態取得関数
    203202 */
     
    207206
    208207        /* 閾値より検知レベルが低い場合 */
    209         if(eobj->state < eobj->threshold){
     208        if (eobj->state < eobj->threshold) {
    210209                /* 人体検知なし */
    211210                ((uint8_t *)dst)[0] = 0x42;
    212211        }
    213212        /* 閾値より検知レベルが高い場合 */
    214         else{
     213        else {
    215214                /* 人体検知あり */
    216215                ((uint8_t *)dst)[0] = 0x41;
     
    243242
    244243        ret2 = get_tim(&now);
    245         if (ret2 != E_OK){
     244        if (ret2 != E_OK) {
    246245                syslog(LOG_ERROR, "get_tim");
    247246                return;
    248247        }
    249248
    250         for(;;){
     249        for (;;) {
    251250                prev = now;
    252251
     
    256255                /* 応答電文待ち */
    257256                ret = ecn_trcv_esv(&esv, timer);
    258                 if ((ret != E_OK) && (ret != E_BRK) && (ret != E_TMOUT)){
     257                if ((ret != E_OK) && (ret != E_BRK) && (ret != E_TMOUT)) {
    259258                        syslog(LOG_ERROR, "ecn_trcv_esv");
    260259                        break;
     
    262261
    263262                ret2 = get_tim(&now);
    264                 if (ret2 != E_OK){
     263                if (ret2 != E_OK) {
    265264                        syslog(LOG_ERROR, "get_tim");
    266265                        break;
     
    277276                        /* 領域解放 */
    278277                        ret = ecn_rel_esv(esv);
    279                         if (ret != E_OK){
     278                        if (ret != E_OK) {
    280279                                syslog(LOG_ERROR, "ecn_rel_esv");
    281280                                break;
     
    286285                        /* 応答電文待ちの割り込みデータ取得 */
    287286                        ret = ecn_get_brk_dat(esv, brkdat, sizeof(brkdat), &len);
    288                         if (ret != E_OK){
     287                        if (ret != E_OK) {
    289288                                syslog(LOG_ERROR, "ecn_get_brk_dat");
    290289                                break;
     
    296295                        /* 領域解放 */
    297296                        ret = ecn_rel_esv(esv);
    298                         if (ret != E_OK){
     297                        if (ret != E_OK) {
    299298                                syslog(LOG_ERROR, "ecn_rel_esv");
    300299                                break;
     
    307306}
    308307
    309 bool_t started = false;
    310 
    311308void echonet_change_netif_link(uint8_t link_up, uint8_t up)
    312309{
     
    316313                return;
    317314
    318         if (up && !started) {
    319                 started = true;
    320 
    321                 /* ECHONETミドルウェアを起動 */
    322                 ret = ecn_sta_svc();
    323                 if (ret != E_OK)
    324                         return;
    325 
    326                 /* ECHONETミドルウェアを起動するのを待つ */
    327                 dly_tsk(100);
     315        if (up) {
     316                /* インスタンスリスト通知の送信 */
     317                ret = ecn_ntf_inl();
     318                if (ret != E_OK) {
     319                        syslog(LOG_ERROR, "ecn_ntf_inl");
     320                }
    328321        }
    329322
     
    339332}
    340333
    341 enum main_state_t{
     334enum main_state_t {
     335        main_state_start,
    342336        main_state_idle,
    343337};
    344338
    345339int main_timer = TMO_FEVR;
    346 enum main_state_t main_state = main_state_idle;
     340enum main_state_t main_state = main_state_start;
    347341bool_t main_btn1_state;
    348342int main_btn1_count = 0;
     
    368362        sil_wrb_mem((uint8_t *)0x0008C02A, 0x00);
    369363
    370         /* 10ms後にボタン状態を確認 */
    371         main_timer = 10 * 1000;
     364        /* ECHONETミドルウェアを起動するのを待つ */
     365        main_state = main_state_start;
     366        main_timer = 1000 * 1000;
    372367
    373368        /* 12bitADC初期化 */
     
    382377        main_btn2_state = (btn2 & 0x80) != 0;
    383378
     379        /* メインタスクを起動 */
    384380        ER ret = act_tsk(MAIN_TASK);
    385381        if (ret != E_OK) {
     
    401397static void main_progress(int interval)
    402398{
    403         if(main_timer == TMO_FEVR)
     399        if (main_timer == TMO_FEVR)
    404400                return;
    405401
    406402        main_timer -= interval;
    407         if(main_timer < 0){
     403        if (main_timer < 0) {
    408404                main_timer = 0;
    409405        }
     
    422418
    423419        ret = ecn_itr_ini(&enm, esv);
    424         if(ret != E_OK){
     420        if (ret != E_OK) {
    425421                syslog(LOG_ERROR, "ecn_itr_ini");
    426422                return;
    427423        }
    428424
    429         for(;;) {
    430                 while((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) {
     425        for (;;) {
     426                while ((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) {
    431427                        switch (epc) {
    432428                        case 0x80:
     
    436432                        }
    437433                }
    438                 if(ret != E_BOVR){
     434                if (ret != E_BOVR) {
    439435                        syslog(LOG_ERROR, "ecn_itr_nxt");
    440436                        break;
    441437                }
    442                 if(enm.is_eof)
     438                if (enm.is_eof)
    443439                        break;
    444440        }
     
    450446static void main_break_wait(uint8_t *brkdat, int32_t len)
    451447{
    452         switch(main_state){
     448        switch (main_state) {
    453449        case main_state_idle:
    454450                break;
     
    472468static void main_timeout()
    473469{
     470        ER ret;
    474471        uint8_t btn1, btn2;
    475472        uint16_t ad_value;
    476473        uint8_t ad_level;
    477474
    478         if(main_timer != 0)
    479                 return;
    480 
    481         switch(main_state){
     475        if (main_timer != 0)
     476                return;
     477
     478        switch (main_state) {
     479        case main_state_start:
     480                /* ECHONETミドルウェアを起動 */
     481                ret = ecn_sta_svc();
     482                if (ret != E_OK) {
     483                        syslog(LOG_ERROR, "ecn_sta_svc");
     484                }
     485
     486                /* 10ms後にボタン状態を確認 */
     487                main_state = main_state_idle;
     488                main_timer = 10 * 1000;
     489                break;
    482490        case main_state_idle:
    483491                /* 10ms後にボタン状態を確認 */
     
    485493
    486494                /* ADCの変換結果取得 */
    487                 if((sil_reb_mem((uint8_t *)S12AD_ADCSR_ADDR) & S12AD_ADCSR_ADST_BIT) == 0){
     495                if ((sil_reb_mem((uint8_t *)S12AD_ADCSR_ADDR) & S12AD_ADCSR_ADST_BIT) == 0) {
    488496                        main_ad_avelage -= main_ad_table[main_ad_pos];
    489497                        ad_value = sil_reh_mem((uint16_t *)S12AD_ADDR0_ADDR);
     
    492500
    493501                        main_ad_pos++;
    494                         if(main_ad_pos >= main_ad_table_count){
     502                        if (main_ad_pos >= main_ad_table_count) {
    495503                                main_ad_pos = 0;
    496504                        }
    497505
    498506                        ad_level = (((main_ad_avelage / main_ad_table_count) >> 9) & 0x7) + 1;
    499                         if(main_ad_level != ad_level){
     507                        if (main_ad_level != ad_level) {
    500508                                /* 1秒変化が続いたら */
    501                                 if(main_count < 100){
     509                                if (main_count < 100) {
    502510                                        main_count++;
    503511                                }
    504                                 else{
     512                                else {
    505513                                        main_ad_level = ad_level;
    506514
     
    509517                                }
    510518                        }
    511                         else{
     519                        else {
    512520                                main_count = 0;
    513521                        }
     
    518526
    519527                /* ボタン状態読み込み */
    520                 btn1 = sil_reb_mem((uint8_t *) 0x0008C04A);
    521                 btn2 = sil_reb_mem((uint8_t *) 0x0008C040);
     528                btn1 = sil_reb_mem((uint8_t *)0x0008C04A);
     529                btn2 = sil_reb_mem((uint8_t *)0x0008C040);
    522530
    523531                /* ボタン1の処理 */
    524                 if(((btn1 & 0x80) != 0) && !main_btn1_state){
     532                if (((btn1 & 0x80) != 0) && !main_btn1_state) {
    525533                        main_btn1_count++;
    526                         if(main_btn1_count > 10){
     534                        if (main_btn1_count > 10) {
    527535                                main_btn1_count = 0;
    528536                                main_btn1_state = true;
     
    531539                        }
    532540                }
    533                 else if(((btn1 & 0x80) == 0) && main_btn1_state){
     541                else if (((btn1 & 0x80) == 0) && main_btn1_state) {
    534542                        main_btn1_count++;
    535                         if(main_btn1_count > 10){
     543                        if (main_btn1_count > 10) {
    536544                                main_btn1_count = 0;
    537545                                main_btn1_state = false;
     
    542550
    543551                /* ボタン2の処理 */
    544                 if(((btn2 & 0x80) != 0) && !main_btn2_state){
     552                if (((btn2 & 0x80) != 0) && !main_btn2_state) {
    545553                        main_btn2_count++;
    546                         if(main_btn2_count > 10){
     554                        if (main_btn2_count > 10) {
    547555                                main_btn2_count = 0;
    548556                                main_btn2_state = true;
     
    551559                        }
    552560                }
    553                 else if(((btn2 & 0x80) == 0) && main_btn2_state){
     561                else if (((btn2 & 0x80) == 0) && main_btn2_state) {
    554562                        main_btn2_count++;
    555                         if(main_btn2_count > 10){
     563                        if (main_btn2_count > 10) {
    556564                                main_btn2_count = 0;
    557565                                main_btn2_state = false;
     
    577585        /* プロパティ設定電文作成 */
    578586        ret = ecn_esv_setc(&esv, HUMAN_DETECTION_SENSOR_EOBJ, 0xB1, 1, p_edt);
    579         if(ret != E_OK){
     587        if (ret != E_OK) {
    580588                syslog(LOG_ERROR, "ecn_esv_setc");
    581589                return;
     
    599607
    600608        /* 押されて戻った時に処理する */
    601         if(push)
     609        if (push)
    602610                return;
    603611
    604612        /* 人体検知状態 */
    605         if(!main_rev){
     613        if (!main_rev) {
    606614                main_level--;
    607                 if(main_level < 1){
     615                if (main_level < 1) {
    608616                        main_level = 1;
    609617                        main_rev = true;
    610618                }
    611619        }
    612         else{
     620        else {
    613621                main_level++;
    614                 if(main_level > 8){
     622                if (main_level > 8) {
    615623                        main_level = 8;
    616624                        main_rev = false;
     
    622630        /* プロパティ設定電文作成 */
    623631        ret = ecn_esv_setc(&esv, HUMAN_DETECTION_SENSOR_EOBJ, 0xB1, 1, p_edt);
    624         if(ret != E_OK){
     632        if (ret != E_OK) {
    625633                syslog(LOG_ERROR, "ecn_esv_setc");
    626634                return;
     
    641649
    642650        /* 押されて戻った時に処理する */
    643         if(push)
     651        if (push)
    644652                return;
    645653
    646654        /* 人体検知状態 */
    647         if(!main_rev){
     655        if (!main_rev) {
    648656                main_level++;
    649                 if(main_level > 8){
     657                if (main_level > 8) {
    650658                        main_level = 8;
    651659                        main_rev = false;
    652660                }
    653661        }
    654         else{
     662        else {
    655663                main_level--;
    656                 if(main_level < 1){
     664                if (main_level < 1) {
    657665                        main_level = 1;
    658666                        main_rev = true;
     
    664672        /* プロパティ設定電文作成 */
    665673        ret = ecn_esv_setc(&esv, HUMAN_DETECTION_SENSOR_EOBJ, 0xB1, 1, p_edt);
    666         if(ret != E_OK){
     674        if (ret != E_OK) {
    667675                syslog(LOG_ERROR, "ecn_esv_setc");
    668676                return;
Note: See TracChangeset for help on using the changeset viewer.