Ignore:
Timestamp:
May 22, 2019, 10:03:37 PM (5 years ago)
Author:
coas-nagasima
Message:

ビルドが通るよう更新

File:
1 edited

Legend:

Unmodified
Added
Removed
  • azure_iot_hub/trunk/ntshell/echonet/echonet_udp6_task.c

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-csrc to text/x-csrc;charset=UTF-8
    r388 r389  
    44 *  Copyright (C) 2014 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 *  @(#) $Id$
     
    5237
    5338/*
    54  *              ECHONET Lite UDP通信処理タスク
     39 *              ECHONET Lite UDP通信処理タスク
    5540 */
    5641#if 0 //def SUPPORT_INET6
     
    115100
    116101/*
    117  * 受信したUDPデータをMAILBOXに送る
     102 * 受信したUDPデータをMAILBOXに送る
    118103 */
    119104ER _ecn_udp2dtq(const uint8_t *buffer, size_t fa_len, const T_IPV6EP *dst);
     
    130115
    131116        a_rcv_pkt.buffer = buffer;
    132         if (    a_rcv_pkt.t_esv->ecn_hdr.ehd1 != ECN_EDH1_ECHONET_LITE  /* ECHONET Lite規格   */
    133         ||      a_rcv_pkt.t_esv->ecn_hdr.ehd2 != ECN_EDH2_FORMAT_1                      /* 電文形式1                */) {
     117        if (    a_rcv_pkt.t_esv->ecn_hdr.ehd1 != ECN_EDH1_ECHONET_LITE  /* ECHONET Lite規格       */
     118        ||      a_rcv_pkt.t_esv->ecn_hdr.ehd2 != ECN_EDH2_FORMAT_1                      /* 電文形式1                */) {
    134119                ECN_DBG_PUT_2("[UDP ECHO SRV] illegal type (0x%02X,0x%02X)", a_rcv_pkt.t_esv->ecn_hdr.ehd1, a_rcv_pkt.t_esv->ecn_hdr.ehd2);
    135120                return E_PAR;
     
    154139        a_fbs_id.ptr->hdr.sender.id = ENOD_NOT_MATCH_ID;
    155140
    156         /* IPアドレスからリモートECHONETノードへ変換 */
     141        /* IPアドレスからリモートECHONETノードへ変換 */
    157142        a_enod_id = udp_get_id((T_EDATA *)a_fbs_id.ptr, dst->ipaddr, dst->portno);
    158143        if (a_enod_id < 0 || tnum_enodadr <= a_enod_id) {
     
    160145                        ipv62str(NULL, &dst->ipaddr));
    161146        } else {
    162                 /* 送信å
    163 ƒECHONETノードを記録 */
     147                /* 送信元ECHONETノードを記録 */
    164148                a_fbs_id.ptr->hdr.sender.id = a_enod_id;
    165149        }
    166150        a_fbs_id.ptr->hdr.reply.id = a_fbs_id.ptr->hdr.sender.id;
    167151
    168         /* echonet_taskに送る */
     152        /* echonet_taskに送る */
    169153        a_ret = snd_dtq(ecn_svc_dataqueueid, (intptr_t)a_fbs_id.ptr);
    170154        if (a_ret != E_OK) {
     
    179163
    180164/*
    181  *  ECHONET UDP通信処理タスク
     165 *  ECHONET UDP通信処理タスク
    182166 */
    183167void echonet_udp_task(intptr_t exinf)
     
    211195        }
    212196
    213         /* メッセージループ */
     197        /* メッセージループ */
    214198        for (;;) {
    215199                a_prev = a_now;
     
    233217
    234218                if (a_ret == E_OK) {
    235                         /* 送信データ長を取得 */
     219                        /* 送信データ長を取得 */
    236220                        a_snd_len = _ecn_fbs_get_datalen(a_mdt.fbs_id);
    237221
     
    256240}
    257241
    258 /* 応答電文用fbs設定(sender/targetの設定) */
     242/* 応答電文用fbs設定(sender/targetの設定) */
    259243static ER _ecn_udp_cre_req_fbs(ID sender, uint8_t cmd, ECN_FBS_ID *pk_req)
    260244{
     
    285269}
    286270
    287 /* 応答電文用fbs設定(sender/targetの設定) */
     271/* 応答電文用fbs設定(sender/targetの設定) */
    288272static ER _ecn_udp_cre_res_fbs(ECN_FBS_ID req, uint8_t cmd, ECN_FBS_ID *pk_res)
    289273{
     
    315299
    316300/*
    317  *  å†
    318 éƒ¨ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸å—信処理
     301 *  内部メッセージ受信処理
    319302 */
    320303void _ecn_int_msg(ECN_FBS_ID fbs_id, ECN_FBS_SSIZE_T a_snd_len)
     
    334317
    335318        switch(cmd){
    336         // IPアドレスを返信
     319        // IPアドレスを返信
    337320        case ECN_UDP_MSG_GET_IPADDR_REQ:
    338321                if (a_snd_len < sizeof(msg)) {
     
    403386
    404387/*
    405  *  ECHONET 電文受信処理
     388 *  ECHONET 電文受信処理
    406389 */
    407390void _ecn_esv_msg(ECN_FBS_ID fbs_id)
    408391{
    409392        const static T_IN6_ADDR locl = IPV6_ADDR_LOCAL_LOOPBACK_INIT;
    410         /* UDP出力領域(暫定) */
     393        /* UDP出力領域(暫定) */
    411394        static uint_t buffer[(ETHER_MAX_LEN) / sizeof(uint_t) + 1];
    412395        T_IPV6EP a_dst;
     
    416399        memset(&a_dst.ipaddr, 0, sizeof(a_dst.ipaddr));
    417400        a_dst.portno = 0;
    418         /* 送信å
    419 ˆIPアドレス */
     401        /* 送信先IPアドレス */
    420402        a_ret = udp_get_ip(&a_dst, fbs_id.ptr->hdr.target.id);
    421403        if (!a_ret) {
    422                 ECN_DBG_PUT_4("[UDP TSK] echonet-node 0x%02X-0x%02X-0x%02X → udp dest(%s)",
     404                ECN_DBG_PUT_4("[UDP TSK] echonet-node 0x%02X-0x%02X-0x%02X udp dest(%s)",
    423405                        ((T_EDATA *)fbs_id.ptr)->hdr.edata.deoj.eojx1,
    424406                        ((T_EDATA *)fbs_id.ptr)->hdr.edata.deoj.eojx2,
     
    426408                        ipv62str(NULL, &a_dst.ipaddr));
    427409
    428                 /* fbsから出力領域にデータを抽出 */
     410                /* fbsから出力領域にデータを抽出 */
    429411                a_snd_len = 0;
    430412                a_ret = _ecn_fbs_get_data(fbs_id, buffer, sizeof(buffer), &a_snd_len);
     
    433415                }
    434416                else if (memcmp(&a_dst.ipaddr, &locl, sizeof(a_dst.ipaddr)) == 0) {
    435                         /* 送信å
    436 ˆãŒ127.0.0.1 → dtqに転送 */
    437                         ECN_DBG_PUT_1("redirect ecn_udp_dataqueueid → ecn_svc_dataqueueid (esv:0x%02X)",
     417                        /* 送信先が127.0.0.1 → dtqに転送 */
     418                        ECN_DBG_PUT_1("redirect ecn_udp_dataqueueid → ecn_svc_dataqueueid (esv:0x%02X)",
    438419                                ((T_EDATA *)fbs_id.ptr)->hdr.edata.esv);
    439420
     
    449430                        _ecn_dbg_bindmp((const uint8_t *)buffer, a_snd_len);
    450431#endif
    451                         /* UDP送信 */
     432                        /* UDP送信 */
    452433                        a_ret = udp6_snd_dat(ecn_udp_cepid, &a_dst, buffer, a_snd_len, TMO_FEVR);
    453434                        if (a_ret < 0) {
     
    456437                }
    457438
    458                 /* データが長すぎて1パケットに収まらなかった場合 */
     439                /* データが長すぎて1パケットに収まらなかった場合 */
    459440                if (_ecn_fbs_exist_data(fbs_id)) {
    460441                        ECN_DBG_PUT_1("[UDP TSK] send, data so long: %dbyte(s)", _ecn_fbs_get_datalen(fbs_id));
     
    469450
    470451/*
    471  *  ノンブロッキングコールのコールバック関数
     452 *  ノンブロッキングコールのコールバック関数
    472453 */
    473454ER callback_nblk_udp(ID cepid, FN fncd, void *p_parblk)
     
    490471                }
    491472#ifdef _MSC_VER
    492                 /* (開発用) ECHONET用パケット以外は読み捨てる */
     473                /* (開発用) ECHONET用パケット以外は読み捨てる */
    493474                if (buffer[0] != 0x10 || buffer[1] != 0x81) {
    494475                        return E_OK;
     
    524505
    525506/*
    526  *  リモートECHONETノードの適合確認
     507 *  リモートECHONETノードの適合確認
    527508 */
    528509bool_t is_match(const EOBJCB *enodcb, T_EDATA *edata, const void *_ipaddr, uint16_t portno)
     
    542523                return false;
    543524
    544         /* ノードスタート時インスタンスリスト通知以外は除外 */
     525        /* ノードスタート時インスタンスリスト通知以外は除外 */
    545526        if (    edata->hdr.edata.esv != ESV_INF
    546527                ||      edata->hdr.edata.deoj.eojx1 != EOJ_X1_PROFILE
     
    564545                }
    565546                ECN_DBG_PUT_2("is_match(): ecn_itr_nxt() result: epc=0x%02X, pdc=%d", epc, pdc);
    566                 /* インスタンスリスト通知または自ノードインスタンスリストS以外は除外 */
     547                /* インスタンスリスト通知または自ノードインスタンスリストS以外は除外 */
    567548                if ((epc != 0xD5) && (epc != 0xD6)) {
    568549                        continue;
    569550                }
    570551
    571                 /* 2バイト目以降にeojが列挙されている */
     552                /* 2バイト目以降にeojが列挙されている */
    572553                count = (pdc - 1) / sizeof(T_ECN_EOJ);
    573554
    574                 /* ノードå†
    575 ã®æ©Ÿå™¨ã‚ªãƒ–ジェクトを検索 */
     555                /* ノード内の機器オブジェクトを検索 */
    576556                for (k = 0; k < enodcb->eobjcnt; k++) {
    577557                        p_eobj = enodcb->eobjs[k];
    578558
    579                         /* インスタンスリストを確認 */
     559                        /* インスタンスリストを確認 */
    580560                        match = false;
    581561                        for (i = 0, j = 1; i < count; i++, j += sizeof(T_ECN_EOJ)) {
     
    595575                }
    596576
    597                 /* すべて揃っていたら適合(インスタンスリストの方が多くてもいいこととする) */
     577                /* すべて揃っていたら適合(インスタンスリストの方が多くてもいいこととする) */
    598578                return true;
    599579        }
     
    603583
    604584/*
    605  *  IPアドレスからリモートECHONETノードへ変換
     585 *  IPアドレスからリモートECHONETノードへ変換
    606586 */
    607587ECN_ENOD_ID udp_get_id(T_EDATA *edata, const T_IN6_ADDR ipaddr, uint16_t portno)
     
    619599                return ENOD_MULTICAST_ID;
    620600
    621         /* IPアドレスの同じものを検索 */
     601        /* IPアドレスの同じものを検索 */
    622602        for (i = 0, ea = enodadrb_table; i < tnum_enodadr; i++, ea++) {
    623603                if (!ea->inuse)
     
    631611        }
    632612
    633         /* 対応するリモートノードを検索 */
     613        /* 対応するリモートノードを検索 */
    634614        for (i = ENOD_REMOTE_ID, ea = &enodadrb_table[ENOD_REMOTE_ID]; i < tnum_enodadr; i++, ea++) {
    635615                if (!ea->inuse)
     
    645625                        continue;
    646626
    647                 /* 対応するリモートノードがあればIPアドレスを設定 */
     627                /* 対応するリモートノードがあればIPアドレスを設定 */
    648628                memcpy(&ea->ipaddr, &ipaddr, sizeof(T_IN6_ADDR));
    649629
     
    653633        }
    654634
    655         /* 空き領域を探して自動登録 */
     635        /* 空き領域を探して自動登録 */
    656636        for (i = ENOD_REMOTE_ID, ea = &enodadrb_table[ENOD_REMOTE_ID]; i < tnum_enodadr; i++, ea++) {
    657637                if (ea->inuse)
     
    670650
    671651/*
    672  *  リモートECHONETノードからIPアドレスへ変換
     652 *  リモートECHONETノードからIPアドレスへ変換
    673653 */
    674654int udp_get_ip(T_IPV6EP *fp_ipep, ECN_ENOD_ID fa_enodid)
     
    684664
    685665        if (fa_enodid == ENOD_MULTICAST_ID) {
    686                 /* targetがENOD_MULTICAST_IDの場合、マルチキャストを行う */
     666                /* targetがENOD_MULTICAST_IDの場合、マルチキャストを行う */
    687667                memcpy(&fp_ipep->ipaddr, &mcst, sizeof(T_IN6_ADDR));
    688668                return 0;       /* ok */
     
    690670
    691671        if (fa_enodid < ENOD_REMOTE_ID) {
    692                 /* targetが未定義・LOCAL・APIの場合、ローカルé
    693 é€ã‚’行う */
     672                /* targetが未定義・LOCAL・APIの場合、ローカル配送を行う */
    694673                memcpy(&fp_ipep->ipaddr, &locl, sizeof(T_IN6_ADDR));
    695674                return 0;       /* ok */
Note: See TracChangeset for help on using the changeset viewer.