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