Changeset 321 for EcnlProtoTool/trunk/mrbgems/mruby-ecnl/src/echonet_task.c
- Timestamp:
- Aug 23, 2017, 9:27:43 AM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/mrbgems/mruby-ecnl/src/echonet_task.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r270 r321 4 4 * Copyright (C) 2014-2016 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 */ 51 36 52 37 /* 53 * ECHONET Lite ã¿ã¹ã¯38 * ECHONET Lite タスク 54 39 */ 55 40 … … 120 105 i += - ENOD_REMOTE_ID + 1; 121 106 if (from_app && (i < svc->tnum_enodid)) { 122 /* éåæã®ãªã¢ã¼ããã¼ãã¯ãµã¼ãã¹å¦çã¿ã¹ã¯ã§å¦çãã*/107 /* 非同期のリモートノードはサービス処理タスクで処理する */ 123 108 switch (svc->eobjcb_table[i].profile->eobjatr) { 124 109 case EOBJ_SYNC_REMOTE_NODE: … … 168 153 169 154 /* 170 * ECHONET Lite ã¿ã¹ã¯ã®åæåï¼ã³ã³ã¹ãã©ã¯ã¿ç¸å½ï¼155 * ECHONET Lite タスクの初期化(コンストラクタ相当) 171 156 */ 172 157 void echonet_task_init(ecnl_svc_task_t *svc, intptr_t exinf) … … 176 161 177 162 /* 178 * ã¢ã¸ã¥ã¼ã«åæå163 * モジュール初期化 179 164 */ 180 165 static void _ecn_tsk_int_module_init(ecnl_svc_task_t *svc) … … 193 178 194 179 /* 195 * ECHONET Lite ã¿ã¹ã¯ ã¿ã¤ãã¼å¤åå¾180 * ECHONET Lite タスク タイマー値取得 196 181 */ 197 182 TMO echonet_svctask_get_timer(ecnl_svc_task_t *svc) … … 217 202 218 203 /* 219 * ECHONET Lite ã¿ã¹ã¯ æéçµéå¦ç204 * ECHONET Lite タスク 時間経過処理 220 205 */ 221 206 void echonet_svctask_progress(ecnl_svc_task_t *svc, TMO a_timer) … … 228 213 229 214 /* 230 * ECHONET Lite ã¿ã¹ã¯ ã¡ãã»ã¼ã¸åä¿¡å¦ç215 * ECHONET Lite タスク メッセージ受信処理 231 216 */ 232 217 void echonet_svctask_recv_msg(ecnl_svc_task_t *svc, T_ECN_FST_BLK *p_msg) … … 239 224 240 225 switch (fbs_id.ptr->hdr.type) { 241 /* å 242 é¨ä½¿ç¨ã¡ãã»ã¼ã¸ */ 226 /* 内部使用メッセージ */ 243 227 case ECN_MSG_INTERNAL: 244 228 _ecn_tsk_int_msg(svc, svc->exinf, fbs_id); 245 229 break; 246 230 247 /* ECHONET ç¨ã¡ãã»ã¼ã¸*/231 /* ECHONET用メッセージ */ 248 232 case ECN_MSG_ECHONET: 249 233 _ecn_tsk_ecn_msg(svc, svc->exinf, fbs_id); … … 254 238 } 255 239 256 /* é å解æ¾*/240 /* 領域解放 */ 257 241 if (svc->release_esv) 258 242 _ecn_fbs_del(svc->mrb, fbs_id); … … 260 244 261 245 /* 262 * ECHONET Lite ã¿ã¹ã¯ ã¿ã¤ã ã¢ã¦ãå¦ç246 * ECHONET Lite タスク タイムアウト処理 263 247 */ 264 248 void echonet_svctask_timeout(ecnl_svc_task_t *svc) … … 271 255 272 256 /* 273 * ã·ã¼ã±ã³ã¹çªå·çæ257 * シーケンス番号生成 274 258 */ 275 259 static uint16_t _ecn_tsk_new_tid(ecnl_svc_task_t *svc) … … 279 263 280 264 /* 281 * è¦æ±é»æä½æ 282 * å¼æ° 283 * ECN_FBS_ID *fp_fbs_id åå¾ããFBS_IDã®æ ¼ç´å 284 285 * ID fa_seoj éä¿¡å 286 ã®ECHONETãªãã¸ã§ã¯ãID 287 * ID fa_deoj å®å 288 ã®ECHONETãªãã¸ã§ã¯ãID 289 * uint8_t fa_epc ããããã£ã³ã¼ã 290 * uint8_t fa_pdc ããããã£å¤ãã¼ã¿ãµã¤ãº 291 * const void *p_edt ããããã£å¤ãã¼ã¿ 292 * ECN_SRV_CODE fa_esv ECHONET Light ãµã¼ãã¹ã³ã¼ã 265 * 要求電文作成 266 * 引数 267 * ECN_FBS_ID *fp_fbs_id 取得したFBS_IDの格納先 268 * ID fa_seoj 送信元のECHONETオブジェクトID 269 * ID fa_deoj 宛先のECHONETオブジェクトID 270 * uint8_t fa_epc プロパティコード 271 * uint8_t fa_pdc プロパティ値データサイズ 272 * const void *p_edt プロパティ値データ 273 * ECN_SRV_CODE fa_esv ECHONET Light サービスコード 293 274 */ 294 275 ER _ecn_tsk_mk_esv(ecnl_svc_task_t *svc, ECN_FBS_ID *fp_fbs_id, ID fa_seoj, ID fa_deoj, … … 298 279 ER a_ret; 299 280 int a_size, i; 300 ECN_FBS_ID a_fbs_id = { 0 }; /* è¦æ±é»æç¨ã¡ã¢ãª*/281 ECN_FBS_ID a_fbs_id = { 0 }; /* 要求電文用メモリ */ 301 282 T_ECN_EDT_HDR a_ecn_hdp; /* ecn_hdr+edata+ecn_prp 14byte */ 302 283 ID a_enodid; … … 305 286 306 287 if (!fp_fbs_id) 307 return E_PAR; /* åå¾ããFBS_IDã®æ ¼ç´å 308 ãNULL */ 288 return E_PAR; /* 取得したFBS_IDの格納先がNULL */ 309 289 if (ECHONET_MEMPOOL_BLOCK_SIZE <= fa_pdc) 310 return E_PAR; /* ããããã£å¤ãµã¤ãºã大ãããã*/290 return E_PAR; /* プロパティ値サイズが大きすぎる */ 311 291 if (!p_edt && 0 < fa_pdc) 312 return E_PAR; /* ããããã£å¤ãµã¤ãºã1以ä¸ãªã®ã«ãã¼ã¿ãã¤ã³ã¿ãNULL */292 return E_PAR; /* プロパティ値サイズが1以上なのにデータポインタがNULL */ 313 293 314 294 if (fa_seoj <= EOBJ_NULL || svc->tmax_eobjid < fa_seoj) 315 return E_NOEXS; /* ECHONET ãªãã¸ã§ã¯ãIDãæªå®ç¾©*/295 return E_NOEXS; /* ECHONETオブジェクトIDが未定義 */ 316 296 #ifndef ECHONET_CONTROLLER_EXTENTION 317 297 if (fa_deoj < EOBJ_NULL || svc->tmax_eobjid < fa_deoj) 318 return E_NOEXS; /* ECHONET ãªãã¸ã§ã¯ãIDãæªå®ç¾©*/298 return E_NOEXS; /* ECHONETオブジェクトIDが未定義 */ 319 299 #else 320 300 if (fa_deoj < EOBJ_NULL || (svc->tmax_eobjid + TNUM_AEOBJID) < fa_deoj) 321 return E_NOEXS; /* ECHONET ãªãã¸ã§ã¯ãIDãæªå®ç¾©*/301 return E_NOEXS; /* ECHONETオブジェクトIDが未定義 */ 322 302 #endif 323 303 if (fa_deoj == EOBJ_NULL && fa_esv == ESV_INFC) 324 return E_NOEXS; /* ECHONET ãªãã¸ã§ã¯ãIDãæªå®ç¾©*/325 326 /* è¦æ±æå°ãµã¤ãºã®åå¾*/304 return E_NOEXS; /* ECHONETオブジェクトIDが未定義 */ 305 306 /* 要求最小サイズの取得 */ 327 307 a_size = sizeof(T_ECN_HDR) + sizeof(T_ECN_EDATA_BODY) + sizeof(T_ECN_PRP); 328 308 329 /* è¦æ±é»æç¨ã¡ã¢ãªã®åå¾*/309 /* 要求電文用メモリの取得 */ 330 310 a_ret = _ecn_fbs_cre(mrb, a_size, &a_fbs_id); 331 if (a_ret != E_OK || !a_fbs_id.ptr) { /* 確ä¿å¤±æ*/311 if (a_ret != E_OK || !a_fbs_id.ptr) { /* 確保失敗 */ 332 312 ECN_DBG_PUT_3("_ecn_fbs_cre(%d) result = %d:%s", 333 313 a_size, … … 336 316 } 337 317 338 /* è¦æ±é»æè¨å®*/318 /* 要求電文設定 */ 339 319 memset(&a_ecn_hdp, 0, sizeof(a_ecn_hdp)); 340 320 a_ecn_hdp.ecn_hdr.ehd1 = ECN_EDH1_ECHONET_LITE; … … 343 323 memcpy(&a_ecn_hdp.edata.seoj, &echonet_svctask_get_eobjinib(svc, fa_seoj)->eojx1, sizeof(a_ecn_hdp.edata.seoj)); 344 324 a_ecn_hdp.edata.esv = fa_esv; 345 a_ecn_hdp.edata.opc = 1; /* å¦çããããã£æ°*/346 a_ecn_hdp.ecn_prp.epc = fa_epc; /* ããããã£ã³ã¼ã*/347 a_ecn_hdp.ecn_prp.pdc = fa_pdc; /* ä»éãã¼ã¿ãµã¤ãº*/348 349 /* è¦æ±é»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å*/325 a_ecn_hdp.edata.opc = 1; /* 処理プロパティ数 */ 326 a_ecn_hdp.ecn_prp.epc = fa_epc; /* プロパティコード */ 327 a_ecn_hdp.ecn_prp.pdc = fa_pdc; /* 付随データサイズ */ 328 329 /* 要求電文用メモリにデータ追加 */ 350 330 a_ret = _ecn_fbs_add_data_ex(mrb, a_fbs_id, &a_ecn_hdp, a_size); 351 331 if (a_ret) { … … 356 336 } 357 337 if (0 < fa_pdc) { 358 /* ä»éãã¼ã¿è¿½å*/338 /* 付随データ追加 */ 359 339 a_ret = _ecn_fbs_add_data_ex(mrb, a_fbs_id, p_edt, fa_pdc); 360 340 if (a_ret) { … … 366 346 } 367 347 if (fa_deoj == 0) { 368 ECN_DBG_PUT(" ãã«ããã£ã¹ã");369 /* fa_deoj == 0 : ãã«ããã£ã¹ã*/348 ECN_DBG_PUT("マルチキャスト"); 349 /* fa_deoj == 0 : マルチキャスト */ 370 350 ((T_EDATA *)a_fbs_id.ptr)->hdr.edata.deoj.eojx1 = EOJ_X1_PROFILE; 371 351 ((T_EDATA *)a_fbs_id.ptr)->hdr.edata.deoj.eojx2 = EOJ_X2_NODE_PROFILE; … … 375 355 else if (fa_deoj <= svc->tmax_eobjid) { 376 356 ECN_DBG_PUT_1("fa_deoj = %d", fa_deoj); 377 /* if (fa_deoj < 1 || svc->tmax_eobjid < fa_deoj) â¦ã®ç°å¸¸ç³»ã¯é¢æ°åé ã§é¤å¤æ¸ã¿ã¨ãã*/357 /* if (fa_deoj < 1 || svc->tmax_eobjid < fa_deoj) …の異常系は関数冒頭で除外済みとする */ 378 358 a_eobj = echonet_svctask_get_eobjinib(svc, fa_deoj); 379 359 memcpy(&((T_EDATA *)a_fbs_id.ptr)->hdr.edata.deoj, &a_eobj->eojx1, 380 360 sizeof(((T_EDATA *)a_fbs_id.ptr)->hdr.edata.deoj)); 381 361 382 /* ãã¼ãã«ããæ¤ç´¢*/362 /* テーブルから検索 */ 383 363 a_fbs_id.ptr->hdr.target.id = ENOD_NOT_MATCH_ID; 384 364 a_enodid = (a_eobj->enodid == 0) ? fa_deoj : a_eobj->enodid; … … 420 400 ECN_ENOD_ID enodid; 421 401 ECN_DBG_PUT_1("fa_deoj = %d", fa_deoj); 422 /* ãªãã¸ã§ã¯ãIDããEOJã¨ãã¼ãIDãåå¾*/402 /* オブジェクトIDからEOJとノードIDを取得 */ 423 403 if(ecn_agent_get_eoj_enodid(svc, fa_deoj, &eoj, &enodid)){ 424 404 memcpy(&((T_EDATA *)a_fbs_id.ptr)->hdr.edata.deoj, &eoj, … … 452 432 453 433 ((T_EDATA *)a_fbs_id.ptr)->trn_pos = -1; 454 /* æ£å¸¸çµäº*/434 /* 正常終了 */ 455 435 *fp_fbs_id = a_fbs_id; 456 436 return E_OK; 457 437 458 438 lb_except: 459 /* ãã¼ã¿ä½æ失æãããé å解æ¾*/439 /* データ作成失敗したら領域解放 */ 460 440 if (a_fbs_id.ptr) 461 441 _ecn_fbs_del(mrb, a_fbs_id); … … 465 445 466 446 /* 467 * å 468 é¨ä½¿ç¨ã¡ãã»ã¼ã¸ 447 * 内部使用メッセージ 469 448 */ 470 449 static void _ecn_tsk_int_msg(ecnl_svc_task_t *svc, intptr_t fa_exinf, ECN_FBS_ID fa_fbs_id) … … 497 476 498 477 /* 499 * ã¿ã¹ã¯åæå478 * タスク初期化 500 479 */ 501 480 void _ecn_tsk_int_startup(ecnl_svc_task_t *svc) … … 505 484 506 485 /* 507 * ã¤ã³ã¹ã¿ã³ã¹ãªã¹ãéç¥ã®éä¿¡508 * ECHONET-Lite_Ver.1.10_02.pdf p.43 å³4-1-4486 * インスタンスリスト通知の送信 487 * ECHONET-Lite_Ver.1.10_02.pdf p.43 図4-1-4 509 488 */ 510 489 ER _ecn_tsk_ntf_inl(ecnl_svc_task_t *svc) 511 490 { 512 491 mrb_state *mrb = svc->mrb; 513 const T_ECN_EOJ a_seoj = /* 0x01 : ä¸è¬ãã¼ãã0x02ï¼éä¿¡å°ç¨ãã¼ã*/492 const T_ECN_EOJ a_seoj = /* 0x01 : 一般ノード、0x02:送信専用ノード */ 514 493 { EOJ_X1_PROFILE, EOJ_X2_NODE_PROFILE, 0x01 }; 515 494 const T_ECN_EOJ a_deoj = … … 521 500 int i; 522 501 uint8_t a_count; 523 const EOBJCB *enod = &svc->eobjcb_table[0]; /* ãã¼ã«ã«ãã¼ã*/502 const EOBJCB *enod = &svc->eobjcb_table[0]; /* ローカルノード */ 524 503 const EOBJINIB *eobj; 525 504 … … 539 518 540 519 if (!a_eoj_ct) { 541 /* ã¡ã¢ãªç¢ºä¿ã»ãããæ ¼ç´*/542 a_hdr.ecn_hdr.tid = (uint8_t)_ecn_tsk_new_tid(svc); /* ã·ã¼ã±ã³ã¹çªå·çæ*/520 /* メモリ確保・ヘッダ格納 */ 521 a_hdr.ecn_hdr.tid = (uint8_t)_ecn_tsk_new_tid(svc); /* シーケンス番号生成 */ 543 522 a_ret = _ecn_fbs_cre(mrb, sizeof(a_hdr), &a_fbs); 544 if (a_ret != E_OK) /* 確ä¿å¤±æ*/523 if (a_ret != E_OK) /* 確保失敗 */ 545 524 goto lb_except; 546 525 a_ret = _ecn_fbs_add_data(mrb, a_fbs, &a_hdr, sizeof(a_hdr)); 547 if (a_ret != E_OK) /* ãã¼ã¿è¿½å 失æ*/526 if (a_ret != E_OK) /* データ追加失敗 */ 548 527 goto lb_except; 549 528 … … 552 531 a_fbs.ptr->hdr.target.id = ENOD_MULTICAST_ID; 553 532 a_fbs.ptr->hdr.reply.id = ENOD_LOCAL_ID; 554 ((T_EDATA *)a_fbs.ptr)->hdr.ecn_prp.pdc = 1; /* 件æ°*/555 /* 件æ°ãæ ¼ç´*/533 ((T_EDATA *)a_fbs.ptr)->hdr.ecn_prp.pdc = 1; /* 件数 */ 534 /* 件数を格納 */ 556 535 a_count = (uint8_t)(enod->eobjcnt - i); 557 536 if (a_count >= ECN_IST_LST_EOJ_MAX_CT) 558 537 a_count = ECN_IST_LST_EOJ_MAX_CT; 559 538 a_ret = _ecn_fbs_add_data_ex(mrb, a_fbs, &a_count, sizeof(a_count)); 560 if (a_ret != E_OK) /* ãã¼ã¿è¿½å 失æ*/539 if (a_ret != E_OK) /* データ追加失敗 */ 561 540 goto lb_except; 562 541 } 563 /* ECHONET ãªãã¸ã§ã¯ãID(3byte)ãæ ¼ç´*/542 /* ECHONETオブジェクトID(3byte)を格納 */ 564 543 a_ret = _ecn_fbs_add_data_ex(mrb, a_fbs, &eobj->eojx1, sizeof(T_ECN_EOJ)); 565 if (a_ret != E_OK) /* ãã¼ã¿è¿½å 失æ*/544 if (a_ret != E_OK) /* データ追加失敗 */ 566 545 goto lb_except; 567 546 568 /* 件æ°ã»edtãµã¤ãºå ç®*/547 /* 件数・edtサイズ加算 */ 569 548 ((T_EDATA *)a_fbs.ptr)->hdr.ecn_prp.pdc += sizeof(T_ECN_EOJ); 570 549 if (++a_eoj_ct < ECN_IST_LST_EOJ_MAX_CT) 571 550 continue; 572 551 573 /* 1 ã¢ãã¦ã³ã¹ã§ã®ä¸éã«éããããä¸æ¦éä¿¡*/552 /* 1アナウンスでの上限に達したら、一旦送信 */ 574 553 a_ret = _ecn_tsk_snd_mbx(svc, a_fbs, false); 575 if (a_ret != E_OK) /* ãã¼ã¿é信失æ*/554 if (a_ret != E_OK) /* データ送信失敗 */ 576 555 goto lb_except; 577 556 a_eoj_ct = 0; … … 579 558 } 580 559 if (a_eoj_ct) { 581 /* æªéä¿¡ãã¼ã¿ããã£ãããéä¿¡*/560 /* 未送信データがあったら、送信 */ 582 561 a_ret = _ecn_tsk_snd_mbx(svc, a_fbs, false); 583 if (a_ret != E_OK) /* ãã¼ã¿é信失æ*/562 if (a_ret != E_OK) /* データ送信失敗 */ 584 563 goto lb_except; 585 564 a_fbs.ptr = 0; … … 625 604 626 605 /* 627 * 3byteã®eobjidã§é 628 åä¸ãæ¤ç´¢ãã 606 * 3byteのeobjidで配列中を検索する 629 607 */ 630 608 const EOBJINIB *_ecn_eoj_fnd(const EOBJCB *fp_nod, const T_ECN_EOJ *fp_eoj) … … 659 637 660 638 /* 661 * é»æã®æ§æè¦ç´ æ°ã¨ãµã¤ãºã®ãã§ãã¯ãè¡ã639 * 電文の構成要素数とサイズのチェックを行う 662 640 */ 663 641 static bool_t _ecn_tsk_check_format(ecnl_svc_task_t *svc, T_EDATA *edata, int len) … … 702 680 703 681 /* 704 * ECHONET ç¨ã¡ãã»ã¼ã¸682 * ECHONET用メッセージ 705 683 */ 706 684 static void _ecn_tsk_ecn_msg(ecnl_svc_task_t *svc, intptr_t fa_exinf, ECN_FBS_ID fa_fbs_id) … … 752 730 } 753 731 754 /* é»æã®æ§æè¦ç´ æ°ã¨ãµã¤ãºã®ãã§ãã¯ãè¡ã*/732 /* 電文の構成要素数とサイズのチェックを行う */ 755 733 if (!_ecn_tsk_check_format(svc, (T_EDATA *)fa_fbs_id.ptr, fa_fbs_id.ptr->hdr.length)) { 756 734 ECN_DBG_PUT("_ecn_tsk_ecn_msg() format fault"); … … 758 736 } 759 737 760 /* éä¿¡å®ãããã¼ããæ¤ç´¢*/738 /* 送信宛からノードを検索 */ 761 739 p_nod = _ecn_eno_fnd(svc, fa_fbs_id.ptr->hdr.target.id); 762 /* éä¿¡å 763 ãããã¼ããæ¤ç´¢ */ 740 /* 送信元からノードを検索 */ 764 741 p_snod = _ecn_eno_fnd(svc, fa_fbs_id.ptr->hdr.sender.id); 765 742 if (p_snod != NULL) { 766 743 sobjatr = p_snod->profile->eobjatr; 767 /* ãã¼ããããã¡ã¤ã«ã®å ´å*/744 /* ノードプロファイルの場合 */ 768 745 if ((p_esv->edata.seoj.eojx1 == EOJ_X1_PROFILE) 769 746 && (p_esv->edata.seoj.eojx2 == EOJ_X2_NODE_PROFILE)) { 770 747 p_sobj = p_snod->profile; 771 748 } 772 /* æ©å¨ãªãã¸ã§ã¯ãã®å ´å*/749 /* 機器オブジェクトの場合 */ 773 750 else { 774 751 p_sobj = _ecn_eoj_fnd(p_snod, &p_esv->edata.seoj); … … 780 757 #endif 781 758 782 /* ãã¼ãå 783 ã®æ©å¨ãªãã¸ã§ã¯ããæ¤ç´¢ */ 759 /* ノード内の機器オブジェクトを検索 */ 784 760 a_prc = false; 785 761 a_fwd = false; … … 788 764 eobjatr = p_nod->profile->eobjatr; 789 765 p_eoj = &p_esv->edata.deoj; 790 /* ãã¼ããããã¡ã¤ã«ã®å ´å*/766 /* ノードプロファイルの場合 */ 791 767 if ((p_eoj->eojx1 == EOJ_X1_PROFILE) 792 768 && (p_eoj->eojx2 == EOJ_X2_NODE_PROFILE)) { 793 769 if ((p_eoj->eojx3 == p_nod->profile->eojx3) 794 770 || (p_eoj->eojx3 == 0)) { 795 /* é»æå¦çå®è¡*/771 /* 電文処理実行 */ 796 772 if (_ecn_tsk_ecn_msg_main(svc, fa_fbs_id, p_nod->profile, eobjatr, p_sobj, sobjatr) == 1) 797 773 a_fwd = true; 798 774 a_prc = true; 799 775 } 800 /* 0x74 ããããã£å¤éç¥ï¼å¿çè¦ï¼ã®å ´åã®å ´åã¯é»æç ´æ£*/776 /* 0x74 プロパティ値通知(応答要)の場合の場合は電文破棄 */ 801 777 else if (p_esv->edata.esv == ESV_INFC) { 802 778 a_prc = true; 803 779 } 804 780 } 805 /* æ©å¨ãªãã¸ã§ã¯ãã®å ´å*/781 /* 機器オブジェクトの場合 */ 806 782 else { 807 783 count = p_nod->eobjcnt; … … 822 798 if (p_obj->eojx2 != p_eoj->eojx2) 823 799 continue; 824 /* ã¤ã³ã¹ã¿ã³ã¹ã³ã¼ããï¼ã®å ´åãåãã¯ã©ã¹ã®å 825 ¨ã¦ã®ã¤ã³ã¹ã¿ã³ã¹å® */ 800 /* インスタンスコードが0の場合、同じクラスの全てのインスタンス宛 */ 826 801 if ((p_obj->eojx3 != p_eoj->eojx3) && (p_eoj->eojx3 != 0)) 827 802 continue; 828 803 829 /* é»æå¦çå®è¡*/804 /* 電文処理実行 */ 830 805 if (_ecn_tsk_ecn_msg_main(svc, fa_fbs_id, p_obj, eobjatr, p_sobj, sobjatr) == 1) 831 806 a_fwd = true; … … 833 808 } 834 809 835 /* æ©å¨ãªãã¸ã§ã¯ããè¦ã¤ãããã0x74 ããããã£å¤éç¥ï¼å¿çè¦ï¼ã®å ´åã¯é»æç ´æ£*/810 /* 機器オブジェクトが見つからず、0x74 プロパティ値通知(応答要)の場合は電文破棄 */ 836 811 if (!a_prc && (p_esv->edata.esv == ESV_INFC)) { 837 812 a_prc = true; … … 839 814 } 840 815 } 841 /* æ©å¨ãªãã¸ã§ã¯ããè¦ã¤ãããªãå ´åã§ã*/816 /* 機器オブジェクトが見つからない場合でも */ 842 817 if (!a_prc) { 843 /* é»æå¦çå®è¡ï¼å¿çåä¿¡ç¨ï¼*/818 /* 電文処理実行(応答受信用) */ 844 819 if (_ecn_tsk_ecn_msg_main(svc, fa_fbs_id, NULL, EPC_NONE, p_sobj, sobjatr) == 1) 845 820 a_fwd = true; 846 821 } 847 822 848 /* å¿çã®å ´åã¢ããªã±ã¼ã·ã§ã³ã«è»¢éãã*/823 /* 応答の場合アプリケーションに転送する */ 849 824 if (a_fwd && ((p_esv->ecn_hdr.tid == svc->api_tid) 850 825 || svc->forward_esv)) … … 852 827 svc->release_esv = false; 853 828 854 ECN_CAP_PUT_1("redirect svc->svc_mbxid âsvc->api_mbxid (esv:0x%02X)",829 ECN_CAP_PUT_1("redirect svc->svc_mbxid → svc->api_mbxid (esv:0x%02X)", 855 830 p_esv->edata.esv); 856 831 fa_fbs_id.ptr->hdr.target.id = ENOD_API_ID; … … 878 853 879 854 switch (p_esv->edata.esv) { 880 /* 0x60 ããããã£å¤æ¸ãè¾¼ã¿è¦æ±ï¼å¿çä¸è¦ï¼*/855 /* 0x60 プロパティ値書き込み要求(応答不要) */ 881 856 case ESV_SET_I: 882 857 if (!p_obj) { … … 890 865 break; 891 866 892 /* 0x61 ããããã£å¤æ¸ãè¾¼ã¿è¦æ±ï¼å¿çè¦ï¼*/867 /* 0x61 プロパティ値書き込み要求(応答要) */ 893 868 case ESV_SET_C: 894 869 if (!p_obj) { … … 902 877 break; 903 878 904 /* 0x62 ããããã£å¤èªã¿åºãè¦æ±*/879 /* 0x62 プロパティ値読み出し要求 */ 905 880 case ESV_GET: 906 881 if (!p_obj) { … … 914 889 break; 915 890 916 /* 0x63 ããããã£å¤éç¥è¦æ±*/891 /* 0x63 プロパティ値通知要求 */ 917 892 case ESV_INF_REQ: 918 893 if (!p_obj) { … … 927 902 break; 928 903 929 /* 0x6E ããããã£å¤æ¸ãè¾¼ã¿ã»èªã¿åºãè¦æ±*/904 /* 0x6E プロパティ値書き込み・読み出し要求 */ 930 905 case ESV_SET_GET: 931 906 if (!p_obj) { … … 939 914 break; 940 915 941 /* 0x74 ããããã£å¤éç¥ï¼å¿çè¦ï¼*/916 /* 0x74 プロパティ値通知(応答要) */ 942 917 case ESV_INFC: 943 918 if (!p_sobj) 944 /* éä¿¡å 945 ãæªç¥ã®ä»ãã¼ãã§ãã£ãå ´åãå¿çãè¿ã */ 919 /* 送信元が未知の他ノードであった場合、応答を返す */ 946 920 _ecn_tsk_eoj_res(svc, fa_fbs_id, ESV_INFC_RES, ESV_INFC_RES); /* 0x7A; 0x7A */ 947 921 else if (fromapp) 948 /* ã¢ããªã±ã¼ã·ã§ã³ããã®è¦æ±ã®å ´åãããããã£å¤éç¥ï¼å¿çè¦ï¼ãéä¿¡ãã*/922 /* アプリケーションからの要求の場合、プロパティ値通知(応答要)を送信する */ 949 923 _ecn_tsk_eoj_get(svc, p_sobj, sobjatr, true, (EPC_RULE_GET|EPC_RULE_ANNO), fa_fbs_id, ESV_INFC, ESV_NOP); /* 0x74; 0 */ 950 924 else 951 /* éä¿¡å 952 ãæ¢ç¥ã®ä»ãã¼ãã§ãã£ãå ´åãããããã£å¤ãæ´æ°ãå¿çãè¿ã */ 925 /* 送信元が既知の他ノードであった場合、プロパティ値を更新し応答を返す */ 953 926 _ecn_tsk_eoj_set(svc, p_sobj, sobjatr, fromapp, true, fa_fbs_id, ESV_INFC_RES, ESV_INFC_RES, &a_fbs_anno); /* 0x7A; 0x7A */ 954 927 result = 0; 955 928 break; 956 929 957 /* 0x60 ããããã£å¤æ¸ãè¾¼ã¿è¦æ±ï¼å¿çä¸è¦ï¼*/958 case ESV_SET_I_SNA: /* 0x50 ããããã£å¤æ¸ãè¾¼ã¿è¦æ±ä¸å¯å¿ç*/930 /* 0x60 プロパティ値書き込み要求(応答不要) */ 931 case ESV_SET_I_SNA: /* 0x50 プロパティ値書き込み要求不可応答 */ 959 932 result = 1; 960 933 break; 961 934 962 /* 0x61 ããããã£å¤æ¸ãè¾¼ã¿è¦æ±ï¼å¿çè¦ï¼*/963 case ESV_SET_RES: /* 0x71 ããããã£å¤æ¸ãè¾¼ã¿å¿ç*/964 case ESV_SET_C_SNA: /* 0x51 ããããã£å¤æ¸ãè¾¼ã¿è¦æ±ä¸å¯å¿ç*/935 /* 0x61 プロパティ値書き込み要求(応答要) */ 936 case ESV_SET_RES: /* 0x71 プロパティ値書き込み応答 */ 937 case ESV_SET_C_SNA: /* 0x51 プロパティ値書き込み要求不可応答 */ 965 938 result = 1; 966 939 break; 967 940 968 /* 0x62 ããããã£å¤èªã¿åºãè¦æ±*/969 case ESV_GET_RES: /* 0x72 ããããã£å¤èªã¿åºãå¿ç*/970 case ESV_GET_SNA: /* 0x52 ããããã£å¤èªã¿åºãä¸å¯å¿ç*/941 /* 0x62 プロパティ値読み出し要求 */ 942 case ESV_GET_RES: /* 0x72 プロパティ値読み出し応答 */ 943 case ESV_GET_SNA: /* 0x52 プロパティ値読み出し不可応答 */ 971 944 if (!p_sobj) { 972 945 ECN_DBG_PUT_1("_ecn_tsk_ecn_msg_main() eoj %06X not found.", … … 979 952 break; 980 953 981 /* 0x63 ããããã£å¤éç¥è¦æ±*/982 case ESV_INF: /* 0x73 ããããã£å¤éç¥*/983 case ESV_INF_SNA: /* 0x53 ããããã£å¤éç¥ä¸å¯å¿ç*/954 /* 0x63 プロパティ値通知要求 */ 955 case ESV_INF: /* 0x73 プロパティ値通知 */ 956 case ESV_INF_SNA: /* 0x53 プロパティ値通知不可応答 */ 984 957 if (!p_sobj) { 985 958 ECN_DBG_PUT_1("_ecn_tsk_ecn_msg_main() eoj %06X not found.", … … 992 965 break; 993 966 994 /* 0x6E ããããã£å¤æ¸ãè¾¼ã¿ã»èªã¿åºãè¦æ±*/995 case ESV_SET_GET_RES: /* 0x7E ããããã£å¤æ¸ãè¾¼ã¿ã»èªã¿åºãå¿ç*/996 case ESV_SET_GET_SNA: /* 0x5E ããããã£å¤æ¸ãè¾¼ã¿ã»èªã¿åºãä¸å¯å¿ç*/967 /* 0x6E プロパティ値書き込み・読み出し要求 */ 968 case ESV_SET_GET_RES: /* 0x7E プロパティ値書き込み・読み出し応答 */ 969 case ESV_SET_GET_SNA: /* 0x5E プロパティ値書き込み・読み出し不可応答 */ 997 970 if (!p_sobj) { 998 971 ECN_DBG_PUT_1("_ecn_tsk_ecn_msg_main() eoj %06X not found.", … … 1005 978 break; 1006 979 1007 /* 0x74 ããããã£å¤éç¥ï¼å¿çè¦ï¼*/1008 case ESV_INFC_RES: /* 0x7A ããããã£å¤éç¥å¿ç*/980 /* 0x74 プロパティ値通知(応答要) */ 981 case ESV_INFC_RES: /* 0x7A プロパティ値通知応答 */ 1009 982 result = 1; 1010 983 break; … … 1016 989 } 1017 990 1018 /* ããããã£éç¥è¦æ±ãéä¿¡*/991 /* プロパティ通知要求を送信 */ 1019 992 if (a_fbs_anno.ptr != NULL) { 1020 993 ER a_ret = _ecn_tsk_snd_mbx(svc, a_fbs_anno, true); … … 1093 1066 1094 1067 /* 1095 * ECN_FBS_IDããT_ECN_PRP1件ã¨ãã®ä»éãã¼ã¿(edt)ãæ½åºããedtã®ãã¤ã³ã¿ãè¿ã 1096 * å¼æ° 1097 * ECN_FBS_ID fa_fbs_id èªã¿åãFBS 1098 * T_ECN_PRP *fp_prp epc+pdcã®æ ¼ç´å 1099 1100 * T_ECN_SUB_BLK * const fp_prev_blk åå使ã£ãã¡ã¢ãªã®ãã¤ã³ã¿(ç¡ããã°0) 1101 * æ£å¸¸ï¼ãã¤ã³ã¿ NG:0 1102 * ãã¤ã³ã¿ã¯_ecn_fbs_mbx_rel()ã§è§£æ¾ããå¿ 1103 è¦ããã 1068 * ECN_FBS_IDからT_ECN_PRP1件とその付随データ(edt)を抽出し、edtのポインタを返す 1069 * 引数 1070 * ECN_FBS_ID fa_fbs_id 読み取るFBS 1071 * T_ECN_PRP *fp_prp epc+pdcの格納先 1072 * T_ECN_SUB_BLK * const fp_prev_blk 前回使ったメモリのポインタ(無ければ0) 1073 * 正常:ポインタ NG:0 1074 * ポインタは_ecn_fbs_mbx_rel()で解放する必要がある 1104 1075 */ 1105 1076 static T_ECN_SUB_BLK *_ecn_tsk_get_prp_pce(ecnl_svc_task_t *svc, ECN_FBS_ID fa_fbs_id, T_ECN_PRP *fp_prp, … … 1111 1082 ER a_ret; 1112 1083 1113 /* ããããã£ç¨ã¡ã¢ãªã®åå¾*/1084 /* プロパティ用メモリの取得 */ 1114 1085 if (fp_prev_blk) { 1115 p_blk = fp_prev_blk; /* åå使ã£ãã¡ã¢ãªããããªããåå©ç¨ãã*/1086 p_blk = fp_prev_blk; /* 前回使ったメモリがあるなら、再利用する */ 1116 1087 } 1117 1088 else { … … 1119 1090 if (!p_blk) { 1120 1091 ECN_DBG_PUT("_ecn_fbs_mbx_get() fault."); 1121 return 0; /* ã¡ã¢ãªä¸è¶³*/1092 return 0; /* メモリ不足 */ 1122 1093 } 1123 1094 } 1124 1095 memset(p_blk, 0, sizeof(*p_blk)); 1125 1096 1126 /* T_ECN_PRP é¨å(epc,pdc)ãèªã¿åã*/1097 /* T_ECN_PRP部分(epc,pdc)を読み取る */ 1127 1098 a_size = 0; 1128 1099 a_ret = _ecn_fbs_get_data(mrb, fa_fbs_id, fp_prp, sizeof(*fp_prp), &a_size); … … 1133 1104 1134 1105 if (0 < fp_prp->pdc) { 1135 /* ä»éãã¼ã¿é¨å(edt)ãèªã¿åã*/1106 /* 付随データ部分(edt)を読み取る */ 1136 1107 a_size = 0; 1137 1108 a_ret = _ecn_fbs_get_data(mrb, fa_fbs_id, p_blk, fp_prp->pdc, &a_size); … … 1145 1116 1146 1117 lb_except: 1147 /* ããããã£ç¨ã¡ã¢ãªè§£æ¾*/1118 /* プロパティ用メモリ解放 */ 1148 1119 if (p_blk && !fp_prev_blk) 1149 1120 _ecn_fbs_mbx_rel(mrb, p_blk); … … 1155 1126 ECN_FBS_ID fa_fbs_id, ECN_FBS_ID a_fbs_res, ECN_FBS_ID *fa_fbs_anno, int a_count, 1156 1127 int *p_sw_ok); 1157 /* ããããã£å¤æ¸ãè¾¼ã¿å®è¡*/1128 /* プロパティ値書き込み実行 */ 1158 1129 static ER _ecn_tsk_eoj_set_main(ecnl_svc_task_t *svc, const EOBJINIB *fp_obj, ATR fa_eobjatr, bool_t fa_fromapp, bool_t fa_update, 1159 1130 ECN_FBS_ID fa_fbs_id, ECN_FBS_ID a_fbs_res, ECN_FBS_ID *fa_fbs_anno, int a_count, … … 1172 1143 1173 1144 for (i = 0; i < a_count; i++) { 1174 /* ECN_FBS_ID ããT_ECN_PRP1件ã¨ãã®ä»éãã¼ã¿ãæ½åºãããã®ãã¤ã³ã¿ãè¿ã*/1145 /* ECN_FBS_IDからT_ECN_PRP1件とその付随データを抽出し、そのポインタを返す */ 1175 1146 p_edt = _ecn_tsk_get_prp_pce(svc, fa_fbs_id, &a_prp, p_edt); 1176 1147 if (!p_edt) { … … 1179 1150 } 1180 1151 1181 /* ããããã£ã®è¨å®set_prp(obj, reqp, resp) */1152 /* プロパティの設定 set_prp(obj, reqp, resp) */ 1182 1153 a_size = a_prp.pdc; 1183 /* obj,epc ã«å¯¾å¿ããseté¢æ°ãå¼ã¶*/1154 /* obj,epcに対応するset関数を呼ぶ */ 1184 1155 a_eprp = _ecn_tsk_eoj_get_property(fp_obj, a_prp.epc); 1185 1156 if ((a_eprp != NULL) … … 1203 1174 fp_obj->eojx1 << 16 | fp_obj->eojx2 << 8 | fp_obj->eojx3, 1204 1175 a_prp.epc, p_edt->payload[0], a_size); 1205 *p_sw_ok = 0; /* ããããã£è¨å®å¤±æ*/1206 /* å¿çå¦çã®å ´åEDTã¯è¨å®ããªã*/1176 *p_sw_ok = 0; /* プロパティ設定失敗 */ 1177 /* 応答処理の場合EDTは設定しない */ 1207 1178 if (fa_update) 1208 1179 a_prp.pdc = 0; 1209 1180 } 1210 1181 1211 /* å¿çé»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å (epc,pdcã®2byte) */1182 /* 応答電文用メモリにデータ追加(epc,pdcの2byte) */ 1212 1183 a_ret = _ecn_fbs_add_data_ex(mrb, a_fbs_res, &a_prp, sizeof(a_prp)); 1213 1184 if (a_ret) { … … 1217 1188 1218 1189 if (0 < a_prp.pdc) { 1219 /* å¿çé»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å(edt n-byte) */1190 /* 応答電文用メモリにデータ追加(edt n-byte) */ 1220 1191 a_ret = _ecn_fbs_add_data_ex(mrb, a_fbs_res, p_edt->payload, a_prp.pdc); 1221 1192 if (a_ret) { … … 1226 1197 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.opc ++; 1227 1198 1228 /* ããããã£éç¥ããã®å ´å*/1199 /* プロパティ通知ありの場合 */ 1229 1200 if (a_anno && (a_ans == a_size)) { 1230 1201 if (fa_fbs_anno->ptr == NULL) { … … 1244 1215 1245 1216 lb_finally: 1246 /* ããããã£ç¨ã¡ã¢ãªè§£æ¾*/1217 /* プロパティ用メモリ解放 */ 1247 1218 if (p_edt) 1248 1219 _ecn_fbs_mbx_rel(mrb, p_edt); … … 1253 1224 static ER _ecn_tsk_eoj_get_main(ecnl_svc_task_t *svc, const EOBJINIB *fp_obj, ATR fa_eobjatr, bool_t fa_forward, ATR fa_access, 1254 1225 ECN_FBS_ID fa_fbs_id, ECN_FBS_ID a_fbs_res, int a_count, int *p_sw_ok); 1255 /* ããããã£å¤èªã¿åºãå®è¡*/1226 /* プロパティ値読み出し実行 */ 1256 1227 static ER _ecn_tsk_eoj_get_main(ecnl_svc_task_t *svc, const EOBJINIB *fp_obj, ATR fa_eobjatr, bool_t fa_forward, ATR fa_access, 1257 1228 ECN_FBS_ID fa_fbs_id, ECN_FBS_ID a_fbs_res, int a_count, int *p_sw_ok) … … 1259 1230 mrb_state *mrb = svc->mrb; 1260 1231 T_ECN_SUB_BLK *p_edt = 0; 1261 void *p_prp_buf = 0; /* ä½æ¥é å*/1232 void *p_prp_buf = 0; /* 作業領域 */ 1262 1233 const EPRPINIB *a_eprp; 1263 1234 ER a_ret = E_SYS; … … 1267 1238 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.opc = 0; 1268 1239 1269 /* ä½æ¥é å確ä¿*/1240 /* 作業領域確保 */ 1270 1241 p_prp_buf = _ecn_fbs_mbx_get(mrb, ECHONET_MEMPOOL_BLOCK_SIZE); 1271 1242 if (!p_prp_buf) { 1272 1243 ECN_DBG_PUT_2("_ecn_fbs_mbx_get() result = %d:%s", a_ret, itron_strerror(a_ret)); 1273 goto lb_except; /* ã¡ã¢ãªä¸è¶³*/1244 goto lb_except; /* メモリ不足 */ 1274 1245 } 1275 1246 1276 1247 for (i = 0; i < a_count; i++) { 1277 /* ECN_FBS_ID ããT_ECN_PRP1件ã¨ãã®ä»éãã¼ã¿ãæ½åº*/1248 /* ECN_FBS_IDからT_ECN_PRP1件とその付随データを抽出 */ 1278 1249 p_edt = _ecn_tsk_get_prp_pce(svc, fa_fbs_id, &a_prp, p_edt); 1279 1250 if (!p_edt) { … … 1282 1253 } 1283 1254 1284 /* ããããã£ã®åå¾get_eprp(obj, reqp, resp, size) */1255 /* プロパティの取得 get_eprp(obj, reqp, resp, size) */ 1285 1256 memset(p_prp_buf, 0, ECHONET_MEMPOOL_BLOCK_SIZE); 1286 /* obj,epc ã«å¯¾å¿ããgeté¢æ°ãå¼ã¶*/1257 /* obj,epcに対応するget関数を呼ぶ */ 1287 1258 a_eprp = _ecn_tsk_eoj_get_property(fp_obj, a_prp.epc); 1288 1259 if ((a_eprp != NULL) && (((a_eprp->eprpatr & fa_access) != 0) && (fa_eobjatr == EOBJ_LOCAL_NODE) || fa_forward)) { … … 1295 1266 a_prp.pdc = (uint8_t)a_ans; 1296 1267 } else { 1297 *p_sw_ok = 0; /* ããããã£åå¾å¤±æ*/1268 *p_sw_ok = 0; /* プロパティ取得失敗 */ 1298 1269 a_ans = 0; 1299 1270 a_prp.pdc = 0; 1300 1271 } 1301 1272 1302 /* å¿çé»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å (epc,pdcã®2byte) */1273 /* 応答電文用メモリにデータ追加(epc,pdcの2byte) */ 1303 1274 a_ret = _ecn_fbs_add_data_ex(mrb, a_fbs_res, &a_prp, sizeof(a_prp)); 1304 1275 if (a_ret) { … … 1307 1278 } 1308 1279 if (0 < a_ans) { 1309 /* ä»éãã¼ã¿è¿½å*/1280 /* 付随データ追加 */ 1310 1281 a_ret = _ecn_fbs_add_data_ex(mrb, a_fbs_res, p_prp_buf, a_ans); 1311 1282 if (a_ret) { … … 1323 1294 1324 1295 lb_finally: 1325 /* ä½æ¥é å解æ¾*/1296 /* 作業領域解放 */ 1326 1297 if (p_prp_buf) 1327 1298 _ecn_fbs_mbx_rel(mrb, p_prp_buf); 1328 1299 1329 /* ããããã£ç¨ã¡ã¢ãªè§£æ¾*/1300 /* プロパティ用メモリ解放 */ 1330 1301 if (p_edt) 1331 1302 _ecn_fbs_mbx_rel(mrb, p_edt); … … 1335 1306 1336 1307 static ER _ecn_tsk_eoj_res_main(ecnl_svc_task_t *svc, ECN_FBS_ID fa_fbs_id, ECN_FBS_ID a_fbs_res, int a_count, int *p_sw_ok); 1337 /* ããããã£å¤èªã¿åºãå®è¡*/1308 /* プロパティ値読み出し実行 */ 1338 1309 static ER _ecn_tsk_eoj_res_main(ecnl_svc_task_t *svc, ECN_FBS_ID fa_fbs_id, ECN_FBS_ID a_fbs_res, int a_count, int *p_sw_ok) 1339 1310 { 1340 1311 mrb_state *mrb = svc->mrb; 1341 1312 T_ECN_SUB_BLK *p_edt = 0; 1342 void *p_prp_buf = 0; /* ä½æ¥é å*/1313 void *p_prp_buf = 0; /* 作業領域 */ 1343 1314 ER a_ret = E_SYS; 1344 1315 T_ECN_PRP a_prp; /* epc+pdc */ … … 1347 1318 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.opc = 0; 1348 1319 1349 /* ä½æ¥é å確ä¿*/1320 /* 作業領域確保 */ 1350 1321 p_prp_buf = _ecn_fbs_mbx_get(mrb, ECHONET_MEMPOOL_BLOCK_SIZE); 1351 1322 if (!p_prp_buf) { 1352 1323 ECN_DBG_PUT_2("_ecn_fbs_mbx_get() result = %d:%s", a_ret, itron_strerror(a_ret)); 1353 goto lb_except; /* ã¡ã¢ãªä¸è¶³*/1324 goto lb_except; /* メモリ不足 */ 1354 1325 } 1355 1326 1356 1327 for (i = 0; i < a_count; i++) { 1357 /* ECN_FBS_ID ããT_ECN_PRP1件ã¨ãã®ä»éãã¼ã¿ãæ½åº*/1328 /* ECN_FBS_IDからT_ECN_PRP1件とその付随データを抽出 */ 1358 1329 p_edt = _ecn_tsk_get_prp_pce(svc, fa_fbs_id, &a_prp, p_edt); 1359 1330 if (!p_edt) { … … 1364 1335 a_prp.pdc = 0; 1365 1336 1366 /* å¿çé»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å (epc,pdcã®2byte) */1337 /* 応答電文用メモリにデータ追加(epc,pdcの2byte) */ 1367 1338 a_ret = _ecn_fbs_add_data_ex(mrb, a_fbs_res, &a_prp, sizeof(a_prp)); 1368 1339 if (a_ret) { … … 1379 1350 1380 1351 lb_finally: 1381 /* ä½æ¥é å解æ¾*/1352 /* 作業領域解放 */ 1382 1353 if (p_prp_buf) 1383 1354 _ecn_fbs_mbx_rel(mrb, p_prp_buf); 1384 1355 1385 /* ããããã£ç¨ã¡ã¢ãªè§£æ¾*/1356 /* プロパティ用メモリ解放 */ 1386 1357 if (p_edt) 1387 1358 _ecn_fbs_mbx_rel(mrb, p_edt); … … 1390 1361 } 1391 1362 1392 /* ããããã£å¤èªã¿é£ã°ãå®è¡*/1363 /* プロパティ値読み飛ばし実行 */ 1393 1364 static ER _ecn_tsk_eoj_skip_main(ecnl_svc_task_t *svc, const EOBJINIB *fp_obj, ECN_FBS_ID fa_fbs_id, 1394 1365 int a_count); … … 1402 1373 1403 1374 for (i = 0; i < a_count; i++) { 1404 /* T_ECN_PRP é¨å(epc,pdc)ãèªã¿åã*/1375 /* T_ECN_PRP部分(epc,pdc)を読み取る */ 1405 1376 a_size = 0; 1406 1377 a_ret = _ecn_fbs_get_data(mrb, fa_fbs_id, &a_prp, sizeof(a_prp), &a_size); … … 1410 1381 } 1411 1382 1412 /* pdc åèªã¿é£ã°ã*/1383 /* pdc分読み飛ばし */ 1413 1384 a_ret = _ecn_fbs_seek_rpos(fa_fbs_id, a_prp.pdc); 1414 1385 if (a_ret) { … … 1429 1400 static void _ecn_tsk_mk_rsp_hdr(const EOBJINIB *fp_obj, T_ECN_EDT_HDR *fp_rsp_esv, 1430 1401 T_ECN_EDT_HDR const *fp_req_esv); 1431 /* å¿çé»æè¨å®*/1402 /* 応答電文設定 */ 1432 1403 static void _ecn_tsk_mk_rsp_hdr(const EOBJINIB *fp_obj, T_ECN_EDT_HDR *fp_rsp_esv, 1433 1404 T_ECN_EDT_HDR const *fp_req_esv) … … 1454 1425 } 1455 1426 1456 /* å¿çé»æç¨fbsè¨å®*/1427 /* 応答電文用fbs設定 */ 1457 1428 static void _ecn_tsk_set_rsp_fbs(ECN_FBS_ID fa_rsp_fbs, T_ECN_FST_BLK const *fp_req_ptr); 1458 /* å¿çé»æç¨fbsè¨å®(sender/targetã®è¨å®) */1429 /* 応答電文用fbs設定(sender/targetの設定) */ 1459 1430 static void _ecn_tsk_set_rsp_fbs(ECN_FBS_ID fa_rsp_fbs, T_ECN_FST_BLK const *fp_req_ptr) 1460 1431 { … … 1465 1436 } 1466 1437 1467 /* ããããã£å¤æ¸ãè¾¼ã¿è¦æ±*/1438 /* プロパティ値書き込み要求 */ 1468 1439 static void _ecn_tsk_eoj_set(ecnl_svc_task_t *svc, const EOBJINIB *fp_obj, ATR fa_eobjatr, bool_t fa_fromapp, bool_t fa_update, 1469 1440 ECN_FBS_ID fa_fbs_id, ECN_SRV_CODE fa_res_esv, ECN_SRV_CODE fa_sna_esv, … … 1481 1452 memset(&a_ecn_hdp, 0, sizeof(a_ecn_hdp)); 1482 1453 1483 /* å¿çæ大ãµã¤ãºã®åå¾*/1454 /* 応答最大サイズの取得 */ 1484 1455 a_size = sizeof(T_ECN_HDR) + sizeof(T_ECN_EDATA_BODY) + sizeof(T_ECN_PRP); 1485 1456 1486 /* å¿çé»æç¨ã¡ã¢ãªã®åå¾*/1457 /* 応答電文用メモリの取得 */ 1487 1458 a_ret = _ecn_fbs_cre(mrb, a_size, &a_fbs_res); 1488 if (a_ret != E_OK || !a_fbs_res.ptr) /* 確ä¿å¤±æ*/1459 if (a_ret != E_OK || !a_fbs_res.ptr) /* 確保失敗 */ 1489 1460 return; 1490 1461 1491 /* å¿çé»æè¨å®*/1462 /* 応答電文設定 */ 1492 1463 if(p_req_esv->edata.deoj.eojx3 != 0) 1493 1464 _ecn_tsk_mk_rsp_hdr_res(&a_ecn_hdp, p_req_esv); … … 1495 1466 _ecn_tsk_mk_rsp_hdr(fp_obj, &a_ecn_hdp, p_req_esv); 1496 1467 1497 /* æ£å¸¸æã®å¿çé»æãããããã£å¤éç¥å¿çã®å ´å*/1468 /* 正常時の応答電文がプロパティ値通知応答の場合 */ 1498 1469 if (fa_res_esv == ESV_INFC_RES) { 1499 /* éä¿¡å 1500 ã¨å®å 1501 ãå 1502 ¥ãæ¿ã */ 1470 /* 送信元と宛先を入れ替え */ 1503 1471 eoj = a_ecn_hdp.edata.seoj; 1504 1472 a_ecn_hdp.edata.seoj = a_ecn_hdp.edata.deoj; … … 1506 1474 } 1507 1475 1508 f_put_fbs_eoj("_ecn_tsk_eoj_set", "fa_fbs_id", fa_fbs_id); /* s/deoj ãããã°åºå*/1509 1510 /* å¿çé»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å*/1476 f_put_fbs_eoj("_ecn_tsk_eoj_set", "fa_fbs_id", fa_fbs_id); /* s/deoj デバッグ出力 */ 1477 1478 /* 応答電文用メモリにデータ追加 */ 1511 1479 a_ret = _ecn_fbs_add_data_ex(mrb, a_fbs_res, &a_ecn_hdp, 1512 1480 sizeof(a_ecn_hdp.ecn_hdr) + sizeof(a_ecn_hdp.edata)); … … 1514 1482 goto lb_except; 1515 1483 1516 /* payloadå 1517 é ã®T_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)ãèªã¿é£ã°ã */ 1484 /* payload先頭のT_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)を読み飛ばす */ 1518 1485 a_ret = _ecn_fbs_set_rpos(fa_fbs_id, offsetof(T_ECN_EDT_HDR, ecn_prp)); 1519 1486 if (a_ret) 1520 1487 goto lb_except; 1521 1488 1522 /* å¿çé»æç¨fbsè¨å®*/1489 /* 応答電文用fbs設定 */ 1523 1490 _ecn_tsk_set_rsp_fbs(a_fbs_res, fa_fbs_id.ptr); 1524 1491 1525 /* ããããã£å¤æ¸ãè¾¼ã¿å®è¡*/1492 /* プロパティ値書き込み実行 */ 1526 1493 a_ret = _ecn_tsk_eoj_set_main(svc, fp_obj, fa_eobjatr, fa_fromapp, fa_update, fa_fbs_id, a_fbs_res, 1527 1494 fa_fbs_anno, p_req_esv->edata.opc, &a_sw_ok); … … 1529 1496 goto lb_except; 1530 1497 1531 /* å¿çè¦ã®å ´å*/1498 /* 応答要の場合 */ 1532 1499 if (a_sw_ok) { 1533 1500 if (!fa_res_esv) { 1534 /* å¿çä¸è¦ã®å ´å*/1501 /* 応答不要の場合 */ 1535 1502 _ecn_fbs_del(mrb, a_fbs_res); 1536 1503 goto lb_finally; 1537 1504 } 1538 /* è¨å®å¦çæå*/1505 /* 設定処理成功 */ 1539 1506 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.esv = fa_res_esv; 1540 1507 } else { 1541 1508 if (!fa_sna_esv) { 1542 /* å¿çä¸è¦ã®å ´å*/1509 /* 応答不要の場合 */ 1543 1510 _ecn_fbs_del(mrb, a_fbs_res); 1544 1511 goto lb_finally; 1545 1512 } 1546 /* è¨å®å¦ç失æ*/1513 /* 設定処理失敗 */ 1547 1514 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.esv = fa_sna_esv; 1548 1515 } 1549 /* å¿çéä¿¡*/1516 /* 応答送信 */ 1550 1517 a_ret = _ecn_tsk_snd_mbx(svc, a_fbs_res, false); 1551 1518 if (a_ret == E_OK) … … 1553 1520 1554 1521 lb_except: 1555 /* ãã¼ã¿é信失æãããé å解æ¾*/1522 /* データ送信失敗したら領域解放 */ 1556 1523 if (a_fbs_res.ptr) 1557 1524 _ecn_fbs_del(mrb, a_fbs_res); … … 1561 1528 } 1562 1529 1563 /* ããããã£å¤èªã¿åºãè¦æ±*/1530 /* プロパティ値読み出し要求 */ 1564 1531 static void _ecn_tsk_eoj_get(ecnl_svc_task_t *svc, const EOBJINIB *fp_obj, ATR fa_eobjatr, bool_t fa_forward, ATR fa_access, 1565 1532 ECN_FBS_ID fa_fbs_id, ECN_SRV_CODE fa_res_esv, ECN_SRV_CODE fa_sna_esv) … … 1575 1542 memset(&a_ecn_hdp, 0, sizeof(a_ecn_hdp)); 1576 1543 1577 /* åæåå¾ãµã¤ãº*/1544 /* 初期取得サイズ */ 1578 1545 a_size = sizeof(T_ECN_HDR) + sizeof(T_ECN_EDATA_BODY) + sizeof(T_ECN_PRP); 1579 1546 1580 /* å¿çé»æç¨ã¡ã¢ãªã®åå¾*/1547 /* 応答電文用メモリの取得 */ 1581 1548 a_ret = _ecn_fbs_cre(mrb, a_size, &a_fbs_res); 1582 if (a_ret != E_OK || !a_fbs_res.ptr) { /* 確ä¿å¤±æ*/1549 if (a_ret != E_OK || !a_fbs_res.ptr) { /* 確保失敗 */ 1583 1550 ECN_DBG_PUT_2("_ecn_fbs_cre() result = %d:%s", a_ret, itron_strerror(a_ret)); 1584 1551 goto lb_finally; 1585 1552 } 1586 1553 1587 /* å¿çé»æè¨å®*/1554 /* 応答電文設定 */ 1588 1555 if(p_req_esv->edata.deoj.eojx3 != 0) 1589 1556 _ecn_tsk_mk_rsp_hdr_res(&a_ecn_hdp, p_req_esv); … … 1591 1558 _ecn_tsk_mk_rsp_hdr(fp_obj, &a_ecn_hdp, p_req_esv); 1592 1559 1593 f_put_fbs_eoj("_ecn_tsk_eoj_get", "fa_fbs_id", fa_fbs_id); /* s/deoj ãããã°åºå*/1594 1595 /* å¿çé»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å*/1560 f_put_fbs_eoj("_ecn_tsk_eoj_get", "fa_fbs_id", fa_fbs_id); /* s/deoj デバッグ出力 */ 1561 1562 /* 応答電文用メモリにデータ追加 */ 1596 1563 a_ret = _ecn_fbs_add_data_ex(mrb, a_fbs_res, &a_ecn_hdp, 1597 1564 sizeof(a_ecn_hdp.ecn_hdr) + sizeof(a_ecn_hdp.edata)); … … 1601 1568 } 1602 1569 1603 /* payloadå 1604 é ã®T_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)ãèªã¿é£ã°ã */ 1570 /* payload先頭のT_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)を読み飛ばす */ 1605 1571 a_ret = _ecn_fbs_set_rpos(fa_fbs_id, offsetof(T_ECN_EDT_HDR, ecn_prp)); 1606 1572 if (a_ret) { … … 1609 1575 } 1610 1576 1611 /* å¿çé»æç¨fbsè¨å®*/1577 /* 応答電文用fbs設定 */ 1612 1578 _ecn_tsk_set_rsp_fbs(a_fbs_res, fa_fbs_id.ptr); 1613 1579 1614 /* ããããã£å¤èªã¿è¾¼ã¿å®è¡*/1580 /* プロパティ値読み込み実行 */ 1615 1581 a_ret = _ecn_tsk_eoj_get_main(svc, fp_obj, fa_eobjatr, fa_forward, fa_access, fa_fbs_id, a_fbs_res, 1616 1582 ((T_EDATA *)fa_fbs_id.ptr)->hdr.edata.opc, &a_sw_ok); … … 1622 1588 if (a_sw_ok) { 1623 1589 if (!fa_res_esv) { 1624 /* å¿çä¸è¦ã®å ´å*/1590 /* 応答不要の場合 */ 1625 1591 _ecn_fbs_del(mrb, a_fbs_res); 1626 1592 goto lb_finally; 1627 1593 } 1628 /* è¨å®å¦çæå*/1594 /* 設定処理成功 */ 1629 1595 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.esv = fa_res_esv; 1630 1596 } else { 1631 1597 if (!fa_sna_esv) { 1632 /* å¿çä¸è¦ã®å ´å*/1598 /* 応答不要の場合 */ 1633 1599 _ecn_fbs_del(mrb, a_fbs_res); 1634 1600 goto lb_finally; 1635 1601 } 1636 /* è¨å®å¦ç失æ*/1602 /* 設定処理失敗 */ 1637 1603 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.esv = fa_sna_esv; 1638 1604 1639 /* ä¸å¯å¿çã®å ´åã¯åå¥éä¿¡ãã*/1605 /* 不可応答の場合は個別送信する */ 1640 1606 if (a_fbs_res.ptr->hdr.target.id == ENOD_MULTICAST_ID) { 1641 1607 a_fbs_res.ptr->hdr.target.id = fa_fbs_id.ptr->hdr.sender.id; 1642 1608 } 1643 1609 } 1644 /* å¿çéä¿¡*/1610 /* 応答送信 */ 1645 1611 a_ret = _ecn_tsk_snd_mbx(svc, a_fbs_res, false); 1646 1612 if (a_ret != E_OK) { … … 1651 1617 1652 1618 lb_except: 1653 /* ãã¼ã¿é信失æãããé å解æ¾*/1619 /* データ送信失敗したら領域解放 */ 1654 1620 if (a_fbs_res.ptr) 1655 1621 _ecn_fbs_del(mrb, a_fbs_res); … … 1659 1625 } 1660 1626 1661 /* ããããã£å¤èªã¿åºãè¦æ±*/1627 /* プロパティ値読み出し要求 */ 1662 1628 static void _ecn_tsk_eoj_res(ecnl_svc_task_t *svc, ECN_FBS_ID fa_fbs_id, ECN_SRV_CODE fa_res_esv, 1663 1629 ECN_SRV_CODE fa_sna_esv) … … 1673 1639 memset(&a_ecn_hdp, 0, sizeof(a_ecn_hdp)); 1674 1640 1675 /* åæåå¾ãµã¤ãº*/1641 /* 初期取得サイズ */ 1676 1642 a_size = sizeof(T_ECN_HDR) + sizeof(T_ECN_EDATA_BODY) + sizeof(T_ECN_PRP); 1677 1643 1678 /* å¿çé»æç¨ã¡ã¢ãªã®åå¾*/1644 /* 応答電文用メモリの取得 */ 1679 1645 a_ret = _ecn_fbs_cre(mrb, a_size, &a_fbs_res); 1680 if (a_ret != E_OK || !a_fbs_res.ptr) { /* 確ä¿å¤±æ*/1646 if (a_ret != E_OK || !a_fbs_res.ptr) { /* 確保失敗 */ 1681 1647 ECN_DBG_PUT_2("_ecn_fbs_cre() result = %d:%s", a_ret, itron_strerror(a_ret)); 1682 1648 goto lb_finally; 1683 1649 } 1684 1650 1685 /* å¿çé»æè¨å®*/1651 /* 応答電文設定 */ 1686 1652 _ecn_tsk_mk_rsp_hdr_res(&a_ecn_hdp, p_req_esv); 1687 1653 1688 f_put_fbs_eoj("_ecn_tsk_eoj_res", "fa_fbs_id", fa_fbs_id); /* s/deoj ãããã°åºå*/1689 1690 /* å¿çé»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å*/1654 f_put_fbs_eoj("_ecn_tsk_eoj_res", "fa_fbs_id", fa_fbs_id); /* s/deoj デバッグ出力 */ 1655 1656 /* 応答電文用メモリにデータ追加 */ 1691 1657 a_ret = _ecn_fbs_add_data_ex(mrb, a_fbs_res, &a_ecn_hdp, 1692 1658 sizeof(a_ecn_hdp.ecn_hdr) + sizeof(a_ecn_hdp.edata)); … … 1696 1662 } 1697 1663 1698 /* payloadå 1699 é ã®T_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)ãèªã¿é£ã°ã */ 1664 /* payload先頭のT_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)を読み飛ばす */ 1700 1665 a_ret = _ecn_fbs_set_rpos(fa_fbs_id, offsetof(T_ECN_EDT_HDR, ecn_prp)); 1701 1666 if (a_ret) { … … 1704 1669 } 1705 1670 1706 /* å¿çé»æç¨fbsè¨å®*/1671 /* 応答電文用fbs設定 */ 1707 1672 _ecn_tsk_set_rsp_fbs(a_fbs_res, fa_fbs_id.ptr); 1708 1673 1709 /* ããããã£å¤èªã¿è¾¼ã¿å®è¡*/1674 /* プロパティ値読み込み実行 */ 1710 1675 a_ret = _ecn_tsk_eoj_res_main(svc, fa_fbs_id, a_fbs_res, 1711 1676 ((T_EDATA *)fa_fbs_id.ptr)->hdr.edata.opc, &a_sw_ok); … … 1717 1682 if (a_sw_ok) { 1718 1683 if (!fa_res_esv) { 1719 /* å¿çä¸è¦ã®å ´å*/1684 /* 応答不要の場合 */ 1720 1685 _ecn_fbs_del(mrb, a_fbs_res); 1721 1686 goto lb_finally; 1722 1687 } 1723 /* è¨å®å¦çæå*/1688 /* 設定処理成功 */ 1724 1689 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.esv = fa_res_esv; 1725 1690 } else { 1726 1691 if (!fa_sna_esv) { 1727 /* å¿çä¸è¦ã®å ´å*/1692 /* 応答不要の場合 */ 1728 1693 _ecn_fbs_del(mrb, a_fbs_res); 1729 1694 goto lb_finally; 1730 1695 } 1731 /* è¨å®å¦ç失æ*/1696 /* 設定処理失敗 */ 1732 1697 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.esv = fa_sna_esv; 1733 1698 } 1734 /* å¿çéä¿¡*/1699 /* 応答送信 */ 1735 1700 a_ret = _ecn_tsk_snd_mbx(svc, a_fbs_res, false); 1736 1701 if (a_ret != E_OK) { … … 1741 1706 1742 1707 lb_except: 1743 /* ãã¼ã¿é信失æãããé å解æ¾*/1708 /* データ送信失敗したら領域解放 */ 1744 1709 if (a_fbs_res.ptr) 1745 1710 _ecn_fbs_del(mrb, a_fbs_res); … … 1757 1722 T_ECN_EDT_HDR a_ecn_hdp; 1758 1723 ECN_FBS_ID a_fbs_res = { 0 }; 1759 int a_rdprp_wrpos; /* ããããã£èªã¿è¾¼ã¿ä»¶æ°æ¸ãè¾¼ã¿æã®ãããä½ç½®*/1724 int a_rdprp_wrpos; /* プロパティ読み込み件数書き込み時のヘッド位置 */ 1760 1725 ER a_ret; 1761 1726 int i, a_size, a_rdlen; 1762 1727 int a_sw_ok = 1; 1763 int a_count = ((T_EDATA *)fa_fbs_id.ptr)->hdr.edata.opc; /* å¦çããããã£æ°*/1728 int a_count = ((T_EDATA *)fa_fbs_id.ptr)->hdr.edata.opc; /* 処理プロパティ数 */ 1764 1729 1765 1730 memset(&a_ecn_hdp, 0, sizeof(a_ecn_hdp)); … … 1768 1733 fp_obj->eojx1 << 16 | fp_obj->eojx2 << 8 | fp_obj->eojx3); 1769 1734 1770 /* åæåå¾ãµã¤ãº*/1735 /* 初期取得サイズ */ 1771 1736 a_size = sizeof(T_ECN_HDR) + sizeof(T_ECN_EDATA_BODY) + sizeof(T_ECN_PRP); 1772 1737 1773 /* å¿çé»æç¨ã¡ã¢ãªã®åå¾*/1738 /* 応答電文用メモリの取得 */ 1774 1739 a_ret = _ecn_fbs_cre(mrb, a_size, &a_fbs_res); 1775 if (a_ret != E_OK || !a_fbs_res.ptr) /* 確ä¿å¤±æ*/1740 if (a_ret != E_OK || !a_fbs_res.ptr) /* 確保失敗 */ 1776 1741 goto lb_finally; 1777 1742 1778 /* å¿çé»æè¨å®*/1743 /* 応答電文設定 */ 1779 1744 if(p_req_esv->edata.deoj.eojx3 != 0) 1780 1745 _ecn_tsk_mk_rsp_hdr_res(&a_ecn_hdp, p_req_esv); … … 1783 1748 a_size -= sizeof(T_ECN_HDR) + sizeof(T_ECN_EDATA_BODY); 1784 1749 1785 f_put_fbs_eoj("_ecn_tsk_eoj_set_get", "fa_fbs_id", fa_fbs_id); /* s/deoj ãããã°åºå*/1786 1787 /* å¿çé»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å*/1750 f_put_fbs_eoj("_ecn_tsk_eoj_set_get", "fa_fbs_id", fa_fbs_id); /* s/deoj デバッグ出力 */ 1751 1752 /* 応答電文用メモリにデータ追加 */ 1788 1753 a_ret = _ecn_fbs_add_data_ex(mrb, a_fbs_res, &a_ecn_hdp, 1789 1754 sizeof(a_ecn_hdp.ecn_hdr) + sizeof(a_ecn_hdp.edata)); … … 1791 1756 goto lb_except; 1792 1757 1793 /* payloadå 1794 é ã®T_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)ãèªã¿é£ã°ã */ 1758 /* payload先頭のT_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)を読み飛ばす */ 1795 1759 a_ret = _ecn_fbs_set_rpos(fa_fbs_id, offsetof(T_ECN_EDT_HDR, ecn_prp)); 1796 1760 if (a_ret) 1797 1761 goto lb_except; 1798 1762 1799 /* å¿çé»æç¨fbsè¨å®*/1763 /* 応答電文用fbs設定 */ 1800 1764 _ecn_tsk_set_rsp_fbs(a_fbs_res, fa_fbs_id.ptr); 1801 1765 1802 /* ããããã£å¤æ¸ãè¾¼ã¿å®è¡*/1766 /* プロパティ値書き込み実行 */ 1803 1767 a_ret = _ecn_tsk_eoj_set_main(svc, fp_obj, fa_eobjatr, fa_fromapp, false, fa_fbs_id, a_fbs_res, 1804 1768 fa_fbs_anno, a_count, &a_sw_ok); … … 1813 1777 (a_sw_ok ? "true" : "false")); 1814 1778 1815 /* 次ã®ä»¶æ°ãèªã¿åã(1byte) */1816 /* âECHONET-Lite_Ver.1.10_02.pdf p.40 [OPCGet] */1779 /* 次の件数を読み取る(1byte) */ 1780 /* → ECHONET-Lite_Ver.1.10_02.pdf p.40 [OPCGet] */ 1817 1781 a_rdlen = i = 0; 1818 1782 a_ret = _ecn_fbs_get_data(mrb, fa_fbs_id, &i, 1, &a_rdlen); … … 1821 1785 a_count = *(uint8_t *)&i; 1822 1786 1823 /* ããããã£èªã¿è¾¼ã¿ä»¶æ°æ¸ãè¾¼ã¿æã®ãããæ 1824 å ±ãè¨é² */ 1787 /* プロパティ読み込み件数書き込み時のヘッド情報を記録 */ 1825 1788 a_rdprp_wrpos = _ecn_fbs_get_datalen(a_fbs_res); 1826 1789 1827 /* å¿çé»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å(OPCGet 1byte) */1790 /* 応答電文用メモリにデータ追加 (OPCGet 1byte) */ 1828 1791 a_ret = _ecn_fbs_add_data_ex(mrb, a_fbs_res, &i, 1); 1829 1792 if (a_ret) 1830 1793 goto lb_except; 1831 1794 1832 /* ãã®æç¹ã§ã®å¿çé»æä¸ããããã£ä»¶æ°ãè¨é²*/1795 /* この時点での応答電文中プロパティ件数を記録 */ 1833 1796 i = ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.opc; 1834 1797 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.opc = 0; 1835 1798 1836 /* ããããã£å¤èªã¿è¾¼ã¿å®è¡*/1799 /* プロパティ値読み込み実行 */ 1837 1800 a_ret = _ecn_tsk_eoj_get_main(svc, fp_obj, fa_eobjatr, false, EPC_RULE_GET, fa_fbs_id, a_fbs_res, 1838 1801 a_count, &a_sw_ok); … … 1847 1810 (a_sw_ok ? "true" : "false")); 1848 1811 1849 /* ããããã£èªã¿è¾¼ã¿ä»¶æ°æ¸ãè¾¼ã¿æã®ãããæ 1850 å ±ã§ãèªã¿åºã件æ°ãè¨é² */ 1812 /* プロパティ読み込み件数書き込み時のヘッド情報で、読み出し件数を記録 */ 1851 1813 _ecn_fbs_poke(mrb, a_fbs_res, a_rdprp_wrpos, ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.opc); 1852 1814 1853 /* è¨é²ãã¦ãããããããã£ä»¶æ°ï¼æ¸ãè¾¼ã¿ä»¶æ°ï¼ãæ¸ãæ»ã*/1815 /* 記録しておいたプロパティ件数(書き込み件数)を書き戻す */ 1854 1816 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.opc = (uint8_t)i; 1855 1817 1856 /* å¿çè¦ã®å ´å*/1818 /* 応答要の場合 */ 1857 1819 if (a_sw_ok) { 1858 /* è¨å®å¦çæå*/1820 /* 設定処理成功 */ 1859 1821 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.esv = fa_res_esv; 1860 1822 } else { 1861 /* è¨å®å¦ç失æ*/1823 /* 設定処理失敗 */ 1862 1824 ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.esv = fa_sna_esv; 1863 1825 } 1864 /* å¿çéä¿¡*/1826 /* 応答送信 */ 1865 1827 a_ret = _ecn_tsk_snd_mbx(svc, a_fbs_res, false); 1866 1828 if (a_ret == E_OK) … … 1868 1830 1869 1831 lb_except: 1870 /* ãã¼ã¿é信失æãããé å解æ¾*/1832 /* データ送信失敗したら領域解放 */ 1871 1833 if (a_fbs_res.ptr) 1872 1834 _ecn_fbs_del(mrb, a_fbs_res); … … 1886 1848 int i, a_size, a_rdlen; 1887 1849 int a_sw_ok = 1; 1888 int a_count = ((T_EDATA *)fa_fbs_id.ptr)->hdr.edata.opc; /* å¦çããããã£æ°*/1850 int a_count = ((T_EDATA *)fa_fbs_id.ptr)->hdr.edata.opc; /* 処理プロパティ数 */ 1889 1851 1890 1852 memset(&a_ecn_hdp, 0, sizeof(a_ecn_hdp)); … … 1893 1855 fp_obj->eojx1 << 16 | fp_obj->eojx2 << 8 | fp_obj->eojx3); 1894 1856 1895 /* åæåå¾ãµã¤ãº*/1857 /* 初期取得サイズ */ 1896 1858 a_size = sizeof(T_ECN_HDR) + sizeof(T_ECN_EDATA_BODY) + sizeof(T_ECN_PRP); 1897 1859 1898 /* å¿çé»æç¨ã¡ã¢ãªï¼ããã¼ï¼ã®åå¾*/1860 /* 応答電文用メモリ(ダミー)の取得 */ 1899 1861 a_ret = _ecn_fbs_cre(mrb, a_size, &a_fbs_dmy); 1900 if (a_ret != E_OK || !a_fbs_dmy.ptr) /* 確ä¿å¤±æ*/1862 if (a_ret != E_OK || !a_fbs_dmy.ptr) /* 確保失敗 */ 1901 1863 goto lb_finally; 1902 1864 1903 /* å¿çé»æè¨å®*/1865 /* 応答電文設定 */ 1904 1866 _ecn_tsk_mk_rsp_hdr_res(&a_ecn_hdp, p_req_esv); 1905 1867 a_size -= sizeof(T_ECN_HDR) + sizeof(T_ECN_EDATA_BODY); 1906 1868 1907 /* payloadå 1908 é ã®T_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)ãèªã¿é£ã°ã */ 1869 /* payload先頭のT_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)を読み飛ばす */ 1909 1870 a_ret = _ecn_fbs_set_rpos(fa_fbs_id, offsetof(T_ECN_EDT_HDR, ecn_prp)); 1910 1871 if (a_ret) 1911 1872 goto lb_except; 1912 1873 1913 /* ããããã£å¤æ¸ãè¾¼ã¿å¿çèªã¿é£ã°ãå®è¡*/1874 /* プロパティ値書き込み応答読み飛ばし実行 */ 1914 1875 a_ret = _ecn_tsk_eoj_skip_main(svc, fp_obj, fa_fbs_id, a_count); 1915 1876 if (a_ret) { … … 1923 1884 (a_sw_ok ? "true" : "false")); 1924 1885 1925 /* 次ã®ä»¶æ°ãèªã¿åã(1byte) */1926 /* âECHONET-Lite_Ver.1.10_02.pdf p.40 [OPCGet] */1886 /* 次の件数を読み取る(1byte) */ 1887 /* → ECHONET-Lite_Ver.1.10_02.pdf p.40 [OPCGet] */ 1927 1888 a_rdlen = i = 0; 1928 1889 a_ret = _ecn_fbs_get_data(mrb, fa_fbs_id, &i, 1, &a_rdlen); … … 1931 1892 a_count = *(uint8_t *)&i; 1932 1893 1933 /* ããããã£å¤èªã¿åºãå¿çã®æ¸ãè¾¼ã¿å®è¡*/1894 /* プロパティ値読み出し応答の書き込み実行 */ 1934 1895 a_ret = _ecn_tsk_eoj_set_main(svc, fp_obj, fa_eobjatr, fa_fromapp, true, fa_fbs_id, a_fbs_dmy, 1935 1896 fa_fbs_anno, a_count, &a_sw_ok); … … 1947 1908 1948 1909 lb_except: 1949 /* ãã¼ã¿é信失æãããé å解æ¾*/1910 /* データ送信失敗したら領域解放 */ 1950 1911 if (a_fbs_dmy.ptr) 1951 1912 _ecn_fbs_del(mrb, a_fbs_dmy); … … 1956 1917 1957 1918 /* 1958 * å¿çé»æå¾ 1959 ã¡ã®å²ãè¾¼ã¿é»æä½æ 1919 * 応答電文待ちの割り込み電文作成 1960 1920 */ 1961 1921 ER _ecn_mk_brk_wai(ecnl_svc_task_t *svc, ECN_FBS_ID *pk_fbs_id, const void *p_dat, size_t fa_size) … … 1963 1923 mrb_state *mrb = svc->mrb; 1964 1924 ER a_ret; 1965 ECN_FBS_ID a_fbs_id = { 0 }; /* è¦æ±é»æç¨ã¡ã¢ãª*/1925 ECN_FBS_ID a_fbs_id = { 0 }; /* 要求電文用メモリ */ 1966 1926 1967 1927 if (!pk_fbs_id) … … 1969 1929 *pk_fbs_id = a_fbs_id; 1970 1930 if (sizeof(a_fbs_id.ptr->payload) <= fa_size) 1971 return E_PAR; /* ä»éãã¼ã¿ã大ãããã*/1931 return E_PAR; /* 付随データが大きすぎる */ 1972 1932 if (!p_dat && 0 < fa_size) 1973 return E_PAR; /* ä»éãã¼ã¿ãµã¤ãºã1以ä¸ãªã®ã«ãã¼ã¿ãã¤ã³ã¿ãNULL */1974 1975 /* è¦æ±é»æç¨ã¡ã¢ãªã®åå¾*/1933 return E_PAR; /* 付随データサイズが1以上なのにデータポインタがNULL */ 1934 1935 /* 要求電文用メモリの取得 */ 1976 1936 a_ret = _ecn_fbs_cre(mrb, (0 < fa_size ? fa_size : 1), &a_fbs_id); 1977 if (a_ret != E_OK || !a_fbs_id.ptr) { /* 確ä¿å¤±æ*/1937 if (a_ret != E_OK || !a_fbs_id.ptr) { /* 確保失敗 */ 1978 1938 ECN_DBG_PUT_3("_ecn_fbs_cre(%d) result = %d:%s", fa_size, a_ret, itron_strerror(a_ret)); 1979 1939 return a_ret; 1980 1940 } 1981 1941 1982 /* è¦æ±é»æè¨å®*/1942 /* 要求電文設定 */ 1983 1943 a_fbs_id.ptr->hdr.type = ECN_MSG_USER_BREAK; 1984 1944 a_fbs_id.ptr->hdr.sender.id = ENOD_API_ID; … … 1987 1947 1988 1948 if (0 < fa_size && p_dat) { 1989 /* ä»éãã¼ã¿è¿½å*/1949 /* 付随データ追加 */ 1990 1950 a_ret = _ecn_fbs_add_data_ex(mrb, a_fbs_id, p_dat, fa_size); 1991 1951 if (a_ret) { … … 1999 1959 *pk_fbs_id = a_fbs_id; 2000 1960 2001 /* æ£å¸¸çµäº*/1961 /* 正常終了 */ 2002 1962 return a_ret; 2003 1963 2004 1964 lb_except: 2005 /* ãã¼ã¿ä½æ失æãããé å解æ¾*/1965 /* データ作成失敗したら領域解放 */ 2006 1966 if (a_fbs_id.ptr) 2007 1967 _ecn_fbs_del(mrb, a_fbs_id); … … 2010 1970 } 2011 1971 2012 /* å¿çé»æç¨fbsè¨å®(sender/targetã®è¨å®) */1972 /* 応答電文用fbs設定(sender/targetの設定) */ 2013 1973 ER _ecn_tsk_cre_req_fbs(ecnl_svc_task_t *svc, T_ECN_FBS_QUEUE *sender, uint8_t cmd, ECN_FBS_ID *pk_req) 2014 1974 { … … 2040 2000 } 2041 2001 2042 /* å¿çé»æç¨fbsè¨å®(sender/targetã®è¨å®) */2002 /* 応答電文用fbs設定(sender/targetの設定) */ 2043 2003 ER _ecn_tsk_cre_res_fbs(ecnl_svc_task_t *svc, ECN_FBS_ID req, uint8_t cmd, ECN_FBS_ID *pk_res) 2044 2004 {
Note:
See TracChangeset
for help on using the changeset viewer.