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/app1_usb_watt_meter/src/echonet_main.c

    r351 r364  
    11/*
    22 *  TOPPERS ECHONET Lite Communication Middleware
    3  * 
     3 *
    44 *  Copyright (C) 2016-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 */
     
    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        /* ONの場合 */
    161161        case 0x30:
     
    184184{
    185185        /* サイズが1以外は受け付けない */
    186         if(size != 1)
     186        if (size != 1)
    187187                return 0;
    188188
    189189        *anno = *((uint8_t *)item->exinf) != *((uint8_t *)src);
    190190
    191         switch(*(uint8_t *)src){
     191        switch (*(uint8_t *)src) {
    192192        /* 異常発生ありの場合 */
    193193        case 0x41:
     
    288288
    289289        /* サイズが4以外は受け付けない */
    290         if(size != 4)
     290        if (size != 4)
    291291                return 0;
    292292
     
    308308
    309309        len = 48 - meter->current_pos;
    310         if(len > 0)
     310        if (len > 0)
    311311                memcpy(dst, &meter->integral_electric_energy_measurement_log[meter->current_pos], sizeof(uint32_t) * len);
    312312        dst = &((uint8_t *)dst)[len];
     
    367367
    368368        ret2 = get_tim(&now);
    369         if (ret2 != E_OK){
     369        if (ret2 != E_OK) {
    370370                syslog(LOG_ERROR, "get_tim");
    371371                return;
    372372        }
    373373
    374         for(;;){
     374        for (;;) {
    375375                prev = now;
    376376
     
    380380                /* 応答電文待ち */
    381381                ret = ecn_trcv_esv(&esv, timer);
    382                 if ((ret != E_OK) && (ret != E_BRK) && (ret != E_TMOUT)){
     382                if ((ret != E_OK) && (ret != E_BRK) && (ret != E_TMOUT)) {
    383383                        syslog(LOG_ERROR, "ecn_trcv_esv");
    384384                        break;
     
    386386
    387387                ret2 = get_tim(&now);
    388                 if (ret2 != E_OK){
     388                if (ret2 != E_OK) {
    389389                        syslog(LOG_ERROR, "get_tim");
    390390                        break;
     
    401401                        /* 領域解放 */
    402402                        ret = ecn_rel_esv(esv);
    403                         if (ret != E_OK){
     403                        if (ret != E_OK) {
    404404                                syslog(LOG_ERROR, "ecn_rel_esv");
    405405                                break;
     
    410410                        /* 応答電文待ちの割り込みデータ取得 */
    411411                        ret = ecn_get_brk_dat(esv, brkdat, sizeof(brkdat), &len);
    412                         if (ret != E_OK){
     412                        if (ret != E_OK) {
    413413                                syslog(LOG_ERROR, "ecn_get_brk_dat");
    414414                                break;
     
    420420                        /* 領域解放 */
    421421                        ret = ecn_rel_esv(esv);
    422                         if (ret != E_OK){
     422                        if (ret != E_OK) {
    423423                                syslog(LOG_ERROR, "ecn_rel_esv");
    424424                                break;
     
    431431}
    432432
    433 bool_t started = false;
    434 
    435433void echonet_change_netif_link(uint8_t link_up, uint8_t up)
    436434{
     
    440438                return;
    441439
    442         if (up && !started) {
    443                 started = true;
    444 
    445                 /* ECHONETミドルウェアを起動 */
    446                 ret = ecn_sta_svc();
    447                 if (ret != E_OK)
    448                         return;
    449 
    450                 /* ECHONETミドルウェアを起動するのを待つ */
    451                 dly_tsk(100);
     440        if (up) {
     441                /* インスタンスリスト通知の送信 */
     442                ret = ecn_ntf_inl();
     443                if (ret != E_OK) {
     444                        syslog(LOG_ERROR, "ecn_ntf_inl");
     445                }
    452446        }
    453447
     
    463457}
    464458
    465 enum main_state_t{
     459enum main_state_t {
     460        main_state_start,
    466461        main_state_idle,
    467462};
    468463
    469464int main_timer = TMO_FEVR;
    470 enum main_state_t main_state = main_state_idle;
    471 int main_led_timer = TMO_FEVR;
     465enum main_state_t main_state = main_state_start;
     466int main_lcd_timer = TMO_FEVR;
    472467int main_adv_timer = TMO_FEVR;
    473468int main_whm_counter;
     
    508503
    509504        /* 3ms後に7SEG表示を更新 */
    510         main_led_timer = 3 * 1000;
    511 
    512         /* 10ms後にボタン状態を確認 */
    513         main_timer = 10 * 1000;
     505        main_lcd_timer = 3 * 1000;
     506
     507        /* ECHONETミドルウェアを起動するのを待つ */
     508        main_state = main_state_start;
     509        main_timer = 1000 * 1000;
    514510
    515511        /* 12bitADC初期化 */
     
    526522        main_adv_timer = 1000 * 1000;
    527523
     524        /* メインタスクを起動 */
    528525        ER ret = act_tsk(MAIN_TASK);
    529526        if (ret != E_OK) {
     
    539536        int result = main_timer;
    540537
    541         if((result == TMO_FEVR)
    542                 || ((main_led_timer != TMO_FEVR) && (main_led_timer < result))){
    543                 result = main_led_timer;
     538        if ((result == TMO_FEVR)
     539                || ((main_lcd_timer != TMO_FEVR) && (main_lcd_timer < result))) {
     540                result = main_lcd_timer;
    544541        }
    545542
     
    557554static void main_progress(int interval)
    558555{
    559         if(main_timer != TMO_FEVR){
     556        if (main_timer != TMO_FEVR) {
    560557                main_timer -= interval;
    561                 if(main_timer < 0){
     558                if (main_timer < 0) {
    562559                        main_timer = 0;
    563560                }
    564561        }
    565562
    566         if(main_led_timer != TMO_FEVR){
    567                 main_led_timer -= interval;
    568                 if(main_led_timer < 0){
    569                         main_led_timer = 0;
     563        if (main_lcd_timer != TMO_FEVR) {
     564                main_lcd_timer -= interval;
     565                if (main_lcd_timer < 0) {
     566                        main_lcd_timer = 0;
    570567                }
    571568        }
     
    591588
    592589        ret = ecn_itr_ini(&enm, esv);
    593         if(ret != E_OK){
     590        if (ret != E_OK) {
    594591                syslog(LOG_ERROR, "ecn_itr_ini");
    595592                return;
    596593        }
    597594
    598         for(;;) {
    599                 while((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) {
     595        for (;;) {
     596                while ((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) {
    600597                        switch (epc) {
    601598                        case 0x80:
     
    605602                        }
    606603                }
    607                 if(ret != E_BOVR){
     604                if (ret != E_BOVR) {
    608605                        syslog(LOG_ERROR, "ecn_itr_nxt");
    609606                        break;
    610607                }
    611                 if(enm.is_eof)
     608                if (enm.is_eof)
    612609                        break;
    613610        }
     
    619616static void main_break_wait(uint8_t *brkdat, int32_t len)
    620617{
    621         switch(main_state){
     618        switch (main_state) {
    622619        case main_state_idle:
    623620                if (len == 0)
     
    638635
    639636static void main_ontimer();
    640 static void main_led_ontimer();
     637static void main_lcd_ontimer();
    641638static void main_adv_ontimer();
    642639
     
    646643static void main_timeout()
    647644{
    648         if(main_timer == 0){
     645        if (main_timer == 0) {
    649646                main_ontimer();
    650647        }
    651648
    652         if(main_led_timer == 0){
    653                 main_led_ontimer();
     649        if (main_lcd_timer == 0) {
     650                main_lcd_ontimer();
    654651        }
    655652
     
    664661const uint8_t led_disp[] = { 0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE4, 0xFE, 0xF6, 0xEE, 0x3E, 0x1A, 0x7A, 0x9E, 0x8E };
    665662
    666 static void main_led_ontimer()
     663static void main_lcd_ontimer()
    667664{
    668665        /* 7Seg表示 */
     
    697694
    698695        /* 3ms後に7SEG表示を更新 */
    699         main_led_timer = 3 * 1000;
     696        main_lcd_timer = 3 * 1000;
    700697}
    701698
     
    727724static void main_ontimer()
    728725{
     726        ER ret;
    729727        uint8_t btn;
    730728        uint16_t ad_value;
    731729
    732         switch(main_state){
     730        switch (main_state) {
     731        case main_state_start:
     732                /* ECHONETミドルウェアを起動 */
     733                ret = ecn_sta_svc();
     734                if (ret != E_OK) {
     735                        syslog(LOG_ERROR, "ecn_sta_svc");
     736                }
     737
     738                /* 10ms後にボタン状態を確認 */
     739                main_state = main_state_idle;
     740                main_timer = 10 * 1000;
     741                break;
    733742        case main_state_idle:
    734743                /* 10ms後にボタン状態を確認 */
     
    736745
    737746                /* ADCの変換結果取得 */
    738                 if((sil_reb_mem((uint8_t *)S12AD_ADCSR_ADDR) & S12AD_ADCSR_ADST_BIT) == 0){
     747                if ((sil_reb_mem((uint8_t *)S12AD_ADCSR_ADDR) & S12AD_ADCSR_ADST_BIT) == 0) {
    739748                        for (int i = 0; i < main_ad_count; i++) {
    740749                                main_ad_avelage[i] -= main_ad_table[i][main_ad_pos];
     
    776785
    777786                /* ボタン1の処理 */
    778                 if(((btn & 0x20) != 0) && !main_btn1_state){
     787                if (((btn & 0x20) != 0) && !main_btn1_state) {
    779788                        main_btn1_count++;
    780                         if(main_btn1_count > 10){
     789                        if (main_btn1_count > 10) {
    781790                                main_btn1_count = 0;
    782791                                main_btn1_state = true;
     
    785794                        }
    786795                }
    787                 else if(((btn & 0x20) == 0) && main_btn1_state){
     796                else if (((btn & 0x20) == 0) && main_btn1_state) {
    788797                        main_btn1_count++;
    789                         if(main_btn1_count > 10){
     798                        if (main_btn1_count > 10) {
    790799                                main_btn1_count = 0;
    791800                                main_btn1_state = false;
     
    796805
    797806                /* ボタン2の処理 */
    798                 if(((btn & 0x80) != 0) && !main_btn2_state){
     807                if (((btn & 0x80) != 0) && !main_btn2_state) {
    799808                        main_btn2_count++;
    800                         if(main_btn2_count > 10){
     809                        if (main_btn2_count > 10) {
    801810                                main_btn2_count = 0;
    802811                                main_btn2_state = true;
     
    805814                        }
    806815                }
    807                 else if(((btn & 0x80) == 0) && main_btn2_state){
     816                else if (((btn & 0x80) == 0) && main_btn2_state) {
    808817                        main_btn2_count++;
    809                         if(main_btn2_count > 10){
     818                        if (main_btn2_count > 10) {
    810819                                main_btn2_count = 0;
    811820                                main_btn2_state = false;
     
    829838{
    830839        /* 押されて戻った時に処理する */
    831         if(push)
     840        if (push)
    832841                return;
    833842
    834843        /* 表示ポート番号 */
    835         if(!main_rev){
     844        if (!main_rev) {
    836845                main_port_no--;
    837                 if(main_port_no < 1){
     846                if (main_port_no < 1) {
    838847                        main_port_no = 1;
    839848                        main_rev = true;
     
    841850                }
    842851        }
    843         else{
     852        else {
    844853                main_port_no++;
    845                 if(main_port_no > main_ad_count){
     854                if (main_port_no > main_ad_count) {
    846855                        main_port_no = main_ad_count;
    847856                        main_rev = false;
     
    857866{
    858867        /* 押されて戻った時に処理する */
    859         if(push)
     868        if (push)
    860869                return;
    861870
     
    866875
    867876        /* 表示ポート番号 */
    868         if(!main_rev){
     877        if (!main_rev) {
    869878                main_port_no++;
    870                 if(main_port_no > main_ad_count){
     879                if (main_port_no > main_ad_count) {
    871880                        main_port_no = main_ad_count;
    872881                        main_rev = false;
     
    874883                }
    875884        }
    876         else{
     885        else {
    877886                main_port_no--;
    878                 if(main_port_no < 1){
     887                if (main_port_no < 1) {
    879888                        main_port_no = 1;
    880889                        main_rev = true;
     
    893902
    894903        main_port_no++;
    895         if(main_port_no > main_ad_count)
     904        if (main_port_no > main_ad_count)
    896905                main_port_no = 1;
    897906
Note: See TracChangeset for help on using the changeset viewer.