Changeset 321 for EcnlProtoTool/trunk/mrbgems/mruby-ecnl/src/echonet.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.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 */ … … 62 47 63 48 /* 64 * ECHONET Lite ãµã¼ãã¹å¦çéå§49 * ECHONET Liteサービス処理開始 65 50 */ 66 51 ER ecn_sta_svc(ecnl_svc_task_t *svc) … … 72 57 73 58 /* 74 * ECHONETãªãã¸ã§ã¯ãåç 75 § 76 * å¼æ° 77 * ID fa_eobjid ECHONETãªãã¸ã§ã¯ãID 78 * T_REOBJ *fp_eobj ECHONETãªãã¸ã§ã¯ãã®è¨å®å 79 容ã³ãã¼å 80 59 * ECHONETオブジェクト参照 60 * 引数 61 * ID fa_eobjid ECHONETオブジェクトID 62 * T_REOBJ *fp_eobj ECHONETオブジェクトの設定内容コピー先 81 63 * 82 * eobjidã§æå®ããECHONETãªãã¸ã§ã¯ãã®è¨å®å 83 容ãåç 84 §ããã 85 * åç 86 §ããè¨å®å 87 容ã¯pk_eobjã«æå®ããã¡ã¢ãªã«è¿ãããã 64 * eobjidで指定したECHONETオブジェクトの設定内容を参照する。 65 * 参照した設定内容はpk_eobjに指定したメモリに返される。 88 66 */ 89 67 ER ecn_ref_eobj(ecnl_svc_task_t *svc, ID fa_eobjid, T_REOBJ *fp_eobj) … … 92 70 93 71 if (!fp_eobj) 94 return E_PAR; /* ãã©ã¡ã¼ã¿ã¨ã©ã¼*/72 return E_PAR; /* パラメータエラー */ 95 73 96 74 if ((fa_eobjid <= 0) || (fa_eobjid > svc->tmax_eobjid)) 97 return E_OBJ; /* ãªãã¸ã§ã¯ãæªç»é²*/75 return E_OBJ; /* オブジェクト未登録 */ 98 76 99 77 p_obj = echonet_svctask_get_eobjinib(svc, fa_eobjid); … … 105 83 106 84 /* 107 * ECHONETããããã£åç 108 § 109 * å¼æ° 110 * ID fa_eobjid ECHONETãªãã¸ã§ã¯ãID 111 * uint8_t fa_epc ããããã£ã³ã¼ã 112 * T_RPRP *fp_eprp ECHONETãªãã¸ã§ã¯ãã®ããããã£è¨å®å 113 容ã³ãã¼å 114 85 * ECHONETプロパティ参照 86 * 引数 87 * ID fa_eobjid ECHONETオブジェクトID 88 * uint8_t fa_epc プロパティコード 89 * T_RPRP *fp_eprp ECHONETオブジェクトのプロパティ設定内容コピー先 115 90 * 116 * eobjidã§æå®ããECHONETãªãã¸ã§ã¯ãã®ãepcã§æå®ããããããã£ã®è¨å®å 117 容ãåç 118 §ããã 119 * åç 120 §ããè¨å®å 121 容ã¯pk_eprpã«æå®ããã¡ã¢ãªã«è¿ãããã 91 * eobjidで指定したECHONETオブジェクトの、epcで指定したプロパティの設定内容を参照する。 92 * 参照した設定内容はpk_eprpに指定したメモリに返される。 122 93 */ 123 94 ER ecn_ref_eprp(ecnl_svc_task_t *svc, ID fa_eobjid, uint8_t fa_epc, T_RPRP *fp_eprp) … … 128 99 129 100 if (!fp_eprp) 130 return E_PAR; /* ãã©ã¡ã¼ã¿ã¨ã©ã¼*/101 return E_PAR; /* パラメータエラー */ 131 102 132 103 if ((fa_eobjid <= 0) || (fa_eobjid > svc->tmax_eobjid)) 133 return E_OBJ; /* ãªãã¸ã§ã¯ãæªç»é²*/104 return E_OBJ; /* オブジェクト未登録 */ 134 105 135 106 p_obj = svc->eobjinib_table[fa_eobjid - 1]; 136 107 137 /* eojã®æã¤ããããã£åæåå®ç¾©é 138 åããæ¤ç´¢ */ 108 /* eojの持つプロパティ初期化定義配列から検索 */ 139 109 p = p_obj->eprp; 140 110 for (i = 0; i < p_obj->eprpcnt; i++, p++) { … … 145 115 } 146 116 147 return E_PAR; /* ãã©ã¡ã¼ã¿ã¨ã©ã¼ */ 148 } 149 150 /* 151 * ããããã£å¤æ¸ãè¾¼ã¿è¦æ±ï¼å¿çä¸è¦ï¼é»æä½æ 152 * å¼æ° 153 * T_EDATA **ppk_esv åå¾ããé»æã®æ ¼ç´å 154 155 * ID fa_deoj å®å 156 ã®ECHONETãªãã¸ã§ã¯ãID 157 * uint8_t fa_epc ããããã£ã³ã¼ã 158 * uint8_t fa_pdc ããããã£å¤ãã¼ã¿ãµã¤ãº 159 * const void *p_edt ããããã£å¤ãã¼ã¿ 117 return E_PAR; /* パラメータエラー */ 118 } 119 120 /* 121 * プロパティ値書き込み要求(応答不要)電文作成 122 * 引数 123 * T_EDATA **ppk_esv 取得した電文の格納先 124 * ID fa_deoj 宛先のECHONETオブジェクトID 125 * uint8_t fa_epc プロパティコード 126 * uint8_t fa_pdc プロパティ値データサイズ 127 * const void *p_edt プロパティ値データ 160 128 * 161 * ããããã£å¤æ¸ãè¾¼ã¿è¦æ±ï¼å¿çä¸è¦ï¼é»æãä½æããã 162 * é»æã¯deojã§æå®ããECHONETãªãã¸ã§ã¯ããå®å 163 ã¨ãã 164 * é»æã®åãã®ããããã£å¤ã¨ãã¦ãepcã¨pdcãp_edtã§æå®ããã 165 * ããããã£ã³ã¼ãããã¼ã¿ãµã¤ãºããã¼ã¿ãé»æã«è¨å®ããã 166 * ä½æããé»æã®å 167 é ã¢ãã¬ã¹ã¯ãã¤ã³ã¿çµç±ã§è¿ãããã 129 * プロパティ値書き込み要求(応答不要)電文を作成する。 130 * 電文はdeojで指定したECHONETオブジェクトを宛先とし、 131 * 電文の初めのプロパティ値として、epcとpdc、p_edtで指定された 132 * プロパティコード、データサイズ、データを電文に設定する。 133 * 作成した電文の先頭アドレスはポインタ経由で返される。 168 134 */ 169 135 ER ecn_esv_seti(ecnl_svc_task_t *svc, T_EDATA **ppk_esv, ID fa_deoj, uint8_t fa_epc, uint8_t fa_pdc, … … 174 140 175 141 /* 176 * ããããã£å¤æ¸ãè¾¼ã¿è¦æ±ï¼å¿çè¦ï¼é»æä½æ 177 * å¼æ° 178 * T_EDATA **ppk_esv åå¾ããé»æã®æ ¼ç´å 179 180 * ID fa_deoj å®å 181 ã®ECHONETãªãã¸ã§ã¯ãID 182 * uint8_t fa_epc ããããã£ã³ã¼ã 183 * uint8_t fa_pdc ããããã£å¤ãã¼ã¿ãµã¤ãº 184 * const void *p_edt ããããã£å¤ãã¼ã¿ 142 * プロパティ値書き込み要求(応答要)電文作成 143 * 引数 144 * T_EDATA **ppk_esv 取得した電文の格納先 145 * ID fa_deoj 宛先のECHONETオブジェクトID 146 * uint8_t fa_epc プロパティコード 147 * uint8_t fa_pdc プロパティ値データサイズ 148 * const void *p_edt プロパティ値データ 185 149 * 186 * ããããã£å¤æ¸ãè¾¼ã¿è¦æ±ï¼å¿çè¦ï¼é»æãä½æããã 187 * é»æã¯deojã§æå®ããECHONETãªãã¸ã§ã¯ããå®å 188 ã¨ãã 189 * é»æã®åãã®ããããã£å¤ã¨ãã¦ãepcã¨pdcãp_edtã§æå®ããã 190 * ããããã£ã³ã¼ãããã¼ã¿ãµã¤ãºããã¼ã¿ãé»æã«è¨å®ããã 191 * ä½æããé»æã®å 192 é ã¢ãã¬ã¹ã¯ãã¤ã³ã¿çµç±ã§è¿ãããã 150 * プロパティ値書き込み要求(応答要)電文を作成する。 151 * 電文はdeojで指定したECHONETオブジェクトを宛先とし、 152 * 電文の初めのプロパティ値として、epcとpdc、p_edtで指定された 153 * プロパティコード、データサイズ、データを電文に設定する。 154 * 作成した電文の先頭アドレスはポインタ経由で返される。 193 155 */ 194 156 ER ecn_esv_setc(ecnl_svc_task_t *svc, T_EDATA **ppk_esv, ID fa_deoj, uint8_t fa_epc, uint8_t fa_pdc, … … 199 161 200 162 /* 201 * ããããã£å¤èªã¿åºãè¦æ±é»æä½æ 202 * å¼æ° 203 * T_EDATA **ppk_esv åå¾ããé»æã®æ ¼ç´å 204 205 * ID fa_deoj å®å 206 ã®ECHONETãªãã¸ã§ã¯ãID 207 * uint8_t fa_epc ããããã£ã³ã¼ã 163 * プロパティ値読み出し要求電文作成 164 * 引数 165 * T_EDATA **ppk_esv 取得した電文の格納先 166 * ID fa_deoj 宛先のECHONETオブジェクトID 167 * uint8_t fa_epc プロパティコード 208 168 * 209 * ããããã£å¤èªã¿åºãè¦æ±é»æãä½æããã 210 * é»æã¯deojã§æå®ããECHONETãªãã¸ã§ã¯ããå®å 211 ã¨ãã 212 * é»æã®åãã®ããããã£å¤ã¨ãã¦ãepcã§æå®ããã 213 * ããããã£ã³ã¼ããé»æã«è¨å®ããã 214 * ä½æããé»æã®å 215 é ã¢ãã¬ã¹ã¯ãã¤ã³ã¿çµç±ã§è¿ãããã 169 * プロパティ値読み出し要求電文を作成する。 170 * 電文はdeojで指定したECHONETオブジェクトを宛先とし、 171 * 電文の初めのプロパティ値として、epcで指定された 172 * プロパティコードを電文に設定する。 173 * 作成した電文の先頭アドレスはポインタ経由で返される。 216 174 */ 217 175 ER ecn_esv_get(ecnl_svc_task_t *svc, T_EDATA **ppk_esv, ID fa_deoj, uint8_t fa_epc) … … 221 179 222 180 /* 223 * ããããã£å¤éç¥è¦æ±é»æä½æ 224 * å¼æ° 225 * T_EDATA **ppk_esv åå¾ããé»æã®æ ¼ç´å 226 227 * ID fa_deoj å®å 228 ã®ECHONETãªãã¸ã§ã¯ãID 229 * uint8_t fa_epc ããããã£ã³ã¼ã 181 * プロパティ値通知要求電文作成 182 * 引数 183 * T_EDATA **ppk_esv 取得した電文の格納先 184 * ID fa_deoj 宛先のECHONETオブジェクトID 185 * uint8_t fa_epc プロパティコード 230 186 * 231 * ããããã£å¤éç¥è¦æ±é»æãä½æããã 232 * é»æã¯deojã§æå®ããECHONETãªãã¸ã§ã¯ããå®å 233 ã¨ãã 234 * é»æã®åãã®ããããã£å¤ã¨ãã¦ãepcã§æå®ããã 235 * ããããã£ã³ã¼ããé»æã«è¨å®ããã 236 * ä½æããé»æã®å 237 é ã¢ãã¬ã¹ã¯ãã¤ã³ã¿çµç±ã§è¿ãããã 187 * プロパティ値通知要求電文を作成する。 188 * 電文はdeojで指定したECHONETオブジェクトを宛先とし、 189 * 電文の初めのプロパティ値として、epcで指定された 190 * プロパティコードを電文に設定する。 191 * 作成した電文の先頭アドレスはポインタ経由で返される。 238 192 */ 239 193 ER ecn_esv_inf_req(ecnl_svc_task_t *svc, T_EDATA **ppk_esv, ID fa_deoj, uint8_t fa_epc) … … 243 197 244 198 /* 245 * ããããã£å¤æ¸ãè¾¼ã¿ã»èªã¿åºãè¦æ±é»æä½æ 246 * å¼æ° 247 * T_EDATA **ppk_esv åå¾ããé»æã®æ ¼ç´å 248 249 * ID fa_deoj å®å 250 ã®ECHONETãªãã¸ã§ã¯ãID 251 * uint8_t fa_epc ããããã£ã³ã¼ã 252 * uint8_t fa_pdc ããããã£å¤ãã¼ã¿ãµã¤ãº 253 * const void *p_edt ããããã£å¤ãã¼ã¿ 199 * プロパティ値書き込み・読み出し要求電文作成 200 * 引数 201 * T_EDATA **ppk_esv 取得した電文の格納先 202 * ID fa_deoj 宛先のECHONETオブジェクトID 203 * uint8_t fa_epc プロパティコード 204 * uint8_t fa_pdc プロパティ値データサイズ 205 * const void *p_edt プロパティ値データ 254 206 * 255 * ããããã£å¤æ¸ãè¾¼ã¿ã»èªã¿åºãè¦æ±é»æãä½æããã 256 * é»æã¯deojã§æå®ããECHONETãªãã¸ã§ã¯ããå®å 257 ã¨ãã 258 * é»æã®åãã®ããããã£å¤ã¨ãã¦ãepcã¨pdcãp_edtã§æå®ããã 259 * ããããã£ã³ã¼ãããã¼ã¿ãµã¤ãºããã¼ã¿ãé»æã«è¨å®ããã 260 * ä½æããé»æã®å 261 é ã¢ãã¬ã¹ã¯ãã¤ã³ã¿çµç±ã§è¿ãããã 207 * プロパティ値書き込み・読み出し要求電文を作成する。 208 * 電文はdeojで指定したECHONETオブジェクトを宛先とし、 209 * 電文の初めのプロパティ値として、epcとpdc、p_edtで指定された 210 * プロパティコード、データサイズ、データを電文に設定する。 211 * 作成した電文の先頭アドレスはポインタ経由で返される。 262 212 */ 263 213 ER ecn_esv_set_get(ecnl_svc_task_t *svc, T_EDATA **ppk_esv, ID fa_deoj, uint8_t fa_epc, uint8_t fa_pdc, … … 268 218 269 219 /* 270 * ããããã£å¤æ¸ãè¾¼ã¿ã»èªã¿åºãè¦æ±é»æä½æï¼æãè¿ãæå® 271 * ããããã£å¤æ¸ãè¾¼ã¿ã»èªã¿åºãè¦æ±é»æä½æä¸ã®ãæ¸ãè¾¼ã¿ããããã£é 272 åãçµã㦠273 * èªã¿åºãããããã£é 274 åã«ç§»ãæã«ç¨ããã 220 * プロパティ値書き込み・読み出し要求電文作成:折り返し指定 221 * プロパティ値書き込み・読み出し要求電文作成中の、書き込みプロパティ配列を終えて 222 * 読み出しプロパティ配列に移る時に用いる。 275 223 */ 276 224 ER ecn_trn_set_get(mrb_state *mrb, T_EDATA *ppk_esv, int *p_trn_pos) … … 283 231 return E_PAR; 284 232 285 /* ããããã£èªã¿è¾¼ã¿ä»¶æ°æ¸ãè¾¼ã¿æã®ãããæ 286 å ±ãè¨é² */ 233 /* プロパティ読み込み件数書き込み時のヘッド情報を記録 */ 287 234 *p_trn_pos = _ecn_fbs_get_datalen(*(ECN_FBS_ID *)&ppk_esv); 288 235 289 /* å¿çé»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å ã»ãã®æç¹ã§ã®å¿çé»æä¸ããããã£ä»¶æ°ãè¨é²*/236 /* 応答電文用メモリにデータ追加・この時点での応答電文中プロパティ件数を記録 */ 290 237 a_ret = _ecn_fbs_add_data_ex(mrb, *(ECN_FBS_ID *)&ppk_esv, &ppk_esv->hdr.edata.opc, 1); 291 238 if (a_ret) { … … 294 241 } 295 242 296 /* å¿çé»æä¸ããããã£ä»¶æ°ã 0 ã«æ»ãï¼ä»å¾ãçµäºæå®ããã¾ã§ã¯èªã¿åºãããããã£ä»¶æ°ã«ãªãï¼*/243 /* 応答電文中プロパティ件数を 0 に戻す(今後、終了指定するまでは読み出しプロパティ件数になる) */ 297 244 ppk_esv->hdr.edata.opc = 0; 298 245 … … 301 248 302 249 /* 303 * ããããã£å¤æ¸ãè¾¼ã¿ã»èªã¿åºãè¦æ±é»æä½æï¼çµäºæå® 304 * ããããã£å¤æ¸ãè¾¼ã¿ã»èªã¿åºãè¦æ±é»æä½æä¸ã®ãèªã¿åºãããããã£é 305 åãçµããæã«ç¨ããã 250 * プロパティ値書き込み・読み出し要求電文作成:終了指定 251 * プロパティ値書き込み・読み出し要求電文作成中の、読み出しプロパティ配列を終える時に用いる。 306 252 */ 307 253 ER ecn_end_set_get(mrb_state *mrb, T_EDATA *ppk_esv, int fa_trn_pos) … … 314 260 return E_PAR; 315 261 316 /* ãã®æç¹ã§ã®å¿çé»æä¸ããããã£ä»¶æ°(èªã¿åºãããããã£ä»¶æ°)ãä¿æ*/262 /* この時点での応答電文中プロパティ件数(読み出しプロパティ件数)を保持 */ 317 263 a_rd_opc = ppk_esv->hdr.edata.opc; 318 264 319 /* å¿çé»æä¸ããããã£ä»¶æ°(æ¸ãè¾¼ã¿ããããã£ä»¶æ°)ãä¿åä½ç½®ããèªã¿åã*/265 /* 応答電文中プロパティ件数(書き込みプロパティ件数)を保存位置から読み取り */ 320 266 a_wr_opc = _ecn_fbs_peek(mrb, *(ECN_FBS_ID *)&ppk_esv, fa_trn_pos); 321 267 if (a_wr_opc < 0) { … … 324 270 } 325 271 326 /* å¿çé»æä¸ããããã£ä»¶æ°(æ¸ãè¾¼ã¿ããããã£ä»¶æ°)ã復å 327 */ 272 /* 応答電文中プロパティ件数(書き込みプロパティ件数)を復元 */ 328 273 ppk_esv->hdr.edata.opc = (uint8_t)a_wr_opc; 329 274 330 /* å¿çé»æä¸ããããã£ä»¶æ°(èªã¿åºãããããã£ä»¶æ°)ãä¿åä½ç½®ã«æ¸ãè¾¼ã¿*/275 /* 応答電文中プロパティ件数(読み出しプロパティ件数)を保存位置に書き込み */ 331 276 a_ret = _ecn_fbs_poke(mrb, *(ECN_FBS_ID *)&ppk_esv, fa_trn_pos, a_rd_opc); 332 277 if (a_ret) { … … 339 284 340 285 /* 341 * ããããã£å¤éç¥ï¼å¿çè¦ï¼é»æä½æ 342 * å¼æ° 343 * T_EDATA **ppk_esv åå¾ããé»æã®æ ¼ç´å 344 345 * ID fa_deoj å®å 346 ã®ECHONETãªãã¸ã§ã¯ãID 347 * ID fa_seoj éä¿¡å 348 ã®ECHONETãªãã¸ã§ã¯ãID 349 * uint8_t fa_sepc éä¿¡å 350 ã®ããããã£ã³ã¼ã 286 * プロパティ値通知(応答要)電文作成 287 * 引数 288 * T_EDATA **ppk_esv 取得した電文の格納先 289 * ID fa_deoj 宛先のECHONETオブジェクトID 290 * ID fa_seoj 送信元のECHONETオブジェクトID 291 * uint8_t fa_sepc 送信元のプロパティコード 351 292 */ 352 293 ER ecn_esv_infc(ecnl_svc_task_t *svc, T_EDATA **ppk_esv, ID fa_deoj, ID fa_seoj, uint8_t fa_sepc) … … 356 297 357 298 /* 358 * è¦æ±é»æã¸ã®ããããã£æå®è¿½å (ããããã£ãã¼ã¿ãä»éããªãå ´åã«ç¨ãã)299 * 要求電文へのプロパティ指定追加 (プロパティデータが付随しない場合に用いる) 359 300 */ 360 301 ER ecn_add_epc(mrb_state *mrb, T_EDATA *pk_esv, uint8_t epc) … … 364 305 365 306 /* 366 * è¦æ±é»æã¸ã®ããããã£ãã¼ã¿è¿½å (ããããã£ããã³ä»éãã¼ã¿ã追å ãã)307 * 要求電文へのプロパティデータ追加 (プロパティおよび付随データを追加する) 367 308 */ 368 309 ER ecn_add_edt(mrb_state *mrb, T_EDATA *pk_esv, uint8_t fa_epc, uint8_t fa_pdc, const void *p_edt) … … 373 314 374 315 if (!pk_esv) 375 return E_PAR; /* åå¾ããFBS_IDã®æ ¼ç´å 376 ãNULL */ 316 return E_PAR; /* 取得したFBS_IDの格納先がNULL */ 377 317 if (ECHONET_MEMPOOL_BLOCK_SIZE <= fa_pdc) 378 return E_PAR; /* ããããã£å¤ãµã¤ãºã大ãããã*/318 return E_PAR; /* プロパティ値サイズが大きすぎる */ 379 319 if (!p_edt && 0 < fa_pdc) 380 return E_PAR; /* ããããã£å¤ãµã¤ãºã1以ä¸ãªã®ã«ãã¼ã¿ãã¤ã³ã¿ãNULL */320 return E_PAR; /* プロパティ値サイズが1以上なのにデータポインタがNULL */ 381 321 382 322 a_fbs_id.ptr = (T_ECN_FST_BLK *)pk_esv; 383 323 if (((T_EDATA *)a_fbs_id.ptr)->hdr.edata.opc == 0xFF) 384 return E_PAR; /* ããããã£ãå¤ããã*/385 386 /* è¦æ±é»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å*/324 return E_PAR; /* プロパティが多すぎる */ 325 326 /* 要求電文用メモリにデータ追加 */ 387 327 memset(&a_ecn_prp, 0, sizeof(a_ecn_prp)); 388 328 a_ecn_prp.epc = fa_epc; … … 395 335 } 396 336 if (0 < fa_pdc) { 397 /* ä»éãã¼ã¿è¿½å*/337 /* 付随データ追加 */ 398 338 a_ret = _ecn_fbs_add_data_ex(mrb, a_fbs_id, p_edt, fa_pdc); 399 339 if (a_ret) { … … 403 343 } 404 344 } 405 /* ããããã£æ°ã¤ã³ã¯ãªã¡ã³ã*/345 /* プロパティ数インクリメント */ 406 346 ((T_EDATA *)a_fbs_id.ptr)->hdr.edata.opc++; 407 347 … … 411 351 412 352 /* 413 * è¦æ±é»æã®éä¿¡ 414 * esvã§æå®ãããè¦æ±é»æãéä¿¡ããã 415 * é»æã«æå®ãããå®å 416 ããéä¿¡ã¬ã¤ã¤ã¼ã¢ãã¬ã¹ãç¹å®ããUDPãã±ããã¨ãã¦éä¿¡ããã 353 * 要求電文の送信 354 * esvで指定された要求電文を送信する。 355 * 電文に指定された宛先から通信レイヤーアドレスを特定し、UDPパケットとして送信する。 417 356 */ 418 357 ER ecn_snd_esv(ecnl_svc_task_t *svc, T_EDATA *pk_esv) … … 424 363 425 364 /* 426 * å¿çé»æã®åä¿¡ãã¼ãªã³ã° 427 * å¿çé»æãåä¿¡ããã®ãå¾ 428 ã¤ã 429 * åä¿¡ããå¿çé»æã¯ppk_esvã§æå®ãããã¤ã³ã¿ã¼ã«å 430 é ã¢ãã¬ã¹ãè¿ãããã 431 * å¿çé»æã®åä¿¡ã®æç¡ã«ããããããå¾ 432 ããã«é¢æ°ãæããã 365 * 応答電文の受信ポーリング 366 * 応答電文を受信するのを待つ。 367 * 受信した応答電文はppk_esvで指定したポインターに先頭アドレスが返される。 368 * 応答電文の受信の有無にかかわらず、待たずに関数を抜ける。 433 369 */ 434 370 ER ecn_prcv_esv(ecnl_svc_task_t *svc, T_EDATA **ppk_esv) … … 451 387 452 388 /* 453 * å¿çé»æã®ç ´æ£389 * 応答電文の破棄 454 390 */ 455 391 ER ecn_rel_esv(mrb_state *mrb, T_EDATA *pk_esv) … … 464 400 465 401 /* 466 * å¿çé»æã®éä¿¡å 467 ãã¼ããåå¾ãã 402 * 応答電文の送信元ノードを取得する 468 403 */ 469 404 ID ecn_get_enod(ecnl_svc_task_t *svc, T_EDATA *pk_esv) … … 487 422 488 423 /* 489 * å¿çé»æã®éä¿¡å 490 æ©å¨ãªãã¸ã§ã¯ããåå¾ãã 424 * 応答電文の送信元機器オブジェクトを取得する 491 425 */ 492 426 ID ecn_get_eobj(ecnl_svc_task_t *svc, T_EDATA *pk_esv) … … 499 433 p_snod = _ecn_eno_fnd(svc, ((T_ECN_FST_BLK *)pk_esv)->hdr.sender.id); 500 434 if (p_snod != NULL) { 501 /* ãã¼ããããã¡ã¤ã«ã®å ´å*/435 /* ノードプロファイルの場合 */ 502 436 if ((p_esv->edata.seoj.eojx1 == EOJ_X1_PROFILE) 503 437 && (p_esv->edata.seoj.eojx2 == EOJ_X2_NODE_PROFILE)) { 504 438 p_sobj = p_snod->profile; 505 439 } 506 /* æ©å¨ãªãã¸ã§ã¯ãã®å ´å*/440 /* 機器オブジェクトの場合 */ 507 441 else { 508 442 p_sobj = _ecn_eoj_fnd(p_snod, &p_esv->edata.seoj); … … 520 454 521 455 /* 522 * å¿çé»æ解æã¤ãã¬ã¼ã¿ã¼åæå456 * 応答電文解析イテレーター初期化 523 457 */ 524 458 ER ecn_itr_ini(T_ENUM_EPC *pk_itr, T_EDATA *pk_esv) … … 532 466 pk_itr->pk_esv = pk_esv; 533 467 pk_itr->count = pk_esv->hdr.edata.opc; 534 /* ä»ã®ãããã¯ã§ã®ããããã£ç·æ°*/535 pk_itr->got_ct = 0; /* ä»ã®ãããã¯ã§ãèªã¿åã£ãæ°*/536 pk_itr->next_blk_ct = 0; /* å¾ç¶ãããã¯æ°*/537 pk_itr->is_eof = 0; /* çµç«¯ã«éããæãé0 */468 /* 今のブロックでのプロパティ総数 */ 469 pk_itr->got_ct = 0; /* 今のブロックで、読み取った数 */ 470 pk_itr->next_blk_ct = 0; /* 後続ブロック数 */ 471 pk_itr->is_eof = 0; /* 終端に達した時、非0 */ 538 472 pk_itr->cur = offsetof(T_ECN_EDT_HDR, ecn_prp); 539 473 540 474 switch (pk_esv->hdr.edata.esv) { 541 case ESV_SET_GET: /* 0x6E ããããã£å¤æ¸ãè¾¼ã¿ã»èªã¿åºãè¦æ±*/542 case ESV_SET_GET_RES: /* 0x7E ããããã£å¤æ¸ãè¾¼ã¿ã»èªã¿åºãå¿ç*/543 case ESV_SET_GET_SNA: /* 0x5E ããããã£å¤æ¸ãè¾¼ã¿ã»èªã¿åºãä¸å¯å¿ç*/475 case ESV_SET_GET: /* 0x6E プロパティ値書き込み・読み出し要求 */ 476 case ESV_SET_GET_RES: /* 0x7E プロパティ値書き込み・読み出し応答 */ 477 case ESV_SET_GET_SNA: /* 0x5E プロパティ値書き込み・読み出し不可応答 */ 544 478 pk_itr->next_blk_ct ++; 545 479 default: … … 551 485 552 486 /* 553 * å¿çé»æ解æã¤ãã¬ã¼ã¿ã¼ã¤ã³ã¯ãªã¡ã³ã487 * 応答電文解析イテレーターインクリメント 554 488 */ 555 489 ER ecn_itr_nxt(mrb_state *mrb, T_ENUM_EPC *pk_itr, uint8_t *p_epc, uint8_t *p_pdc, void *p_edt) … … 571 505 572 506 if (pk_itr->is_eof) 573 return E_BOVR; /* ãã¼ã¿çµäº*/507 return E_BOVR; /* データ終了 */ 574 508 if (pk_itr->count <= pk_itr->got_ct && pk_itr->next_blk_ct < 1) { 575 pk_itr->is_eof = 1; /* çµç«¯ã«éããæãé0 */576 return E_BOVR; /* ãã¼ã¿çµäº*/509 pk_itr->is_eof = 1; /* 終端に達した時、非0 */ 510 return E_BOVR; /* データ終了 */ 577 511 } 578 512 579 513 a_fbs_id.ptr = (T_ECN_FST_BLK *)pk_itr->pk_esv; 580 514 581 /* å 582 ã®ã«ã¼ã½ã«ä½ç½®ãä¿åããã¤ãã¬ã¼ã¿ã®ã«ã¼ã½ã«ä½ç½®ã«ãã */ 515 /* 元のカーソル位置を保存し、イテレータのカーソル位置にする */ 583 516 a_rd_bak = a_fbs_id.ptr->hdr.rd; 584 517 a_fbs_id.ptr->hdr.rd = pk_itr->cur; … … 588 521 #endif 589 522 if (pk_itr->count <= pk_itr->got_ct && 0 < pk_itr->next_blk_ct) { 590 /* 次ãããã¯ã«ç§»å*/523 /* 次ブロックに移動 */ 591 524 pk_itr->next_blk_ct --; 592 pk_itr->count = 0; /* ä»ã®ãããã¯ã§ã®ããããã£ç·æ°*/593 pk_itr->got_ct = 0; /* ä»ã®ãããã¯ã§ãèªã¿åã£ãæ°*/594 595 /* 次ãããã¯ã®ããããã£æ°ãèªã¿åã*/525 pk_itr->count = 0; /* 今のブロックでのプロパティ総数 */ 526 pk_itr->got_ct = 0; /* 今のブロックで、読み取った数 */ 527 528 /* 次ブロックのプロパティ数を読み取る */ 596 529 a_rd_len = 0; 597 530 a_ret = _ecn_fbs_get_data(mrb, a_fbs_id, &a_ecn_prp.pdc, 1, &a_rd_len); … … 599 532 goto lb_except; 600 533 if (0 < a_rd_len) { 601 pk_itr->count = a_ecn_prp.pdc; /* ä»ã®ãããã¯ã§ã®ããããã£ç·æ°*/534 pk_itr->count = a_ecn_prp.pdc; /* 今のブロックでのプロパティ総数 */ 602 535 } 603 a_ret = E_BOVR; /* ãã¼ã¿çµäº*/536 a_ret = E_BOVR; /* データ終了 */ 604 537 goto lb_finally; 605 538 } 606 539 607 /* ããããã£ã³ã¼ãã¨ãã¼ã¿ãµã¤ãºãèªã¿åã*/540 /* プロパティコードとデータサイズを読み取る */ 608 541 memset(&a_ecn_prp, 0, sizeof(a_ecn_prp)); 609 542 a_rd_len = 0; … … 613 546 if (a_rd_len < sizeof(a_ecn_prp)) { 614 547 ECN_DBG_PUT_1("ecn_itr_nxt() ecn_prp read fault. rd.cur=%d", pk_itr->cur); 615 pk_itr->is_eof = 1; /* çµç«¯ã«éããæãé0 */616 a_ret = E_BOVR; /* ãã¼ã¿çµäº*/548 pk_itr->is_eof = 1; /* 終端に達した時、非0 */ 549 a_ret = E_BOVR; /* データ終了 */ 617 550 goto lb_finally; 618 551 } … … 627 560 } 628 561 else { 629 /* ä»éãã¼ã¿ãèªã¿åã*/562 /* 付随データを読み取る */ 630 563 a_rd_len = 0; 631 564 a_ret = _ecn_fbs_get_data(mrb, a_fbs_id, p_edt, a_ecn_prp.pdc, &a_rd_len); … … 635 568 ECN_DBG_PUT_3("ecn_itr_nxt() edt read fault. rd.cur=%d,epc=0x%02X,pdc=%u", 636 569 pk_itr->cur, a_ecn_prp.epc , a_ecn_prp.pdc); 637 pk_itr->is_eof = 1; /* çµç«¯ã«éããæãé0 */638 a_ret = E_BOVR; /* ãã¼ã¿çµäº*/570 pk_itr->is_eof = 1; /* 終端に達した時、非0 */ 571 a_ret = E_BOVR; /* データ終了 */ 639 572 goto lb_finally; 640 573 } … … 648 581 649 582 lb_finally: 650 /* ã¤ãã¬ã¼ã¿ã®ã«ã¼ã½ã«ä½ç½®ãæ´æ°*/583 /* イテレータのカーソル位置を更新 */ 651 584 pk_itr->cur = a_fbs_id.ptr->hdr.rd; 652 585 653 586 lb_except: 654 /* å 655 ã®ã«ã¼ã½ã«ä½ç½®ã«æ»ã */ 587 /* 元のカーソル位置に戻す */ 656 588 a_fbs_id.ptr->hdr.rd = a_rd_bak; 657 589 return a_ret; … … 659 591 660 592 /* 661 * å¿çé»æå¾ 662 ã¡ã®å²ãè¾¼ã¿éä¿¡ 593 * 応答電文待ちの割り込み送信 663 594 */ 664 595 ER ecn_brk_wai(ecnl_svc_task_t *svc, const void *p_dat, int fa_datsz) 665 596 { 666 597 ER a_ret; 667 ECN_FBS_ID a_fbs_id = { 0 }; /* è¦æ±é»æç¨ã¡ã¢ãª */ 668 669 /* å¿çé»æå¾ 670 ã¡ã®å²ãè¾¼ã¿é»æä½æ */ 598 ECN_FBS_ID a_fbs_id = { 0 }; /* 要求電文用メモリ */ 599 600 /* 応答電文待ちの割り込み電文作成 */ 671 601 a_ret = _ecn_mk_brk_wai(svc, &a_fbs_id, p_dat, fa_datsz); 672 602 if (a_ret) 673 603 return a_ret; 674 604 675 /* å²ãè¾¼ã¿éä¿¡*/605 /* 割り込み送信 */ 676 606 a_ret = _ecn_tsk_snd_mbx(svc, a_fbs_id, true); 677 607 if (a_ret) { … … 681 611 } 682 612 683 /* æ£å¸¸çµäº*/613 /* 正常終了 */ 684 614 return a_ret; 685 615 686 616 lb_except: 687 /* ãã¼ã¿ä½æ失æãããé å解æ¾*/617 /* データ作成失敗したら領域解放 */ 688 618 if (a_fbs_id.ptr) 689 619 _ecn_fbs_del(svc->mrb, a_fbs_id); … … 693 623 694 624 /* 695 * å²ãè¾¼ã¿ãã¼ã¿ã®åå¾625 * 割り込みデータの取得 696 626 */ 697 627 ER ecn_get_brk_dat(mrb_state *mrb, T_EDATA *pk_esv, void *p_buf, int fa_bufsz, int *p_datsz) … … 713 643 } 714 644 715 /* èªã¿åãä½ç½®ãå 716 é ã«æ»ã */ 645 /* 読み取り位置を先頭に戻す */ 717 646 a_ret = _ecn_fbs_set_rpos(a_fbs, 0); 718 647 if (a_ret) { … … 722 651 } 723 652 724 /* ä»éãã¼ã¿ãèªã¿è¾¼ã*/653 /* 付随データを読み込む */ 725 654 if (p_buf && 0 < fa_bufsz) { 726 655 a_len = 0; … … 739 668 #ifndef ECN_USER_DATA_PROP_SET 740 669 /* 741 * ãã¼ã¿è¨å®é¢æ°670 * データ設定関数 742 671 */ 743 672 int ecn_data_prop_set(ecnl_svc_task_t *svc, const EPRPINIB *item, const void *src, int size, bool_t *anno) … … 757 686 #ifndef ECN_USER_DATA_PROP_GET 758 687 /* 759 * ãã¼ã¿åå¾é¢æ°688 * データ取得関数 760 689 */ 761 690 int ecn_data_prop_get(ecnl_svc_task_t *svc, const EPRPINIB *item, void *dst, int size)
Note:
See TracChangeset
for help on using the changeset viewer.