Changeset 167 for UsbWattMeter/trunk/ecnl_lwip/echonet.c
- Timestamp:
- Mar 8, 2016, 8:37:45 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
UsbWattMeter/trunk/ecnl_lwip/echonet.c
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=SHIFT_JIS
r164 r167 4 4 * Copyright (C) 2014-2016 Cores Co., Ltd. Japan 5 5 * 6 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 7 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 8 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 9 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 10 * \¦C±Ìpð¨æÑºLÌ³ÛØKèªC»ÌÜÜÌ`Å\[ 11 * XR[hÉÜÜêĢ鱯D 12 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 13 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 14 gip 15 * Ò}j 16 AÈÇjÉCãLÌì \¦C±Ìpð¨æÑºL 17 * Ì³ÛØKèðfÚ·é±ÆD 18 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 19 * pūȢ`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 20 * ÆD 21 * (a) Äzzɺ¤hL 22 gipÒ}j 23 AÈÇjÉCãLÌ 24 * ì \¦C±Ìpð¨æÑºLÌ³ÛØKèðfÚ·é±ÆD 25 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 26 * ñ·é±ÆD 27 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 28 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 29 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 30 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 31 * ÆÓ·é±ÆD 6 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 7 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 8 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 9 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 10 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 11 * スコード中に含まれていること. 12 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 13 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 14 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 15 * の無保証規定を掲載すること. 16 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 17 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 18 * と. 19 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 20 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 21 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 22 * 報告すること. 23 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 24 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 25 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 26 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 27 * 免責すること. 32 28 * 33 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨34 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI35 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF36 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»37 * ÌÓCðíÈ¢D29 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 30 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 31 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 32 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 33 * の責任を負わない. 38 34 * 39 35 * @(#) $Id$ … … 52 48 53 49 /* 54 * ECHONET Lite T[rXJn50 * ECHONET Liteサービス処理開始 55 51 */ 56 52 ER ecn_sta_svc() … … 60 56 61 57 /* 62 * ECHONET IuWFNgQÆ63 * ø64 * ID fa_eobjid ECHONET IuWFNgID65 * T_REOBJ *fp_eobj ECHONET IuWFNgÌÝèàeRs[æ58 * ECHONETオブジェクト参照 59 * 引数 60 * ID fa_eobjid ECHONETオブジェクトID 61 * T_REOBJ *fp_eobj ECHONETオブジェクトの設定内容コピー先 66 62 * 67 * eobjid Åwèµ½ECHONETIuWFNgÌÝèàeðQÆ·éB68 * QƵ½ÝèàeÍpk_eobjÉwèµ½ÉÔ³êéB63 * eobjidで指定したECHONETオブジェクトの設定内容を参照する。 64 * 参照した設定内容はpk_eobjに指定したメモリに返される。 69 65 */ 70 66 ER ecn_ref_eobj(ID fa_eobjid, T_REOBJ *fp_eobj) … … 73 69 74 70 if (!fp_eobj) 75 return E_PAR; /* p[^G[*/71 return E_PAR; /* パラメータエラー */ 76 72 77 73 if ((fa_eobjid <= 0) || (fa_eobjid > tmax_eobjid)) 78 return E_OBJ; /* IuWFNg¢o^*/74 return E_OBJ; /* オブジェクト未登録 */ 79 75 80 76 p_obj = &eobjinib_table[fa_eobjid - 1]; … … 86 82 87 83 /* 88 * ECHONET vpeBQÆ89 * ø90 * ID fa_eobjid ECHONET IuWFNgID91 * uint8_t fa_epc vpeBR[h92 * T_RPRP *fp_eprp ECHONET IuWFNgÌvpeBÝèàeRs[æ84 * ECHONETプロパティ参照 85 * 引数 86 * ID fa_eobjid ECHONETオブジェクトID 87 * uint8_t fa_epc プロパティコード 88 * T_RPRP *fp_eprp ECHONETオブジェクトのプロパティ設定内容コピー先 93 89 * 94 * eobjid Åwèµ½ECHONETIuWFNgÌAepcÅwèµ½vpeBÌÝèàeðQÆ·éB95 * QƵ½ÝèàeÍpk_eprpÉwèµ½ÉÔ³êéB90 * eobjidで指定したECHONETオブジェクトの、epcで指定したプロパティの設定内容を参照する。 91 * 参照した設定内容はpk_eprpに指定したメモリに返される。 96 92 */ 97 93 ER ecn_ref_eprp(ID fa_eobjid, uint8_t fa_epc, T_RPRP *fp_eprp) … … 102 98 103 99 if (!fp_eprp) 104 return E_PAR; /* p[^G[*/100 return E_PAR; /* パラメータエラー */ 105 101 106 102 if ((fa_eobjid <= 0) || (fa_eobjid > tmax_eobjid)) 107 return E_OBJ; /* IuWFNg¢o^*/103 return E_OBJ; /* オブジェクト未登録 */ 108 104 109 105 p_obj = &eobjinib_table[fa_eobjid - 1]; 110 106 111 /* eoj ÌÂvpeBú»è`zñ©çõ*/107 /* eojの持つプロパティ初期化定義配列から検索 */ 112 108 p = p_obj->eprp; 113 109 for (i = 0; i < p_obj->eprpcnt; i++, p++) { … … 118 114 } 119 115 120 return E_PAR; /* p[^G[*/121 } 122 123 /* 124 * vpeBl«Ývisvjd¶ì¬125 * ø126 * T_EDATA **ppk_esv æ¾µ½d¶Ìi[æ127 * ID fa_deoj ¶æÌECHONETIuWFNgID128 * uint8_t fa_epc vpeBR[h129 * uint8_t fa_pdc vpeBlf[^TCY130 * const void *p_edt vpeBlf[^116 return E_PAR; /* パラメータエラー */ 117 } 118 119 /* 120 * プロパティ値書き込み要求(応答不要)電文作成 121 * 引数 122 * T_EDATA **ppk_esv 取得した電文の格納先 123 * ID fa_deoj 宛先のECHONETオブジェクトID 124 * uint8_t fa_epc プロパティコード 125 * uint8_t fa_pdc プロパティ値データサイズ 126 * const void *p_edt プロパティ値データ 131 127 * 132 * vpeBl«Ývisvjd¶ð쬷éB133 * d¶ÍdeojÅwèµ½ECHONETIuWFNgð¶æÆµA134 * d¶ÌßÌvpeBlƵÄAepcÆpdcAp_edtÅwè³ê½135 * vpeBR[hAf[^TCYAf[^ðd¶ÉÝè·éB136 * 쬵½d¶ÌæªAhXÍ|C^oRÅÔ³êéB128 * プロパティ値書き込み要求(応答不要)電文を作成する。 129 * 電文はdeojで指定したECHONETオブジェクトを宛先とし、 130 * 電文の初めのプロパティ値として、epcとpdc、p_edtで指定された 131 * プロパティコード、データサイズ、データを電文に設定する。 132 * 作成した電文の先頭アドレスはポインタ経由で返される。 137 133 */ 138 134 ER ecn_esv_seti(T_EDATA **ppk_esv, ID fa_deoj, uint8_t fa_epc, uint8_t fa_pdc, … … 143 139 144 140 /* 145 * vpeBl«Ývivjd¶ì¬146 * ø147 * T_EDATA **ppk_esv æ¾µ½d¶Ìi[æ148 * ID fa_deoj ¶æÌECHONETIuWFNgID149 * uint8_t fa_epc vpeBR[h150 * uint8_t fa_pdc vpeBlf[^TCY151 * const void *p_edt vpeBlf[^141 * プロパティ値書き込み要求(応答要)電文作成 142 * 引数 143 * T_EDATA **ppk_esv 取得した電文の格納先 144 * ID fa_deoj 宛先のECHONETオブジェクトID 145 * uint8_t fa_epc プロパティコード 146 * uint8_t fa_pdc プロパティ値データサイズ 147 * const void *p_edt プロパティ値データ 152 148 * 153 * vpeBl«Ývivjd¶ð쬷éB154 * d¶ÍdeojÅwèµ½ECHONETIuWFNgð¶æÆµA155 * d¶ÌßÌvpeBlƵÄAepcÆpdcAp_edtÅwè³ê½156 * vpeBR[hAf[^TCYAf[^ðd¶ÉÝè·éB157 * 쬵½d¶ÌæªAhXÍ|C^oRÅÔ³êéB149 * プロパティ値書き込み要求(応答要)電文を作成する。 150 * 電文はdeojで指定したECHONETオブジェクトを宛先とし、 151 * 電文の初めのプロパティ値として、epcとpdc、p_edtで指定された 152 * プロパティコード、データサイズ、データを電文に設定する。 153 * 作成した電文の先頭アドレスはポインタ経由で返される。 158 154 */ 159 155 ER ecn_esv_setc(T_EDATA **ppk_esv, ID fa_deoj, uint8_t fa_epc, uint8_t fa_pdc, … … 164 160 165 161 /* 166 * vpeBlÇÝoµvd¶ì¬167 * ø168 * T_EDATA **ppk_esv æ¾µ½d¶Ìi[æ169 * ID fa_deoj ¶æÌECHONETIuWFNgID170 * uint8_t fa_epc vpeBR[h162 * プロパティ値読み出し要求電文作成 163 * 引数 164 * T_EDATA **ppk_esv 取得した電文の格納先 165 * ID fa_deoj 宛先のECHONETオブジェクトID 166 * uint8_t fa_epc プロパティコード 171 167 * 172 * vpeBlÇÝoµvd¶ð쬷éB173 * d¶ÍdeojÅwèµ½ECHONETIuWFNgð¶æÆµA174 * d¶ÌßÌvpeBlƵÄAepcÅwè³ê½175 * vpeBR[hðd¶ÉÝè·éB176 * 쬵½d¶ÌæªAhXÍ|C^oRÅÔ³êéB168 * プロパティ値読み出し要求電文を作成する。 169 * 電文はdeojで指定したECHONETオブジェクトを宛先とし、 170 * 電文の初めのプロパティ値として、epcで指定された 171 * プロパティコードを電文に設定する。 172 * 作成した電文の先頭アドレスはポインタ経由で返される。 177 173 */ 178 174 ER ecn_esv_get(T_EDATA **ppk_esv, ID fa_deoj, uint8_t fa_epc) … … 182 178 183 179 /* 184 * vpeBlÊmvd¶ì¬185 * ø186 * T_EDATA **ppk_esv æ¾µ½d¶Ìi[æ187 * ID fa_deoj ¶æÌECHONETIuWFNgID188 * uint8_t fa_epc vpeBR[h180 * プロパティ値通知要求電文作成 181 * 引数 182 * T_EDATA **ppk_esv 取得した電文の格納先 183 * ID fa_deoj 宛先のECHONETオブジェクトID 184 * uint8_t fa_epc プロパティコード 189 185 * 190 * vpeBlÊmvd¶ð쬷éB191 * d¶ÍdeojÅwèµ½ECHONETIuWFNgð¶æÆµA192 * d¶ÌßÌvpeBlƵÄAepcÅwè³ê½193 * vpeBR[hðd¶ÉÝè·éB194 * 쬵½d¶ÌæªAhXÍ|C^oRÅÔ³êéB186 * プロパティ値通知要求電文を作成する。 187 * 電文はdeojで指定したECHONETオブジェクトを宛先とし、 188 * 電文の初めのプロパティ値として、epcで指定された 189 * プロパティコードを電文に設定する。 190 * 作成した電文の先頭アドレスはポインタ経由で返される。 195 191 */ 196 192 ER ecn_esv_inf_req(T_EDATA **ppk_esv, ID fa_deoj, uint8_t fa_epc) … … 200 196 201 197 /* 202 * vpeBl«ÝEÇÝoµvd¶ì¬203 * ø204 * T_EDATA **ppk_esv æ¾µ½d¶Ìi[æ205 * ID fa_deoj ¶æÌECHONETIuWFNgID206 * uint8_t fa_epc vpeBR[h207 * uint8_t fa_pdc vpeBlf[^TCY208 * const void *p_edt vpeBlf[^198 * プロパティ値書き込み・読み出し要求電文作成 199 * 引数 200 * T_EDATA **ppk_esv 取得した電文の格納先 201 * ID fa_deoj 宛先のECHONETオブジェクトID 202 * uint8_t fa_epc プロパティコード 203 * uint8_t fa_pdc プロパティ値データサイズ 204 * const void *p_edt プロパティ値データ 209 205 * 210 * vpeBl«ÝEÇÝoµvd¶ð쬷éB211 * d¶ÍdeojÅwèµ½ECHONETIuWFNgð¶æÆµA212 * d¶ÌßÌvpeBlƵÄAepcÆpdcAp_edtÅwè³ê½213 * vpeBR[hAf[^TCYAf[^ðd¶ÉÝè·éB214 * 쬵½d¶ÌæªAhXÍ|C^oRÅÔ³êéB206 * プロパティ値書き込み・読み出し要求電文を作成する。 207 * 電文はdeojで指定したECHONETオブジェクトを宛先とし、 208 * 電文の初めのプロパティ値として、epcとpdc、p_edtで指定された 209 * プロパティコード、データサイズ、データを電文に設定する。 210 * 作成した電文の先頭アドレスはポインタ経由で返される。 215 211 */ 216 212 ER ecn_esv_set_get(T_EDATA **ppk_esv, ID fa_deoj, uint8_t fa_epc, uint8_t fa_pdc, … … 221 217 222 218 /* 223 * vpeBl«ÝEÇÝoµvd¶ì¬FÜèÔµwè224 * vpeBl«ÝEÇÝoµvd¶ì¬ÌA«ÝvpeBzñðI¦Ä225 * ÇÝoµvpeBzñÉÚéÉp¢éB219 * プロパティ値書き込み・読み出し要求電文作成:折り返し指定 220 * プロパティ値書き込み・読み出し要求電文作成中の、書き込みプロパティ配列を終えて 221 * 読み出しプロパティ配列に移る時に用いる。 226 222 */ 227 223 ER ecn_trn_set_get(T_EDATA *ppk_esv, int *p_trn_pos) … … 234 230 return E_PAR; 235 231 236 /* vpeBÇÝÝ«ÝÌwbhîñðL^*/232 /* プロパティ読み込み件数書き込み時のヘッド情報を記録 */ 237 233 *p_trn_pos = _ecn_fbs_get_datalen(*(ECN_FBS_ID *)&ppk_esv); 238 234 239 /* d¶pÉf[^ÇÁE±Ì_ÅÌd¶vpeBðL^*/235 /* 応答電文用メモリにデータ追加・この時点での応答電文中プロパティ件数を記録 */ 240 236 a_ret = _ecn_fbs_add_data_ex(*(ECN_FBS_ID *)&ppk_esv, &ppk_esv->hdr.edata.opc, 1); 241 237 if (a_ret) { … … 244 240 } 245 241 246 /* d¶vpeBð 0 Éß·i¡ãAI¹wè·éÜÅÍÇÝoµvpeBÉÈéj*/242 /* 応答電文中プロパティ件数を 0 に戻す(今後、終了指定するまでは読み出しプロパティ件数になる) */ 247 243 ppk_esv->hdr.edata.opc = 0; 248 244 … … 251 247 252 248 /* 253 * vpeBl«ÝEÇÝoµvd¶ì¬FI¹wè254 * vpeBl«ÝEÇÝoµvd¶ì¬ÌAÇÝoµvpeBzñðI¦éÉp¢éB249 * プロパティ値書き込み・読み出し要求電文作成:終了指定 250 * プロパティ値書き込み・読み出し要求電文作成中の、読み出しプロパティ配列を終える時に用いる。 255 251 */ 256 252 ER ecn_end_set_get(T_EDATA *ppk_esv, int fa_trn_pos) … … 263 259 return E_PAR; 264 260 265 /* ±Ì_ÅÌd¶vpeB(ÇÝoµvpeB)ðÛ*/261 /* この時点での応答電文中プロパティ件数(読み出しプロパティ件数)を保持 */ 266 262 a_rd_opc = ppk_esv->hdr.edata.opc; 267 263 268 /* d¶vpeB(«ÝvpeB)ðÛ¶Êu©çÇÝæè*/264 /* 応答電文中プロパティ件数(書き込みプロパティ件数)を保存位置から読み取り */ 269 265 a_wr_opc = _ecn_fbs_peek(*(ECN_FBS_ID *)&ppk_esv, fa_trn_pos); 270 266 if (a_wr_opc < 0) { … … 273 269 } 274 270 275 /* d¶vpeB(«ÝvpeB)ð³*/271 /* 応答電文中プロパティ件数(書き込みプロパティ件数)を復元 */ 276 272 ppk_esv->hdr.edata.opc = (uint8_t)a_wr_opc; 277 273 278 /* d¶vpeB(ÇÝoµvpeB)ðÛ¶ÊuÉ«Ý*/274 /* 応答電文中プロパティ件数(読み出しプロパティ件数)を保存位置に書き込み */ 279 275 a_ret = _ecn_fbs_poke(*(ECN_FBS_ID *)&ppk_esv, fa_trn_pos, a_rd_opc); 280 276 if (a_ret) { … … 287 283 288 284 /* 289 * vpeBlÊmivjd¶ì¬290 * ø291 * T_EDATA **ppk_esv æ¾µ½d¶Ìi[æ292 * ID fa_deoj ¶æÌECHONETIuWFNgID293 * ID fa_seoj M³ÌECHONETIuWFNgID294 * uint8_t fa_sepc M³ÌvpeBR[h285 * プロパティ値通知(応答要)電文作成 286 * 引数 287 * T_EDATA **ppk_esv 取得した電文の格納先 288 * ID fa_deoj 宛先のECHONETオブジェクトID 289 * ID fa_seoj 送信元のECHONETオブジェクトID 290 * uint8_t fa_sepc 送信元のプロパティコード 295 291 */ 296 292 ER ecn_esv_infc(T_EDATA **ppk_esv, ID fa_deoj, ID fa_seoj, uint8_t fa_sepc) … … 300 296 301 297 /* 302 * vd¶ÖÌvpeBwèÇÁ (vpeBf[^ªtµÈ¢êÉp¢é)298 * 要求電文へのプロパティ指定追加 (プロパティデータが付随しない場合に用いる) 303 299 */ 304 300 ER ecn_add_epc(T_EDATA *pk_esv, uint8_t epc) … … 308 304 309 305 /* 310 * vd¶ÖÌvpeBf[^ÇÁ (vpeB¨æÑtf[^ðÇÁ·é)306 * 要求電文へのプロパティデータ追加 (プロパティおよび付随データを追加する) 311 307 */ 312 308 ER ecn_add_edt(T_EDATA *pk_esv, uint8_t fa_epc, uint8_t fa_pdc, const void *p_edt) … … 317 313 318 314 if (!pk_esv) 319 return E_PAR; /* æ¾µ½FBS_IDÌi[æªNULL */315 return E_PAR; /* 取得したFBS_IDの格納先がNULL */ 320 316 if (ECHONET_MEMPOOL_BLOCK_SIZE <= fa_pdc) 321 return E_PAR; /* vpeBlTCYªå«·¬é*/317 return E_PAR; /* プロパティ値サイズが大きすぎる */ 322 318 if (!p_edt && 0 < fa_pdc) 323 return E_PAR; /* vpeBlTCYª1ÈãÈÌÉf[^|C^ªNULL */319 return E_PAR; /* プロパティ値サイズが1以上なのにデータポインタがNULL */ 324 320 325 321 a_fbs_id.ptr = (T_ECN_FST_BLK *)pk_esv; 326 322 if (((T_EDATA *)a_fbs_id.ptr)->hdr.edata.opc == 0xFF) 327 return E_PAR; /* vpeBª½·¬é*/328 329 /* vd¶pÉf[^ÇÁ*/323 return E_PAR; /* プロパティが多すぎる */ 324 325 /* 要求電文用メモリにデータ追加 */ 330 326 memset(&a_ecn_prp, 0, sizeof(a_ecn_prp)); 331 327 a_ecn_prp.epc = fa_epc; … … 339 335 } 340 336 if (0 < fa_pdc) { 341 /* tf[^ÇÁ*/337 /* 付随データ追加 */ 342 338 a_ret = _ecn_fbs_add_data_ex(a_fbs_id, p_edt, fa_pdc); 343 339 if (a_ret) { … … 348 344 } 349 345 } 350 /* vpeBCNg*/346 /* プロパティ数インクリメント */ 351 347 ((T_EDATA *)a_fbs_id.ptr)->hdr.edata.opc++; 352 348 … … 356 352 357 353 /* 358 * vd¶ÌM359 * esv Åwè³ê½vd¶ðM·éB360 * d¶Éwè³ê½¶æ©çIPAhXðÁèµAUDPpPbgƵÄM·éB354 * 要求電文の送信 355 * esvで指定された要求電文を送信する。 356 * 電文に指定された宛先からIPアドレスを特定し、UDPパケットとして送信する。 361 357 */ 362 358 ER ecn_snd_esv(T_EDATA *pk_esv) … … 368 364 369 365 /* 370 * d¶ÌóMiÒ¿371 * d¶ðóM·éÌðÒÂB372 * óMµ½d¶Íppk_esvÅwèµ½|C^[ÉæªAhXªÔ³êéB373 * vd¶Ì¶æÌECHONETIuWFNgªlbg[NɶݵȢêA374 * d¶ÍÔ³êÈ¢ÌÅAiÉÒ±ÆÉÈéÌÅ^CAEgt«Ì375 * ecn_trcv_esv ðgp·é±Æð§·éB366 * 応答電文の受信永遠待ち 367 * 応答電文を受信するのを待つ。 368 * 受信した応答電文はppk_esvで指定したポインターに先頭アドレスが返される。 369 * 要求電文の宛先のECHONETオブジェクトがネットワークに存在しない場合、 370 * 応答電文は返送されないので、永遠に待つことになるのでタイムアウト付きの 371 * ecn_trcv_esvを使用することを推奨する。 376 372 */ 377 373 ER ecn_rcv_esv(T_EDATA **ppk_esv) … … 381 377 382 378 /* 383 * d¶ÌóMÒ¿^CAEg è384 * d¶ðóM·éÌðÒÂB385 * óMµ½d¶Íppk_esvÅwèµ½|C^[ÉæªAhXªÔ³êéB386 * tmo Åwè³ê½^CAEgÔªoßµÄàd¶ðóMµÈ¢êA387 * Ò¿ªð³êAßèlªE_TMOÅÔ³êéB388 * tmo ÉTMO_FEVRðwè·éÆecn_rcv_esvƯ¶Ué¢ð·éB389 * tmo É0ðwè·éÆecn_prcv_esvƯ¶Ué¢ð·éB379 * 応答電文の受信待ちタイムアウトあり 380 * 応答電文を受信するのを待つ。 381 * 受信した応答電文はppk_esvで指定したポインターに先頭アドレスが返される。 382 * tmoで指定されたタイムアウト時間が経過しても応答電文を受信しない場合、 383 * 待ちが解除され、戻り値がE_TMOで返される。 384 * tmoにTMO_FEVRを指定するとecn_rcv_esvと同じ振る舞いをする。 385 * tmoに0を指定するとecn_prcv_esvと同じ振る舞いをする。 390 386 */ 391 387 ER ecn_trcv_esv(T_EDATA **ppk_esv, TMO fa_tmout) … … 408 404 409 405 /* 410 * d¶ÌóM|[O411 * d¶ðóM·éÌðÒÂB412 * óMµ½d¶Íppk_esvÅwèµ½|C^[ÉæªAhXªÔ³êéB413 * d¶ÌóMÌL³É©©íç¸AÒ½¸ÉÖð²¯éB406 * 応答電文の受信ポーリング 407 * 応答電文を受信するのを待つ。 408 * 受信した応答電文はppk_esvで指定したポインターに先頭アドレスが返される。 409 * 応答電文の受信の有無にかかわらず、待たずに関数を抜ける。 414 410 */ 415 411 ER ecn_prcv_esv(T_EDATA **ppk_esv) … … 419 415 420 416 /* 421 * d¶Ìjü417 * 応答電文の破棄 422 418 */ 423 419 ER ecn_rel_esv(T_EDATA *pk_esv) … … 432 428 433 429 /* 434 * d¶ÌM³@íIuWFNgðæ¾·é430 * 応答電文の送信元機器オブジェクトを取得する 435 431 */ 436 432 ID ecn_get_eobj(T_EDATA *pk_esv) … … 443 439 p_snod = _ecn_eno_fnd(((T_ECN_FST_BLK *)pk_esv)->hdr.sender.id); 444 440 if (p_snod != NULL) { 445 /* m[hvt@CÌê*/441 /* ノードプロファイルの場合 */ 446 442 if ((p_esv->edata.seoj.eojx1 == EOJ_X1_PROFILE) 447 443 && (p_esv->edata.seoj.eojx2 == EOJ_X2_NODE_PROFILE)) { 448 444 p_sobj = p_snod->profile; 449 445 } 450 /* @íIuWFNgÌê*/446 /* 機器オブジェクトの場合 */ 451 447 else { 452 448 p_sobj = _ecn_eoj_fnd(p_snod, &p_esv->edata.seoj); … … 464 460 465 461 /* 466 * d¶ðÍCe[^[ú»462 * 応答電文解析イテレーター初期化 467 463 */ 468 464 ER ecn_itr_ini(T_ENUM_EPC *pk_itr, T_EDATA *pk_esv) … … 476 472 pk_itr->pk_esv = pk_esv; 477 473 pk_itr->count = pk_esv->hdr.edata.opc; 478 /* ¡ÌubNÅÌvpeB*/479 pk_itr->got_ct = 0; /* ¡ÌubNÅAÇÝæÁ½*/480 pk_itr->next_blk_ct = 0; /* ã±ubN*/481 pk_itr->is_eof = 0; /* I[ÉBµ½Añ0 */474 /* 今のブロックでのプロパティ総数 */ 475 pk_itr->got_ct = 0; /* 今のブロックで、読み取った数 */ 476 pk_itr->next_blk_ct = 0; /* 後続ブロック数 */ 477 pk_itr->is_eof = 0; /* 終端に達した時、非0 */ 482 478 pk_itr->cur = offsetof(T_ECN_EDT_HDR, ecn_prp); 483 479 484 480 switch (pk_esv->hdr.edata.esv) { 485 case ESV_SET_GET: /* 0x6E vpeBl«ÝEÇÝoµv*/486 case ESV_SET_GET_RES: /* 0x7E vpeBl«ÝEÇÝoµ*/487 case ESV_SET_GET_SNA: /* 0x5E vpeBl«ÝEÇÝoµsÂ*/481 case ESV_SET_GET: /* 0x6E プロパティ値書き込み・読み出し要求 */ 482 case ESV_SET_GET_RES: /* 0x7E プロパティ値書き込み・読み出し応答 */ 483 case ESV_SET_GET_SNA: /* 0x5E プロパティ値書き込み・読み出し不可応答 */ 488 484 pk_itr->next_blk_ct ++; 489 485 default: … … 495 491 496 492 /* 497 * d¶ðÍCe[^[CNg493 * 応答電文解析イテレーターインクリメント 498 494 */ 499 495 ER ecn_itr_nxt(T_ENUM_EPC *pk_itr, uint8_t *p_epc, uint8_t *p_pdc, void *p_edt) … … 517 513 518 514 if (pk_itr->is_eof) 519 return E_BOVR; /* f[^I¹*/515 return E_BOVR; /* データ終了 */ 520 516 if ( pk_itr->count <= pk_itr->got_ct 521 517 && pk_itr->next_blk_ct < 1) { 522 pk_itr->is_eof = 1; /* I[ÉBµ½Añ0 */523 return E_BOVR; /* f[^I¹*/518 pk_itr->is_eof = 1; /* 終端に達した時、非0 */ 519 return E_BOVR; /* データ終了 */ 524 520 } 525 521 526 522 a_fbs_id.ptr = (T_ECN_FST_BLK *)pk_itr->pk_esv; 527 523 528 /* ³ÌJ[\ÊuðÛ¶µACe[^ÌJ[\ÊuÉ·é*/524 /* 元のカーソル位置を保存し、イテレータのカーソル位置にする */ 529 525 a_rd_bak = a_fbs_id.ptr->hdr.rd; 530 526 a_fbs_id.ptr->hdr.rd = pk_itr->cur; … … 534 530 #endif 535 531 if (pk_itr->count <= pk_itr->got_ct && 0 < pk_itr->next_blk_ct) { 536 /* ubNÉÚ®*/532 /* 次ブロックに移動 */ 537 533 pk_itr->next_blk_ct --; 538 pk_itr->count = 0; /* ¡ÌubNÅÌvpeB*/539 pk_itr->got_ct = 0; /* ¡ÌubNÅAÇÝæÁ½*/540 541 /* ubNÌvpeBðÇÝæé*/534 pk_itr->count = 0; /* 今のブロックでのプロパティ総数 */ 535 pk_itr->got_ct = 0; /* 今のブロックで、読み取った数 */ 536 537 /* 次ブロックのプロパティ数を読み取る */ 542 538 a_rd_len = 0; 543 539 a_ret = _ecn_fbs_get_data(a_fbs_id, &a_ecn_prp.pdc, 1, &a_rd_len); … … 545 541 goto lb_except; 546 542 if (0 < a_rd_len) { 547 pk_itr->count = a_ecn_prp.pdc; /* ¡ÌubNÅÌvpeB*/543 pk_itr->count = a_ecn_prp.pdc; /* 今のブロックでのプロパティ総数 */ 548 544 } 549 a_ret = E_BOVR; /* f[^I¹*/545 a_ret = E_BOVR; /* データ終了 */ 550 546 goto lb_finally; 551 547 } 552 548 553 /* vpeBR[hÆf[^TCYðÇÝæé*/549 /* プロパティコードとデータサイズを読み取る */ 554 550 memset(&a_ecn_prp, 0, sizeof(a_ecn_prp)); 555 551 a_rd_len = 0; … … 560 556 ECN_DBG_PUT( "ecn_itr_nxt() ecn_prp read fault." 561 557 " rd.cur=%d", pk_itr->cur ); 562 pk_itr->is_eof = 1; /* I[ÉBµ½Añ0 */563 a_ret = E_BOVR; /* f[^I¹*/558 pk_itr->is_eof = 1; /* 終端に達した時、非0 */ 559 a_ret = E_BOVR; /* データ終了 */ 564 560 goto lb_finally; 565 561 } … … 568 564 569 565 if (0 < a_ecn_prp.pdc) { 570 /* tf[^ðÇÝæé*/566 /* 付随データを読み取る */ 571 567 a_rd_len = 0; 572 568 a_ret = _ecn_fbs_get_data(a_fbs_id, p_edt, a_ecn_prp.pdc, &a_rd_len); … … 576 572 ECN_DBG_PUT( "ecn_itr_nxt() edt read fault." 577 573 " rd.cur=%d,epc=0x%02X,pdc=%u", pk_itr->cur, a_ecn_prp.epc , a_ecn_prp.pdc ); 578 pk_itr->is_eof = 1; /* I[ÉBµ½Añ0 */579 a_ret = E_BOVR; /* f[^I¹*/574 pk_itr->is_eof = 1; /* 終端に達した時、非0 */ 575 a_ret = E_BOVR; /* データ終了 */ 580 576 goto lb_finally; 581 577 } … … 588 584 589 585 lb_finally: 590 /* Ce[^ÌJ[\ÊuðXV*/586 /* イテレータのカーソル位置を更新 */ 591 587 pk_itr->cur = a_fbs_id.ptr->hdr.rd; 592 588 593 589 lb_except: 594 /* ³ÌJ[\ÊuÉß·*/590 /* 元のカーソル位置に戻す */ 595 591 a_fbs_id.ptr->hdr.rd = a_rd_bak; 596 592 return a_ret; … … 598 594 599 595 /* 600 * d¶Ò¿ÌèÝM596 * 応答電文待ちの割り込み送信 601 597 */ 602 598 ER ecn_brk_wai(const void *p_dat, int fa_datsz) 603 599 { 604 600 ER a_ret; 605 ECN_FBS_ID a_fbs_id = { 0 }; /* vd¶p*/606 607 /* d¶Ò¿ÌèÝd¶ì¬*/601 ECN_FBS_ID a_fbs_id = { 0 }; /* 要求電文用メモリ */ 602 603 /* 応答電文待ちの割り込み電文作成 */ 608 604 a_ret = _ecn_mk_brk_wai(&a_fbs_id, p_dat, fa_datsz); 609 605 if (a_ret) 610 606 return a_ret; 611 607 612 /* èÝM*/608 /* 割り込み送信 */ 613 609 a_ret = _ecn_tsk_snd_mbx(a_fbs_id, true); 614 610 if (a_ret) { … … 618 614 } 619 615 620 /* ³íI¹*/616 /* 正常終了 */ 621 617 return a_ret; 622 618 623 619 lb_except: 624 /* f[^쬸sµ½çÌæðú*/620 /* データ作成失敗したら領域解放 */ 625 621 if (a_fbs_id.ptr) 626 622 _ecn_fbs_del(a_fbs_id); … … 630 626 631 627 /* 632 * èÝf[^Ìæ¾628 * 割り込みデータの取得 633 629 */ 634 630 ER ecn_get_brk_dat(T_EDATA *pk_esv, void *p_buf, int fa_bufsz, int *p_datsz) … … 650 646 } 651 647 652 /* ÇÝæèÊuðæªÉß·*/648 /* 読み取り位置を先頭に戻す */ 653 649 a_ret = _ecn_fbs_set_rpos(a_fbs, 0); 654 650 if (a_ret) { … … 658 654 } 659 655 660 /* tf[^ðÇÝÞ*/656 /* 付随データを読み込む */ 661 657 if (p_buf && 0 < fa_bufsz) { 662 658 a_len = 0; … … 675 671 #ifndef ECN_USER_DATA_PROP_SET 676 672 /* 677 * f[^ÝèÖ673 * データ設定関数 678 674 */ 679 675 int ecn_data_prop_set(const EPRPINIB *item, const void *src, int size, bool_t *anno) … … 693 689 #ifndef ECN_USER_DATA_PROP_GET 694 690 /* 695 * f[^æ¾Ö691 * データ取得関数 696 692 */ 697 693 int ecn_data_prop_get(const EPRPINIB *item, void *dst, int size) -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.