Changeset 389 for azure_iot_hub/trunk/ntshell/echonet/echonet_task.c
- Timestamp:
- May 22, 2019, 10:03:37 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
azure_iot_hub/trunk/ntshell/echonet/echonet_task.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r388 r389 4 4 * Copyright (C) 2014 Cores Co., Ltd. Japan 5 5 * 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 * 免責すること. 42 28 * 43 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 44 ã 45 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 46 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 47 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 48 * ã®è²¬ä»»ãè² ããªãï¼ 29 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 30 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 31 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 32 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 33 * の責任を負わない. 49 34 * 50 35 * @(#) $Id$ … … 52 37 53 38 /* 54 * ECHONET Lite ã¿ã¹ã¯39 * ECHONET Lite タスク 55 40 */ 56 41 … … 86 71 #endif /* ECHONET_TASK_TIMEOUT */ 87 72 88 /* ã¢ããªã±ã¼ã·ã§ã³ãè¦æ±ããé»æã®ã·ã¼ã±ã³ã¹çªå·*/73 /* アプリケーションが要求した電文のシーケンス番号 */ 89 74 static uint16_t g_api_tid; 90 75 91 /* åä¿¡ã¡ãã»ã¼ã¸ãéæ¾ãããå¦ã*/76 /* 受信メッセージを開放するか否か */ 92 77 static bool_t g_release_esv; 93 78 … … 131 116 i += - ENOD_REMOTE_ID + 1; 132 117 if (from_app && (i < tnum_enodid)) { 133 /* éåæã®ãªã¢ã¼ããã¼ãã¯ãµã¼ãã¹å¦çã¿ã¹ã¯ã§å¦çãã*/118 /* 非同期のリモートノードはサービス処理タスクで処理する */ 134 119 switch (eobjcb_table[i].profile->eobjatr) { 135 120 case EOBJ_SYNC_REMOTE_NODE: … … 179 164 ECN_FBS_ID fa_fbs_id, ECN_FBS_ID *fa_fbs_anno); 180 165 181 /* ã¢ã¸ã¥ã¼ã«åæåãã©ã°*/166 /* モジュール初期化フラグ */ 182 167 static uint8_t m_eobjlist_need_init = 1; 183 168 184 /* ã·ã¼ã±ã³ã¹çªå·*/169 /* シーケンス番号 */ 185 170 static uint16_t g_current_tid = 1; 186 171 187 172 /* 188 * ECHONET Lite ã¿ã¹ã¯ã®åæåï¼ã³ã³ã¹ãã©ã¯ã¿ç¸å½ï¼173 * ECHONET Lite タスクの初期化(コンストラクタ相当) 189 174 */ 190 175 void echonet_task_init(intptr_t exinf) … … 195 180 196 181 /* 197 * ã¢ã¸ã¥ã¼ã«åæå182 * モジュール初期化 198 183 */ 199 184 static void _ecn_tsk_int_module_init(intptr_t exinf) … … 216 201 217 202 /* 218 * ECHONET Lite ã¿ã¹ã¯ã®æ¬ä½203 * ECHONET Lite タスクの本体 219 204 */ 220 205 void echonet_task(intptr_t fa_exinf) … … 240 225 } 241 226 242 /* ã¡ãã»ã¼ã¸ã«ã¼ã*/227 /* メッセージループ */ 243 228 for (;;) { 244 229 a_prev = a_now; … … 278 263 279 264 switch (a_mdt.fbs_id.ptr->hdr.type) { 280 /* å 281 é¨ä½¿ç¨ã¡ãã»ã¼ã¸ */ 265 /* 内部使用メッセージ */ 282 266 case ECN_MSG_INTERNAL: 283 267 _ecn_tsk_int_msg(fa_exinf, a_mdt.fbs_id); 284 268 break; 285 269 286 /* ECHONET ç¨ã¡ãã»ã¼ã¸*/270 /* ECHONET用メッセージ */ 287 271 case ECN_MSG_ECHONET: 288 272 _ecn_tsk_ecn_msg(fa_exinf, a_mdt.fbs_id); … … 293 277 } 294 278 295 /* é å解æ¾*/279 /* 領域解放 */ 296 280 if (g_release_esv) 297 281 _ecn_fbs_del(a_mdt.fbs_id); … … 306 290 307 291 /* 308 * ã·ã¼ã±ã³ã¹çªå·çæ292 * シーケンス番号生成 309 293 */ 310 294 static uint16_t _ecn_tsk_new_tid(void) … … 314 298 315 299 /* 316 * è¦æ±é»æä½æ 317 * å¼æ° 318 * ECN_FBS_ID *fp_fbs_id åå¾ããFBS_IDã®æ ¼ç´å 319 320 * ID fa_seoj éä¿¡å 321 ã®ECHONETãªãã¸ã§ã¯ãID 322 * ID fa_deoj å®å 323 ã®ECHONETãªãã¸ã§ã¯ãID 324 * uint8_t fa_epc ããããã£ã³ã¼ã 325 * uint8_t fa_pdc ããããã£å¤ãã¼ã¿ãµã¤ãº 326 * const void *p_edt ããããã£å¤ãã¼ã¿ 327 * ECN_SRV_CODE fa_esv ECHONET Light ãµã¼ãã¹ã³ã¼ã 300 * 要求電文作成 301 * 引数 302 * ECN_FBS_ID *fp_fbs_id 取得したFBS_IDの格納先 303 * ID fa_seoj 送信元のECHONETオブジェクトID 304 * ID fa_deoj 宛先のECHONETオブジェクトID 305 * uint8_t fa_epc プロパティコード 306 * uint8_t fa_pdc プロパティ値データサイズ 307 * const void *p_edt プロパティ値データ 308 * ECN_SRV_CODE fa_esv ECHONET Light サービスコード 328 309 */ 329 310 ER _ecn_tsk_mk_esv(ECN_FBS_ID *fp_fbs_id, ID fa_seoj, ID fa_deoj, … … 332 313 ER a_ret; 333 314 int a_size, i; 334 ECN_FBS_ID a_fbs_id = { 0 }; /* è¦æ±é»æç¨ã¡ã¢ãª*/315 ECN_FBS_ID a_fbs_id = { 0 }; /* 要求電文用メモリ */ 335 316 T_ECN_EDT_HDR a_ecn_hdp; /* ecn_hdr+edata+ecn_prp 14byte */ 336 317 ID a_enodid; … … 339 320 340 321 if (!fp_fbs_id) 341 return E_PAR; /* åå¾ããFBS_IDã®æ ¼ç´å 342 ãNULL */ 322 return E_PAR; /* 取得したFBS_IDの格納先がNULL */ 343 323 if (ECHONET_MEMPOOL_BLOCK_SIZE <= fa_pdc) 344 return E_PAR; /* ããããã£å¤ãµã¤ãºã大ãããã*/324 return E_PAR; /* プロパティ値サイズが大きすぎる */ 345 325 if (!p_edt && 0 < fa_pdc) 346 return E_PAR; /* ããããã£å¤ãµã¤ãºã1以ä¸ãªã®ã«ãã¼ã¿ãã¤ã³ã¿ãNULL */326 return E_PAR; /* プロパティ値サイズが1以上なのにデータポインタがNULL */ 347 327 348 328 if (fa_seoj <= EOBJ_NULL || tmax_eobjid < fa_seoj) 349 return E_NOEXS; /* ECHONET ãªãã¸ã§ã¯ãIDãæªå®ç¾©*/329 return E_NOEXS; /* ECHONETオブジェクトIDが未定義 */ 350 330 #ifndef ECHONET_CONTROLLER_EXTENTION 351 331 if (fa_deoj < EOBJ_NULL || tmax_eobjid < fa_deoj) 352 return E_NOEXS; /* ECHONET ãªãã¸ã§ã¯ãIDãæªå®ç¾©*/332 return E_NOEXS; /* ECHONETオブジェクトIDが未定義 */ 353 333 #else 354 334 if (fa_deoj < EOBJ_NULL || (tmax_eobjid + TNUM_AEOBJID) < fa_deoj) 355 return E_NOEXS; /* ECHONET ãªãã¸ã§ã¯ãIDãæªå®ç¾©*/335 return E_NOEXS; /* ECHONETオブジェクトIDが未定義 */ 356 336 #endif 357 337 if (fa_deoj == EOBJ_NULL && fa_esv == ESV_INFC) 358 return E_NOEXS; /* ECHONET ãªãã¸ã§ã¯ãIDãæªå®ç¾©*/359 360 /* è¦æ±æå°ãµã¤ãºã®åå¾*/338 return E_NOEXS; /* ECHONETオブジェクトIDが未定義 */ 339 340 /* 要求最小サイズの取得 */ 361 341 a_size = sizeof(T_ECN_HDR) + sizeof(T_ECN_EDATA_BODY) + sizeof(T_ECN_PRP); 362 342 363 /* è¦æ±é»æç¨ã¡ã¢ãªã®åå¾*/343 /* 要求電文用メモリの取得 */ 364 344 a_ret = _ecn_fbs_cre(a_size, &a_fbs_id); 365 if (a_ret != E_OK || !a_fbs_id.ptr) { /* 確ä¿å¤±æ*/345 if (a_ret != E_OK || !a_fbs_id.ptr) { /* 確保失敗 */ 366 346 ECN_DBG_PUT_3("_ecn_fbs_cre(%d) result = %d:%s", 367 347 a_size, … … 370 350 } 371 351 372 /* è¦æ±é»æè¨å®*/352 /* 要求電文設定 */ 373 353 memset(&a_ecn_hdp, 0, sizeof(a_ecn_hdp)); 374 354 a_ecn_hdp.ecn_hdr.ehd1 = ECN_EDH1_ECHONET_LITE; … … 377 357 memcpy(&a_ecn_hdp.edata.seoj, &eobjinib_table[fa_seoj - 1].eojx1, sizeof(a_ecn_hdp.edata.seoj)); 378 358 a_ecn_hdp.edata.esv = fa_esv; 379 a_ecn_hdp.edata.opc = 1; /* å¦çããããã£æ°*/380 a_ecn_hdp.ecn_prp.epc = fa_epc; /* ããããã£ã³ã¼ã*/381 a_ecn_hdp.ecn_prp.pdc = fa_pdc; /* ä»éãã¼ã¿ãµã¤ãº*/382 383 /* è¦æ±é»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å*/359 a_ecn_hdp.edata.opc = 1; /* 処理プロパティ数 */ 360 a_ecn_hdp.ecn_prp.epc = fa_epc; /* プロパティコード */ 361 a_ecn_hdp.ecn_prp.pdc = fa_pdc; /* 付随データサイズ */ 362 363 /* 要求電文用メモリにデータ追加 */ 384 364 a_ret = _ecn_fbs_add_data_ex(a_fbs_id, &a_ecn_hdp, a_size); 385 365 if (a_ret) { … … 390 370 } 391 371 if (0 < fa_pdc) { 392 /* ä»éãã¼ã¿è¿½å*/372 /* 付随データ追加 */ 393 373 a_ret = _ecn_fbs_add_data_ex(a_fbs_id, p_edt, fa_pdc); 394 374 if (a_ret) { … … 400 380 } 401 381 if (fa_deoj == 0) { 402 ECN_DBG_PUT(" ãã«ããã£ã¹ã");403 /* fa_deoj == 0 : ãã«ããã£ã¹ã*/382 ECN_DBG_PUT("マルチキャスト"); 383 /* fa_deoj == 0 : マルチキャスト */ 404 384 ((T_EDATA *)a_fbs_id.ptr)->hdr.edata.deoj.eojx1 = EOJ_X1_PROFILE; 405 385 ((T_EDATA *)a_fbs_id.ptr)->hdr.edata.deoj.eojx2 = EOJ_X2_NODE_PROFILE; … … 409 389 else if (fa_deoj <= tmax_eobjid) { 410 390 ECN_DBG_PUT_1("fa_deoj = %d", fa_deoj); 411 /* if (fa_deoj < 1 || tmax_eobjid < fa_deoj) â¦ã®ç°å¸¸ç³»ã¯é¢æ°åé ã§é¤å¤æ¸ã¿ã¨ãã*/391 /* if (fa_deoj < 1 || tmax_eobjid < fa_deoj) …の異常系は関数冒頭で除外済みとする */ 412 392 a_eobj = &eobjinib_table[fa_deoj - 1]; 413 393 memcpy(&((T_EDATA *)a_fbs_id.ptr)->hdr.edata.deoj, &a_eobj->eojx1, 414 394 sizeof(((T_EDATA *)a_fbs_id.ptr)->hdr.edata.deoj)); 415 395 416 /* ãã¼ãã«ããæ¤ç´¢*/396 /* テーブルから検索 */ 417 397 a_fbs_id.ptr->hdr.target.id = ENOD_NOT_MATCH_ID; 418 398 a_enodid = (a_eobj->enodid == 0) ? fa_deoj : a_eobj->enodid; … … 454 434 ECN_ENOD_ID enodid; 455 435 ECN_DBG_PUT_1("fa_deoj = %d", fa_deoj); 456 /* ãªãã¸ã§ã¯ãIDããEOJã¨ãã¼ãIDãåå¾*/436 /* オブジェクトIDからEOJとノードIDを取得 */ 457 437 if(ecn_agent_get_eoj_enodid(fa_deoj, &eoj, &enodid)){ 458 438 memcpy(&((T_EDATA *)a_fbs_id.ptr)->hdr.edata.deoj, &eoj, … … 487 467 a_fbs_id.ptr->hdr.reply.id = ENOD_API_ID; 488 468 489 /* æ£å¸¸çµäº*/469 /* 正常終了 */ 490 470 *fp_fbs_id = a_fbs_id; 491 471 return E_OK; 492 472 493 473 lb_except: 494 /* ãã¼ã¿ä½æ失æãããé å解æ¾*/474 /* データ作成失敗したら領域解放 */ 495 475 if (a_fbs_id.ptr) 496 476 _ecn_fbs_del(a_fbs_id); … … 500 480 501 481 /* 502 * å 503 é¨ä½¿ç¨ã¡ãã»ã¼ã¸ 482 * 内部使用メッセージ 504 483 */ 505 484 static void _ecn_tsk_int_msg(intptr_t fa_exinf, ECN_FBS_ID fa_fbs_id) … … 532 511 533 512 /* 534 * ã¿ã¹ã¯åæå513 * タスク初期化 535 514 */ 536 515 static void _ecn_tsk_int_startup(intptr_t fa_exinf) … … 541 520 _ecn_tsk_int_module_init(fa_exinf); 542 521 543 /* ã¤ã³ã¹ã¿ã³ã¹ãªã¹ãéç¥ã®éä¿¡*/522 /* インスタンスリスト通知の送信 */ 544 523 a_ret = _ecn_tsk_ntf_inl(fa_exinf); 545 524 if (a_ret) { … … 549 528 550 529 /* 551 * ã¤ã³ã¹ã¿ã³ã¹ãªã¹ãéç¥ã®éä¿¡552 * ECHONET-Lite_Ver.1.10_02.pdf p.43 å³4-1-4530 * インスタンスリスト通知の送信 531 * ECHONET-Lite_Ver.1.10_02.pdf p.43 図4-1-4 553 532 */ 554 533 ER _ecn_tsk_ntf_inl(intptr_t fa_exinf) 555 534 { 556 const T_ECN_EOJ a_seoj = /* 0x01 : ä¸è¬ãã¼ãã0x02ï¼éä¿¡å°ç¨ãã¼ã*/535 const T_ECN_EOJ a_seoj = /* 0x01 : 一般ノード、0x02:送信専用ノード */ 557 536 { EOJ_X1_PROFILE, EOJ_X2_NODE_PROFILE, 0x01 }; 558 537 const T_ECN_EOJ a_deoj = … … 564 543 int i; 565 544 uint8_t a_count; 566 const EOBJCB *enod = &eobjcb_table[0]; /* ãã¼ã«ã«ãã¼ã*/545 const EOBJCB *enod = &eobjcb_table[0]; /* ローカルノード */ 567 546 const EOBJINIB *eobj; 568 547 … … 582 561 583 562 if (!a_eoj_ct) { 584 /* ã¡ã¢ãªç¢ºä¿ã»ãããæ ¼ç´*/585 a_hdr.ecn_hdr.tid = (uint8_t)_ecn_tsk_new_tid(); /* ã·ã¼ã±ã³ã¹çªå·çæ*/563 /* メモリ確保・ヘッダ格納 */ 564 a_hdr.ecn_hdr.tid = (uint8_t)_ecn_tsk_new_tid(); /* シーケンス番号生成 */ 586 565 a_ret = _ecn_fbs_cre(sizeof(a_hdr), &a_fbs); 587 if (a_ret != E_OK) /* 確ä¿å¤±æ*/566 if (a_ret != E_OK) /* 確保失敗 */ 588 567 goto lb_except; 589 568 a_ret = _ecn_fbs_add_data(a_fbs, &a_hdr, sizeof(a_hdr)); 590 if (a_ret != E_OK) /* ãã¼ã¿è¿½å 失æ*/569 if (a_ret != E_OK) /* データ追加失敗 */ 591 570 goto lb_except; 592 571 … … 595 574 a_fbs.ptr->hdr.target.id = ENOD_MULTICAST_ID; 596 575 a_fbs.ptr->hdr.reply.id = ENOD_LOCAL_ID; 597 ((T_EDATA *)a_fbs.ptr)->hdr.ecn_prp.pdc = 1; /* 件æ°*/598 /* 件æ°ãæ ¼ç´*/576 ((T_EDATA *)a_fbs.ptr)->hdr.ecn_prp.pdc = 1; /* 件数 */ 577 /* 件数を格納 */ 599 578 a_count = (uint8_t)(enod->eobjcnt - i); 600 579 if (a_count >= ECN_IST_LST_EOJ_MAX_CT) 601 580 a_count = ECN_IST_LST_EOJ_MAX_CT; 602 581 a_ret = _ecn_fbs_add_data_ex(a_fbs, &a_count, sizeof(a_count)); 603 if (a_ret != E_OK) /* ãã¼ã¿è¿½å 失æ*/582 if (a_ret != E_OK) /* データ追加失敗 */ 604 583 goto lb_except; 605 584 } 606 /* ECHONET ãªãã¸ã§ã¯ãID(3byte)ãæ ¼ç´*/585 /* ECHONETオブジェクトID(3byte)を格納 */ 607 586 a_ret = _ecn_fbs_add_data_ex(a_fbs, &eobj->eojx1, sizeof(T_ECN_EOJ)); 608 if (a_ret != E_OK) /* ãã¼ã¿è¿½å 失æ*/587 if (a_ret != E_OK) /* データ追加失敗 */ 609 588 goto lb_except; 610 589 611 /* 件æ°ã»edtãµã¤ãºå ç®*/590 /* 件数・edtサイズ加算 */ 612 591 ((T_EDATA *)a_fbs.ptr)->hdr.ecn_prp.pdc += sizeof(T_ECN_EOJ); 613 592 if (++a_eoj_ct < ECN_IST_LST_EOJ_MAX_CT) 614 593 continue; 615 594 616 /* 1 ã¢ãã¦ã³ã¹ã§ã®ä¸éã«éããããä¸æ¦éä¿¡*/595 /* 1アナウンスでの上限に達したら、一旦送信 */ 617 596 a_ret = _ecn_tsk_snd_dtq(a_fbs, false); 618 if (a_ret != E_OK) /* ãã¼ã¿é信失æ*/597 if (a_ret != E_OK) /* データ送信失敗 */ 619 598 goto lb_except; 620 599 a_eoj_ct = 0; … … 622 601 } 623 602 if (a_eoj_ct) { 624 /* æªéä¿¡ãã¼ã¿ããã£ãããéä¿¡*/603 /* 未送信データがあったら、送信 */ 625 604 a_ret = _ecn_tsk_snd_dtq(a_fbs, false); 626 if (a_ret != E_OK) /* ãã¼ã¿é信失æ*/605 if (a_ret != E_OK) /* データ送信失敗 */ 627 606 goto lb_except; 628 607 a_fbs.ptr = 0; … … 668 647 669 648 /* 670 * 3byteã®eobjidã§é 671 åä¸ãæ¤ç´¢ãã 649 * 3byteのeobjidで配列中を検索する 672 650 */ 673 651 const EOBJINIB *_ecn_eoj_fnd(const EOBJCB *fp_nod, const T_ECN_EOJ *fp_eoj) … … 702 680 703 681 /* 704 * é»æã®æ§æè¦ç´ æ°ã¨ãµã¤ãºã®ãã§ãã¯ãè¡ã682 * 電文の構成要素数とサイズのチェックを行う 705 683 */ 706 684 static bool_t _ecn_tsk_check_format(T_EDATA *edata, int len) … … 744 722 745 723 /* 746 * ECHONET ç¨ã¡ãã»ã¼ã¸724 * ECHONET用メッセージ 747 725 */ 748 726 static void _ecn_tsk_ecn_msg(intptr_t fa_exinf, ECN_FBS_ID fa_fbs_id) … … 793 771 } 794 772 795 /* é»æã®æ§æè¦ç´ æ°ã¨ãµã¤ãºã®ãã§ãã¯ãè¡ã*/773 /* 電文の構成要素数とサイズのチェックを行う */ 796 774 if (!_ecn_tsk_check_format((T_EDATA *)fa_fbs_id.ptr, fa_fbs_id.ptr->hdr.length)) { 797 775 ECN_DBG_PUT("_ecn_tsk_ecn_msg() format fault"); … … 799 777 } 800 778 801 /* éä¿¡å®ãããã¼ããæ¤ç´¢*/779 /* 送信宛からノードを検索 */ 802 780 p_nod = _ecn_eno_fnd(fa_fbs_id.ptr->hdr.target.id); 803 /* éä¿¡å 804 ãããã¼ããæ¤ç´¢ */ 781 /* 送信元からノードを検索 */ 805 782 p_snod = _ecn_eno_fnd(fa_fbs_id.ptr->hdr.sender.id); 806 783 if (p_snod != NULL) { 807 784 sobjatr = p_snod->profile->eobjatr; 808 /* ãã¼ããããã¡ã¤ã«ã®å ´å*/785 /* ノードプロファイルの場合 */ 809 786 if ((p_esv->edata.seoj.eojx1 == EOJ_X1_PROFILE) 810 787 && (p_esv->edata.seoj.eojx2 == EOJ_X2_NODE_PROFILE)) { 811 788 p_sobj = p_snod->profile; 812 789 } 813 /* æ©å¨ãªãã¸ã§ã¯ãã®å ´å*/790 /* 機器オブジェクトの場合 */ 814 791 else { 815 792 p_sobj = _ecn_eoj_fnd(p_snod, &p_esv->edata.seoj); … … 821 798 #endif 822 799 823 /* ãã¼ãå 824 ã®æ©å¨ãªãã¸ã§ã¯ããæ¤ç´¢ */ 800 /* ノード内の機器オブジェクトを検索 */ 825 801 a_prc = false; 826 802 a_fwd = false; … … 828 804 eobjatr = p_nod->profile->eobjatr; 829 805 p_eoj = &p_esv->edata.deoj; 830 /* ãã¼ããããã¡ã¤ã«ã®å ´å*/806 /* ノードプロファイルの場合 */ 831 807 if ((p_eoj->eojx1 == EOJ_X1_PROFILE) 832 808 && (p_eoj->eojx2 == EOJ_X2_NODE_PROFILE)) { 833 809 if ((p_eoj->eojx3 == p_nod->profile->eojx3) 834 810 || (p_eoj->eojx3 == 0)) { 835 /* é»æå¦çå®è¡*/811 /* 電文処理実行 */ 836 812 if (_ecn_tsk_ecn_msg_main(fa_fbs_id, p_nod->profile, eobjatr, p_sobj, sobjatr) == 1) 837 813 a_fwd = true; 838 814 a_prc = true; 839 815 } 840 /* 0x74 ããããã£å¤éç¥ï¼å¿çè¦ï¼ã®å ´åã®å ´åã¯é»æç ´æ£*/816 /* 0x74 プロパティ値通知(応答要)の場合の場合は電文破棄 */ 841 817 else if (p_esv->edata.esv == ESV_INFC) { 842 818 a_prc = true; 843 819 } 844 820 } 845 /* æ©å¨ãªãã¸ã§ã¯ãã®å ´å*/821 /* 機器オブジェクトの場合 */ 846 822 else { 847 823 count = p_nod->eobjcnt; … … 862 838 if (p_obj->eojx2 != p_eoj->eojx2) 863 839 continue; 864 /* ã¤ã³ã¹ã¿ã³ã¹ã³ã¼ããï¼ã®å ´åãåãã¯ã©ã¹ã®å 865 ¨ã¦ã®ã¤ã³ã¹ã¿ã³ã¹å® */ 840 /* インスタンスコードが0の場合、同じクラスの全てのインスタンス宛 */ 866 841 if ((p_obj->eojx3 != p_eoj->eojx3) && (p_eoj->eojx3 != 0)) 867 842 continue; 868 843 869 /* é»æå¦çå®è¡*/844 /* 電文処理実行 */ 870 845 if (_ecn_tsk_ecn_msg_main(fa_fbs_id, p_obj, eobjatr, p_sobj, sobjatr) == 1) 871 846 a_fwd = true; … … 873 848 } 874 849 875 /* æ©å¨ãªãã¸ã§ã¯ããè¦ã¤ãããã0x74 ããããã£å¤éç¥ï¼å¿çè¦ï¼ã®å ´åã¯é»æç ´æ£*/850 /* 機器オブジェクトが見つからず、0x74 プロパティ値通知(応答要)の場合は電文破棄 */ 876 851 if (!a_prc && (p_esv->edata.esv == ESV_INFC)) { 877 852 a_prc = true; … … 879 854 } 880 855 } 881 /* æ©å¨ãªãã¸ã§ã¯ããè¦ã¤ãããªãå ´åã§ã*/856 /* 機器オブジェクトが見つからない場合でも */ 882 857 if (!a_prc) { 883 /* é»æå¦çå®è¡ï¼å¿çåä¿¡ç¨ï¼*/858 /* 電文処理実行(応答受信用) */ 884 859 if (_ecn_tsk_ecn_msg_main(fa_fbs_id, NULL, EPC_NONE, p_sobj, sobjatr) == 1) 885 860 a_fwd = true; 886 861 } 887 862 888 /* å¿çã®å ´åã¢ããªã±ã¼ã·ã§ã³ã«è»¢éãã*/863 /* 応答の場合アプリケーションに転送する */ 889 864 if (a_fwd && (p_esv->ecn_hdr.tid == g_api_tid)) { 890 865 g_release_esv = false; 891 866 892 ECN_CAP_PUT_1("redirect ecn_svc_dataqueueid âecn_api_dataqueueid (esv:0x%02X)",867 ECN_CAP_PUT_1("redirect ecn_svc_dataqueueid → ecn_api_dataqueueid (esv:0x%02X)", 893 868 p_esv->edata.esv); 894 869 fa_fbs_id.ptr->hdr.target.id = ENOD_API_ID; … … 915 890 916 891 switch (p_esv->edata.esv) { 917 /* 0x60 ããããã£å¤æ¸ãè¾¼ã¿è¦æ±ï¼å¿çä¸è¦ï¼*/892 /* 0x60 プロパティ値書き込み要求(応答不要) */ 918 893 case ESV_SET_I: 919 894 if (!p_obj) { … … 927 902 break; 928 903 929 /* 0x61 ããããã£å¤æ¸ãè¾¼ã¿è¦æ±ï¼å¿çè¦ï¼*/904 /* 0x61 プロパティ値書き込み要求(応答要) */ 930 905 case ESV_SET_C: 931 906 if (!p_obj) { … … 939 914 break; 940 915 941 /* 0x62 ããããã£å¤èªã¿åºãè¦æ±*/916 /* 0x62 プロパティ値読み出し要求 */ 942 917 case ESV_GET: 943 918 if (!p_obj) { … … 951 926 break; 952 927 953 /* 0x63 ããããã£å¤éç¥è¦æ±*/928 /* 0x63 プロパティ値通知要求 */ 954 929 case ESV_INF_REQ: 955 930 if (!p_obj) { … … 964 939 break; 965 940 966 /* 0x6E ããããã£å¤æ¸ãè¾¼ã¿ã»èªã¿åºãè¦æ±*/941 /* 0x6E プロパティ値書き込み・読み出し要求 */ 967 942 case ESV_SET_GET: 968 943 if (!p_obj) { … … 976 951 break; 977 952 978 /* 0x74 ããããã£å¤éç¥ï¼å¿çè¦ï¼*/953 /* 0x74 プロパティ値通知(応答要) */ 979 954 case ESV_INFC: 980 955 if (!p_sobj) 981 /* éä¿¡å 982 ãæªç¥ã®ä»ãã¼ãã§ãã£ãå ´åãå¿çãè¿ã */ 956 /* 送信元が未知の他ノードであった場合、応答を返す */ 983 957 _ecn_tsk_eoj_res(fa_fbs_id, ESV_INFC_RES, ESV_INFC_RES); /* 0x7A; 0x7A */ 984 958 else if (fromapp) 985 /* ã¢ããªã±ã¼ã·ã§ã³ããã®è¦æ±ã®å ´åãããããã£å¤éç¥ï¼å¿çè¦ï¼ãéä¿¡ãã*/959 /* アプリケーションからの要求の場合、プロパティ値通知(応答要)を送信する */ 986 960 _ecn_tsk_eoj_get(p_sobj, sobjatr, true, (EPC_RULE_GET|EPC_RULE_ANNO), fa_fbs_id, ESV_INFC, ESV_NOP); /* 0x74; 0 */ 987 961 else 988 /* éä¿¡å 989 ãæ¢ç¥ã®ä»ãã¼ãã§ãã£ãå ´åãããããã£å¤ãæ´æ°ãå¿çãè¿ã */ 962 /* 送信元が既知の他ノードであった場合、プロパティ値を更新し応答を返す */ 990 963 _ecn_tsk_eoj_set(p_sobj, sobjatr, fromapp, true, fa_fbs_id, ESV_INFC_RES, ESV_INFC_RES, &a_fbs_anno); /* 0x7A; 0x7A */ 991 964 result = 0; 992 965 break; 993 966 994 /* 0x60 ããããã£å¤æ¸ãè¾¼ã¿è¦æ±ï¼å¿çä¸è¦ï¼*/995 case ESV_SET_I_SNA: /* 0x50 ããããã£å¤æ¸ãè¾¼ã¿è¦æ±ä¸å¯å¿ç*/967 /* 0x60 プロパティ値書き込み要求(応答不要) */ 968 case ESV_SET_I_SNA: /* 0x50 プロパティ値書き込み要求不可応答 */ 996 969 result = 1; 997 970 break; 998 971 999 /* 0x61 ããããã£å¤æ¸ãè¾¼ã¿è¦æ±ï¼å¿çè¦ï¼*/1000 case ESV_SET_RES: /* 0x71 ããããã£å¤æ¸ãè¾¼ã¿å¿ç*/1001 case ESV_SET_C_SNA: /* 0x51 ããããã£å¤æ¸ãè¾¼ã¿è¦æ±ä¸å¯å¿ç*/972 /* 0x61 プロパティ値書き込み要求(応答要) */ 973 case ESV_SET_RES: /* 0x71 プロパティ値書き込み応答 */ 974 case ESV_SET_C_SNA: /* 0x51 プロパティ値書き込み要求不可応答 */ 1002 975 result = 1; 1003 976 break; 1004 977 1005 /* 0x62 ããããã£å¤èªã¿åºãè¦æ±*/1006 case ESV_GET_RES: /* 0x72 ããããã£å¤èªã¿åºãå¿ç*/1007 case ESV_GET_SNA: /* 0x52 ããããã£å¤èªã¿åºãä¸å¯å¿ç*/978 /* 0x62 プロパティ値読み出し要求 */ 979 case ESV_GET_RES: /* 0x72 プロパティ値読み出し応答 */ 980 case ESV_GET_SNA: /* 0x52 プロパティ値読み出し不可応答 */ 1008 981 if (!p_sobj) { 1009 982 ECN_DBG_PUT_1("_ecn_tsk_ecn_msg_main() eoj %06X not found.", … … 1016 989 break; 1017 990 1018 /* 0x63 ããããã£å¤éç¥è¦æ±*/1019 case ESV_INF: /* 0x73 ããããã£å¤éç¥*/1020 case ESV_INF_SNA: /* 0x53 ããããã£å¤éç¥ä¸å¯å¿ç*/991 /* 0x63 プロパティ値通知要求 */ 992 case ESV_INF: /* 0x73 プロパティ値通知 */ 993 case ESV_INF_SNA: /* 0x53 プロパティ値通知不可応答 */ 1021 994 if (!p_sobj) { 1022 995 ECN_DBG_PUT_1("_ecn_tsk_ecn_msg_main() eoj %06X not found.", … … 1029 1002 break; 1030 1003 1031 /* 0x6E ããããã£å¤æ¸ãè¾¼ã¿ã»èªã¿åºãè¦æ±*/1032 case ESV_SET_GET_RES: /* 0x7E ããããã£å¤æ¸ãè¾¼ã¿ã»èªã¿åºãå¿ç*/1033 case ESV_SET_GET_SNA: /* 0x5E ããããã£å¤æ¸ãè¾¼ã¿ã»èªã¿åºãä¸å¯å¿ç*/1004 /* 0x6E プロパティ値書き込み・読み出し要求 */ 1005 case ESV_SET_GET_RES: /* 0x7E プロパティ値書き込み・読み出し応答 */ 1006 case ESV_SET_GET_SNA: /* 0x5E プロパティ値書き込み・読み出し不可応答 */ 1034 1007 if (!p_sobj) { 1035 1008 ECN_DBG_PUT_1("_ecn_tsk_ecn_msg_main() eoj %06X not found.", … … 1042 1015 break; 1043 1016 1044 /* 0x74 ããããã£å¤éç¥ï¼å¿çè¦ï¼*/1045 case ESV_INFC_RES: /* 0x7A ããããã£å¤éç¥å¿ç*/1017 /* 0x74 プロパティ値通知(応答要) */ 1018 case ESV_INFC_RES: /* 0x7A プロパティ値通知応答 */ 1046 1019 result = 1; 1047 1020 break; … … 1053 1026 } 1054 1027 1055 /* ããããã£éç¥è¦æ±ãéä¿¡*/1028 /* プロパティ通知要求を送信 */ 1056 1029 if (a_fbs_anno.ptr != NULL) { 1057 1030 ER a_ret = _ecn_tsk_snd_dtq(a_fbs_anno, true); … … 1133 1106 1134 1107 /* 1135 * ECN_FBS_IDããT_ECN_PRP1件ã¨ãã®ä»éãã¼ã¿(edt)ãæ½åºããedtã®ãã¤ã³ã¿ãè¿ã 1136 * å¼æ° 1137 * ECN_FBS_ID fa_fbs_id èªã¿åãFBS 1138 * T_ECN_PRP *fp_prp epc+pdcã®æ ¼ç´å 1139 1140 * T_ECN_SUB_BLK * const fp_prev_blk åå使ã£ãã¡ã¢ãªã®ãã¤ã³ã¿(ç¡ããã°0) 1141 * æ£å¸¸ï¼ãã¤ã³ã¿ NG:0 1142 * ãã¤ã³ã¿ã¯_ecn_fbs_dtq_rel()ã§è§£æ¾ããå¿ 1143 è¦ããã 1108 * ECN_FBS_IDからT_ECN_PRP1件とその付随データ(edt)を抽出し、edtのポインタを返す 1109 * 引数 1110 * ECN_FBS_ID fa_fbs_id 読み取るFBS 1111 * T_ECN_PRP *fp_prp epc+pdcの格納先 1112 * T_ECN_SUB_BLK * const fp_prev_blk 前回使ったメモリのポインタ(無ければ0) 1113 * 正常:ポインタ NG:0 1114 * ポインタは_ecn_fbs_dtq_rel()で解放する必要がある 1144 1115 */ 1145 1116 static T_ECN_SUB_BLK *_ecn_tsk_get_prp_pce(ECN_FBS_ID fa_fbs_id, T_ECN_PRP *fp_prp, … … 1150 1121 ER a_ret; 1151 1122 1152 /* ããããã£ç¨ã¡ã¢ãªã®åå¾*/1123 /* プロパティ用メモリの取得 */ 1153 1124 if (fp_prev_blk) { 1154 p_blk = fp_prev_blk; /* åå使ã£ãã¡ã¢ãªããããªããåå©ç¨ãã*/1125 p_blk = fp_prev_blk; /* 前回使ったメモリがあるなら、再利用する */ 1155 1126 } 1156 1127 else { … … 1158 1129 if (!p_blk) { 1159 1130 ECN_DBG_PUT("_ecn_fbs_dtq_get() fault."); 1160 return 0; /* ã¡ã¢ãªä¸è¶³*/1131 return 0; /* メモリ不足 */ 1161 1132 } 1162 1133 } 1163 1134 memset(p_blk, 0, sizeof(*p_blk)); 1164 1135 1165 /* T_ECN_PRP é¨å(epc,pdc)ãèªã¿åã*/1136 /* T_ECN_PRP部分(epc,pdc)を読み取る */ 1166 1137 a_size = 0; 1167 1138 a_ret = _ecn_fbs_get_data(fa_fbs_id, fp_prp, sizeof(*fp_prp), &a_size); … … 1172 1143 1173 1144 if (0 < fp_prp->pdc) { 1174 /* ä»éãã¼ã¿é¨å(edt)ãèªã¿åã*/1145 /* 付随データ部分(edt)を読み取る */ 1175 1146 a_size = 0; 1176 1147 a_ret = _ecn_fbs_get_data(fa_fbs_id, p_blk, fp_prp->pdc, &a_size); … … 1184 1155 1185 1156 lb_except: 1186 /* ããããã£ç¨ã¡ã¢ãªè§£æ¾*/1157 /* プロパティ用メモリ解放 */ 1187 1158 if (p_blk && !fp_prev_blk) 1188 1159 _ecn_fbs_dtq_rel(p_blk); … … 1194 1165 ECN_FBS_ID fa_fbs_id, ECN_FBS_ID a_fbs_res, ECN_FBS_ID *fa_fbs_anno, int a_count, 1195 1166 int *p_sw_ok); 1196 /* ããããã£å¤æ¸ãè¾¼ã¿å®è¡*/1167 /* プロパティ値書き込み実行 */ 1197 1168 static ER _ecn_tsk_eoj_set_main(const EOBJINIB *fp_obj, ATR fa_eobjatr, bool_t fa_fromapp, bool_t fa_update, 1198 1169 ECN_FBS_ID fa_fbs_id, ECN_FBS_ID a_fbs_res, ECN_FBS_ID *fa_fbs_anno, int a_count, … … 1210 1181 1211 1182 for (i = 0; i < a_count; i++) { 1212 /* ECN_FBS_ID ããT_ECN_PRP1件ã¨ãã®ä»éãã¼ã¿ãæ½åºãããã®ãã¤ã³ã¿ãè¿ã*/1183 /* ECN_FBS_IDからT_ECN_PRP1件とその付随データを抽出し、そのポインタを返す */ 1213 1184 p_edt = _ecn_tsk_get_prp_pce(fa_fbs_id, &a_prp, p_edt); 1214 1185 if (!p_edt) { … … 1217 1188 } 1218 1189 1219 /* ããããã£ã®è¨å®set_prp(obj, reqp, resp) */1190 /* プロパティの設定 set_prp(obj, reqp, resp) */ 1220 1191 a_size = a_prp.pdc; 1221 /* obj,epc ã«å¯¾å¿ããseté¢æ°ãå¼ã¶*/1192 /* obj,epcに対応するset関数を呼ぶ */ 1222 1193 a_eprp = _ecn_tsk_eoj_get_property(fp_obj, a_prp.epc); 1223 1194 if ((a_eprp != NULL) … … 1241 1212 fp_obj->eojx1 << 16 | fp_obj->eojx2 << 8 | fp_obj->eojx3, 1242 1213 a_prp.epc, p_edt->payload[0], a_size); 1243 *p_sw_ok = 0; /* ããããã£è¨å®å¤±æ*/1244 /* å¿çå¦çã®å ´åEDTã¯è¨å®ããªã*/1214 *p_sw_ok = 0; /* プロパティ設定失敗 */ 1215 /* 応答処理の場合EDTは設定しない */ 1245 1216 if (fa_update) 1246 1217 a_prp.pdc = 0; 1247 1218 } 1248 1219 1249 /* å¿çé»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å (epc,pdcã®2byte) */1220 /* 応答電文用メモリにデータ追加(epc,pdcの2byte) */ 1250 1221 a_ret = _ecn_fbs_add_data_ex(a_fbs_res, &a_prp, sizeof(a_prp)); 1251 1222 if (a_ret) { … … 1255 1226 1256 1227 if (0 < a_prp.pdc) { 1257 /* å¿çé»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å(edt n-byte) */1228 /* 応答電文用メモリにデータ追加(edt n-byte) */ 1258 1229 a_ret = _ecn_fbs_add_data_ex(a_fbs_res, p_edt->payload, a_prp.pdc); 1259 1230 if (a_ret) { … … 1264 1235 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.opc ++; 1265 1236 1266 /* ããããã£éç¥ããã®å ´å*/1237 /* プロパティ通知ありの場合 */ 1267 1238 if (a_anno && (a_ans == a_size)) { 1268 1239 if (fa_fbs_anno->ptr == NULL) { … … 1282 1253 1283 1254 lb_finally: 1284 /* ããããã£ç¨ã¡ã¢ãªè§£æ¾*/1255 /* プロパティ用メモリ解放 */ 1285 1256 if (p_edt) 1286 1257 _ecn_fbs_dtq_rel(p_edt); … … 1291 1262 static ER _ecn_tsk_eoj_get_main(const EOBJINIB *fp_obj, ATR fa_eobjatr, bool_t fa_forward, ATR fa_access, 1292 1263 ECN_FBS_ID fa_fbs_id, ECN_FBS_ID a_fbs_res, int a_count, int *p_sw_ok); 1293 /* ããããã£å¤èªã¿åºãå®è¡*/1264 /* プロパティ値読み出し実行 */ 1294 1265 static ER _ecn_tsk_eoj_get_main(const EOBJINIB *fp_obj, ATR fa_eobjatr, bool_t fa_forward, ATR fa_access, 1295 1266 ECN_FBS_ID fa_fbs_id, ECN_FBS_ID a_fbs_res, int a_count, int *p_sw_ok) 1296 1267 { 1297 1268 T_ECN_SUB_BLK *p_edt = 0; 1298 void *p_prp_buf = 0; /* ä½æ¥é å*/1269 void *p_prp_buf = 0; /* 作業領域 */ 1299 1270 const EPRPINIB *a_eprp; 1300 1271 ER a_ret = E_SYS; … … 1304 1275 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.opc = 0; 1305 1276 1306 /* ä½æ¥é å確ä¿*/1277 /* 作業領域確保 */ 1307 1278 p_prp_buf = _ecn_fbs_dtq_get(ECHONET_MEMPOOL_BLOCK_SIZE); 1308 1279 if (!p_prp_buf) { 1309 1280 ECN_DBG_PUT_2("_ecn_fbs_dtq_get() result = %d:%s", a_ret, itron_strerror(a_ret)); 1310 goto lb_except; /* ã¡ã¢ãªä¸è¶³*/1281 goto lb_except; /* メモリ不足 */ 1311 1282 } 1312 1283 1313 1284 for (i = 0; i < a_count; i++) { 1314 /* ECN_FBS_ID ããT_ECN_PRP1件ã¨ãã®ä»éãã¼ã¿ãæ½åº*/1285 /* ECN_FBS_IDからT_ECN_PRP1件とその付随データを抽出 */ 1315 1286 p_edt = _ecn_tsk_get_prp_pce(fa_fbs_id, &a_prp, p_edt); 1316 1287 if (!p_edt) { … … 1319 1290 } 1320 1291 1321 /* ããããã£ã®åå¾get_eprp(obj, reqp, resp, size) */1292 /* プロパティの取得 get_eprp(obj, reqp, resp, size) */ 1322 1293 memset(p_prp_buf, 0, ECHONET_MEMPOOL_BLOCK_SIZE); 1323 /* obj,epc ã«å¯¾å¿ããgeté¢æ°ãå¼ã¶*/1294 /* obj,epcに対応するget関数を呼ぶ */ 1324 1295 a_eprp = _ecn_tsk_eoj_get_property(fp_obj, a_prp.epc); 1325 1296 if ((a_eprp != NULL) && (((a_eprp->eprpatr & fa_access) != 0) && ((fa_eobjatr == EOBJ_LOCAL_NODE) || fa_forward))) { … … 1332 1303 a_prp.pdc = (uint8_t)a_ans; 1333 1304 } else { 1334 *p_sw_ok = 0; /* ããããã£åå¾å¤±æ*/1305 *p_sw_ok = 0; /* プロパティ取得失敗 */ 1335 1306 a_ans = 0; 1336 1307 a_prp.pdc = 0; 1337 1308 } 1338 1309 1339 /* å¿çé»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å (epc,pdcã®2byte) */1310 /* 応答電文用メモリにデータ追加(epc,pdcの2byte) */ 1340 1311 a_ret = _ecn_fbs_add_data_ex(a_fbs_res, &a_prp, sizeof(a_prp)); 1341 1312 if (a_ret) { … … 1344 1315 } 1345 1316 if (0 < a_ans) { 1346 /* ä»éãã¼ã¿è¿½å*/1317 /* 付随データ追加 */ 1347 1318 a_ret = _ecn_fbs_add_data_ex(a_fbs_res, p_prp_buf, a_ans); 1348 1319 if (a_ret) { … … 1360 1331 1361 1332 lb_finally: 1362 /* ä½æ¥é å解æ¾*/1333 /* 作業領域解放 */ 1363 1334 if (p_prp_buf) 1364 1335 _ecn_fbs_dtq_rel(p_prp_buf); 1365 1336 1366 /* ããããã£ç¨ã¡ã¢ãªè§£æ¾*/1337 /* プロパティ用メモリ解放 */ 1367 1338 if (p_edt) 1368 1339 _ecn_fbs_dtq_rel(p_edt); … … 1372 1343 1373 1344 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); 1374 /* ããããã£å¤èªã¿åºãå®è¡*/1345 /* プロパティ値読み出し実行 */ 1375 1346 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) 1376 1347 { 1377 1348 T_ECN_SUB_BLK *p_edt = 0; 1378 void *p_prp_buf = 0; /* ä½æ¥é å*/1349 void *p_prp_buf = 0; /* 作業領域 */ 1379 1350 ER a_ret = E_SYS; 1380 1351 T_ECN_PRP a_prp; /* epc+pdc */ … … 1383 1354 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.opc = 0; 1384 1355 1385 /* ä½æ¥é å確ä¿*/1356 /* 作業領域確保 */ 1386 1357 p_prp_buf = _ecn_fbs_dtq_get(ECHONET_MEMPOOL_BLOCK_SIZE); 1387 1358 if (!p_prp_buf) { 1388 1359 ECN_DBG_PUT_2("_ecn_fbs_dtq_get() result = %d:%s", a_ret, itron_strerror(a_ret)); 1389 goto lb_except; /* ã¡ã¢ãªä¸è¶³*/1360 goto lb_except; /* メモリ不足 */ 1390 1361 } 1391 1362 1392 1363 for (i = 0; i < a_count; i++) { 1393 /* ECN_FBS_ID ããT_ECN_PRP1件ã¨ãã®ä»éãã¼ã¿ãæ½åº*/1364 /* ECN_FBS_IDからT_ECN_PRP1件とその付随データを抽出 */ 1394 1365 p_edt = _ecn_tsk_get_prp_pce(fa_fbs_id, &a_prp, p_edt); 1395 1366 if (!p_edt) { … … 1400 1371 a_prp.pdc = 0; 1401 1372 1402 /* å¿çé»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å (epc,pdcã®2byte) */1373 /* 応答電文用メモリにデータ追加(epc,pdcの2byte) */ 1403 1374 a_ret = _ecn_fbs_add_data_ex(a_fbs_res, &a_prp, sizeof(a_prp)); 1404 1375 if (a_ret) { … … 1415 1386 1416 1387 lb_finally: 1417 /* ä½æ¥é å解æ¾*/1388 /* 作業領域解放 */ 1418 1389 if (p_prp_buf) 1419 1390 _ecn_fbs_dtq_rel(p_prp_buf); 1420 1391 1421 /* ããããã£ç¨ã¡ã¢ãªè§£æ¾*/1392 /* プロパティ用メモリ解放 */ 1422 1393 if (p_edt) 1423 1394 _ecn_fbs_dtq_rel(p_edt); … … 1426 1397 } 1427 1398 1428 /* ããããã£å¤èªã¿é£ã°ãå®è¡*/1399 /* プロパティ値読み飛ばし実行 */ 1429 1400 static ER _ecn_tsk_eoj_skip_main(const EOBJINIB *fp_obj, ECN_FBS_ID fa_fbs_id, 1430 1401 int a_count); … … 1437 1408 1438 1409 for (i = 0; i < a_count; i++) { 1439 /* T_ECN_PRP é¨å(epc,pdc)ãèªã¿åã*/1410 /* T_ECN_PRP部分(epc,pdc)を読み取る */ 1440 1411 a_size = 0; 1441 1412 a_ret = _ecn_fbs_get_data(fa_fbs_id, &a_prp, sizeof(a_prp), &a_size); … … 1445 1416 } 1446 1417 1447 /* pdc åèªã¿é£ã°ã*/1418 /* pdc分読み飛ばし */ 1448 1419 a_ret = _ecn_fbs_seek_rpos(fa_fbs_id, a_prp.pdc); 1449 1420 if (a_ret) { … … 1464 1435 static void _ecn_tsk_mk_rsp_hdr(const EOBJINIB *fp_obj, T_ECN_EDT_HDR *fp_rsp_esv, 1465 1436 T_ECN_EDT_HDR const *fp_req_esv); 1466 /* å¿çé»æè¨å®*/1437 /* 応答電文設定 */ 1467 1438 static void _ecn_tsk_mk_rsp_hdr(const EOBJINIB *fp_obj, T_ECN_EDT_HDR *fp_rsp_esv, 1468 1439 T_ECN_EDT_HDR const *fp_req_esv) … … 1489 1460 } 1490 1461 1491 /* å¿çé»æç¨fbsè¨å®*/1462 /* 応答電文用fbs設定 */ 1492 1463 static void _ecn_tsk_set_rsp_fbs(ECN_FBS_ID fa_rsp_fbs, T_ECN_FST_BLK const *fp_req_ptr); 1493 /* å¿çé»æç¨fbsè¨å®(sender/targetã®è¨å®) */1464 /* 応答電文用fbs設定(sender/targetの設定) */ 1494 1465 static void _ecn_tsk_set_rsp_fbs(ECN_FBS_ID fa_rsp_fbs, T_ECN_FST_BLK const *fp_req_ptr) 1495 1466 { … … 1500 1471 } 1501 1472 1502 /* ããããã£å¤æ¸ãè¾¼ã¿è¦æ±*/1473 /* プロパティ値書き込み要求 */ 1503 1474 static void _ecn_tsk_eoj_set(const EOBJINIB *fp_obj, ATR fa_eobjatr, bool_t fa_fromapp, bool_t fa_update, 1504 1475 ECN_FBS_ID fa_fbs_id, ECN_SRV_CODE fa_res_esv, ECN_SRV_CODE fa_sna_esv, … … 1515 1486 memset(&a_ecn_hdp, 0, sizeof(a_ecn_hdp)); 1516 1487 1517 /* å¿çæ大ãµã¤ãºã®åå¾*/1488 /* 応答最大サイズの取得 */ 1518 1489 a_size = sizeof(T_ECN_HDR) + sizeof(T_ECN_EDATA_BODY) + sizeof(T_ECN_PRP); 1519 1490 1520 /* å¿çé»æç¨ã¡ã¢ãªã®åå¾*/1491 /* 応答電文用メモリの取得 */ 1521 1492 a_ret = _ecn_fbs_cre(a_size, &a_fbs_res); 1522 if (a_ret != E_OK || !a_fbs_res.ptr) /* 確ä¿å¤±æ*/1493 if (a_ret != E_OK || !a_fbs_res.ptr) /* 確保失敗 */ 1523 1494 return; 1524 1495 1525 /* å¿çé»æè¨å®*/1496 /* 応答電文設定 */ 1526 1497 if(p_req_esv->edata.deoj.eojx3 != 0) 1527 1498 _ecn_tsk_mk_rsp_hdr_res(&a_ecn_hdp, p_req_esv); … … 1529 1500 _ecn_tsk_mk_rsp_hdr(fp_obj, &a_ecn_hdp, p_req_esv); 1530 1501 1531 /* æ£å¸¸æã®å¿çé»æãããããã£å¤éç¥å¿çã®å ´å*/1502 /* 正常時の応答電文がプロパティ値通知応答の場合 */ 1532 1503 if (fa_res_esv == ESV_INFC_RES) { 1533 /* éä¿¡å 1534 ã¨å®å 1535 ãå 1536 ¥ãæ¿ã */ 1504 /* 送信元と宛先を入れ替え */ 1537 1505 eoj = a_ecn_hdp.edata.seoj; 1538 1506 a_ecn_hdp.edata.seoj = a_ecn_hdp.edata.deoj; … … 1540 1508 } 1541 1509 1542 f_put_fbs_eoj("_ecn_tsk_eoj_set", "fa_fbs_id", fa_fbs_id); /* s/deoj ãããã°åºå*/1543 1544 /* å¿çé»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å*/1510 f_put_fbs_eoj("_ecn_tsk_eoj_set", "fa_fbs_id", fa_fbs_id); /* s/deoj デバッグ出力 */ 1511 1512 /* 応答電文用メモリにデータ追加 */ 1545 1513 a_ret = _ecn_fbs_add_data_ex(a_fbs_res, &a_ecn_hdp, 1546 1514 sizeof(a_ecn_hdp.ecn_hdr) + sizeof(a_ecn_hdp.edata)); … … 1548 1516 goto lb_except; 1549 1517 1550 /* payloadå 1551 é ã®T_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)ãèªã¿é£ã°ã */ 1518 /* payload先頭のT_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)を読み飛ばす */ 1552 1519 a_ret = _ecn_fbs_set_rpos(fa_fbs_id, offsetof(T_ECN_EDT_HDR, ecn_prp)); 1553 1520 if (a_ret) 1554 1521 goto lb_except; 1555 1522 1556 /* å¿çé»æç¨fbsè¨å®*/1523 /* 応答電文用fbs設定 */ 1557 1524 _ecn_tsk_set_rsp_fbs(a_fbs_res, fa_fbs_id.ptr); 1558 1525 1559 /* ããããã£å¤æ¸ãè¾¼ã¿å®è¡*/1526 /* プロパティ値書き込み実行 */ 1560 1527 a_ret = _ecn_tsk_eoj_set_main(fp_obj, fa_eobjatr, fa_fromapp, fa_update, fa_fbs_id, a_fbs_res, 1561 1528 fa_fbs_anno, p_req_esv->edata.opc, &a_sw_ok); … … 1563 1530 goto lb_except; 1564 1531 1565 /* å¿çè¦ã®å ´å*/1532 /* 応答要の場合 */ 1566 1533 if (a_sw_ok) { 1567 1534 if (!fa_res_esv) { 1568 /* å¿çä¸è¦ã®å ´å*/1535 /* 応答不要の場合 */ 1569 1536 _ecn_fbs_del(a_fbs_res); 1570 1537 goto lb_finally; 1571 1538 } 1572 /* è¨å®å¦çæå*/1539 /* 設定処理成功 */ 1573 1540 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.esv = fa_res_esv; 1574 1541 } else { 1575 1542 if (!fa_sna_esv) { 1576 /* å¿çä¸è¦ã®å ´å*/1543 /* 応答不要の場合 */ 1577 1544 _ecn_fbs_del(a_fbs_res); 1578 1545 goto lb_finally; 1579 1546 } 1580 /* è¨å®å¦ç失æ*/1547 /* 設定処理失敗 */ 1581 1548 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.esv = fa_sna_esv; 1582 1549 } 1583 /* å¿çéä¿¡*/1550 /* 応答送信 */ 1584 1551 a_ret = _ecn_tsk_snd_dtq(a_fbs_res, false); 1585 1552 if (a_ret == E_OK) … … 1587 1554 1588 1555 lb_except: 1589 /* ãã¼ã¿é信失æãããé å解æ¾*/1556 /* データ送信失敗したら領域解放 */ 1590 1557 if (a_fbs_res.ptr) 1591 1558 _ecn_fbs_del(a_fbs_res); … … 1595 1562 } 1596 1563 1597 /* ããããã£å¤èªã¿åºãè¦æ±*/1564 /* プロパティ値読み出し要求 */ 1598 1565 static void _ecn_tsk_eoj_get(const EOBJINIB *fp_obj, ATR fa_eobjatr, bool_t fa_forward, ATR fa_access, 1599 1566 ECN_FBS_ID fa_fbs_id, ECN_SRV_CODE fa_res_esv, ECN_SRV_CODE fa_sna_esv) … … 1608 1575 memset(&a_ecn_hdp, 0, sizeof(a_ecn_hdp)); 1609 1576 1610 /* åæåå¾ãµã¤ãº*/1577 /* 初期取得サイズ */ 1611 1578 a_size = sizeof(T_ECN_HDR) + sizeof(T_ECN_EDATA_BODY) + sizeof(T_ECN_PRP); 1612 1579 1613 /* å¿çé»æç¨ã¡ã¢ãªã®åå¾*/1580 /* 応答電文用メモリの取得 */ 1614 1581 a_ret = _ecn_fbs_cre(a_size, &a_fbs_res); 1615 if (a_ret != E_OK || !a_fbs_res.ptr) { /* 確ä¿å¤±æ*/1582 if (a_ret != E_OK || !a_fbs_res.ptr) { /* 確保失敗 */ 1616 1583 ECN_DBG_PUT_2("_ecn_fbs_cre() result = %d:%s", a_ret, itron_strerror(a_ret)); 1617 1584 goto lb_finally; 1618 1585 } 1619 1586 1620 /* å¿çé»æè¨å®*/1587 /* 応答電文設定 */ 1621 1588 if(p_req_esv->edata.deoj.eojx3 != 0) 1622 1589 _ecn_tsk_mk_rsp_hdr_res(&a_ecn_hdp, p_req_esv); … … 1624 1591 _ecn_tsk_mk_rsp_hdr(fp_obj, &a_ecn_hdp, p_req_esv); 1625 1592 1626 f_put_fbs_eoj("_ecn_tsk_eoj_get", "fa_fbs_id", fa_fbs_id); /* s/deoj ãããã°åºå*/1627 1628 /* å¿çé»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å*/1593 f_put_fbs_eoj("_ecn_tsk_eoj_get", "fa_fbs_id", fa_fbs_id); /* s/deoj デバッグ出力 */ 1594 1595 /* 応答電文用メモリにデータ追加 */ 1629 1596 a_ret = _ecn_fbs_add_data_ex(a_fbs_res, &a_ecn_hdp, 1630 1597 sizeof(a_ecn_hdp.ecn_hdr) + sizeof(a_ecn_hdp.edata)); … … 1634 1601 } 1635 1602 1636 /* payloadå 1637 é ã®T_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)ãèªã¿é£ã°ã */ 1603 /* payload先頭のT_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)を読み飛ばす */ 1638 1604 a_ret = _ecn_fbs_set_rpos(fa_fbs_id, offsetof(T_ECN_EDT_HDR, ecn_prp)); 1639 1605 if (a_ret) { … … 1642 1608 } 1643 1609 1644 /* å¿çé»æç¨fbsè¨å®*/1610 /* 応答電文用fbs設定 */ 1645 1611 _ecn_tsk_set_rsp_fbs(a_fbs_res, fa_fbs_id.ptr); 1646 1612 1647 /* ããããã£å¤èªã¿è¾¼ã¿å®è¡*/1613 /* プロパティ値読み込み実行 */ 1648 1614 a_ret = _ecn_tsk_eoj_get_main(fp_obj, fa_eobjatr, fa_forward, fa_access, fa_fbs_id, a_fbs_res, 1649 1615 ((T_EDATA *)fa_fbs_id.ptr)->hdr.edata.opc, &a_sw_ok); … … 1655 1621 if (a_sw_ok) { 1656 1622 if (!fa_res_esv) { 1657 /* å¿çä¸è¦ã®å ´å*/1623 /* 応答不要の場合 */ 1658 1624 _ecn_fbs_del(a_fbs_res); 1659 1625 goto lb_finally; 1660 1626 } 1661 /* è¨å®å¦çæå*/1627 /* 設定処理成功 */ 1662 1628 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.esv = fa_res_esv; 1663 1629 } else { 1664 1630 if (!fa_sna_esv) { 1665 /* å¿çä¸è¦ã®å ´å*/1631 /* 応答不要の場合 */ 1666 1632 _ecn_fbs_del(a_fbs_res); 1667 1633 goto lb_finally; 1668 1634 } 1669 /* è¨å®å¦ç失æ*/1635 /* 設定処理失敗 */ 1670 1636 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.esv = fa_sna_esv; 1671 1637 1672 /* ä¸å¯å¿çã®å ´åã¯åå¥éä¿¡ãã*/1638 /* 不可応答の場合は個別送信する */ 1673 1639 if (a_fbs_res.ptr->hdr.target.id == ENOD_MULTICAST_ID) { 1674 1640 a_fbs_res.ptr->hdr.target.id = fa_fbs_id.ptr->hdr.sender.id; 1675 1641 } 1676 1642 } 1677 /* å¿çéä¿¡*/1643 /* 応答送信 */ 1678 1644 a_ret = _ecn_tsk_snd_dtq(a_fbs_res, false); 1679 1645 if (a_ret != E_OK) { … … 1684 1650 1685 1651 lb_except: 1686 /* ãã¼ã¿é信失æãããé å解æ¾*/1652 /* データ送信失敗したら領域解放 */ 1687 1653 if (a_fbs_res.ptr) 1688 1654 _ecn_fbs_del(a_fbs_res); … … 1692 1658 } 1693 1659 1694 /* ããããã£å¤èªã¿åºãè¦æ±*/1660 /* プロパティ値読み出し要求 */ 1695 1661 static void _ecn_tsk_eoj_res(ECN_FBS_ID fa_fbs_id, ECN_SRV_CODE fa_res_esv, 1696 1662 ECN_SRV_CODE fa_sna_esv) … … 1705 1671 memset(&a_ecn_hdp, 0, sizeof(a_ecn_hdp)); 1706 1672 1707 /* åæåå¾ãµã¤ãº*/1673 /* 初期取得サイズ */ 1708 1674 a_size = sizeof(T_ECN_HDR) + sizeof(T_ECN_EDATA_BODY) + sizeof(T_ECN_PRP); 1709 1675 1710 /* å¿çé»æç¨ã¡ã¢ãªã®åå¾*/1676 /* 応答電文用メモリの取得 */ 1711 1677 a_ret = _ecn_fbs_cre(a_size, &a_fbs_res); 1712 if (a_ret != E_OK || !a_fbs_res.ptr) { /* 確ä¿å¤±æ*/1678 if (a_ret != E_OK || !a_fbs_res.ptr) { /* 確保失敗 */ 1713 1679 ECN_DBG_PUT_2("_ecn_fbs_cre() result = %d:%s", a_ret, itron_strerror(a_ret)); 1714 1680 goto lb_finally; 1715 1681 } 1716 1682 1717 /* å¿çé»æè¨å®*/1683 /* 応答電文設定 */ 1718 1684 _ecn_tsk_mk_rsp_hdr_res(&a_ecn_hdp, p_req_esv); 1719 1685 1720 f_put_fbs_eoj("_ecn_tsk_eoj_res", "fa_fbs_id", fa_fbs_id); /* s/deoj ãããã°åºå*/1721 1722 /* å¿çé»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å*/1686 f_put_fbs_eoj("_ecn_tsk_eoj_res", "fa_fbs_id", fa_fbs_id); /* s/deoj デバッグ出力 */ 1687 1688 /* 応答電文用メモリにデータ追加 */ 1723 1689 a_ret = _ecn_fbs_add_data_ex(a_fbs_res, &a_ecn_hdp, 1724 1690 sizeof(a_ecn_hdp.ecn_hdr) + sizeof(a_ecn_hdp.edata)); … … 1728 1694 } 1729 1695 1730 /* payloadå 1731 é ã®T_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)ãèªã¿é£ã°ã */ 1696 /* payload先頭のT_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)を読み飛ばす */ 1732 1697 a_ret = _ecn_fbs_set_rpos(fa_fbs_id, offsetof(T_ECN_EDT_HDR, ecn_prp)); 1733 1698 if (a_ret) { … … 1736 1701 } 1737 1702 1738 /* å¿çé»æç¨fbsè¨å®*/1703 /* 応答電文用fbs設定 */ 1739 1704 _ecn_tsk_set_rsp_fbs(a_fbs_res, fa_fbs_id.ptr); 1740 1705 1741 /* ããããã£å¤èªã¿è¾¼ã¿å®è¡*/1706 /* プロパティ値読み込み実行 */ 1742 1707 a_ret = _ecn_tsk_eoj_res_main(fa_fbs_id, a_fbs_res, 1743 1708 ((T_EDATA *)fa_fbs_id.ptr)->hdr.edata.opc, &a_sw_ok); … … 1749 1714 if (a_sw_ok) { 1750 1715 if (!fa_res_esv) { 1751 /* å¿çä¸è¦ã®å ´å*/1716 /* 応答不要の場合 */ 1752 1717 _ecn_fbs_del(a_fbs_res); 1753 1718 goto lb_finally; 1754 1719 } 1755 /* è¨å®å¦çæå*/1720 /* 設定処理成功 */ 1756 1721 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.esv = fa_res_esv; 1757 1722 } else { 1758 1723 if (!fa_sna_esv) { 1759 /* å¿çä¸è¦ã®å ´å*/1724 /* 応答不要の場合 */ 1760 1725 _ecn_fbs_del(a_fbs_res); 1761 1726 goto lb_finally; 1762 1727 } 1763 /* è¨å®å¦ç失æ*/1728 /* 設定処理失敗 */ 1764 1729 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.esv = fa_sna_esv; 1765 1730 } 1766 /* å¿çéä¿¡*/1731 /* 応答送信 */ 1767 1732 a_ret = _ecn_tsk_snd_dtq(a_fbs_res, false); 1768 1733 if (a_ret != E_OK) { … … 1773 1738 1774 1739 lb_except: 1775 /* ãã¼ã¿é信失æãããé å解æ¾*/1740 /* データ送信失敗したら領域解放 */ 1776 1741 if (a_fbs_res.ptr) 1777 1742 _ecn_fbs_del(a_fbs_res); … … 1788 1753 T_ECN_EDT_HDR a_ecn_hdp; 1789 1754 ECN_FBS_ID a_fbs_res = { 0 }; 1790 int a_rdprp_wrpos; /* ããããã£èªã¿è¾¼ã¿ä»¶æ°æ¸ãè¾¼ã¿æã®ãããä½ç½®*/1755 int a_rdprp_wrpos; /* プロパティ読み込み件数書き込み時のヘッド位置 */ 1791 1756 ER a_ret; 1792 1757 int i, a_size, a_rdlen; 1793 1758 int a_sw_ok = 1; 1794 int a_count = ((T_EDATA *)fa_fbs_id.ptr)->hdr.edata.opc; /* å¦çããããã£æ°*/1759 int a_count = ((T_EDATA *)fa_fbs_id.ptr)->hdr.edata.opc; /* 処理プロパティ数 */ 1795 1760 1796 1761 memset(&a_ecn_hdp, 0, sizeof(a_ecn_hdp)); … … 1799 1764 fp_obj->eojx1 << 16 | fp_obj->eojx2 << 8 | fp_obj->eojx3); 1800 1765 1801 /* åæåå¾ãµã¤ãº*/1766 /* 初期取得サイズ */ 1802 1767 a_size = sizeof(T_ECN_HDR) + sizeof(T_ECN_EDATA_BODY) + sizeof(T_ECN_PRP); 1803 1768 1804 /* å¿çé»æç¨ã¡ã¢ãªã®åå¾*/1769 /* 応答電文用メモリの取得 */ 1805 1770 a_ret = _ecn_fbs_cre(a_size, &a_fbs_res); 1806 if (a_ret != E_OK || !a_fbs_res.ptr) /* 確ä¿å¤±æ*/1771 if (a_ret != E_OK || !a_fbs_res.ptr) /* 確保失敗 */ 1807 1772 goto lb_finally; 1808 1773 1809 /* å¿çé»æè¨å®*/1774 /* 応答電文設定 */ 1810 1775 if(p_req_esv->edata.deoj.eojx3 != 0) 1811 1776 _ecn_tsk_mk_rsp_hdr_res(&a_ecn_hdp, p_req_esv); … … 1814 1779 a_size -= sizeof(T_ECN_HDR) + sizeof(T_ECN_EDATA_BODY); 1815 1780 1816 f_put_fbs_eoj("_ecn_tsk_eoj_set_get", "fa_fbs_id", fa_fbs_id); /* s/deoj ãããã°åºå*/1817 1818 /* å¿çé»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å*/1781 f_put_fbs_eoj("_ecn_tsk_eoj_set_get", "fa_fbs_id", fa_fbs_id); /* s/deoj デバッグ出力 */ 1782 1783 /* 応答電文用メモリにデータ追加 */ 1819 1784 a_ret = _ecn_fbs_add_data_ex(a_fbs_res, &a_ecn_hdp, 1820 1785 sizeof(a_ecn_hdp.ecn_hdr) + sizeof(a_ecn_hdp.edata)); … … 1822 1787 goto lb_except; 1823 1788 1824 /* payloadå 1825 é ã®T_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)ãèªã¿é£ã°ã */ 1789 /* payload先頭のT_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)を読み飛ばす */ 1826 1790 a_ret = _ecn_fbs_set_rpos(fa_fbs_id, offsetof(T_ECN_EDT_HDR, ecn_prp)); 1827 1791 if (a_ret) 1828 1792 goto lb_except; 1829 1793 1830 /* å¿çé»æç¨fbsè¨å®*/1794 /* 応答電文用fbs設定 */ 1831 1795 _ecn_tsk_set_rsp_fbs(a_fbs_res, fa_fbs_id.ptr); 1832 1796 1833 /* ããããã£å¤æ¸ãè¾¼ã¿å®è¡*/1797 /* プロパティ値書き込み実行 */ 1834 1798 a_ret = _ecn_tsk_eoj_set_main(fp_obj, fa_eobjatr, fa_fromapp, false, fa_fbs_id, a_fbs_res, 1835 1799 fa_fbs_anno, a_count, &a_sw_ok); … … 1844 1808 (a_sw_ok ? "true" : "false")); 1845 1809 1846 /* 次ã®ä»¶æ°ãèªã¿åã(1byte) */1847 /* âECHONET-Lite_Ver.1.10_02.pdf p.40 [OPCGet] */1810 /* 次の件数を読み取る(1byte) */ 1811 /* → ECHONET-Lite_Ver.1.10_02.pdf p.40 [OPCGet] */ 1848 1812 a_rdlen = i = 0; 1849 1813 a_ret = _ecn_fbs_get_data(fa_fbs_id, &i, 1, &a_rdlen); … … 1852 1816 a_count = *(uint8_t *)&i; 1853 1817 1854 /* ããããã£èªã¿è¾¼ã¿ä»¶æ°æ¸ãè¾¼ã¿æã®ãããæ 1855 å ±ãè¨é² */ 1818 /* プロパティ読み込み件数書き込み時のヘッド情報を記録 */ 1856 1819 a_rdprp_wrpos = _ecn_fbs_get_datalen(a_fbs_res); 1857 1820 1858 /* å¿çé»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å(OPCGet 1byte) */1821 /* 応答電文用メモリにデータ追加 (OPCGet 1byte) */ 1859 1822 a_ret = _ecn_fbs_add_data_ex(a_fbs_res, &i, 1); 1860 1823 if (a_ret) 1861 1824 goto lb_except; 1862 1825 1863 /* ãã®æç¹ã§ã®å¿çé»æä¸ããããã£ä»¶æ°ãè¨é²*/1826 /* この時点での応答電文中プロパティ件数を記録 */ 1864 1827 i = ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.opc; 1865 1828 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.opc = 0; 1866 1829 1867 /* ããããã£å¤èªã¿è¾¼ã¿å®è¡*/1830 /* プロパティ値読み込み実行 */ 1868 1831 a_ret = _ecn_tsk_eoj_get_main(fp_obj, fa_eobjatr, false, EPC_RULE_GET, fa_fbs_id, a_fbs_res, 1869 1832 a_count, &a_sw_ok); … … 1879 1842 (a_sw_ok ? "true" : "false")); 1880 1843 1881 /* ããããã£èªã¿è¾¼ã¿ä»¶æ°æ¸ãè¾¼ã¿æã®ãããæ 1882 å ±ã§ãèªã¿åºã件æ°ãè¨é² */ 1844 /* プロパティ読み込み件数書き込み時のヘッド情報で、読み出し件数を記録 */ 1883 1845 _ecn_fbs_poke(a_fbs_res, a_rdprp_wrpos, ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.opc); 1884 1846 1885 /* è¨é²ãã¦ãããããããã£ä»¶æ°ï¼æ¸ãè¾¼ã¿ä»¶æ°ï¼ãæ¸ãæ»ã*/1847 /* 記録しておいたプロパティ件数(書き込み件数)を書き戻す */ 1886 1848 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.opc = (uint8_t)i; 1887 1849 1888 /* å¿çè¦ã®å ´å*/1850 /* 応答要の場合 */ 1889 1851 if (a_sw_ok) { 1890 /* è¨å®å¦çæå*/1852 /* 設定処理成功 */ 1891 1853 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.esv = fa_res_esv; 1892 1854 } else { 1893 /* è¨å®å¦ç失æ*/1855 /* 設定処理失敗 */ 1894 1856 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.esv = fa_sna_esv; 1895 1857 } 1896 /* å¿çéä¿¡*/1858 /* 応答送信 */ 1897 1859 a_ret = _ecn_tsk_snd_dtq(a_fbs_res, false); 1898 1860 if (a_ret == E_OK) … … 1900 1862 1901 1863 lb_except: 1902 /* ãã¼ã¿é信失æãããé å解æ¾*/1864 /* データ送信失敗したら領域解放 */ 1903 1865 if (a_fbs_res.ptr) 1904 1866 _ecn_fbs_del(a_fbs_res); … … 1917 1879 int i, a_size, a_rdlen; 1918 1880 int a_sw_ok = 1; 1919 int a_count = ((T_EDATA *)fa_fbs_id.ptr)->hdr.edata.opc; /* å¦çããããã£æ°*/1881 int a_count = ((T_EDATA *)fa_fbs_id.ptr)->hdr.edata.opc; /* 処理プロパティ数 */ 1920 1882 1921 1883 memset(&a_ecn_hdp, 0, sizeof(a_ecn_hdp)); … … 1924 1886 fp_obj->eojx1 << 16 | fp_obj->eojx2 << 8 | fp_obj->eojx3); 1925 1887 1926 /* åæåå¾ãµã¤ãº*/1888 /* 初期取得サイズ */ 1927 1889 a_size = sizeof(T_ECN_HDR) + sizeof(T_ECN_EDATA_BODY) + sizeof(T_ECN_PRP); 1928 1890 1929 /* å¿çé»æç¨ã¡ã¢ãªï¼ããã¼ï¼ã®åå¾*/1891 /* 応答電文用メモリ(ダミー)の取得 */ 1930 1892 a_ret = _ecn_fbs_cre(a_size, &a_fbs_dmy); 1931 if (a_ret != E_OK || !a_fbs_dmy.ptr) /* 確ä¿å¤±æ*/1893 if (a_ret != E_OK || !a_fbs_dmy.ptr) /* 確保失敗 */ 1932 1894 goto lb_finally; 1933 1895 1934 /* å¿çé»æè¨å®*/1896 /* 応答電文設定 */ 1935 1897 _ecn_tsk_mk_rsp_hdr_res(&a_ecn_hdp, p_req_esv); 1936 1898 a_size -= sizeof(T_ECN_HDR) + sizeof(T_ECN_EDATA_BODY); 1937 1899 1938 /* payloadå 1939 é ã®T_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)ãèªã¿é£ã°ã */ 1900 /* payload先頭のT_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)を読み飛ばす */ 1940 1901 a_ret = _ecn_fbs_set_rpos(fa_fbs_id, offsetof(T_ECN_EDT_HDR, ecn_prp)); 1941 1902 if (a_ret) 1942 1903 goto lb_except; 1943 1904 1944 /* ããããã£å¤æ¸ãè¾¼ã¿å¿çèªã¿é£ã°ãå®è¡*/1905 /* プロパティ値書き込み応答読み飛ばし実行 */ 1945 1906 a_ret = _ecn_tsk_eoj_skip_main(fp_obj, fa_fbs_id, a_count); 1946 1907 if (a_ret) { … … 1954 1915 (a_sw_ok ? "true" : "false")); 1955 1916 1956 /* 次ã®ä»¶æ°ãèªã¿åã(1byte) */1957 /* âECHONET-Lite_Ver.1.10_02.pdf p.40 [OPCGet] */1917 /* 次の件数を読み取る(1byte) */ 1918 /* → ECHONET-Lite_Ver.1.10_02.pdf p.40 [OPCGet] */ 1958 1919 a_rdlen = i = 0; 1959 1920 a_ret = _ecn_fbs_get_data(fa_fbs_id, &i, 1, &a_rdlen); … … 1962 1923 a_count = *(uint8_t *)&i; 1963 1924 1964 /* ããããã£å¤èªã¿åºãå¿çã®æ¸ãè¾¼ã¿å®è¡*/1925 /* プロパティ値読み出し応答の書き込み実行 */ 1965 1926 a_ret = _ecn_tsk_eoj_set_main(fp_obj, fa_eobjatr, fa_fromapp, true, fa_fbs_id, a_fbs_dmy, 1966 1927 fa_fbs_anno, a_count, &a_sw_ok); … … 1979 1940 1980 1941 lb_except: 1981 /* ãã¼ã¿é信失æãããé å解æ¾*/1942 /* データ送信失敗したら領域解放 */ 1982 1943 if (a_fbs_dmy.ptr) 1983 1944 _ecn_fbs_del(a_fbs_dmy); … … 1988 1949 1989 1950 /* 1990 * å¿çé»æå¾ 1991 ã¡ã®å²ãè¾¼ã¿é»æä½æ 1951 * 応答電文待ちの割り込み電文作成 1992 1952 */ 1993 1953 ER _ecn_mk_brk_wai(ECN_FBS_ID *pk_fbs_id, const void *p_dat, size_t fa_size) 1994 1954 { 1995 1955 ER a_ret; 1996 ECN_FBS_ID a_fbs_id = { 0 }; /* è¦æ±é»æç¨ã¡ã¢ãª*/1956 ECN_FBS_ID a_fbs_id = { 0 }; /* 要求電文用メモリ */ 1997 1957 1998 1958 if (!pk_fbs_id) … … 2000 1960 *pk_fbs_id = a_fbs_id; 2001 1961 if (sizeof(a_fbs_id.ptr->payload) <= fa_size) 2002 return E_PAR; /* ä»éãã¼ã¿ã大ãããã*/1962 return E_PAR; /* 付随データが大きすぎる */ 2003 1963 if (!p_dat && 0 < fa_size) 2004 return E_PAR; /* ä»éãã¼ã¿ãµã¤ãºã1以ä¸ãªã®ã«ãã¼ã¿ãã¤ã³ã¿ãNULL */2005 2006 /* è¦æ±é»æç¨ã¡ã¢ãªã®åå¾*/1964 return E_PAR; /* 付随データサイズが1以上なのにデータポインタがNULL */ 1965 1966 /* 要求電文用メモリの取得 */ 2007 1967 a_ret = _ecn_fbs_cre((0 < fa_size ? fa_size : 1), &a_fbs_id); 2008 if (a_ret != E_OK || !a_fbs_id.ptr) { /* 確ä¿å¤±æ*/1968 if (a_ret != E_OK || !a_fbs_id.ptr) { /* 確保失敗 */ 2009 1969 syslog(LOG_WARNING, "_ecn_fbs_cre(%d) result = %d:%s", fa_size, a_ret, itron_strerror(a_ret)); 2010 1970 return a_ret; 2011 1971 } 2012 1972 2013 /* è¦æ±é»æè¨å®*/1973 /* 要求電文設定 */ 2014 1974 a_fbs_id.ptr->hdr.type = ECN_MSG_USER_BREAK; 2015 1975 a_fbs_id.ptr->hdr.sender.id = ENOD_API_ID; … … 2018 1978 2019 1979 if (0 < fa_size && p_dat) { 2020 /* ä»éãã¼ã¿è¿½å*/1980 /* 付随データ追加 */ 2021 1981 a_ret = _ecn_fbs_add_data_ex(a_fbs_id, p_dat, fa_size); 2022 1982 if (a_ret) { … … 2030 1990 *pk_fbs_id = a_fbs_id; 2031 1991 2032 /* æ£å¸¸çµäº*/1992 /* 正常終了 */ 2033 1993 return a_ret; 2034 1994 2035 1995 lb_except: 2036 /* ãã¼ã¿ä½æ失æãããé å解æ¾*/1996 /* データ作成失敗したら領域解放 */ 2037 1997 if (a_fbs_id.ptr) 2038 1998 _ecn_fbs_del(a_fbs_id); … … 2041 2001 } 2042 2002 2043 /* å¿çé»æç¨fbsè¨å®(sender/targetã®è¨å®) */2003 /* 応答電文用fbs設定(sender/targetの設定) */ 2044 2004 ER _ecn_tsk_cre_req_fbs(ID sender, uint8_t cmd, ECN_FBS_ID *pk_req) 2045 2005 { … … 2070 2030 } 2071 2031 2072 /* å¿çé»æç¨fbsè¨å®(sender/targetã®è¨å®) */2032 /* 応答電文用fbs設定(sender/targetの設定) */ 2073 2033 ER _ecn_tsk_cre_res_fbs(ECN_FBS_ID req, uint8_t cmd, ECN_FBS_ID *pk_res) 2074 2034 {
Note:
See TracChangeset
for help on using the changeset viewer.