Ignore:
Timestamp:
Aug 23, 2017, 9:27:43 AM (7 years ago)
Author:
coas-nagasima
Message:

文字コードを設定

File:
1 edited

Legend:

Unmodified
Added
Removed
  • EcnlProtoTool/trunk/mrbgems/mruby-ecnl/src/echonet_lcl_task.c

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-csrc to text/x-csrc;charset=UTF-8
    r270 r321  
    44 *  Copyright (C) 2014-2016 Cores Co., Ltd. Japan
    55 *
    6  *  上記著作権è€
    7 ã¯ï¼Œä»¥ä¸‹ã®(1)~(4)の条件を満たす場合に限り,本ソフトウェ
    8  *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
    9  *  変・再é
    10 å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
    11  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    12  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    13  *      スコード中に含まれていること.
    14  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    15  *      用できる形で再é
    16 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    17 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    18  *      è€
    19 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    20  *      の無保証規定を掲載すること.
    21  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    22  *      用できない形で再é
    23 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
    24  *      と.
    25  *    (a) 再é
    26 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    27 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    28  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    29  *    (b) 再é
    30 å¸ƒã®å½¢æ
    31 ‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
    32  *        報告すること.
    33  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    34  *      害からも,上記著作権è€
    35 ãŠã‚ˆã³TOPPERSプロジェクトをå
    36 è²¬ã™ã‚‹ã“と.
    37  *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
    38  *      由に基づく請求からも,上記著作権è€
    39 ãŠã‚ˆã³TOPPERSプロジェクトを
    40  *      å
    41 è²¬ã™ã‚‹ã“と.
     6 *  上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
     7 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     8 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     9 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     10 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     11 *      スコード中に含まれていること.
     12 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     13 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     14 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     15 *      の無保証規定を掲載すること.
     16 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     17 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     18 *      と.
     19 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     20 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     21 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     22 *        報告すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     25 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     26 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     27 *      免責すること.
    4228 *
    43  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    44 ãŠ
    45  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    46  *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
    47  *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
    48  *  の責任を負わない.
     29 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     30 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     31 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     32 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     33 *  の責任を負わない.
    4934 *
    5035 */
    5136
    5237/*
    53  *              ECHONET Lite LCL通信処理タスク
     38 *              ECHONET Lite LCL通信処理タスク
    5439 */
    5540
     
    9075
    9176/*
    92  * 受信したLCLデータをMAILBOXに送る
     77 * 受信したLCLデータをMAILBOXに送る
    9378 */
    9479ER _ecn_lcl2mbx(ecnl_svc_task_t *svc, const uint8_t *buffer, size_t fa_len, const mrb_value dst);
     
    10691
    10792        a_rcv_pkt.buffer = buffer;
    108         if (    a_rcv_pkt.t_esv->ecn_hdr.ehd1 != ECN_EDH1_ECHONET_LITE  /* ECHONET Lite規格   */
    109         ||      a_rcv_pkt.t_esv->ecn_hdr.ehd2 != ECN_EDH2_FORMAT_1                      /* 電文形式1                */) {
     93        if (    a_rcv_pkt.t_esv->ecn_hdr.ehd1 != ECN_EDH1_ECHONET_LITE  /* ECHONET Lite規格       */
     94        ||      a_rcv_pkt.t_esv->ecn_hdr.ehd2 != ECN_EDH2_FORMAT_1                      /* 電文形式1                */) {
    11095                ECN_DBG_PUT_2("[LCL ECHO SRV] illegal type (0x%02X,0x%02X)", a_rcv_pkt.t_esv->ecn_hdr.ehd1, a_rcv_pkt.t_esv->ecn_hdr.ehd2);
    11196                return E_PAR;
     
    130115        a_fbs_id.ptr->hdr.sender.id = ENOD_NOT_MATCH_ID;
    131116
    132         /* 通信レイヤーアドレスからリモートECHONETノードへ変換 */
     117        /* 通信レイヤーアドレスからリモートECHONETノードへ変換 */
    133118        a_enod_id = lcl_get_id(svc, (T_EDATA *)a_fbs_id.ptr, dst);
    134119        if (!lcl_is_valid_addrid(svc, a_enod_id)) {
     
    136121                        ip2str(NULL, &dst->lcladdr));
    137122        } else {
    138                 /* 送信å
    139 ƒECHONETノードを記録 */
     123                /* 送信元ECHONETノードを記録 */
    140124                a_fbs_id.ptr->hdr.sender.id = a_enod_id;
    141125        }
    142126        a_fbs_id.ptr->hdr.reply.id = a_fbs_id.ptr->hdr.sender.id;
    143127
    144         /* echonet_taskに送る */
     128        /* echonet_taskに送る */
    145129        a_ret = ecn_fbs_enqueue(&svc->svc_mbxid, a_fbs_id.ptr);
    146130        if (a_ret != E_OK) {
     
    155139
    156140/*
    157 * ECHONET Lite 通信レイヤータスク タイマー値取得
     141* ECHONET Lite 通信レイヤータスク タイマー値取得
    158142*/
    159143TMO echonet_lcltask_get_timer(ecnl_svc_task_t *svc)
     
    168152
    169153/*
    170 * ECHONET Lite 通信レイヤータスク 時間経過処理
     154* ECHONET Lite 通信レイヤータスク 時間経過処理
    171155*/
    172156void echonet_lcltask_progress(ecnl_svc_task_t *svc, TMO a_timer)
     
    176160
    177161/*
    178 * ECHONET Lite 通信レイヤータスク メッセージ受信処理
     162* ECHONET Lite 通信レイヤータスク メッセージ受信処理
    179163*/
    180164void echonet_lcltask_recv_msg(ecnl_svc_task_t *svc, T_ECN_FST_BLK *p_msg)
     
    185169        a_fbs_id.ptr = p_msg;
    186170
    187         /* 送信データ長を取得 */
     171        /* 送信データ長を取得 */
    188172        a_snd_len = _ecn_fbs_get_datalen(a_fbs_id);
    189173
     
    191175
    192176        switch (a_fbs_id.ptr->hdr.type) {
    193                 /* å†
    194 éƒ¨ä½¿ç”¨ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ */
     177                /* 内部使用メッセージ */
    195178        case ECN_MSG_INTERNAL:
    196179                _ecn_int_msg(svc, a_fbs_id, a_snd_len);
    197180                break;
    198181
    199                 /* ECHONET用メッセージ */
     182                /* ECHONET用メッセージ */
    200183        case ECN_MSG_ECHONET:
    201184                _ecn_esv_msg(svc, a_fbs_id);
     
    206189        }
    207190
    208         /* 領域解放 */
     191        /* 領域解放 */
    209192        _ecn_fbs_del(svc->mrb, a_fbs_id);
    210193}
    211194
    212195/*
    213 * ECHONET Lite 通信レイヤータスク タイムアウト処理
     196* ECHONET Lite 通信レイヤータスク タイムアウト処理
    214197*/
    215198void echonet_lcltask_timeout(ecnl_svc_task_t *svc)
     
    218201}
    219202
    220 /* 応答電文用fbs設定(sender/targetの設定) */
     203/* 応答電文用fbs設定(sender/targetの設定) */
    221204static ER _ecn_lcl_cre_req_fbs(ecnl_svc_task_t *svc, T_ECN_FBS_QUEUE *sender, uint8_t cmd, ECN_FBS_ID *pk_req)
    222205{
     
    248231}
    249232
    250 /* 応答電文用fbs設定(sender/targetの設定) */
     233/* 応答電文用fbs設定(sender/targetの設定) */
    251234static ER _ecn_lcl_cre_res_fbs(ecnl_svc_task_t *svc, ECN_FBS_ID req, uint8_t cmd, ECN_FBS_ID *pk_res)
    252235{
     
    279262
    280263/*
    281  *  å†
    282 éƒ¨ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸å—信処理
     264 *  内部メッセージ受信処理
    283265 */
    284266void _ecn_int_msg(ecnl_svc_task_t *svc, ECN_FBS_ID fbs_id, ECN_FBS_SSIZE_T a_snd_len)
     
    300282
    301283        switch(cmd){
    302         // 通信レイヤーアドレスを返信
     284        // 通信レイヤーアドレスを返信
    303285        case ECN_LCL_MSG_GET_LCLADDR_REQ:
    304286                if (a_snd_len < sizeof(msg)) {
     
    370352
    371353/*
    372  *  ECHONET 電文受信処理
     354 *  ECHONET 電文受信処理
    373355 */
    374356void _ecn_esv_msg(ecnl_svc_task_t *svc, ECN_FBS_ID fbs_id)
     
    381363        ECN_FBS_SSIZE_T a_snd_len;
    382364
    383         /* 送信å
    384 ˆé€šä¿¡ãƒ¬ã‚¤ãƒ¤ãƒ¼ã‚¢ãƒ‰ãƒ¬ã‚¹ */
     365        /* 送信先通信レイヤーアドレス */
    385366        a_dst = lcl_get_addr(svc, fbs_id.ptr->hdr.target.id);
    386367        if (mrb_type(a_dst) != MRB_TT_FALSE/*nil*/) {
    387                 ECN_DBG_PUT_4("[LCL TSK] echonet-node 0x%02X-0x%02X-0x%02X → lcl dest(%s)",
     368                ECN_DBG_PUT_4("[LCL TSK] echonet-node 0x%02X-0x%02X-0x%02X lcl dest(%s)",
    388369                        ((T_EDATA *)fbs_id.ptr)->hdr.edata.deoj.eojx1,
    389370                        ((T_EDATA *)fbs_id.ptr)->hdr.edata.deoj.eojx2,
     
    393374                a_msg = mrb_str_buf_new(mrb, a_len);
    394375
    395                 /* fbsから出力領域にデータを抽出 */
     376                /* fbsから出力領域にデータを抽出 */
    396377                a_snd_len = 0;
    397378                a_ret = _ecn_fbs_get_data(mrb, fbs_id, RSTRING_PTR(a_msg), a_len, &a_snd_len);
     
    402383                        RSTR_SET_LEN(RSTRING(a_msg), a_snd_len);
    403384
    404                         /* 送信å
    405 ˆãŒ127.0.0.1 → mbxに転送 */
    406                         ECN_DBG_PUT_1("redirect svc->lcl_mbxid → svc->svc_mbxid (esv:0x%02X)",
     385                        /* 送信先が127.0.0.1 → mbxに転送 */
     386                        ECN_DBG_PUT_1("redirect svc->lcl_mbxid → svc->svc_mbxid (esv:0x%02X)",
    407387                                ((T_EDATA *)fbs_id.ptr)->hdr.edata.esv);
    408388
     
    420400                        _ecn_dbg_bindmp(RSTRING_PTR(a_msg), a_snd_len);
    421401#endif
    422                         /* 通信レイヤーへ送信 */
     402                        /* 通信レイヤーへ送信 */
    423403                        a_ret = lcl_snd_msg(svc, a_dst, a_msg);
    424404                        if (a_ret < 0) {
     
    427407                }
    428408
    429                 /* データが長すぎて1パケットに収まらなかった場合 */
     409                /* データが長すぎて1パケットに収まらなかった場合 */
    430410                if (_ecn_fbs_exist_data(fbs_id)) {
    431411                        ECN_DBG_PUT_1("[LCL TSK] send, data so long: %dbyte(s)", _ecn_fbs_get_datalen(fbs_id));
     
    440420
    441421/*
    442  *  ノンブロッキングコールのコールバック関数
     422 *  ノンブロッキングコールのコールバック関数
    443423 */
    444424ER echonet_lcl_input_msg(ecnl_svc_task_t *svc, mrb_value ep, mrb_value data)
     
    452432
    453433/*
    454  *  リモートECHONETノードの適合確認
     434 *  リモートECHONETノードの適合確認
    455435 */
    456436bool_t ecn_is_match(ecnl_svc_task_t *svc, const EOBJCB *enodcb, T_EDATA *edata, mrb_value ep)
     
    470450                return false;
    471451
    472         /* ノードスタート時インスタンスリスト通知以外は除外 */
     452        /* ノードスタート時インスタンスリスト通知以外は除外 */
    473453        if (    edata->hdr.edata.esv != ESV_INF
    474454                ||      edata->hdr.edata.deoj.eojx1 != EOJ_X1_PROFILE
     
    492472                }
    493473                ECN_DBG_PUT_2("ecn_is_match(): ecn_itr_nxt() result: epc=0x%02X, pdc=%d", epc, pdc);
    494                 /* インスタンスリスト通知または自ノードインスタンスリストS以外は除外 */
     474                /* インスタンスリスト通知または自ノードインスタンスリストS以外は除外 */
    495475                if ((epc != 0xD5) && (epc != 0xD6)) {
    496476                        continue;
    497477                }
    498478
    499                 /* 2バイト目以降にeojが列挙されている */
     479                /* 2バイト目以降にeojが列挙されている */
    500480                count = (pdc - 1) / sizeof(T_ECN_EOJ);
    501481
    502                 /* ノードå†
    503 ã®æ©Ÿå™¨ã‚ªãƒ–ジェクトを検索 */
     482                /* ノード内の機器オブジェクトを検索 */
    504483                for (k = 0; k < enodcb->eobjcnt; k++) {
    505484                        p_eobj = enodcb->eobjs[k];
    506485
    507                         /* インスタンスリストを確認 */
     486                        /* インスタンスリストを確認 */
    508487                        match = false;
    509488                        for (i = 0, j = 1; i < count; i++, j += sizeof(T_ECN_EOJ)) {
     
    523502                }
    524503
    525                 /* すべて揃っていたら適合(インスタンスリストの方が多くてもいいこととする) */
     504                /* すべて揃っていたら適合(インスタンスリストの方が多くてもいいこととする) */
    526505                return true;
    527506        }
     
    531510
    532511/*
    533  *  通信レイヤーアドレスからリモートECHONETノードへ変換
     512 *  通信レイヤーアドレスからリモートECHONETノードへ変換
    534513 */
    535514ECN_ENOD_ID lcl_get_id(ecnl_svc_task_t *svc, T_EDATA *edata, const mrb_value ep)
     
    542521                return ENOD_MULTICAST_ID;
    543522
    544         /* 通信レイヤーアドレスの同じものを検索 */
     523        /* 通信レイヤーアドレスの同じものを検索 */
    545524        if ((id = lcl_get_remote_id(svc, ep)) != ENOD_NOT_MATCH_ID) {
    546525                ECN_CAP_PUT_2("lcl_get_id(): ip-found remote(%d) = %s",
     
    549528        }
    550529
    551         /* 対応するリモートノードがあれば通信レイヤーアドレスを設定 */
     530        /* 対応するリモートノードがあれば通信レイヤーアドレスを設定 */
    552531        if ((id = lcl_set_remote_addr(svc, edata, ep)) != ENOD_NOT_MATCH_ID) {
    553532                ECN_CAP_PUT_2("lcl_get_id(): enod-found remote(%d) = %s",
     
    556535        }
    557536
    558         /* 空き領域を探して自動登録 */
     537        /* 空き領域を探して自動登録 */
    559538        if ((id = lcl_add_remote_addr(svc, edata, ep)) != ENOD_NOT_MATCH_ID) {
    560539                ECN_CAP_PUT_2("lcl_get_id(): empty-found remote(%d) = %s",
     
    567546
    568547/*
    569  *  リモートECHONETノードから通信レイヤーアドレスへ変換
     548 *  リモートECHONETノードから通信レイヤーアドレスへ変換
    570549 */
    571550mrb_value lcl_get_addr(ecnl_svc_task_t *svc, ECN_ENOD_ID fa_enodid)
    572551{
    573552        if (fa_enodid == ENOD_MULTICAST_ID) {
    574                 /* targetがENOD_MULTICAST_IDの場合、マルチキャストを行う */
     553                /* targetがENOD_MULTICAST_IDの場合、マルチキャストを行う */
    575554                return lcl_get_multicast_addr(svc);
    576555        }
    577556
    578557        if (fa_enodid < ENOD_REMOTE_ID) {
    579                 /* targetが未定義・LOCAL・APIの場合、ローカルé
    580 é€ã‚’行う */
     558                /* targetが未定義・LOCAL・APIの場合、ローカル配送を行う */
    581559                return lcl_get_local_addr(svc);
    582560        }
Note: See TracChangeset for help on using the changeset viewer.