Changeset 107 for uKadecot/trunk/ecnl_ssp/echonet_task.c
- Timestamp:
- Jun 10, 2015, 8:40:31 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uKadecot/trunk/ecnl_ssp/echonet_task.c
-
Property svn:mime-type
changed from
text/plain
totext/plain; charset=SHIFT_JIS
r101 r107 4 4 * Copyright (C) 2014 Cores Co., Ltd. Japan 5 5 * 6 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 7 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 8 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 9 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 10 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 11 * XR[hÉÜÜêÄ¢é±ÆD 12 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 13 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 14 gip 15 * Ò}j 16 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 17 * ̳ÛØKèðfÚ·é±ÆD 18 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 19 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 20 * ÆD 21 * (a) Äzzɺ¤hL 22 gipÒ}j 23 AÈÇjÉCãLÌ 24 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 25 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 26 * ñ·é±ÆD 27 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 28 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 29 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 30 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 31 * ÆÓ·é±ÆD 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 * 免責すること. 32 28 * 33 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨34 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI35 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF36 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»37 * ÌÓCðíÈ¢D29 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 30 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 31 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 32 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 33 * の責任を負わない. 38 34 * 39 35 * @(#) $Id$ … … 41 37 42 38 /* 43 * ECHONET Lite ^XN39 * ECHONET Lite タスク 44 40 */ 45 41 … … 78 74 static struct ecnl_state s; 79 75 80 /* óMbZ[WðJú·é©Û©*/76 /* 受信メッセージを開放するか否か */ 81 77 static bool_t g_release_esv; 82 78 83 /* óMbZ[Wð]·é©Û©*/79 /* 受信メッセージを転送するか否か */ 84 80 bool_t g_forward_esv; 85 81 … … 126 122 target += - ENOD_REMOTE_ID + 1; 127 123 if (from_app && (target < tnum_enodid)) { 128 /* ñ¯úÌ[gm[hÍT[rX^XNÅ·é*/124 /* 非同期のリモートノードはサービス処理タスクで処理する */ 129 125 switch (eobjcb_table[target].profile->eobjatr) { 130 126 case EOBJ_SYNC_REMOTE_NODE: … … 174 170 ECN_FBS_ID fa_fbs_id, ECN_FBS_ID *fa_fbs_anno); 175 171 176 /* W 177 [ú»tO */ 172 /* モジュール初期化フラグ */ 178 173 static uint8_t m_eobjlist_need_init = 1; 179 174 180 /* V[PXÔ*/175 /* シーケンス番号 */ 181 176 static uint16_t g_current_tid = 1; 182 177 183 178 /* 184 * ECHONET Lite ^XNÌú»iRXgN^j179 * ECHONET Lite タスクの初期化(コンストラクタ相当) 185 180 */ 186 181 void echonet_task_init(intptr_t exinf) … … 191 186 192 187 /* 193 * W 194 [ú» 188 * モジュール初期化 195 189 */ 196 190 static void _ecn_tsk_int_module_init(intptr_t exinf) … … 210 204 211 205 /* 212 * ECHONET Lite ^XNÌ{Ì206 * ECHONET Lite タスクの本体 213 207 */ 214 208 static … … 243 237 } 244 238 245 /* bZ[W[v*/239 /* メッセージループ */ 246 240 for (;;) { 247 241 a_prev = a_now; … … 283 277 284 278 switch (a_mdt.fbs_id.ptr->hdr.type) { 285 /* àgpbZ[W*/279 /* 内部使用メッセージ */ 286 280 case ECN_MSG_INTERNAL: 287 281 _ecn_tsk_int_msg(fa_exinf, a_mdt.fbs_id); 288 282 break; 289 283 290 /* ECHONET pbZ[W*/284 /* ECHONET用メッセージ */ 291 285 case ECN_MSG_ECHONET: 292 286 _ecn_tsk_ecn_msg(fa_exinf, a_mdt.fbs_id); … … 297 291 } 298 292 299 /* Ìæðú*/293 /* 領域解放 */ 300 294 if (g_release_esv) 301 295 _ecn_fbs_del(a_mdt.fbs_id); … … 312 306 313 307 /* 314 * ECHONET Lite vgXbhN®^XN308 * ECHONET Lite プロトスレッド起動タスク 315 309 */ 316 310 void echonet_task(intptr_t fa_exinf) … … 320 314 321 315 /* 322 * ECHONET Lite ^XNN®püúnh[316 * ECHONET Lite タスク起動用周期ハンドラー 323 317 */ 324 318 void echonet_cychdr(intptr_t exinf) … … 328 322 329 323 /* 330 * V[PXÔ¶¬324 * シーケンス番号生成 331 325 */ 332 326 static uint16_t _ecn_tsk_new_tid(void) … … 336 330 337 331 /* 338 * vd¶ì¬339 * ø340 * ECN_FBS_ID *fp_fbs_id æ¾µ½FBS_IDÌi[æ341 * ID fa_seoj M³ÌECHONETIuWFNgID342 * ID fa_deoj ¶æÌECHONETIuWFNgID343 * uint8_t fa_epc vpeBR[h344 * uint8_t fa_pdc vpeBlf[^TCY345 * const void *p_edt vpeBlf[^346 * ECN_SRV_CODE fa_esv ECHONET Light T[rXR[h332 * 要求電文作成 333 * 引数 334 * ECN_FBS_ID *fp_fbs_id 取得したFBS_IDの格納先 335 * ID fa_seoj 送信元のECHONETオブジェクトID 336 * ID fa_deoj 宛先のECHONETオブジェクトID 337 * uint8_t fa_epc プロパティコード 338 * uint8_t fa_pdc プロパティ値データサイズ 339 * const void *p_edt プロパティ値データ 340 * ECN_SRV_CODE fa_esv ECHONET Light サービスコード 347 341 */ 348 342 ER _ecn_tsk_mk_esv(ECN_FBS_ID *fp_fbs_id, ID fa_seoj, ID fa_deoj, … … 351 345 ER a_ret; 352 346 int a_size, i; 353 ECN_FBS_ID a_fbs_id = { 0 }; /* vd¶p*/347 ECN_FBS_ID a_fbs_id = { 0 }; /* 要求電文用メモリ */ 354 348 T_ECN_EDT_HDR a_ecn_hdp; /* ecn_hdr+edata+ecn_prp 14byte */ 355 349 ID a_enodid; … … 358 352 359 353 if (!fp_fbs_id) 360 return E_PAR; /* æ¾µ½FBS_IDÌi[æªNULL */354 return E_PAR; /* 取得したFBS_IDの格納先がNULL */ 361 355 if (ECHONET_MEMPOOL_BLOCK_SIZE <= fa_pdc) 362 return E_PAR; /* vpeBlTCYªå«·¬é*/356 return E_PAR; /* プロパティ値サイズが大きすぎる */ 363 357 if (!p_edt && 0 < fa_pdc) 364 return E_PAR; /* vpeBlTCYª1ÈãÈÌÉf[^|C^ªNULL */358 return E_PAR; /* プロパティ値サイズが1以上なのにデータポインタがNULL */ 365 359 366 360 if (fa_seoj <= EOBJ_NULL || tmax_eobjid < fa_seoj) 367 return E_NOEXS; /* ECHONET IuWFNgIDª¢è`*/361 return E_NOEXS; /* ECHONETオブジェクトIDが未定義 */ 368 362 #ifndef ECHONET_CONTROLLER_EXTENTION 369 363 if (fa_deoj < EOBJ_NULL || tmax_eobjid < fa_deoj) 370 return E_NOEXS; /* ECHONET IuWFNgIDª¢è`*/364 return E_NOEXS; /* ECHONETオブジェクトIDが未定義 */ 371 365 #else 372 366 if (fa_deoj < EOBJ_NULL || (tmax_eobjid + TNUM_AEOBJID) < fa_deoj) 373 return E_NOEXS; /* ECHONET IuWFNgIDª¢è`*/367 return E_NOEXS; /* ECHONETオブジェクトIDが未定義 */ 374 368 #endif 375 369 if (fa_deoj == EOBJ_NULL && fa_esv == ESV_INFC) 376 return E_NOEXS; /* ECHONET IuWFNgIDª¢è`*/377 378 /* vŬTCYÌæ¾*/370 return E_NOEXS; /* ECHONETオブジェクトIDが未定義 */ 371 372 /* 要求最小サイズの取得 */ 379 373 a_size = sizeof(T_ECN_HDR) + sizeof(T_ECN_EDATA_BODY) + sizeof(T_ECN_PRP); 380 374 381 /* vd¶pÌæ¾*/375 /* 要求電文用メモリの取得 */ 382 376 a_ret = _ecn_fbs_cre(a_size, &a_fbs_id); 383 if (a_ret != E_OK || !a_fbs_id.ptr) { /* mÛ¸s*/377 if (a_ret != E_OK || !a_fbs_id.ptr) { /* 確保失敗 */ 384 378 ECN_DBG_PUT "_ecn_fbs_cre(%d) result = %d:%s", 385 379 a_size, … … 388 382 } 389 383 390 /* vd¶Ýè*/384 /* 要求電文設定 */ 391 385 memset(&a_ecn_hdp, 0, sizeof(a_ecn_hdp)); 392 386 a_ecn_hdp.ecn_hdr.ehd1 = ECN_EDH1_ECHONET_LITE; … … 395 389 memcpy(&a_ecn_hdp.edata.seoj, &eobjinib_table[fa_seoj - 1].eojx1, sizeof(a_ecn_hdp.edata.seoj)); 396 390 a_ecn_hdp.edata.esv = fa_esv; 397 a_ecn_hdp.edata.opc = 1; /* vpeB*/398 a_ecn_hdp.ecn_prp.epc = fa_epc; /* vpeBR[h*/399 a_ecn_hdp.ecn_prp.pdc = fa_pdc; /* tf[^TCY*/400 401 /* vd¶pÉf[^ÇÁ*/391 a_ecn_hdp.edata.opc = 1; /* 処理プロパティ数 */ 392 a_ecn_hdp.ecn_prp.epc = fa_epc; /* プロパティコード */ 393 a_ecn_hdp.ecn_prp.pdc = fa_pdc; /* 付随データサイズ */ 394 395 /* 要求電文用メモリにデータ追加 */ 402 396 a_ret = _ecn_fbs_add_data_ex(a_fbs_id, &a_ecn_hdp, a_size); 403 397 if (a_ret) { … … 408 402 } 409 403 if (0 < fa_pdc) { 410 /* tf[^ÇÁ*/404 /* 付随データ追加 */ 411 405 a_ret = _ecn_fbs_add_data_ex(a_fbs_id, p_edt, fa_pdc); 412 406 if (a_ret) { … … 418 412 } 419 413 if (fa_deoj == 0) { 420 ECN_DBG_PUT "%s", " }`LXg" ECN_DBG_END;421 /* fa_deoj == 0 : }`LXg*/414 ECN_DBG_PUT "%s", "マルチキャスト" ECN_DBG_END; 415 /* fa_deoj == 0 : マルチキャスト */ 422 416 ((T_EDATA *)a_fbs_id.ptr)->hdr.edata.deoj.eojx1 = EOJ_X1_PROFILE; 423 417 ((T_EDATA *)a_fbs_id.ptr)->hdr.edata.deoj.eojx2 = EOJ_X2_NODE_PROFILE; … … 427 421 else if (fa_deoj <= tmax_eobjid) { 428 422 ECN_DBG_PUT "fa_deoj = %d", fa_deoj ECN_DBG_END; 429 /* if (fa_deoj < 1 || tmax_eobjid < fa_deoj) cÌÙínÍÖ`ªÅOÏÝÆ·é*/423 /* if (fa_deoj < 1 || tmax_eobjid < fa_deoj) …の異常系は関数冒頭で除外済みとする */ 430 424 a_eobj = &eobjinib_table[fa_deoj - 1]; 431 425 memcpy(&((T_EDATA *)a_fbs_id.ptr)->hdr.edata.deoj, &a_eobj->eojx1, 432 426 sizeof(((T_EDATA *)a_fbs_id.ptr)->hdr.edata.deoj)); 433 427 434 /* e[u©çõ*/428 /* テーブルから検索 */ 435 429 a_fbs_id.ptr->hdr.target = ENOD_NOT_MATCH_ID; 436 430 a_enodid = (a_eobj->enodid == 0) ? fa_deoj : a_eobj->enodid; … … 472 466 ECN_ENOD_ID enodid; 473 467 ECN_DBG_PUT "fa_deoj = %d", fa_deoj ECN_DBG_END; 474 /* IuWFNgID©çEOJÆm[hIDðæ¾*/468 /* オブジェクトIDからEOJとノードIDを取得 */ 475 469 if(ecn_agent_get_eoj_enodid(fa_deoj, &eoj, &enodid)){ 476 470 memcpy(&((T_EDATA *)a_fbs_id.ptr)->hdr.edata.deoj, &eoj, … … 505 499 a_fbs_id.ptr->hdr.reply = ENOD_API_ID; 506 500 507 /* ³íI¹*/501 /* 正常終了 */ 508 502 *fp_fbs_id = a_fbs_id; 509 503 return E_OK; 510 504 511 505 lb_except: 512 /* f[^쬸sµ½çÌæðú*/506 /* データ作成失敗したら領域解放 */ 513 507 if (a_fbs_id.ptr) 514 508 _ecn_fbs_del(a_fbs_id); … … 518 512 519 513 /* 520 * àgpbZ[W514 * 内部使用メッセージ 521 515 */ 522 516 static void _ecn_tsk_int_msg(intptr_t fa_exinf, ECN_FBS_ID fa_fbs_id) … … 549 543 550 544 /* 551 * ^XNú»545 * タスク初期化 552 546 */ 553 547 static void _ecn_tsk_int_startup(intptr_t fa_exinf) … … 558 552 _ecn_tsk_int_module_init(fa_exinf); 559 553 560 /* CX^XXgÊmÌM*/554 /* インスタンスリスト通知の送信 */ 561 555 a_ret = _ecn_tsk_ntf_inl(fa_exinf); 562 556 if (a_ret) { … … 566 560 567 561 /* 568 * CX^XXgÊmÌM569 * ECHONET-Lite_Ver.1.10_02.pdf p.43 }4-1-4562 * インスタンスリスト通知の送信 563 * ECHONET-Lite_Ver.1.10_02.pdf p.43 図4-1-4 570 564 */ 571 565 ER _ecn_tsk_ntf_inl(intptr_t fa_exinf) 572 566 { 573 const T_ECN_EOJ a_seoj = /* 0x01 : êÊm[hA0x02FMêpm[h*/567 const T_ECN_EOJ a_seoj = /* 0x01 : 一般ノード、0x02:送信専用ノード */ 574 568 { EOJ_X1_PROFILE, EOJ_X2_NODE_PROFILE, 0x01 }; 575 569 const T_ECN_EOJ a_deoj = … … 581 575 int i; 582 576 uint8_t a_count; 583 const EOBJCB *enod = &eobjcb_table[0]; /* [Jm[h*/577 const EOBJCB *enod = &eobjcb_table[0]; /* ローカルノード */ 584 578 const EOBJINIB *eobj; 585 579 … … 599 593 600 594 if (!a_eoj_ct) { 601 /* mÛEwb_i[*/602 a_hdr.ecn_hdr.tid = (uint8_t)_ecn_tsk_new_tid(); /* V[PXÔ¶¬*/595 /* メモリ確保・ヘッダ格納 */ 596 a_hdr.ecn_hdr.tid = (uint8_t)_ecn_tsk_new_tid(); /* シーケンス番号生成 */ 603 597 a_ret = _ecn_fbs_cre(sizeof(a_hdr), &a_fbs); 604 if (a_ret != E_OK) /* mÛ¸s*/598 if (a_ret != E_OK) /* 確保失敗 */ 605 599 goto lb_except; 606 600 a_ret = _ecn_fbs_add_data(a_fbs, &a_hdr, sizeof(a_hdr)); 607 if (a_ret != E_OK) /* f[^ÇÁ¸s*/601 if (a_ret != E_OK) /* データ追加失敗 */ 608 602 goto lb_except; 609 603 … … 612 606 a_fbs.ptr->hdr.target = ENOD_MULTICAST_ID; 613 607 a_fbs.ptr->hdr.reply = ENOD_LOCAL_ID; 614 ((T_EDATA *)a_fbs.ptr)->hdr.ecn_prp.pdc = 1; /* */615 /* ði[*/608 ((T_EDATA *)a_fbs.ptr)->hdr.ecn_prp.pdc = 1; /* 件数 */ 609 /* 件数を格納 */ 616 610 a_count = (uint8_t)(enod->eobjcnt - i); 617 611 if (a_count >= ECN_IST_LST_EOJ_MAX_CT) 618 612 a_count = ECN_IST_LST_EOJ_MAX_CT; 619 613 a_ret = _ecn_fbs_add_data_ex(a_fbs, &a_count, sizeof(a_count)); 620 if (a_ret != E_OK) /* f[^ÇÁ¸s*/614 if (a_ret != E_OK) /* データ追加失敗 */ 621 615 goto lb_except; 622 616 } 623 /* ECHONET IuWFNgID(3byte)ði[*/617 /* ECHONETオブジェクトID(3byte)を格納 */ 624 618 a_ret = _ecn_fbs_add_data_ex(a_fbs, &eobj->eojx1, sizeof(T_ECN_EOJ)); 625 if (a_ret != E_OK) /* f[^ÇÁ¸s*/619 if (a_ret != E_OK) /* データ追加失敗 */ 626 620 goto lb_except; 627 621 628 /* EedtTCYÁZ*/622 /* 件数・edtサイズ加算 */ 629 623 ((T_EDATA *)a_fbs.ptr)->hdr.ecn_prp.pdc += sizeof(T_ECN_EOJ); 630 624 if (++a_eoj_ct < ECN_IST_LST_EOJ_MAX_CT) 631 625 continue; 632 626 633 /* 1 AiEXÅÌãÀÉBµ½çAêUM*/627 /* 1アナウンスでの上限に達したら、一旦送信 */ 634 628 a_ret = _ecn_tsk_snd_mbx(a_fbs, false); 635 if (a_ret != E_OK) /* f[^M¸s*/629 if (a_ret != E_OK) /* データ送信失敗 */ 636 630 goto lb_except; 637 631 a_eoj_ct = 0; … … 639 633 } 640 634 if (a_eoj_ct) { 641 /* ¢Mf[^ª Á½çAM*/635 /* 未送信データがあったら、送信 */ 642 636 a_ret = _ecn_tsk_snd_mbx(a_fbs, false); 643 if (a_ret != E_OK) /* f[^M¸s*/637 if (a_ret != E_OK) /* データ送信失敗 */ 644 638 goto lb_except; 645 639 a_fbs.ptr = 0; … … 685 679 686 680 /* 687 * 3byte ÌeobjidÅzñðõ·é681 * 3byteのeobjidで配列中を検索する 688 682 */ 689 683 const EOBJINIB *_ecn_eoj_fnd(const EOBJCB *fp_nod, const T_ECN_EOJ *fp_eoj) … … 721 715 722 716 /* 723 * ECHONET pbZ[W717 * ECHONET用メッセージ 724 718 */ 725 719 static void _ecn_tsk_ecn_msg(intptr_t fa_exinf, ECN_FBS_ID fa_fbs_id) … … 749 743 } 750 744 751 /* M¶©çm[hðõ*/745 /* 送信宛からノードを検索 */ 752 746 p_nod = _ecn_eno_fnd(fa_fbs_id.ptr->hdr.target); 753 /* M³©çm[hðõ*/747 /* 送信元からノードを検索 */ 754 748 sender = fa_fbs_id.ptr->hdr.sender; 755 749 p_snod = _ecn_eno_fnd(sender); 756 750 if (p_snod != NULL) { 757 751 sobjatr = p_snod->profile->eobjatr; 758 /* m[hvt@CÌê*/752 /* ノードプロファイルの場合 */ 759 753 if ((p_esv->edata.seoj.eojx1 == EOJ_X1_PROFILE) 760 754 && (p_esv->edata.seoj.eojx2 == EOJ_X2_NODE_PROFILE)) { 761 755 p_sobj = p_snod->profile; 762 756 } 763 /* @íIuWFNgÌê*/757 /* 機器オブジェクトの場合 */ 764 758 else { 765 759 p_sobj = _ecn_eoj_fnd(p_snod, &p_esv->edata.seoj); … … 771 765 #endif 772 766 773 /* m[hàÌ@íIuWFNgðõ*/767 /* ノード内の機器オブジェクトを検索 */ 774 768 a_prc = false; 775 769 a_fwd = false; … … 778 772 eobjatr = p_nod->profile->eobjatr; 779 773 p_eoj = &p_esv->edata.deoj; 780 /* m[hvt@CÌê*/774 /* ノードプロファイルの場合 */ 781 775 if ((p_eoj->eojx1 == EOJ_X1_PROFILE) 782 776 && (p_eoj->eojx2 == EOJ_X2_NODE_PROFILE)) { 783 /* d¶Às*/777 /* 電文処理実行 */ 784 778 if (_ecn_tsk_ecn_msg_main(fa_fbs_id, p_nod->profile, eobjatr, p_sobj, sobjatr) == 1) 785 779 a_fwd = true; 786 780 a_prc = true; 787 781 } 788 /* @íIuWFNgÌê*/782 /* 機器オブジェクトの場合 */ 789 783 else { 790 784 count = p_nod->eobjcnt; … … 805 799 if (p_obj->eojx2 != p_eoj->eojx2) 806 800 continue; 807 /* CX^XR[hªOÌêA¯¶NXÌSÄÌCX^X¶*/801 /* インスタンスコードが0の場合、同じクラスの全てのインスタンス宛 */ 808 802 if ((p_obj->eojx3 != p_eoj->eojx3) && (p_eoj->eojx3 != 0)) 809 803 continue; 810 804 811 /* d¶Às*/805 /* 電文処理実行 */ 812 806 if (_ecn_tsk_ecn_msg_main(fa_fbs_id, p_obj, eobjatr, p_sobj, sobjatr) == 1) 813 807 a_fwd = true; … … 816 810 } 817 811 } 818 /* @íIuWFNgª©Â©çÈ¢êÅà*/812 /* 機器オブジェクトが見つからない場合でも */ 819 813 if (!a_prc) { 820 /* d¶ÀsióMpj*/814 /* 電文処理実行(応答受信用) */ 821 815 if (_ecn_tsk_ecn_msg_main(fa_fbs_id, NULL, EPC_NONE, p_sobj, sobjatr) == 1) 822 816 a_fwd = true; 823 817 } 824 818 825 /* ÌêAvP[VÉ]·é*/819 /* 応答の場合アプリケーションに転送する */ 826 820 if (a_fwd && ((p_esv->ecn_hdr.tid == apitid_table[sender]) 827 821 || g_forward_esv)) … … 829 823 g_release_esv = false; 830 824 831 ECN_CAP_PUT "redirect ecn_svc_mailboxid ¨ecn_api_mailboxid (esv:0x%02X)",825 ECN_CAP_PUT "redirect ecn_svc_mailboxid → ecn_api_mailboxid (esv:0x%02X)", 832 826 p_esv->edata.esv ECN_CAP_END; 833 827 fa_fbs_id.ptr->hdr.target = ENOD_API_ID; … … 853 847 854 848 switch (p_esv->edata.esv) { 855 /* 0x60 vpeBl«Ývisvj*/849 /* 0x60 プロパティ値書き込み要求(応答不要) */ 856 850 case ESV_SET_I: 857 851 if (!p_obj) { … … 865 859 break; 866 860 867 /* 0x61 vpeBl«Ývivj*/861 /* 0x61 プロパティ値書き込み要求(応答要) */ 868 862 case ESV_SET_C: 869 863 if (!p_obj) { … … 877 871 break; 878 872 879 /* 0x62 vpeBlÇÝoµv*/873 /* 0x62 プロパティ値読み出し要求 */ 880 874 case ESV_GET: 881 875 if (!p_obj) { … … 889 883 break; 890 884 891 /* 0x63 vpeBlÊmv*/885 /* 0x63 プロパティ値通知要求 */ 892 886 case ESV_INF_REQ: 893 887 if (!p_obj) { … … 902 896 break; 903 897 904 /* 0x6E vpeBl«ÝEÇÝoµv*/898 /* 0x6E プロパティ値書き込み・読み出し要求 */ 905 899 case ESV_SET_GET: 906 900 if (!p_obj) { … … 914 908 break; 915 909 916 /* 0x74 vpeBlÊmivj*/910 /* 0x74 プロパティ値通知(応答要) */ 917 911 case ESV_INFC: 918 912 if (!p_sobj) … … 925 919 break; 926 920 927 /* 0x60 vpeBl«Ývisvj*/928 case ESV_SET_I_SNA: /* 0x50 vpeBl«ÝvsÂ*/921 /* 0x60 プロパティ値書き込み要求(応答不要) */ 922 case ESV_SET_I_SNA: /* 0x50 プロパティ値書き込み要求不可応答 */ 929 923 result = 1; 930 924 break; 931 925 932 /* 0x61 vpeBl«Ývivj*/933 case ESV_SET_RES: /* 0x71 vpeBl«Ý*/934 case ESV_SET_C_SNA: /* 0x51 vpeBl«ÝvsÂ*/926 /* 0x61 プロパティ値書き込み要求(応答要) */ 927 case ESV_SET_RES: /* 0x71 プロパティ値書き込み応答 */ 928 case ESV_SET_C_SNA: /* 0x51 プロパティ値書き込み要求不可応答 */ 935 929 result = 1; 936 930 break; 937 931 938 /* 0x62 vpeBlÇÝoµv*/939 case ESV_GET_RES: /* 0x72 vpeBlÇÝoµ*/940 case ESV_GET_SNA: /* 0x52 vpeBlÇÝoµsÂ*/932 /* 0x62 プロパティ値読み出し要求 */ 933 case ESV_GET_RES: /* 0x72 プロパティ値読み出し応答 */ 934 case ESV_GET_SNA: /* 0x52 プロパティ値読み出し不可応答 */ 941 935 if (!p_sobj) { 942 936 ECN_DBG_PUT "_ecn_tsk_ecn_msg_main() eoj %06X not found.", … … 949 943 break; 950 944 951 /* 0x63 vpeBlÊmv*/952 case ESV_INF: /* 0x73 vpeBlÊm*/953 case ESV_INF_SNA: /* 0x53 vpeBlÊmsÂ*/945 /* 0x63 プロパティ値通知要求 */ 946 case ESV_INF: /* 0x73 プロパティ値通知 */ 947 case ESV_INF_SNA: /* 0x53 プロパティ値通知不可応答 */ 954 948 if (!p_sobj) { 955 949 ECN_DBG_PUT "_ecn_tsk_ecn_msg_main() eoj %06X not found.", … … 962 956 break; 963 957 964 /* 0x6E vpeBl«ÝEÇÝoµv*/965 case ESV_SET_GET_RES: /* 0x7E vpeBl«ÝEÇÝoµ*/966 case ESV_SET_GET_SNA: /* 0x5E vpeBl«ÝEÇÝoµsÂ*/958 /* 0x6E プロパティ値書き込み・読み出し要求 */ 959 case ESV_SET_GET_RES: /* 0x7E プロパティ値書き込み・読み出し応答 */ 960 case ESV_SET_GET_SNA: /* 0x5E プロパティ値書き込み・読み出し不可応答 */ 967 961 if (!p_sobj) { 968 962 ECN_DBG_PUT "_ecn_tsk_ecn_msg_main() eoj %06X not found.", … … 975 969 break; 976 970 977 /* 0x74 vpeBlÊmivj*/978 case ESV_INFC_RES: /* 0x7A vpeBlÊm*/971 /* 0x74 プロパティ値通知(応答要) */ 972 case ESV_INFC_RES: /* 0x7A プロパティ値通知応答 */ 979 973 result = 1; 980 974 break; … … 986 980 } 987 981 988 /* vpeBÊmvðM*/982 /* プロパティ通知要求を送信 */ 989 983 if (a_fbs_anno.ptr != NULL) { 990 984 ER a_ret = _ecn_tsk_snd_mbx(a_fbs_anno, true); … … 1066 1060 1067 1061 /* 1068 * ECN_FBS_ID ©çT_ECN_PRP1Æ»Ìtf[^(edt)ðoµAedtÌ|C^ðÔ·1069 * ø1070 * ECN_FBS_ID fa_fbs_id ÇÝæéFBS1071 * T_ECN_PRP *fp_prp epc+pdc Ìi[æ1072 * T_ECN_SUB_BLK * const fp_prev_blk OñgÁ½Ì|C^(³¯êÎ0)1073 * ³íF|C^NG:01074 * |C^Í_ecn_fbs_mbx_rel()Åðú·éKvª é1062 * ECN_FBS_IDからT_ECN_PRP1件とその付随データ(edt)を抽出し、edtのポインタを返す 1063 * 引数 1064 * ECN_FBS_ID fa_fbs_id 読み取るFBS 1065 * T_ECN_PRP *fp_prp epc+pdcの格納先 1066 * T_ECN_SUB_BLK * const fp_prev_blk 前回使ったメモリのポインタ(無ければ0) 1067 * 正常:ポインタ NG:0 1068 * ポインタは_ecn_fbs_mbx_rel()で解放する必要がある 1075 1069 */ 1076 1070 static T_ECN_SUB_BLK *_ecn_tsk_get_prp_pce(ECN_FBS_ID fa_fbs_id, T_ECN_PRP *fp_prp, … … 1081 1075 ER a_ret; 1082 1076 1083 /* vpeBpÌæ¾*/1077 /* プロパティ用メモリの取得 */ 1084 1078 if (fp_prev_blk) { 1085 p_blk = fp_prev_blk; /* OñgÁ½ª éÈçAÄp·é*/1079 p_blk = fp_prev_blk; /* 前回使ったメモリがあるなら、再利用する */ 1086 1080 } 1087 1081 else { … … 1089 1083 if (!p_blk) { 1090 1084 ECN_DBG_PUT "_ecn_fbs_mbx_get() fault." ECN_DBG_END; 1091 return 0; /* s«*/1085 return 0; /* メモリ不足 */ 1092 1086 } 1093 1087 } 1094 1088 memset(p_blk, 0, sizeof(*p_blk)); 1095 1089 1096 /* T_ECN_PRP ª(epc,pdc)ðÇÝæé*/1090 /* T_ECN_PRP部分(epc,pdc)を読み取る */ 1097 1091 a_size = 0; 1098 1092 a_ret = _ecn_fbs_get_data(fa_fbs_id, fp_prp, sizeof(*fp_prp), &a_size); … … 1103 1097 1104 1098 if (0 < fp_prp->pdc) { 1105 /* tf[^ª(edt)ðÇÝæé*/1099 /* 付随データ部分(edt)を読み取る */ 1106 1100 a_size = 0; 1107 1101 a_ret = _ecn_fbs_get_data(fa_fbs_id, p_blk, fp_prp->pdc, &a_size); … … 1115 1109 1116 1110 lb_except: 1117 /* vpeBpðú*/1111 /* プロパティ用メモリ解放 */ 1118 1112 if (p_blk && !fp_prev_blk) 1119 1113 _ecn_fbs_mbx_rel(p_blk); … … 1125 1119 ECN_FBS_ID fa_fbs_id, ECN_FBS_ID a_fbs_res, ECN_FBS_ID *fa_fbs_anno, int a_count, 1126 1120 int *p_sw_ok); 1127 /* vpeBl«ÝÀs*/1121 /* プロパティ値書き込み実行 */ 1128 1122 static ER _ecn_tsk_eoj_set_main(const EOBJINIB *fp_obj, ATR fa_eobjatr, bool_t fa_update, 1129 1123 ECN_FBS_ID fa_fbs_id, ECN_FBS_ID a_fbs_res, ECN_FBS_ID *fa_fbs_anno, int a_count, … … 1141 1135 1142 1136 for (i = 0; i < a_count; i++) { 1143 /* ECN_FBS_ID ©çT_ECN_PRP1Æ»Ìtf[^ðoµA»Ì|C^ðÔ·*/1137 /* ECN_FBS_IDからT_ECN_PRP1件とその付随データを抽出し、そのポインタを返す */ 1144 1138 p_edt = _ecn_tsk_get_prp_pce(fa_fbs_id, &a_prp, p_edt); 1145 1139 if (!p_edt) { … … 1148 1142 } 1149 1143 1150 /* vpeBÌÝèset_prp(obj, reqp, resp) */1144 /* プロパティの設定 set_prp(obj, reqp, resp) */ 1151 1145 a_size = a_prp.pdc; 1152 /* obj,epc ÉηésetÖðÄÔ*/1146 /* obj,epcに対応するset関数を呼ぶ */ 1153 1147 a_eprp = _ecn_tsk_eoj_get_property(fp_obj, a_prp.epc); 1154 1148 if ((a_eprp != NULL) … … 1172 1166 fp_obj->eojx1 << 16 | fp_obj->eojx2 << 8 | fp_obj->eojx3, 1173 1167 a_prp.epc, p_edt->payload[0], a_size ECN_DBG_END; 1174 *p_sw_ok = 0; /* vpeBÝè¸s*/1175 /* ÌêEDTÍÝèµÈ¢*/1168 *p_sw_ok = 0; /* プロパティ設定失敗 */ 1169 /* 応答処理の場合EDTは設定しない */ 1176 1170 if (fa_update) 1177 1171 a_prp.pdc = 0; 1178 1172 } 1179 1173 1180 /* d¶pÉf[^ÇÁ(epc,pdcÌ2byte) */1174 /* 応答電文用メモリにデータ追加(epc,pdcの2byte) */ 1181 1175 a_ret = _ecn_fbs_add_data_ex(a_fbs_res, &a_prp, sizeof(a_prp)); 1182 1176 if (a_ret) { … … 1186 1180 1187 1181 if (0 < a_prp.pdc) { 1188 /* d¶pÉf[^ÇÁ(edt n-byte) */1182 /* 応答電文用メモリにデータ追加(edt n-byte) */ 1189 1183 a_ret = _ecn_fbs_add_data_ex(a_fbs_res, p_edt->payload, a_prp.pdc); 1190 1184 if (a_ret) { … … 1195 1189 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.opc ++; 1196 1190 1197 /* vpeBÊm èÌê*/1191 /* プロパティ通知ありの場合 */ 1198 1192 if (a_anno && (a_ans == a_size)) { 1199 1193 if (fa_fbs_anno->ptr == NULL) { … … 1213 1207 1214 1208 lb_finally: 1215 /* vpeBpðú*/1209 /* プロパティ用メモリ解放 */ 1216 1210 if (p_edt) 1217 1211 _ecn_fbs_mbx_rel(p_edt); … … 1222 1216 static ER _ecn_tsk_eoj_get_main(const EOBJINIB *fp_obj, ATR fa_eobjatr, bool_t fa_forward, ATR fa_access, 1223 1217 ECN_FBS_ID fa_fbs_id, ECN_FBS_ID a_fbs_res, int a_count, int *p_sw_ok); 1224 /* vpeBlÇÝoµÀs*/1218 /* プロパティ値読み出し実行 */ 1225 1219 static ER _ecn_tsk_eoj_get_main(const EOBJINIB *fp_obj, ATR fa_eobjatr, bool_t fa_forward, ATR fa_access, 1226 1220 ECN_FBS_ID fa_fbs_id, ECN_FBS_ID a_fbs_res, int a_count, int *p_sw_ok) 1227 1221 { 1228 1222 T_ECN_SUB_BLK *p_edt = 0; 1229 void *p_prp_buf = 0; /* ìÆÌæ*/1223 void *p_prp_buf = 0; /* 作業領域 */ 1230 1224 const EPRPINIB *a_eprp; 1231 1225 ER a_ret = E_SYS; … … 1235 1229 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.opc = 0; 1236 1230 1237 /* ìÆÌæmÛ*/1231 /* 作業領域確保 */ 1238 1232 p_prp_buf = _ecn_fbs_mbx_get(ECHONET_MEMPOOL_BLOCK_SIZE); 1239 1233 if (!p_prp_buf) { 1240 1234 ECN_DBG_PUT "_ecn_fbs_mbx_get() result = %d:%s", a_ret, itron_strerror(a_ret) ECN_DBG_END; 1241 goto lb_except; /* s«*/1235 goto lb_except; /* メモリ不足 */ 1242 1236 } 1243 1237 1244 1238 for (i = 0; i < a_count; i++) { 1245 /* ECN_FBS_ID ©çT_ECN_PRP1Æ»Ìtf[^ðo*/1239 /* ECN_FBS_IDからT_ECN_PRP1件とその付随データを抽出 */ 1246 1240 p_edt = _ecn_tsk_get_prp_pce(fa_fbs_id, &a_prp, p_edt); 1247 1241 if (!p_edt) { … … 1250 1244 } 1251 1245 1252 /* vpeBÌæ¾get_eprp(obj, reqp, resp, size) */1246 /* プロパティの取得 get_eprp(obj, reqp, resp, size) */ 1253 1247 memset(p_prp_buf, 0, ECHONET_MEMPOOL_BLOCK_SIZE); 1254 /* obj,epc ÉηégetÖðÄÔ*/1248 /* obj,epcに対応するget関数を呼ぶ */ 1255 1249 a_eprp = _ecn_tsk_eoj_get_property(fp_obj, a_prp.epc); 1256 1250 if ((a_eprp != NULL) && (((a_eprp->eprpatr & fa_access) != 0) && (fa_eobjatr == EOBJ_LOCAL_NODE) || fa_forward)) { … … 1263 1257 a_prp.pdc = (uint8_t)a_ans; 1264 1258 } else { 1265 *p_sw_ok = 0; /* vpeB澸s*/1259 *p_sw_ok = 0; /* プロパティ取得失敗 */ 1266 1260 a_ans = 0; 1267 1261 a_prp.pdc = 0; 1268 1262 } 1269 1263 1270 /* d¶pÉf[^ÇÁ(epc,pdcÌ2byte) */1264 /* 応答電文用メモリにデータ追加(epc,pdcの2byte) */ 1271 1265 a_ret = _ecn_fbs_add_data_ex(a_fbs_res, &a_prp, sizeof(a_prp)); 1272 1266 if (a_ret) { … … 1275 1269 } 1276 1270 if (0 < a_ans) { 1277 /* tf[^ÇÁ*/1271 /* 付随データ追加 */ 1278 1272 a_ret = _ecn_fbs_add_data_ex(a_fbs_res, p_prp_buf, a_ans); 1279 1273 if (a_ret) { … … 1291 1285 1292 1286 lb_finally: 1293 /* ìÆÌæðú*/1287 /* 作業領域解放 */ 1294 1288 if (p_prp_buf) 1295 1289 _ecn_fbs_mbx_rel(p_prp_buf); 1296 1290 1297 /* vpeBpðú*/1291 /* プロパティ用メモリ解放 */ 1298 1292 if (p_edt) 1299 1293 _ecn_fbs_mbx_rel(p_edt); … … 1303 1297 1304 1298 static ER _ecn_tsk_eoj_res_main(ECN_FBS_ID fa_fbs_id, ECN_FBS_ID a_fbs_res, int a_count, int *p_sw_ok); 1305 /* vpeBlÇÝoµÀs*/1299 /* プロパティ値読み出し実行 */ 1306 1300 static ER _ecn_tsk_eoj_res_main(ECN_FBS_ID fa_fbs_id, ECN_FBS_ID a_fbs_res, int a_count, int *p_sw_ok) 1307 1301 { 1308 1302 T_ECN_SUB_BLK *p_edt = 0; 1309 void *p_prp_buf = 0; /* ìÆÌæ*/1303 void *p_prp_buf = 0; /* 作業領域 */ 1310 1304 ER a_ret = E_SYS; 1311 1305 T_ECN_PRP a_prp; /* epc+pdc */ … … 1314 1308 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.opc = 0; 1315 1309 1316 /* ìÆÌæmÛ*/1310 /* 作業領域確保 */ 1317 1311 p_prp_buf = _ecn_fbs_mbx_get(ECHONET_MEMPOOL_BLOCK_SIZE); 1318 1312 if (!p_prp_buf) { 1319 1313 ECN_DBG_PUT "_ecn_fbs_mbx_get() result = %d:%s", a_ret, itron_strerror(a_ret) ECN_DBG_END; 1320 goto lb_except; /* s«*/1314 goto lb_except; /* メモリ不足 */ 1321 1315 } 1322 1316 1323 1317 for (i = 0; i < a_count; i++) { 1324 /* ECN_FBS_ID ©çT_ECN_PRP1Æ»Ìtf[^ðo*/1318 /* ECN_FBS_IDからT_ECN_PRP1件とその付随データを抽出 */ 1325 1319 p_edt = _ecn_tsk_get_prp_pce(fa_fbs_id, &a_prp, p_edt); 1326 1320 if (!p_edt) { … … 1331 1325 a_prp.pdc = 0; 1332 1326 1333 /* d¶pÉf[^ÇÁ(epc,pdcÌ2byte) */1327 /* 応答電文用メモリにデータ追加(epc,pdcの2byte) */ 1334 1328 a_ret = _ecn_fbs_add_data_ex(a_fbs_res, &a_prp, sizeof(a_prp)); 1335 1329 if (a_ret) { … … 1346 1340 1347 1341 lb_finally: 1348 /* ìÆÌæðú*/1342 /* 作業領域解放 */ 1349 1343 if (p_prp_buf) 1350 1344 _ecn_fbs_mbx_rel(p_prp_buf); 1351 1345 1352 /* vpeBpðú*/1346 /* プロパティ用メモリ解放 */ 1353 1347 if (p_edt) 1354 1348 _ecn_fbs_mbx_rel(p_edt); … … 1357 1351 } 1358 1352 1359 /* vpeBlÇÝòεÀs*/1353 /* プロパティ値読み飛ばし実行 */ 1360 1354 static ER _ecn_tsk_eoj_skip_main(const EOBJINIB *fp_obj, ECN_FBS_ID fa_fbs_id, 1361 1355 int a_count); … … 1368 1362 1369 1363 for (i = 0; i < a_count; i++) { 1370 /* T_ECN_PRP ª(epc,pdc)ðÇÝæé*/1364 /* T_ECN_PRP部分(epc,pdc)を読み取る */ 1371 1365 a_size = 0; 1372 1366 a_ret = _ecn_fbs_get_data(fa_fbs_id, &a_prp, sizeof(a_prp), &a_size); … … 1376 1370 } 1377 1371 1378 /* pdc ªÇÝòε*/1372 /* pdc分読み飛ばし */ 1379 1373 a_ret = _ecn_fbs_seek_rpos(fa_fbs_id, a_prp.pdc); 1380 1374 if (a_ret) { … … 1395 1389 static void _ecn_tsk_mk_rsp_hdr(const EOBJINIB *fp_obj, T_ECN_EDT_HDR *fp_rsp_esv, 1396 1390 T_ECN_EDT_HDR const *fp_req_esv); 1397 /* d¶Ýè*/1391 /* 応答電文設定 */ 1398 1392 static void _ecn_tsk_mk_rsp_hdr(const EOBJINIB *fp_obj, T_ECN_EDT_HDR *fp_rsp_esv, 1399 1393 T_ECN_EDT_HDR const *fp_req_esv) … … 1420 1414 } 1421 1415 1422 /* d¶pfbsÝè*/1416 /* 応答電文用fbs設定 */ 1423 1417 static void _ecn_tsk_set_rsp_fbs(ECN_FBS_ID fa_rsp_fbs, T_ECN_FST_BLK const *fp_req_ptr); 1424 /* d¶pfbsÝè(sender/targetÌÝè) */1418 /* 応答電文用fbs設定(sender/targetの設定) */ 1425 1419 static void _ecn_tsk_set_rsp_fbs(ECN_FBS_ID fa_rsp_fbs, T_ECN_FST_BLK const *fp_req_ptr) 1426 1420 { … … 1431 1425 } 1432 1426 1433 /* vpeBl«Ýv*/1427 /* プロパティ値書き込み要求 */ 1434 1428 static void _ecn_tsk_eoj_set(const EOBJINIB *fp_obj, ATR fa_eobjatr, bool_t fa_update, 1435 1429 ECN_FBS_ID fa_fbs_id, ECN_SRV_CODE fa_res_esv, ECN_SRV_CODE fa_sna_esv, … … 1446 1440 memset(&a_ecn_hdp, 0, sizeof(a_ecn_hdp)); 1447 1441 1448 /* ÅåTCYÌæ¾*/1442 /* 応答最大サイズの取得 */ 1449 1443 a_size = sizeof(T_ECN_HDR) + sizeof(T_ECN_EDATA_BODY) + sizeof(T_ECN_PRP); 1450 1444 1451 /* d¶pÌæ¾*/1445 /* 応答電文用メモリの取得 */ 1452 1446 a_ret = _ecn_fbs_cre(a_size, &a_fbs_res); 1453 if (a_ret != E_OK || !a_fbs_res.ptr) /* mÛ¸s*/1447 if (a_ret != E_OK || !a_fbs_res.ptr) /* 確保失敗 */ 1454 1448 return; 1455 1449 1456 /* d¶Ýè*/1450 /* 応答電文設定 */ 1457 1451 if(p_req_esv->edata.deoj.eojx3 != 0) 1458 1452 _ecn_tsk_mk_rsp_hdr_res(&a_ecn_hdp, p_req_esv); … … 1460 1454 _ecn_tsk_mk_rsp_hdr(fp_obj, &a_ecn_hdp, p_req_esv); 1461 1455 1462 /* ³íÌd¶ªvpeBlÊmÌê*/1456 /* 正常時の応答電文がプロパティ値通知応答の場合 */ 1463 1457 if (fa_res_esv == ESV_INFC_RES) { 1464 /* M³Æ¶æðüêÖ¦*/1458 /* 送信元と宛先を入れ替え */ 1465 1459 eoj = a_ecn_hdp.edata.seoj; 1466 1460 a_ecn_hdp.edata.seoj = a_ecn_hdp.edata.deoj; … … 1468 1462 } 1469 1463 1470 f_put_fbs_eoj("_ecn_tsk_eoj_set", "fa_fbs_id", fa_fbs_id); /* s/deoj fobOoÍ*/1471 1472 /* d¶pÉf[^ÇÁ*/1464 f_put_fbs_eoj("_ecn_tsk_eoj_set", "fa_fbs_id", fa_fbs_id); /* s/deoj デバッグ出力 */ 1465 1466 /* 応答電文用メモリにデータ追加 */ 1473 1467 a_ret = _ecn_fbs_add_data_ex(a_fbs_res, &a_ecn_hdp, 1474 1468 sizeof(a_ecn_hdp.ecn_hdr) + sizeof(a_ecn_hdp.edata)); … … 1476 1470 goto lb_except; 1477 1471 1478 /* payload æªÌT_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)ðÇÝòη*/1472 /* payload先頭のT_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)を読み飛ばす */ 1479 1473 a_ret = _ecn_fbs_set_rpos(fa_fbs_id, offsetof(T_ECN_EDT_HDR, ecn_prp)); 1480 1474 if (a_ret) 1481 1475 goto lb_except; 1482 1476 1483 /* d¶pfbsÝè*/1477 /* 応答電文用fbs設定 */ 1484 1478 _ecn_tsk_set_rsp_fbs(a_fbs_res, fa_fbs_id.ptr); 1485 1479 1486 /* vpeBl«ÝÀs*/1480 /* プロパティ値書き込み実行 */ 1487 1481 a_ret = _ecn_tsk_eoj_set_main(fp_obj, fa_eobjatr, fa_update, fa_fbs_id, a_fbs_res, 1488 1482 fa_fbs_anno, p_req_esv->edata.opc, &a_sw_ok); … … 1490 1484 goto lb_except; 1491 1485 1492 /* vÌê*/1486 /* 応答要の場合 */ 1493 1487 if (a_sw_ok) { 1494 1488 if (!fa_res_esv) { 1495 /* svÌê*/1489 /* 応答不要の場合 */ 1496 1490 _ecn_fbs_del(a_fbs_res); 1497 1491 goto lb_finally; 1498 1492 } 1499 /* Ýè¬÷*/1493 /* 設定処理成功 */ 1500 1494 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.esv = fa_res_esv; 1501 1495 } else { 1502 1496 if (!fa_sna_esv) { 1503 /* svÌê*/1497 /* 応答不要の場合 */ 1504 1498 _ecn_fbs_del(a_fbs_res); 1505 1499 goto lb_finally; 1506 1500 } 1507 /* Ýè¸s*/1501 /* 設定処理失敗 */ 1508 1502 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.esv = fa_sna_esv; 1509 1503 } 1510 /* M*/1504 /* 応答送信 */ 1511 1505 a_ret = _ecn_tsk_snd_mbx(a_fbs_res, false); 1512 1506 if (a_ret == E_OK) … … 1514 1508 1515 1509 lb_except: 1516 /* f[^M¸sµ½çÌæðú*/1510 /* データ送信失敗したら領域解放 */ 1517 1511 if (a_fbs_res.ptr) 1518 1512 _ecn_fbs_del(a_fbs_res); … … 1522 1516 } 1523 1517 1524 /* vpeBlÇÝoµv*/1518 /* プロパティ値読み出し要求 */ 1525 1519 static void _ecn_tsk_eoj_get(const EOBJINIB *fp_obj, ATR fa_eobjatr, bool_t fa_forward, ATR fa_access, 1526 1520 ECN_FBS_ID fa_fbs_id, ECN_SRV_CODE fa_res_esv, ECN_SRV_CODE fa_sna_esv) … … 1535 1529 memset(&a_ecn_hdp, 0, sizeof(a_ecn_hdp)); 1536 1530 1537 /* úæ¾TCY*/1531 /* 初期取得サイズ */ 1538 1532 a_size = sizeof(T_ECN_HDR) + sizeof(T_ECN_EDATA_BODY) + sizeof(T_ECN_PRP); 1539 1533 1540 /* d¶pÌæ¾*/1534 /* 応答電文用メモリの取得 */ 1541 1535 a_ret = _ecn_fbs_cre(a_size, &a_fbs_res); 1542 if (a_ret != E_OK || !a_fbs_res.ptr) { /* mÛ¸s*/1536 if (a_ret != E_OK || !a_fbs_res.ptr) { /* 確保失敗 */ 1543 1537 ECN_DBG_PUT "_ecn_fbs_cre() result = %d:%s", a_ret, itron_strerror(a_ret) ECN_DBG_END; 1544 1538 goto lb_finally; 1545 1539 } 1546 1540 1547 /* d¶Ýè*/1541 /* 応答電文設定 */ 1548 1542 if(p_req_esv->edata.deoj.eojx3 != 0) 1549 1543 _ecn_tsk_mk_rsp_hdr_res(&a_ecn_hdp, p_req_esv); … … 1551 1545 _ecn_tsk_mk_rsp_hdr(fp_obj, &a_ecn_hdp, p_req_esv); 1552 1546 1553 f_put_fbs_eoj("_ecn_tsk_eoj_get", "fa_fbs_id", fa_fbs_id); /* s/deoj fobOoÍ*/1554 1555 /* d¶pÉf[^ÇÁ*/1547 f_put_fbs_eoj("_ecn_tsk_eoj_get", "fa_fbs_id", fa_fbs_id); /* s/deoj デバッグ出力 */ 1548 1549 /* 応答電文用メモリにデータ追加 */ 1556 1550 a_ret = _ecn_fbs_add_data_ex(a_fbs_res, &a_ecn_hdp, 1557 1551 sizeof(a_ecn_hdp.ecn_hdr) + sizeof(a_ecn_hdp.edata)); … … 1561 1555 } 1562 1556 1563 /* payload æªÌT_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)ðÇÝòη*/1557 /* payload先頭のT_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)を読み飛ばす */ 1564 1558 a_ret = _ecn_fbs_set_rpos(fa_fbs_id, offsetof(T_ECN_EDT_HDR, ecn_prp)); 1565 1559 if (a_ret) { … … 1568 1562 } 1569 1563 1570 /* d¶pfbsÝè*/1564 /* 応答電文用fbs設定 */ 1571 1565 _ecn_tsk_set_rsp_fbs(a_fbs_res, fa_fbs_id.ptr); 1572 1566 1573 /* vpeBlÇÝÝÀs*/1567 /* プロパティ値読み込み実行 */ 1574 1568 a_ret = _ecn_tsk_eoj_get_main(fp_obj, fa_eobjatr, fa_forward, fa_access, fa_fbs_id, a_fbs_res, 1575 1569 ((T_EDATA *)fa_fbs_id.ptr)->hdr.edata.opc, &a_sw_ok); … … 1581 1575 if (a_sw_ok) { 1582 1576 if (!fa_res_esv) { 1583 /* svÌê*/1577 /* 応答不要の場合 */ 1584 1578 _ecn_fbs_del(a_fbs_res); 1585 1579 goto lb_finally; 1586 1580 } 1587 /* Ýè¬÷*/1581 /* 設定処理成功 */ 1588 1582 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.esv = fa_res_esv; 1589 1583 } else { 1590 1584 if (!fa_sna_esv) { 1591 /* svÌê*/1585 /* 応答不要の場合 */ 1592 1586 _ecn_fbs_del(a_fbs_res); 1593 1587 goto lb_finally; 1594 1588 } 1595 /* Ýè¸s*/1589 /* 設定処理失敗 */ 1596 1590 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.esv = fa_sna_esv; 1597 1591 } 1598 /* M*/1592 /* 応答送信 */ 1599 1593 a_ret = _ecn_tsk_snd_mbx(a_fbs_res, false); 1600 1594 if (a_ret != E_OK) { … … 1605 1599 1606 1600 lb_except: 1607 /* f[^M¸sµ½çÌæðú*/1601 /* データ送信失敗したら領域解放 */ 1608 1602 if (a_fbs_res.ptr) 1609 1603 _ecn_fbs_del(a_fbs_res); … … 1613 1607 } 1614 1608 1615 /* vpeBlÇÝoµv*/1609 /* プロパティ値読み出し要求 */ 1616 1610 static void _ecn_tsk_eoj_res(ECN_FBS_ID fa_fbs_id, ECN_SRV_CODE fa_res_esv, 1617 1611 ECN_SRV_CODE fa_sna_esv) … … 1626 1620 memset(&a_ecn_hdp, 0, sizeof(a_ecn_hdp)); 1627 1621 1628 /* úæ¾TCY*/1622 /* 初期取得サイズ */ 1629 1623 a_size = sizeof(T_ECN_HDR) + sizeof(T_ECN_EDATA_BODY) + sizeof(T_ECN_PRP); 1630 1624 1631 /* d¶pÌæ¾*/1625 /* 応答電文用メモリの取得 */ 1632 1626 a_ret = _ecn_fbs_cre(a_size, &a_fbs_res); 1633 if (a_ret != E_OK || !a_fbs_res.ptr) { /* mÛ¸s*/1627 if (a_ret != E_OK || !a_fbs_res.ptr) { /* 確保失敗 */ 1634 1628 ECN_DBG_PUT "_ecn_fbs_cre() result = %d:%s", a_ret, itron_strerror(a_ret) ECN_DBG_END; 1635 1629 goto lb_finally; 1636 1630 } 1637 1631 1638 /* d¶Ýè*/1632 /* 応答電文設定 */ 1639 1633 _ecn_tsk_mk_rsp_hdr_res(&a_ecn_hdp, p_req_esv); 1640 1634 1641 f_put_fbs_eoj("_ecn_tsk_eoj_res", "fa_fbs_id", fa_fbs_id); /* s/deoj fobOoÍ*/1642 1643 /* d¶pÉf[^ÇÁ*/1635 f_put_fbs_eoj("_ecn_tsk_eoj_res", "fa_fbs_id", fa_fbs_id); /* s/deoj デバッグ出力 */ 1636 1637 /* 応答電文用メモリにデータ追加 */ 1644 1638 a_ret = _ecn_fbs_add_data_ex(a_fbs_res, &a_ecn_hdp, 1645 1639 sizeof(a_ecn_hdp.ecn_hdr) + sizeof(a_ecn_hdp.edata)); … … 1649 1643 } 1650 1644 1651 /* payload æªÌT_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)ðÇÝòη*/1645 /* payload先頭のT_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)を読み飛ばす */ 1652 1646 a_ret = _ecn_fbs_set_rpos(fa_fbs_id, offsetof(T_ECN_EDT_HDR, ecn_prp)); 1653 1647 if (a_ret) { … … 1656 1650 } 1657 1651 1658 /* d¶pfbsÝè*/1652 /* 応答電文用fbs設定 */ 1659 1653 _ecn_tsk_set_rsp_fbs(a_fbs_res, fa_fbs_id.ptr); 1660 1654 1661 /* vpeBlÇÝÝÀs*/1655 /* プロパティ値読み込み実行 */ 1662 1656 a_ret = _ecn_tsk_eoj_res_main(fa_fbs_id, a_fbs_res, 1663 1657 ((T_EDATA *)fa_fbs_id.ptr)->hdr.edata.opc, &a_sw_ok); … … 1669 1663 if (a_sw_ok) { 1670 1664 if (!fa_res_esv) { 1671 /* svÌê*/1665 /* 応答不要の場合 */ 1672 1666 _ecn_fbs_del(a_fbs_res); 1673 1667 goto lb_finally; 1674 1668 } 1675 /* Ýè¬÷*/1669 /* 設定処理成功 */ 1676 1670 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.esv = fa_res_esv; 1677 1671 } else { 1678 1672 if (!fa_sna_esv) { 1679 /* svÌê*/1673 /* 応答不要の場合 */ 1680 1674 _ecn_fbs_del(a_fbs_res); 1681 1675 goto lb_finally; 1682 1676 } 1683 /* Ýè¸s*/1677 /* 設定処理失敗 */ 1684 1678 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.esv = fa_sna_esv; 1685 1679 } 1686 /* M*/1680 /* 応答送信 */ 1687 1681 a_ret = _ecn_tsk_snd_mbx(a_fbs_res, false); 1688 1682 if (a_ret != E_OK) { … … 1693 1687 1694 1688 lb_except: 1695 /* f[^M¸sµ½çÌæðú*/1689 /* データ送信失敗したら領域解放 */ 1696 1690 if (a_fbs_res.ptr) 1697 1691 _ecn_fbs_del(a_fbs_res); … … 1708 1702 T_ECN_EDT_HDR a_ecn_hdp; 1709 1703 ECN_FBS_ID a_fbs_res = { 0 }; 1710 int a_rdprp_wrpos; /* vpeBÇÝÝ«ÝÌwbhÊu*/1704 int a_rdprp_wrpos; /* プロパティ読み込み件数書き込み時のヘッド位置 */ 1711 1705 ER a_ret; 1712 1706 int i, a_size, a_rdlen; 1713 1707 int a_sw_ok = 1; 1714 int a_count = ((T_EDATA *)fa_fbs_id.ptr)->hdr.edata.opc; /* vpeB*/1708 int a_count = ((T_EDATA *)fa_fbs_id.ptr)->hdr.edata.opc; /* 処理プロパティ数 */ 1715 1709 1716 1710 memset(&a_ecn_hdp, 0, sizeof(a_ecn_hdp)); … … 1719 1713 fp_obj->eojx1 << 16 | fp_obj->eojx2 << 8 | fp_obj->eojx3 ECN_DBG_END; 1720 1714 1721 /* úæ¾TCY*/1715 /* 初期取得サイズ */ 1722 1716 a_size = sizeof(T_ECN_HDR) + sizeof(T_ECN_EDATA_BODY) + sizeof(T_ECN_PRP); 1723 1717 1724 /* d¶pÌæ¾*/1718 /* 応答電文用メモリの取得 */ 1725 1719 a_ret = _ecn_fbs_cre(a_size, &a_fbs_res); 1726 if (a_ret != E_OK || !a_fbs_res.ptr) /* mÛ¸s*/1720 if (a_ret != E_OK || !a_fbs_res.ptr) /* 確保失敗 */ 1727 1721 goto lb_finally; 1728 1722 1729 /* d¶Ýè*/1723 /* 応答電文設定 */ 1730 1724 if(p_req_esv->edata.deoj.eojx3 != 0) 1731 1725 _ecn_tsk_mk_rsp_hdr_res(&a_ecn_hdp, p_req_esv); … … 1734 1728 a_size -= sizeof(T_ECN_HDR) + sizeof(T_ECN_EDATA_BODY); 1735 1729 1736 f_put_fbs_eoj("_ecn_tsk_eoj_set_get", "fa_fbs_id", fa_fbs_id); /* s/deoj fobOoÍ*/1737 1738 /* d¶pÉf[^ÇÁ*/1730 f_put_fbs_eoj("_ecn_tsk_eoj_set_get", "fa_fbs_id", fa_fbs_id); /* s/deoj デバッグ出力 */ 1731 1732 /* 応答電文用メモリにデータ追加 */ 1739 1733 a_ret = _ecn_fbs_add_data_ex(a_fbs_res, &a_ecn_hdp, 1740 1734 sizeof(a_ecn_hdp.ecn_hdr) + sizeof(a_ecn_hdp.edata)); … … 1742 1736 goto lb_except; 1743 1737 1744 /* payload æªÌT_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)ðÇÝòη*/1738 /* payload先頭のT_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)を読み飛ばす */ 1745 1739 a_ret = _ecn_fbs_set_rpos(fa_fbs_id, offsetof(T_ECN_EDT_HDR, ecn_prp)); 1746 1740 if (a_ret) 1747 1741 goto lb_except; 1748 1742 1749 /* d¶pfbsÝè*/1743 /* 応答電文用fbs設定 */ 1750 1744 _ecn_tsk_set_rsp_fbs(a_fbs_res, fa_fbs_id.ptr); 1751 1745 1752 /* vpeBl«ÝÀs*/1746 /* プロパティ値書き込み実行 */ 1753 1747 a_ret = _ecn_tsk_eoj_set_main(fp_obj, fa_eobjatr, false, fa_fbs_id, a_fbs_res, 1754 1748 fa_fbs_anno, a_count, &a_sw_ok); … … 1763 1757 (a_sw_ok ? "true" : "false") ECN_DBG_END; 1764 1758 1765 /* ÌðÇÝæé(1byte) */1766 /* ¨ECHONET-Lite_Ver.1.10_02.pdf p.40 [OPCGet] */1759 /* 次の件数を読み取る(1byte) */ 1760 /* → ECHONET-Lite_Ver.1.10_02.pdf p.40 [OPCGet] */ 1767 1761 a_rdlen = i = 0; 1768 1762 a_ret = _ecn_fbs_get_data(fa_fbs_id, &i, 1, &a_rdlen); … … 1771 1765 a_count = *(uint8_t *)&i; 1772 1766 1773 /* vpeBÇÝÝ«ÝÌwbhîñðL^*/1767 /* プロパティ読み込み件数書き込み時のヘッド情報を記録 */ 1774 1768 a_rdprp_wrpos = _ecn_fbs_get_datalen(a_fbs_res); 1775 1769 1776 /* d¶pÉf[^ÇÁ(OPCGet 1byte) */1770 /* 応答電文用メモリにデータ追加 (OPCGet 1byte) */ 1777 1771 a_ret = _ecn_fbs_add_data_ex(a_fbs_res, &i, 1); 1778 1772 if (a_ret) 1779 1773 goto lb_except; 1780 1774 1781 /* ±Ì_ÅÌd¶vpeBðL^*/1775 /* この時点での応答電文中プロパティ件数を記録 */ 1782 1776 i = ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.opc; 1783 1777 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.opc = 0; 1784 1778 1785 /* vpeBlÇÝÝÀs*/1779 /* プロパティ値読み込み実行 */ 1786 1780 a_ret = _ecn_tsk_eoj_get_main(fp_obj, fa_eobjatr, false, EPC_RULE_GET, fa_fbs_id, a_fbs_res, 1787 1781 a_count, &a_sw_ok); … … 1796 1790 (a_sw_ok ? "true" : "false") ECN_DBG_END; 1797 1791 1798 /* vpeBÇÝÝ«ÝÌwbhîñÅAÇÝoµðL^*/1792 /* プロパティ読み込み件数書き込み時のヘッド情報で、読み出し件数を記録 */ 1799 1793 _ecn_fbs_poke(a_fbs_res, a_rdprp_wrpos, ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.opc); 1800 1794 1801 /* L^µÄ¨¢½vpeBi«Ýjð«ß·*/1795 /* 記録しておいたプロパティ件数(書き込み件数)を書き戻す */ 1802 1796 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.opc = (uint8_t)i; 1803 1797 1804 /* vÌê*/1798 /* 応答要の場合 */ 1805 1799 if (a_sw_ok) { 1806 /* Ýè¬÷*/1800 /* 設定処理成功 */ 1807 1801 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.esv = fa_res_esv; 1808 1802 } else { 1809 /* Ýè¸s*/1803 /* 設定処理失敗 */ 1810 1804 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.esv = fa_sna_esv; 1811 1805 } 1812 /* M*/1806 /* 応答送信 */ 1813 1807 a_ret = _ecn_tsk_snd_mbx(a_fbs_res, false); 1814 1808 if (a_ret == E_OK) … … 1816 1810 1817 1811 lb_except: 1818 /* f[^M¸sµ½çÌæðú*/1812 /* データ送信失敗したら領域解放 */ 1819 1813 if (a_fbs_res.ptr) 1820 1814 _ecn_fbs_del(a_fbs_res); … … 1833 1827 int i, a_size, a_rdlen; 1834 1828 int a_sw_ok = 1; 1835 int a_count = ((T_EDATA *)fa_fbs_id.ptr)->hdr.edata.opc; /* vpeB*/1829 int a_count = ((T_EDATA *)fa_fbs_id.ptr)->hdr.edata.opc; /* 処理プロパティ数 */ 1836 1830 1837 1831 memset(&a_ecn_hdp, 0, sizeof(a_ecn_hdp)); … … 1840 1834 fp_obj->eojx1 << 16 | fp_obj->eojx2 << 8 | fp_obj->eojx3 ECN_DBG_END; 1841 1835 1842 /* úæ¾TCY*/1836 /* 初期取得サイズ */ 1843 1837 a_size = sizeof(T_ECN_HDR) + sizeof(T_ECN_EDATA_BODY) + sizeof(T_ECN_PRP); 1844 1838 1845 /* d¶pi_~[jÌæ¾*/1839 /* 応答電文用メモリ(ダミー)の取得 */ 1846 1840 a_ret = _ecn_fbs_cre(a_size, &a_fbs_dmy); 1847 if (a_ret != E_OK || !a_fbs_dmy.ptr) /* mÛ¸s*/1841 if (a_ret != E_OK || !a_fbs_dmy.ptr) /* 確保失敗 */ 1848 1842 goto lb_finally; 1849 1843 1850 /* d¶Ýè*/1844 /* 応答電文設定 */ 1851 1845 _ecn_tsk_mk_rsp_hdr_res(&a_ecn_hdp, p_req_esv); 1852 1846 a_size -= sizeof(T_ECN_HDR) + sizeof(T_ECN_EDATA_BODY); 1853 1847 1854 /* payload æªÌT_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)ðÇÝòη*/1848 /* payload先頭のT_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)を読み飛ばす */ 1855 1849 a_ret = _ecn_fbs_set_rpos(fa_fbs_id, offsetof(T_ECN_EDT_HDR, ecn_prp)); 1856 1850 if (a_ret) 1857 1851 goto lb_except; 1858 1852 1859 /* vpeBl«ÝÇÝòεÀs*/1853 /* プロパティ値書き込み応答読み飛ばし実行 */ 1860 1854 a_ret = _ecn_tsk_eoj_skip_main(fp_obj, fa_fbs_id, a_count); 1861 1855 if (a_ret) { … … 1869 1863 (a_sw_ok ? "true" : "false") ECN_DBG_END; 1870 1864 1871 /* ÌðÇÝæé(1byte) */1872 /* ¨ECHONET-Lite_Ver.1.10_02.pdf p.40 [OPCGet] */1865 /* 次の件数を読み取る(1byte) */ 1866 /* → ECHONET-Lite_Ver.1.10_02.pdf p.40 [OPCGet] */ 1873 1867 a_rdlen = i = 0; 1874 1868 a_ret = _ecn_fbs_get_data(fa_fbs_id, &i, 1, &a_rdlen); … … 1877 1871 a_count = *(uint8_t *)&i; 1878 1872 1879 /* vpeBlÇÝoµÌ«ÝÀs*/1873 /* プロパティ値読み出し応答の書き込み実行 */ 1880 1874 a_ret = _ecn_tsk_eoj_set_main(fp_obj, fa_eobjatr, true, fa_fbs_id, a_fbs_dmy, 1881 1875 fa_fbs_anno, a_count, &a_sw_ok); … … 1893 1887 1894 1888 lb_except: 1895 /* f[^M¸sµ½çÌæðú*/1889 /* データ送信失敗したら領域解放 */ 1896 1890 if (a_fbs_dmy.ptr) 1897 1891 _ecn_fbs_del(a_fbs_dmy); … … 1902 1896 1903 1897 /* 1904 * d¶Ò¿ÌèÝd¶ì¬1898 * 応答電文待ちの割り込み電文作成 1905 1899 */ 1906 1900 ER _ecn_mk_brk_wai(ECN_FBS_ID *pk_fbs_id, const void *p_dat, size_t fa_size) 1907 1901 { 1908 1902 ER a_ret; 1909 ECN_FBS_ID a_fbs_id = { 0 }; /* vd¶p*/1903 ECN_FBS_ID a_fbs_id = { 0 }; /* 要求電文用メモリ */ 1910 1904 1911 1905 if (!pk_fbs_id) … … 1913 1907 *pk_fbs_id = a_fbs_id; 1914 1908 if (sizeof(a_fbs_id.ptr->payload) <= fa_size) 1915 return E_PAR; /* tf[^ªå«·¬é*/1909 return E_PAR; /* 付随データが大きすぎる */ 1916 1910 if (!p_dat && 0 < fa_size) 1917 return E_PAR; /* tf[^TCYª1ÈãÈÌÉf[^|C^ªNULL */1918 1919 /* vd¶pÌæ¾*/1911 return E_PAR; /* 付随データサイズが1以上なのにデータポインタがNULL */ 1912 1913 /* 要求電文用メモリの取得 */ 1920 1914 a_ret = _ecn_fbs_cre((0 < fa_size ? fa_size : 1), &a_fbs_id); 1921 if (a_ret != E_OK || !a_fbs_id.ptr) { /* mÛ¸s*/1915 if (a_ret != E_OK || !a_fbs_id.ptr) { /* 確保失敗 */ 1922 1916 syslog(LOG_WARNING, "_ecn_fbs_cre(%d) result = %d:%s", fa_size, a_ret, itron_strerror(a_ret)); 1923 1917 return a_ret; 1924 1918 } 1925 1919 1926 /* vd¶Ýè*/1920 /* 要求電文設定 */ 1927 1921 a_fbs_id.ptr->hdr.type = ECN_MSG_USER_BREAK; 1928 1922 a_fbs_id.ptr->hdr.sender = ENOD_API_ID; … … 1931 1925 1932 1926 if (0 < fa_size && p_dat) { 1933 /* tf[^ÇÁ*/1927 /* 付随データ追加 */ 1934 1928 a_ret = _ecn_fbs_add_data_ex(a_fbs_id, p_dat, fa_size); 1935 1929 if (a_ret) { … … 1943 1937 *pk_fbs_id = a_fbs_id; 1944 1938 1945 /* ³íI¹*/1939 /* 正常終了 */ 1946 1940 return a_ret; 1947 1941 1948 1942 lb_except: 1949 /* f[^쬸sµ½çÌæðú*/1943 /* データ作成失敗したら領域解放 */ 1950 1944 if (a_fbs_id.ptr) 1951 1945 _ecn_fbs_del(a_fbs_id); … … 1954 1948 } 1955 1949 1956 /* d¶pfbsÝè(sender/targetÌÝè) */1950 /* 応答電文用fbs設定(sender/targetの設定) */ 1957 1951 ER _ecn_tsk_cre_req_fbs(ID sender, uint8_t cmd, ECN_FBS_ID *pk_req) 1958 1952 { … … 1983 1977 } 1984 1978 1985 /* d¶pfbsÝè(sender/targetÌÝè) */1979 /* 応答電文用fbs設定(sender/targetの設定) */ 1986 1980 ER _ecn_tsk_cre_res_fbs(ECN_FBS_ID req, uint8_t cmd, ECN_FBS_ID *pk_res) 1987 1981 { -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.