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/app7_buzzer/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 */
     
    106106{
    107107        /* サイズが1以外は受け付けない */
    108         if(size != 1)
     108        if (size != 1)
    109109                return 0;
    110110
    111111        *anno = *((uint8_t*)item->exinf) != *((uint8_t*)src);
    112112
    113         switch(*(uint8_t *)src){
     113        switch (*(uint8_t *)src) {
    114114        /* ONの場合 */
    115115        case 0x30:
     
    138138{
    139139        /* サイズが1以外は受け付けない */
    140         if(size != 1)
     140        if (size != 1)
    141141                return 0;
    142142
    143143        *anno = *((uint8_t *)item->exinf) != *((uint8_t *)src);
    144144
    145         switch(*(uint8_t *)src){
     145        switch (*(uint8_t *)src) {
    146146        /* 異常発生ありの場合 */
    147147        case 0x41:
     
    166166
    167167        /* サイズが1以外は受け付けない */
    168         if(size != 1)
    169                 return 0;
    170 
    171         switch(*(uint8_t *)src){
     168        if (size != 1)
     169                return 0;
     170
     171        switch (*(uint8_t *)src) {
    172172        /* 音発生有の場合 */
    173173        case 0x41:
     
    199199
    200200        /* サイズが1以外は受け付けない */
    201         if(size != 1)
     201        if (size != 1)
    202202                return 0;
    203203
     
    208208        data[1] = (*((uint8_t *)src) == 0x41) ? 0x01 : 0x00;
    209209        ret = ecn_brk_wai(data, sizeof(data));
    210         if(ret != E_OK){
     210        if (ret != E_OK) {
    211211                syslog(LOG_ERROR, "ecn_brk_wai");
    212212        }
     
    224224
    225225        /* サイズが1以外は受け付けない */
    226         if(size != 1)
     226        if (size != 1)
    227227                return 0;
    228228
     
    233233        data[1] = (*((uint8_t *)src) == 0x41) ? 0x01 : 0x00;
    234234        ret = ecn_brk_wai(data, sizeof(data));
    235         if(ret != E_OK){
     235        if (ret != E_OK) {
    236236                syslog(LOG_ERROR, "ecn_brk_wai");
    237237        }
     
    263263
    264264        ret2 = get_tim(&now);
    265         if (ret2 != E_OK){
     265        if (ret2 != E_OK) {
    266266                syslog(LOG_ERROR, "get_tim");
    267267                return;
    268268        }
    269269
    270         for(;;){
     270        for (;;) {
    271271                prev = now;
    272272
     
    276276                /* 応答電文待ち */
    277277                ret = ecn_trcv_esv(&esv, timer);
    278                 if ((ret != E_OK) && (ret != E_BRK) && (ret != E_TMOUT)){
     278                if ((ret != E_OK) && (ret != E_BRK) && (ret != E_TMOUT)) {
    279279                        syslog(LOG_ERROR, "ecn_trcv_esv");
    280280                        break;
     
    282282
    283283                ret2 = get_tim(&now);
    284                 if (ret2 != E_OK){
     284                if (ret2 != E_OK) {
    285285                        syslog(LOG_ERROR, "get_tim");
    286286                        break;
     
    297297                        /* 領域解放 */
    298298                        ret = ecn_rel_esv(esv);
    299                         if (ret != E_OK){
     299                        if (ret != E_OK) {
    300300                                syslog(LOG_ERROR, "ecn_rel_esv");
    301301                                break;
     
    306306                        /* 応答電文待ちの割り込みデータ取得 */
    307307                        ret = ecn_get_brk_dat(esv, brkdat, sizeof(brkdat), &len);
    308                         if (ret != E_OK){
     308                        if (ret != E_OK) {
    309309                                syslog(LOG_ERROR, "ecn_get_brk_dat");
    310310                                break;
     
    316316                        /* 領域解放 */
    317317                        ret = ecn_rel_esv(esv);
    318                         if (ret != E_OK){
     318                        if (ret != E_OK) {
    319319                                syslog(LOG_ERROR, "ecn_rel_esv");
    320320                                break;
     
    327327}
    328328
    329 bool_t started = false;
    330 
    331329void echonet_change_netif_link(uint8_t link_up, uint8_t up)
    332330{
     
    336334                return;
    337335
    338         if (up && !started) {
    339                 started = true;
    340 
    341                 /* ECHONETミドルウェアを起動 */
    342                 ret = ecn_sta_svc();
    343                 if (ret != E_OK)
    344                         return;
    345 
    346                 /* ECHONETミドルウェアを起動するのを待つ */
    347                 dly_tsk(100);
     336        if (up) {
     337                /* インスタンスリスト通知の送信 */
     338                ret = ecn_ntf_inl();
     339                if (ret != E_OK) {
     340                        syslog(LOG_ERROR, "ecn_ntf_inl");
     341                }
    348342        }
    349343
     
    351345        uint8_t data[2];
    352346        data[0] = 0x01;
    353         data[1] = up ? 0x01 : 0x02;
    354347        ret = ecn_brk_wai(data, sizeof(data));
    355348        if (ret != E_OK) {
     
    359352}
    360353
    361 enum main_state_t{
     354enum main_state_t {
     355        main_state_start,
    362356        main_state_idle,
    363357        main_state_search,
     
    366360
    367361int main_timer = TMO_FEVR;
    368 enum main_state_t main_state = main_state_idle;
     362enum main_state_t main_state = main_state_start;
    369363
    370364int main_nop_timer = TMO_FEVR;
     
    378372        sil_wrb_mem((uint8_t *)0x0008C02A, 0x00);
    379373
    380         /* 1秒後にブザーを検索 */
    381         main_state = main_state_search;
     374        /* ECHONETミドルウェアを起動するのを待つ */
     375        main_state = main_state_start;
    382376        main_timer = 1000 * 1000;
    383377
     378        /* メインタスクを起動 */
    384379        ER ret = act_tsk(MAIN_TASK);
    385380        if (ret != E_OK) {
     
    395390        int result = main_timer;
    396391
    397         if((result == TMO_FEVR)
    398                 || ((main_nop_timer != TMO_FEVR) && (main_nop_timer < result))){
     392        if ((result == TMO_FEVR)
     393                || ((main_nop_timer != TMO_FEVR) && (main_nop_timer < result))) {
    399394                result = main_nop_timer;
    400395        }
     
    408403static void main_progress(int interval)
    409404{
    410         if(main_timer != TMO_FEVR){
     405        if (main_timer != TMO_FEVR) {
    411406                main_timer -= interval;
    412                 if(main_timer < 0){
     407                if (main_timer < 0) {
    413408                        main_timer = 0;
    414409                }
    415410        }
    416411
    417         if(main_nop_timer != TMO_FEVR){
     412        if (main_nop_timer != TMO_FEVR) {
    418413                main_nop_timer -= interval;
    419                 if(main_nop_timer < 0){
     414                if (main_nop_timer < 0) {
    420415                        main_nop_timer = 0;
    421416                }
     
    436431
    437432        eobjid = ecn_get_eobj(esv);
    438         if(eobjid == EOBJ_NULL){
     433        if (eobjid == EOBJ_NULL) {
    439434                syslog(LOG_ERROR, "ecn_get_eobj");
    440435                return;
     
    442437
    443438        ret = ecn_itr_ini(&enm, esv);
    444         if(ret != E_OK){
     439        if (ret != E_OK) {
    445440                syslog(LOG_ERROR, "ecn_itr_ini");
    446441                return;
    447442        }
    448443
    449         for(;;) {
    450                 while((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) {
     444        for (;;) {
     445                while ((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) {
    451446                        switch (epc) {
    452447                        case 0xD6:
    453                                 switch(main_state){
     448                                switch (main_state) {
    454449                                case main_state_search:
    455450                                        if (eobjid == POT_NODE_EOBJ) {
     
    463458                        }
    464459                }
    465                 if(ret != E_BOVR){
     460                if (ret != E_BOVR) {
    466461                        syslog(LOG_ERROR, "ecn_itr_nxt");
    467462                        break;
    468463                }
    469                 if(enm.is_eof)
     464                if (enm.is_eof)
    470465                        break;
    471466        }
     
    478473        uint8_t p_edt[1];
    479474
    480         switch(main_state){
     475        switch (main_state) {
    481476        case main_state_idle:
    482477                p_edt[0] = 0x41; /* 音発生有 */
     
    484479                /* プロパティ設定電文作成 */
    485480                ret = ecn_esv_seti(&esv, BUZZER_EOBJ, 0xB1, 1, p_edt);
    486                 if(ret != E_OK){
     481                if (ret != E_OK) {
    487482                        syslog(LOG_ERROR, "ecn_esv_seti");
    488483                        break;
     
    491486                /* 電文送信 */
    492487                ecn_snd_esv(esv);
    493                 if(ret != E_OK){
     488                if (ret != E_OK) {
    494489                        syslog(LOG_ERROR, "ecn_snd_esv");
    495490                        break;
     
    511506        uint8_t p_edt[1];
    512507
    513         switch(main_state){
     508        switch (main_state) {
    514509        case main_state_buzzer_on:
    515510                p_edt[0] = 0x42; /* 音発生無 */
     
    517512                /* プロパティ設定電文作成 */
    518513                ret = ecn_esv_seti(&esv, BUZZER_EOBJ, 0xB1, 1, p_edt);
    519                 if(ret != E_OK){
     514                if (ret != E_OK) {
    520515                        syslog(LOG_ERROR, "ecn_esv_seti");
    521516                        break;
     
    524519                /* 電文送信 */
    525520                ecn_snd_esv(esv);
    526                 if(ret != E_OK){
     521                if (ret != E_OK) {
    527522                        syslog(LOG_ERROR, "ecn_snd_esv");
    528523                        break;
     
    545540        }
    546541
    547         if(len < 2)
    548                 return;
    549 
    550         switch(brkdat[0]){
     542        if (len < 2)
     543                return;
     544
     545        switch (brkdat[0]) {
    551546        case 0x01:
    552                 if(brkdat[1] != 0)
     547                if (brkdat[1] != 0)
    553548                        main_buzzer_on();
    554549                else
     
    556551                break;
    557552        case 0x02:
    558                 if(brkdat[1] == 0)
     553                if (brkdat[1] == 0)
    559554                        main_nop_timer = 5000 * 1000; /* 5秒後にブザーON */
    560555                break;
     
    570565static void main_timeout()
    571566{
    572         if(main_timer == 0){
     567        if (main_timer == 0) {
    573568                main_ontimer();
    574569        }
    575570
    576         if(main_nop_timer == 0){
     571        if (main_nop_timer == 0) {
    577572                main_nop_timeout();
    578573        }
     
    583578static void main_ontimer()
    584579{
    585         switch (main_state)
    586         {
     580        ER ret;
     581
     582        switch (main_state) {
     583        case main_state_start:
     584                /* ECHONETミドルウェアを起動 */
     585                ret = ecn_sta_svc();
     586                if (ret != E_OK) {
     587                        syslog(LOG_ERROR, "ecn_sta_svc");
     588                }
     589
     590                /* 1秒後にブザーを検索 */
     591                main_state = main_state_search;
     592                main_timer = 1000 * 1000;
     593                break;
    587594        case main_state_search:
    588595                /* 電気ポット再検索 */
     
    608615        /* 電気ポット検索 */
    609616        ret = ecn_esv_inf_req(&esv, EOBJ_NULL, 0xD6);
    610         if(ret != E_OK){
     617        if (ret != E_OK) {
    611618                syslog(LOG_ERROR, "ecn_esv_inf_req");
    612619                return;
     
    615622        /* 電文送信 */
    616623        ret = ecn_snd_esv(esv);
    617         if(ret != E_OK){
     624        if (ret != E_OK) {
    618625                syslog(LOG_ERROR, "ecn_snd_esv");
    619626        }
Note: See TracChangeset for help on using the changeset viewer.