1 | # =====================================================================
|
---|
2 | #
|
---|
3 | # TOPPERS ECHONET Lite Communication Middleware
|
---|
4 | #
|
---|
5 | # Copyright (C) 2014-2017 Cores Co., Ltd. Japan
|
---|
6 | #
|
---|
7 | # ä¸è¨èä½æ¨©è
|
---|
8 | ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
|
---|
9 | # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹
|
---|
10 | # å¤ã»åé
|
---|
11 | å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
|
---|
12 | # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
|
---|
13 | # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
|
---|
14 | # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼
|
---|
15 | # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
|
---|
16 | # ç¨ã§ããå½¢ã§åé
|
---|
17 | å¸ããå ´åã«ã¯ï¼åé
|
---|
18 | å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨
|
---|
19 | # è
|
---|
20 | ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
|
---|
21 | # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
|
---|
22 | # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
|
---|
23 | # ç¨ã§ããªãå½¢ã§åé
|
---|
24 | å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
|
---|
25 | # ã¨ï¼
|
---|
26 | # (a) åé
|
---|
27 | å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è
|
---|
28 | ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
|
---|
29 | # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
|
---|
30 | # (b) åé
|
---|
31 | å¸ã®å½¢æ
|
---|
32 | ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã«
|
---|
33 | # å ±åãããã¨ï¼
|
---|
34 | # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
|
---|
35 | # 害ãããï¼ä¸è¨èä½æ¨©è
|
---|
36 | ããã³TOPPERSããã¸ã§ã¯ããå
|
---|
37 | 責ãããã¨ï¼
|
---|
38 | # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
|
---|
39 | # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
|
---|
40 | ããã³TOPPERSããã¸ã§ã¯ãã
|
---|
41 | # å
|
---|
42 | 責ãããã¨ï¼
|
---|
43 | #
|
---|
44 | # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
|
---|
45 | ã
|
---|
46 | # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
|
---|
47 | # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
|
---|
48 | # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã
|
---|
49 | # ã®è²¬ä»»ãè² ããªãï¼
|
---|
50 | #
|
---|
51 | # @(#) $Id$
|
---|
52 | #
|
---|
53 | # =====================================================================
|
---|
54 |
|
---|
55 | # =====================================================================
|
---|
56 | # echonet_cfg.hã®çæ
|
---|
57 | # =====================================================================
|
---|
58 |
|
---|
59 | $echonetCfgH = GenFile.new("echonet_cfg.h")
|
---|
60 | $echonetCfgH.add(<<EOS)
|
---|
61 | /* echonet_cfg.h */
|
---|
62 | #ifndef TOPPERS_ECHONET_CFG_H
|
---|
63 | #define TOPPERS_ECHONET_CFG_H
|
---|
64 |
|
---|
65 | #include "echonet_app_config.h"
|
---|
66 | EOS
|
---|
67 |
|
---|
68 | # ãã¼ããªã¹ãã®ä½æ
|
---|
69 | $ENOD_LIST = []
|
---|
70 | $LOCAL_NODE = []
|
---|
71 | $REMOTE_NODE = []
|
---|
72 |
|
---|
73 | $cfgData[:ECN_CRE_EOBJ].sort.each do |key, params|
|
---|
74 | # ãã¼ããããã¡ã¤ã«ãªãã¸ã§ã¯ãã®å ´å
|
---|
75 | if (params[:eobjatr] & $EOBJ_LOCAL_NODE) != 0
|
---|
76 | $LOCAL_NODE << key
|
---|
77 | # æ©å¨ãªãã¸ã§ã¯ãã®å ´å
|
---|
78 | elsif (params[:eobjatr] & ($EOBJ_SYNC_REMOTE_NODE | $EOBJ_ASYNC_REMOTE_NODE)) != 0
|
---|
79 | $REMOTE_NODE << key
|
---|
80 | end
|
---|
81 | end
|
---|
82 |
|
---|
83 | # ãã¼ã«ã«ã®ãã¼ããããã¡ã¤ã«ã¯ï¼ã¤ã ã
|
---|
84 | if $LOCAL_NODE.length != 1
|
---|
85 | error_exit("Local node must be only one.")
|
---|
86 | end
|
---|
87 |
|
---|
88 | $ENOD_LIST.concat($LOCAL_NODE)
|
---|
89 | $ENOD_LIST.concat($REMOTE_NODE)
|
---|
90 |
|
---|
91 | $echonetCfgH.add2("#define TNUM_ENODID #{$ENOD_LIST.length}")
|
---|
92 |
|
---|
93 | $echonetCfgH.add2("#define TNUM_EOBJID #{$cfgData[:ECN_CRE_EOBJ].length}")
|
---|
94 | $cfgData[:ECN_CRE_EOBJ].each do |key, params|
|
---|
95 | $echonetCfgH.add("#define #{params[:eobjid]} #{key}")
|
---|
96 | end
|
---|
97 | $echonetCfgH.add
|
---|
98 |
|
---|
99 | $cfgData[:ECN_CRE_EOBJ].each do |key, params|
|
---|
100 | eprp_list = []
|
---|
101 | prp_map_cnt = 3
|
---|
102 | # ãã¼ããããã¡ã¤ã«ã®å ´å
|
---|
103 | if (params[:eobjatr] & ($EOBJ_LOCAL_NODE | $EOBJ_SYNC_REMOTE_NODE | $EOBJ_ASYNC_REMOTE_NODE)) != 0
|
---|
104 | prp_map_cnt = prp_map_cnt + 5
|
---|
105 | end
|
---|
106 |
|
---|
107 | $cfgData[:ECN_DEF_EPRP].each do |key2, params2|
|
---|
108 | if params2[:eobjid] == params[:eobjid].str
|
---|
109 | eprp_list << params2[:eprpcd].val
|
---|
110 | end
|
---|
111 |
|
---|
112 | if (params2[:eprpcd] == 0x9D) || (params2[:eprpcd] == 0x9E) || (params2[:eprpcd] == 0x9F)
|
---|
113 | prp_map_cnt = prp_map_cnt - 1
|
---|
114 | end
|
---|
115 |
|
---|
116 | # ãã¼ããããã¡ã¤ã«ã®å ´å
|
---|
117 | if (params[:eobjatr] & ($EOBJ_LOCAL_NODE | $EOBJ_SYNC_REMOTE_NODE | $EOBJ_ASYNC_REMOTE_NODE)) != 0
|
---|
118 | if (params2[:eprpcd] >= 0xD3) && (params2[:eprpcd] <= 0xD7)
|
---|
119 | prp_map_cnt = prp_map_cnt - 1
|
---|
120 | end
|
---|
121 | end
|
---|
122 | end
|
---|
123 |
|
---|
124 | $echonetCfgH.add("#define TNUM_#{params[:eobjid]}_EPRPNO #{eprp_list.length + prp_map_cnt}")
|
---|
125 | end
|
---|
126 | $echonetCfgH.add
|
---|
127 |
|
---|
128 | $ENOD_LIST.each do |enodid|
|
---|
129 | eobj_count = 0
|
---|
130 | eobjid = $cfgData[:ECN_CRE_EOBJ][enodid][:eobjid].str
|
---|
131 |
|
---|
132 | $cfgData[:ECN_CRE_EOBJ].each do |key2, params2|
|
---|
133 | if params2[:enodid] == eobjid
|
---|
134 | eobj_count = eobj_count + 1
|
---|
135 | end
|
---|
136 | end
|
---|
137 |
|
---|
138 | $echonetCfgH.add("#define TNUM_#{$cfgData[:ECN_CRE_EOBJ][enodid][:eobjid]}_EOBJNO #{eobj_count}")
|
---|
139 | end
|
---|
140 | $echonetCfgH.add
|
---|
141 |
|
---|
142 | $echonetCfgH.add(<<EOS)
|
---|
143 | #ifndef TNUM_ENODADR
|
---|
144 | #define TNUM_ENODADR 100
|
---|
145 | #endif
|
---|
146 |
|
---|
147 | #endif /* TOPPERS_ECHONET_CFG_H */
|
---|
148 | EOS
|
---|
149 |
|
---|
150 | # =====================================================================
|
---|
151 | # echonet_cfg.cã®çæ
|
---|
152 | # =====================================================================
|
---|
153 |
|
---|
154 | $echonetCfgC = GenFile.new("echonet_cfg.c")
|
---|
155 | $echonetCfgC.add(<<EOS)
|
---|
156 | /* echonet_cfg.c */
|
---|
157 | #include <kernel.h>
|
---|
158 | #include <sil.h>
|
---|
159 | #include "echonet.h"
|
---|
160 | EOS
|
---|
161 |
|
---|
162 | #
|
---|
163 | # ã¤ã³ã¯ã«ã¼ããã£ã¬ã¯ãã£ãï¼#includeï¼
|
---|
164 | #
|
---|
165 | $echonetCfgC.add(<<EOS)
|
---|
166 | /*
|
---|
167 | * Include Directives (#include)
|
---|
168 | */
|
---|
169 | EOS
|
---|
170 | $includeFiles.each do |file|
|
---|
171 | $echonetCfgC.add("#include #{file}")
|
---|
172 | end
|
---|
173 | $echonetCfgC.add(<<EOS)
|
---|
174 | #include "echonet_cfg.h"
|
---|
175 | #include "kernel_cfg.h"
|
---|
176 |
|
---|
177 | EOS
|
---|
178 |
|
---|
179 | #
|
---|
180 | # ãªãã¸ã§ã¯ãã®IDçªå·ãä¿æããå¤æ°
|
---|
181 | #
|
---|
182 | if $USE_EXTERNAL_ID
|
---|
183 | $echonetCfgC.add("/*")
|
---|
184 | $echonetCfgC.add(" * Variables for Object ID")
|
---|
185 | $echonetCfgC.add(" */")
|
---|
186 | $echonetCfgC.add
|
---|
187 | $cfgData[:ECN_CRE_EOBJ].each do |key, params|
|
---|
188 | $echonetCfgC.add("const ID #{params[:eobjid]}_id = #{params[:eobjid].val};")
|
---|
189 | end
|
---|
190 | end
|
---|
191 |
|
---|
192 | #
|
---|
193 | # ECHONET Liteããããã£
|
---|
194 | #
|
---|
195 | $echonetCfgC.add(<<EOS)
|
---|
196 | /*
|
---|
197 | * ECHONET Lite Property Functions
|
---|
198 | */
|
---|
199 | EOS
|
---|
200 |
|
---|
201 | IncludeTrb("echonet_chk.trb")
|
---|
202 |
|
---|
203 | # ECHONET Liteããããã£åæåãããã¯ã®çæ
|
---|
204 | if $cfgData[:ECN_CRE_EOBJ].length > 0 && $cfgData[:ECN_DEF_EPRP].length > 0
|
---|
205 | $ENOD_LIST.each do |enodid|
|
---|
206 | $INST_LIST = []
|
---|
207 | $CLASS_LIST = []
|
---|
208 | eobjid = $cfgData[:ECN_CRE_EOBJ][enodid][:eobjid].str
|
---|
209 |
|
---|
210 | $cfgData[:ECN_CRE_EOBJ].each do |key, params|
|
---|
211 | if params[:enodid] == eobjid
|
---|
212 | $INST_LIST << key
|
---|
213 |
|
---|
214 | m = -1
|
---|
215 | $CLASS_LIST.each do |id|
|
---|
216 | if (params[:eojx1] == $cfgData[:ECN_CRE_EOBJ][id][:eojx1]) && (params[:eojx2] == $cfgData[:ECN_CRE_EOBJ][id][:eojx2])
|
---|
217 | m = id
|
---|
218 | end
|
---|
219 | end
|
---|
220 | if m == -1
|
---|
221 | $CLASS_LIST << key
|
---|
222 | end
|
---|
223 | end
|
---|
224 | end
|
---|
225 |
|
---|
226 | $echonetCfgC.add("/*")
|
---|
227 | $echonetCfgC.add(" * ã¤ã³ã¹ã¿ã³ã¹æ°")
|
---|
228 | $echonetCfgC.add(" */")
|
---|
229 | inst_list_len = $INST_LIST.length
|
---|
230 | $echonetCfgC.add("const uint8_t _echonet_#{$cfgData[:ECN_CRE_EOBJ][enodid][:eobjid]}_inst_count[] = {")
|
---|
231 | $echonetCfgC.add(" #{sprintf("0x%1$x, 0x%2$x, 0x%3$x", (inst_list_len & 0xFF0000) >> 16, (inst_list_len & 0xFF00) >> 8, inst_list_len & 0xFF)}")
|
---|
232 | $echonetCfgC.add2("};")
|
---|
233 |
|
---|
234 | $echonetCfgC.add("/*")
|
---|
235 | $echonetCfgC.add(" * ã¯ã©ã¹æ°")
|
---|
236 | $echonetCfgC.add(" */")
|
---|
237 | # ãã¼ããããã¡ã¤ã«ãå«ããï¼ + 1ï¼
|
---|
238 | class_list_len = $CLASS_LIST.length + 1
|
---|
239 | $echonetCfgC.add("const uint8_t _echonet_#{$cfgData[:ECN_CRE_EOBJ][enodid][:eobjid]}_class_count[] = {")
|
---|
240 | $echonetCfgC.add(" #{sprintf("0x%1$x, 0x%2$x", (class_list_len & 0xFF00) >> 8, class_list_len & 0xFF)}")
|
---|
241 | $echonetCfgC.add2("};")
|
---|
242 |
|
---|
243 | $echonetCfgC.add("/*")
|
---|
244 | $echonetCfgC.add(" * ã¤ã³ã¹ã¿ã³ã¹ãªã¹ã")
|
---|
245 | $echonetCfgC.add(" */")
|
---|
246 | pos = 0
|
---|
247 | if inst_list_len > 84
|
---|
248 | error_illegal("E_PAR", $cfgData[:ECN_DEF_EPRP][eprpno], "eprpno", sprintf("instance list count overflow, %1% %2% > 84", enodid, inst_list_len))
|
---|
249 | end
|
---|
250 | $echonetCfgC.add("const uint8_t _echonet_#{$cfgData[:ECN_CRE_EOBJ][enodid][:eobjid]}_inst_list[] = {")
|
---|
251 | if inst_list_len > 0xFE
|
---|
252 | $echonetCfgC.append(" 0xFF, ")
|
---|
253 | else
|
---|
254 | $echonetCfgC.append(sprintf(" 0x%1$x, ", inst_list_len))
|
---|
255 | end
|
---|
256 | $INST_LIST.each_with_index do |id, index|
|
---|
257 | $echonetCfgC.append(", ") if index > 0
|
---|
258 | $echonetCfgC.append(sprintf("0x%1$x, 0x%2$x, 0x%3$x", $cfgData[:ECN_CRE_EOBJ][id][:eojx1].val, $cfgData[:ECN_CRE_EOBJ][id][:eojx2].val, $cfgData[:ECN_CRE_EOBJ][id][:eojx3].val))
|
---|
259 | end
|
---|
260 | $echonetCfgC.add
|
---|
261 | $echonetCfgC.add2("};")
|
---|
262 |
|
---|
263 | $echonetCfgC.add("/*")
|
---|
264 | $echonetCfgC.add(" * ã¯ã©ã¹ãªã¹ã")
|
---|
265 | $echonetCfgC.add(" */")
|
---|
266 | pos = 0
|
---|
267 | class_list_len = $CLASS_LIST.length
|
---|
268 | if class_list_len > 84
|
---|
269 | error_illegal("E_PAR", $cfgData[:ECN_DEF_EPRP][eprpno], "eprpno", sprintf("class list count overflow, %1% %2% > 84", enodid, class_list_len))
|
---|
270 | end
|
---|
271 | $echonetCfgC.add("const uint8_t _echonet_#{$cfgData[:ECN_CRE_EOBJ][enodid][:eobjid]}_class_list[] = {")
|
---|
272 | if class_list_len > 0xFE
|
---|
273 | $echonetCfgC.append(" 0xFF, ")
|
---|
274 | else
|
---|
275 | $echonetCfgC.append(" #{sprintf("0x%1$x, ", class_list_len)}")
|
---|
276 | end
|
---|
277 | $CLASS_LIST.each_with_index do |id, index|
|
---|
278 | $echonetCfgC.append(", ") if index > 0
|
---|
279 | $echonetCfgC.append(sprintf("0x%1$x, 0x%2$x", $cfgData[:ECN_CRE_EOBJ][id][:eojx1].val, $cfgData[:ECN_CRE_EOBJ][id][:eojx2].val))
|
---|
280 | end
|
---|
281 | $echonetCfgC.add
|
---|
282 | $echonetCfgC.add2("};")
|
---|
283 | end
|
---|
284 |
|
---|
285 | $cfgData[:ECN_CRE_EOBJ].each do |key, params|
|
---|
286 | eprp_list = []
|
---|
287 | anno_list = []
|
---|
288 | set_list = []
|
---|
289 | get_list = [ 0x9D, 0x9E, 0x9F ]
|
---|
290 | anno_map = []
|
---|
291 | set_map = []
|
---|
292 | get_map = []
|
---|
293 | for i in 0..15 do
|
---|
294 | anno_map[i] = 0x00
|
---|
295 | set_map[i] = 0x00
|
---|
296 | get_map[i] = 0x00
|
---|
297 | end
|
---|
298 | # 0x9Dã0x9Eã0x9Fã¯ONã«ãã¦ãã
|
---|
299 | for i in 13..15 do
|
---|
300 | anno_map[i] = anno_map[i] | 0x02
|
---|
301 | get_map[i] = get_map[i] | 0x02
|
---|
302 | end
|
---|
303 | # ãã¼ããããã¡ã¤ã«ã®å ´å
|
---|
304 | if (params[:eobjatr] & ($EOBJ_LOCAL_NODE | $EOBJ_SYNC_REMOTE_NODE | $EOBJ_ASYNC_REMOTE_NODE)) != 0
|
---|
305 | anno_map[5] = anno_map[5] | 0x20
|
---|
306 | anno_list << 0xD5
|
---|
307 | for i in [ 3, 4, 6, 7] do
|
---|
308 | get_map[i] = get_map[i] | 0x20
|
---|
309 | end
|
---|
310 | get_list.concat([ 0xD3, 0xD4, 0xD6, 0xD7 ])
|
---|
311 | end
|
---|
312 |
|
---|
313 | $cfgData[:ECN_DEF_EPRP].each do |key2, params2|
|
---|
314 | if params2[:eobjid] == params[:eobjid].str
|
---|
315 | # (0x80 <= eprpcd && eprpcd <= 0xFF)ã§ãªãå ´åï¼E_PARï¼
|
---|
316 | if !(0x80 <= params2[:eprpcd] && params2[:eprpcd] <= 0xFF)
|
---|
317 | error_illegal_sym("E_PAR", params2, :eprpcd, :eprpno)
|
---|
318 | end
|
---|
319 |
|
---|
320 | # eprpatrãï¼ï¼»EPC_RULE_SET] | [EPC_RULE_GET] | [EPC_RULE_ANNO] | [EPC_ANNOUNCEï¼½| [EPC_VARIABLE]ï¼ã§ãªãå ´åï¼E_RSATRï¼
|
---|
321 | if (params2[:eprpatr] & ~($EPC_RULE_SET | $EPC_RULE_GET | $EPC_RULE_ANNO | $EPC_ANNOUNCE | $EPC_VARIABLE)) != 0
|
---|
322 | error_illegal_sym("E_RSATR", params2, :eprpatr, :eprpno)
|
---|
323 | end
|
---|
324 |
|
---|
325 | # (0 <= eprpsz && eprpsz <= 255)ã§ãªãå ´åï¼E_PARï¼
|
---|
326 | if !(0 <= params2[:eprpsz] && params2[:eprpsz] <= 255)
|
---|
327 | error_illegal_sym("E_PAR", params2, :eprpsz, :eprpno)
|
---|
328 | end
|
---|
329 |
|
---|
330 | # ããããã£ãããã«è¨å®
|
---|
331 | pos = params2[:eprpcd] & 0xF
|
---|
332 | bit = (params2[:eprpcd] >> 4) - 8
|
---|
333 | if (params2[:eprpatr] & $EPC_ANNOUNCE) != 0
|
---|
334 | anno_list << params2[:eprpcd].val
|
---|
335 | anno_map[pos] |= (1 << bit)
|
---|
336 | end
|
---|
337 | if (params2[:eprpatr] & $EPC_RULE_SET) != 0
|
---|
338 | set_list << params2[:eprpcd].val
|
---|
339 | set_map[pos] |= (1 << bit)
|
---|
340 | end
|
---|
341 | if (params2[:eprpatr] & $EPC_RULE_GET) != 0
|
---|
342 | get_list << params2[:eprpcd].val
|
---|
343 | get_map[pos] |= (1 << bit)
|
---|
344 | end
|
---|
345 |
|
---|
346 | eprp_list << key2
|
---|
347 | end
|
---|
348 | end
|
---|
349 |
|
---|
350 | # å¿
|
---|
351 | é ã¢ãã¦ã³ã¹ããããã£ãããããã§ãã¯
|
---|
352 | must_anno_map = getPropertyInfo(params[:eojx1], params[:eojx2], $EPC_ANNOUNCE)
|
---|
353 | i = 0
|
---|
354 | while i < must_anno_map.length do
|
---|
355 | if !anno_list.include?(must_anno_map[i])
|
---|
356 | error_exit(sprintf("Required announce property (0x%1$x) of %2% is not defined.", must_anno_map[i].val, key))
|
---|
357 | end
|
---|
358 | i = i + 1
|
---|
359 | end
|
---|
360 |
|
---|
361 | # å¿
|
---|
362 | é SETããããã£ãããããã§ãã¯
|
---|
363 | must_set_map = getPropertyInfo(params[:eojx1], params[:eojx2], $EPC_RULE_SET)
|
---|
364 | i = 0
|
---|
365 | while i < must_set_map.length
|
---|
366 | if !set_list.include?(must_set_map[i])
|
---|
367 | error_exit(sprintf("Required set property (0x%1$x) of %2% is not defined.", must_set_map[i].val, key))
|
---|
368 | end
|
---|
369 | i = i + 1
|
---|
370 | end
|
---|
371 |
|
---|
372 | # å¿
|
---|
373 | é GETããããã£ãããããã§ãã¯
|
---|
374 | must_get_map = getPropertyInfo(params[:eojx1], params[:eojx2], $EPC_RULE_GET)
|
---|
375 | i = 0
|
---|
376 | while i < must_get_map.length
|
---|
377 | if !get_list.include?(must_get_map[i])
|
---|
378 | error_exit(sprintf("Required get property (0x%0x) of %s is not defined.", must_get_map[i], params[:eobjno]))
|
---|
379 | end
|
---|
380 | i = i + 1
|
---|
381 | end
|
---|
382 |
|
---|
383 | $echonetCfgC.add("/*")
|
---|
384 | $echonetCfgC.add(" * ã¢ãã¦ã³ã¹ããããã£ããã")
|
---|
385 | $echonetCfgC.add(" */")
|
---|
386 | anno_list = anno_list.sort
|
---|
387 | anno_len = anno_list.length
|
---|
388 | $echonetCfgC.add("const uint8_t _echonet_#{params[:eobjid]}_anno_prpmap[] = {")
|
---|
389 | $echonetCfgC.append(" #{sprintf("0x%1$x" , +anno_len)}, ")
|
---|
390 | if anno_len < 16
|
---|
391 | anno_list.each_with_index do |eprpcd, index|
|
---|
392 | $echonetCfgC.append(", ") if index > 0
|
---|
393 | $echonetCfgC.append(sprintf("0x%1$x" , eprpcd))
|
---|
394 | end
|
---|
395 | $echonetCfgC.add
|
---|
396 | anno_len = anno_len + 1
|
---|
397 | else
|
---|
398 | anno_map.each_with_index do |i, index|
|
---|
399 | $echonetCfgC.append(", ") if index > 0
|
---|
400 | $echonetCfgC.append(sprintf("0x%1$x" , anno_map[i].val))
|
---|
401 | end
|
---|
402 | $echonetCfgC.add
|
---|
403 | anno_len = 17
|
---|
404 | end
|
---|
405 | $echonetCfgC.add2("};")
|
---|
406 |
|
---|
407 | $echonetCfgC.add("/*")
|
---|
408 | $echonetCfgC.add(" * SETããããã£ããã")
|
---|
409 | $echonetCfgC.add(" */")
|
---|
410 | set_list = set_list.sort
|
---|
411 | set_len = set_list.length
|
---|
412 | $echonetCfgC.add("const uint8_t _echonet_#{params[:eobjid]}_set_prpmap[] = {")
|
---|
413 | $echonetCfgC.append(" #{sprintf("0x%1$x", set_len)}, ")
|
---|
414 | if set_len < 16
|
---|
415 | set_list.each_with_index do |eprpcd, index|
|
---|
416 | $echonetCfgC.append(", ") if index > 0
|
---|
417 | $echonetCfgC.append(sprintf("0x%1$x", eprpcd))
|
---|
418 | end
|
---|
419 | $echonetCfgC.add
|
---|
420 | set_len = set_len + 1
|
---|
421 | else
|
---|
422 | set_map.each do |i|
|
---|
423 | $echonetCfgC.append(", ") if index > 0
|
---|
424 | $echonetCfgC.append(sprintf("0x%1$x", set_map[i].val))
|
---|
425 | end
|
---|
426 | $echonetCfgC.add
|
---|
427 | set_len = 17
|
---|
428 | end
|
---|
429 | $echonetCfgC.add2("};")
|
---|
430 |
|
---|
431 | $echonetCfgC.add("/*")
|
---|
432 | $echonetCfgC.add(" * GETããããã£ããã")
|
---|
433 | $echonetCfgC.add(" */")
|
---|
434 | get_list = get_list.sort
|
---|
435 | get_len = get_list.length
|
---|
436 | $echonetCfgC.add("const uint8_t _echonet_#{params[:eobjid]}_get_prpmap[] = {")
|
---|
437 | $echonetCfgC.append(" #{sprintf("0x%1$x", get_len)}, ")
|
---|
438 | if get_len < 16
|
---|
439 | get_list.each_with_index do |eprpcd, index|
|
---|
440 | $echonetCfgC.append(", ") if index > 0
|
---|
441 | $echonetCfgC.append(sprintf("0x%1$x", eprpcd))
|
---|
442 | end
|
---|
443 | $echonetCfgC.add
|
---|
444 | get_len = get_len + 1
|
---|
445 | else
|
---|
446 | for i in [ 0..15 ] do
|
---|
447 | $echonetCfgC.append(", ") if index > 0
|
---|
448 | $echonetCfgC.append(sprintf("0x%1$x", get_map[i].val))
|
---|
449 | end
|
---|
450 | $echonetCfgC.add
|
---|
451 | get_len = 17
|
---|
452 | end
|
---|
453 | $echonetCfgC.add2("};")
|
---|
454 |
|
---|
455 | $echonetCfgC.add("/*")
|
---|
456 | $echonetCfgC.add(" * ããããã£å®ç¾©")
|
---|
457 | $echonetCfgC.add(" */")
|
---|
458 | $echonetCfgC.add("const EPRPINIB _echonet_#{params[:eobjid]}_eprpinib_table[TNUM_#{params[:eobjid]}_EPRPNO] = {")
|
---|
459 | eprp_list.each do |eprpno|
|
---|
460 | # ECHONET Liteããããã£åæåãããã¯
|
---|
461 | $echonetCfgC.add(" { (#{$cfgData[:ECN_DEF_EPRP][eprpno][:eprpcd]}), (#{$cfgData[:ECN_DEF_EPRP][eprpno][:eprpatr]}), (#{$cfgData[:ECN_DEF_EPRP][eprpno][:eprpsz]}), (#{$cfgData[:ECN_DEF_EPRP][eprpno][:exinf]}), (#{$cfgData[:ECN_DEF_EPRP][eprpno][:eprpset]}), (#{$cfgData[:ECN_DEF_EPRP][eprpno][:eprpget]}) },")
|
---|
462 | end
|
---|
463 | # ç¶æ
|
---|
464 | ã¢ãã¦ã³ã¹ããããã£ããã
|
---|
465 | $echonetCfgC.add(" { (0x9D), (EPC_RULE_GET), #{sprintf("0x%1$x", anno_len)}, (intptr_t)_echonet_#{params[:eobjid]}_anno_prpmap, ((EPRP_SETTER *)NULL), ((EPRP_GETTER *)ecn_data_prop_get) },")
|
---|
466 | # Setããããã£ããã
|
---|
467 | $echonetCfgC.add(" { (0x9E), (EPC_RULE_GET), #{sprintf("0x%1$x", set_len)}, (intptr_t)_echonet_#{params[:eobjid]}_set_prpmap, ((EPRP_SETTER *)NULL), ((EPRP_GETTER *)ecn_data_prop_get) },")
|
---|
468 | # Getããããã£ããã
|
---|
469 | $echonetCfgC.append(" { (0x9F), (EPC_RULE_GET), #{sprintf("0x%1$x", get_len)}, (intptr_t)_echonet_#{params[:eobjid]}_get_prpmap, ((EPRP_SETTER *)NULL), ((EPRP_GETTER *)ecn_data_prop_get) }")
|
---|
470 | # ãã¼ããããã¡ã¤ã«ã®å ´å
|
---|
471 | if (params[:eobjatr] & ($EOBJ_LOCAL_NODE | $EOBJ_SYNC_REMOTE_NODE | $EOBJ_ASYNC_REMOTE_NODE)) != 0
|
---|
472 | $echonetCfgC.add(",")
|
---|
473 | # ã¤ã³ã¹ã¿ã³ã¹æ°
|
---|
474 | $echonetCfgC.add(" { (0xD3), (EPC_RULE_GET), (3), (intptr_t)_echonet_#{params[:eobjid]}_inst_count, ((EPRP_SETTER *)NULL), ((EPRP_GETTER *)ecn_data_prop_get) },")
|
---|
475 | # ã¯ã©ã¹æ°
|
---|
476 | $echonetCfgC.add(" { (0xD4), (EPC_RULE_GET), (2), (intptr_t)_echonet_#{params[:eobjid]}_class_count, ((EPRP_SETTER *)NULL), ((EPRP_GETTER *)ecn_data_prop_get) },")
|
---|
477 | # ã¤ã³ã¹ã¿ã³ã¹ãªã¹ãéç¥
|
---|
478 | $echonetCfgC.add(" { (0xD5), (EPC_RULE_ANNO), sizeof(_echonet_#{params[:eobjid]}_inst_list), (intptr_t)_echonet_#{params[:eobjid]}_inst_list, ((EPRP_SETTER *)NULL), ((EPRP_GETTER *)ecn_data_prop_get) },")
|
---|
479 | # ã¤ã³ã¹ã¿ã³ã¹ãªã¹ãS
|
---|
480 | $echonetCfgC.add(" { (0xD6), (EPC_RULE_GET), sizeof(_echonet_#{params[:eobjid]}_inst_list), (intptr_t)_echonet_#{params[:eobjid]}_inst_list, ((EPRP_SETTER *)NULL), ((EPRP_GETTER *)ecn_data_prop_get) },")
|
---|
481 | # ã¯ã©ã¹ãªã¹ãS
|
---|
482 | $echonetCfgC.add(" { (0xD7), (EPC_RULE_GET), sizeof(_echonet_#{params[:eobjid]}_class_list), (intptr_t)_echonet_#{params[:eobjid]}_class_list, ((EPRP_SETTER *)NULL), ((EPRP_GETTER *)ecn_data_prop_get) }")
|
---|
483 | else
|
---|
484 | $echonetCfgC.add
|
---|
485 | end
|
---|
486 | $echonetCfgC.add2("};")
|
---|
487 | end
|
---|
488 | $echonetCfgC.add
|
---|
489 | else
|
---|
490 | $echonetCfgC.add("TOPPERS_EMPTY_LABEL(const EPRPINIB, _echonet_eprpinib_table);")
|
---|
491 | end
|
---|
492 |
|
---|
493 | #
|
---|
494 | # ECHONET Liteãªãã¸ã§ã¯ã
|
---|
495 | #
|
---|
496 | $echonetCfgC.add("/*")
|
---|
497 | $echonetCfgC.add(" * ECHONET Lite Object Functions")
|
---|
498 | $echonetCfgC.add(" */")
|
---|
499 | $echonetCfgC.add
|
---|
500 |
|
---|
501 | # ECHONET Liteãªãã¸ã§ã¯ãIDçªå·ã®æ大å¤
|
---|
502 | $echonetCfgC.add("const ID _echonet_tmax_eobjid = (TMIN_EOBJID + TNUM_EOBJID - 1);")
|
---|
503 | $echonetCfgC.add
|
---|
504 |
|
---|
505 | # ECHONET Liteãªãã¸ã§ã¯ãåæåãããã¯ã®çæ
|
---|
506 | if $cfgData[:ECN_CRE_EOBJ].length > 0
|
---|
507 | $echonetCfgC.add("const EOBJINIB _echonet_eobjinib_table[TNUM_EOBJID] = {")
|
---|
508 | $cfgData[:ECN_CRE_EOBJ].each_with_index do |(key, params), index|
|
---|
509 | $echonetCfgC.add(",") if index > 0
|
---|
510 | # eobjatrãï¼ï¼»EOBJ_LOCAL_NODE] | [EOBJ_SYNC_REMOTE_NODE] | [EOBJ_ASYNC_REMOTE_NODE] | [EOBJ_DEVICEï¼½ï¼ã§ãªãå ´åï¼E_RSATRï¼
|
---|
511 | if (params[:eobjatr] & ~($EOBJ_LOCAL_NODE | $EOBJ_SYNC_REMOTE_NODE | $EOBJ_ASYNC_REMOTE_NODE | $EOBJ_DEVICE)) != 0
|
---|
512 | error_illegal_sym("E_RSATR", params, :eobjatr, :eobjid)
|
---|
513 | end
|
---|
514 |
|
---|
515 | # ãã¼ããããã¡ã¤ã«ãªãã¸ã§ã¯ãã®å ´å
|
---|
516 | if (params[:eobjatr] & ($EOBJ_LOCAL_NODE | $EOBJ_SYNC_REMOTE_NODE | $EOBJ_ASYNC_REMOTE_NODE)) != 0
|
---|
517 | # (enodid == EOBJ_NULL)ã§ãªãå ´åï¼E_PARï¼
|
---|
518 | if params[:enodid] != "EOBJ_NULL"
|
---|
519 | error_illegal_sym("E_PAR", params, :enodid, :eobjid)
|
---|
520 | end
|
---|
521 |
|
---|
522 | # (eojx1 == EOJ_X1_PROFILE)ã§ãªãå ´åï¼E_PARï¼
|
---|
523 | if params[:eojx1] != $EOJ_X1_PROFILE
|
---|
524 | error_illegal_sym("E_PAR", params, :eojx1, :eobjid)
|
---|
525 | end
|
---|
526 |
|
---|
527 | # (eojx2 == EOJ_X2_NODE_PROFILE)ã§ãªãå ´åï¼E_PARï¼
|
---|
528 | if params[:eojx2] != $EOJ_X2_NODE_PROFILE
|
---|
529 | error_illegal_sym("E_PAR", params, :eojx2, :eobjid)
|
---|
530 | end
|
---|
531 |
|
---|
532 | # (1 <= eojx3 && eojx3 <= 2)ã§ãªãå ´åï¼E_PARï¼
|
---|
533 | if !(1 <= params[:eojx3] && params[:eojx3] <= 2)
|
---|
534 | error_illegal_sym("E_PAR", params, :eojx3, :eobjid)
|
---|
535 | end
|
---|
536 | # æ©å¨ãªãã¸ã§ã¯ãã®å ´å
|
---|
537 | else
|
---|
538 | # (enodid != EOBJ_NULL)ã§ãªãå ´åï¼E_PARï¼
|
---|
539 | if params[:enodid] == "EOBJ_NULL"
|
---|
540 | error_illegal_sym("E_PAR", params, :enodid, :eobjid)
|
---|
541 | end
|
---|
542 |
|
---|
543 | # (0 <= eojx1 && eojx1 <= 255)ã§ãªãå ´åï¼E_PARï¼
|
---|
544 | if !(0 <= params[:eojx1] && params[:eojx1] <= 255)
|
---|
545 | error_illegal_sym("E_PAR", params, :eojx1, :eobjid)
|
---|
546 | end
|
---|
547 |
|
---|
548 | # (0 <= eojx2 && eojx2 <= 255)ã§ãªãå ´åï¼E_PARï¼
|
---|
549 | if !(0 <= params[:eojx2] && params[:eojx2] <= 255)
|
---|
550 | error_illegal_sym("E_PAR", params, :eojx2, :eobjid)
|
---|
551 | end
|
---|
552 |
|
---|
553 | # (0 <= eojx3 && eojx3 <= 255)ã§ãªãå ´åï¼E_PARï¼
|
---|
554 | if !(0 <= params[:eojx3] && params[:eojx3] <= 255)
|
---|
555 | error_illegal_sym("E_PAR", params, :eojx3, :eobjid)
|
---|
556 | end
|
---|
557 | end
|
---|
558 |
|
---|
559 | # ECHONET Liteãªãã¸ã§ã¯ãåæåãããã¯
|
---|
560 | $echonetCfgC.append(" { (#{params[:eobjatr]}), (#{params[:enodid]}), (#{params[:exinf]}), (#{params[:eojx1]}), (#{params[:eojx2]}), (#{params[:eojx3]}), _echonet_#{params[:eobjid]}_eprpinib_table, TNUM_#{params[:eobjid]}_EPRPNO }")
|
---|
561 | end
|
---|
562 | $echonetCfgC.add
|
---|
563 | $echonetCfgC.add2("};")
|
---|
564 | else
|
---|
565 | $echonetCfgC.add("TOPPERS_EMPTY_LABEL(const EOBJINIB, _echonet_eobjinib_table);")
|
---|
566 | end
|
---|
567 | $echonetCfgC.add
|
---|
568 |
|
---|
569 | # ECHONET Liteãã¼ã管çãããã¯ã®æ°
|
---|
570 | $echonetCfgC.add2("const int _echonet_tnum_enodid = TNUM_ENODID;")
|
---|
571 |
|
---|
572 | #
|
---|
573 | # ECHONET Liteãã¼ã管çãããã¯
|
---|
574 | #
|
---|
575 | $echonetCfgC.add("/*")
|
---|
576 | $echonetCfgC.add(" * ECHONET Lite Node Functions")
|
---|
577 | $echonetCfgC.add(" */")
|
---|
578 | $echonetCfgC.add
|
---|
579 | # ECHONET Liteãã¼ãã¨IPã¢ãã¬ã¹ã®å¯¾å¿æ
|
---|
580 | å ±ãããã¯ã®çæ
|
---|
581 | $ENOD_LIST.each do |enodid|
|
---|
582 | eobjid = $cfgData[:ECN_CRE_EOBJ][enodid][:eobjid].str
|
---|
583 | eobj_list = []
|
---|
584 | $cfgData[:ECN_CRE_EOBJ].each do |key, params|
|
---|
585 | if params[:enodid] == eobjid
|
---|
586 | eobj_list << params[:eobjid]
|
---|
587 | end
|
---|
588 | end
|
---|
589 | $echonetCfgC.add("/*")
|
---|
590 | $echonetCfgC.add(" * ãã¼ãã«æå±ããæ©å¨ãªãã¸ã§ã¯ãã®ä¸è¦§")
|
---|
591 | $echonetCfgC.add(" */")
|
---|
592 | $echonetCfgC.add("const EOBJINIB *_echonet_#{$cfgData[:ECN_CRE_EOBJ][enodid][:eobjid]}_eobjinib_table[TNUM_#{$cfgData[:ECN_CRE_EOBJ][enodid][:eobjid]}_EOBJNO] = {")
|
---|
593 | eobj_list.each_with_index do |eobjid, index|
|
---|
594 | $echonetCfgC.add(",") if index > 0
|
---|
595 | $echonetCfgC.append(" { &_echonet_eobjinib_table[#{eobjid} - 1] }")
|
---|
596 | end
|
---|
597 | $echonetCfgC.add
|
---|
598 | $echonetCfgC.add("};")
|
---|
599 | end
|
---|
600 | $echonetCfgC.add
|
---|
601 |
|
---|
602 | if $ENOD_LIST.length > 0
|
---|
603 | $echonetCfgC.add("/*")
|
---|
604 | $echonetCfgC.add(" * ECHONET Liteãã¼ã管çãããã¯")
|
---|
605 | $echonetCfgC.add(" */")
|
---|
606 | $echonetCfgC.add("EOBJCB _echonet_eobjcb_table[TNUM_ENODID] = {")
|
---|
607 | $ENOD_LIST.each_with_index do |enodid, index|
|
---|
608 | $echonetCfgC.add(",") if index > 0
|
---|
609 | $echonetCfgC.append(" { &_echonet_eobjinib_table[#{$cfgData[:ECN_CRE_EOBJ][enodid][:eobjid].str} - 1], _echonet_#{$cfgData[:ECN_CRE_EOBJ][enodid][:eobjid]}_eobjinib_table, TNUM_#{$cfgData[:ECN_CRE_EOBJ][enodid][:eobjid]}_EOBJNO }")
|
---|
610 | end
|
---|
611 | $echonetCfgC.add
|
---|
612 | $echonetCfgC.add("};")
|
---|
613 | else
|
---|
614 | $echonetCfgC.add("TOPPERS_EMPTY_LABEL(EOBJCB, _echonet_eobjcb_table);")
|
---|
615 | end
|
---|
616 | $echonetCfgC.add
|
---|
617 |
|
---|
618 | # ECHONET Liteãã¼ãã¨IPã¢ãã¬ã¹ã®å¯¾å¿æ
|
---|
619 | å ±ã®æ°
|
---|
620 | $echonetCfgC.add("const int _echonet_tnum_enodadr = TNUM_ENODADR;")
|
---|
621 | $echonetCfgC.add
|
---|
622 |
|
---|
623 | #
|
---|
624 | # ECHONET Liteãã¼ãã¨IPã¢ãã¬ã¹ã®å¯¾å¿æ
|
---|
625 | å ±
|
---|
626 | #
|
---|
627 | $echonetCfgC.add("/*")
|
---|
628 | $echonetCfgC.add(" * ECHONET Lite Node Functions")
|
---|
629 | $echonetCfgC.add(" */")
|
---|
630 | $echonetCfgC.add
|
---|
631 |
|
---|
632 | # ECHONET Liteãã¼ãã¨IPã¢ãã¬ã¹ã®å¯¾å¿æ
|
---|
633 | å ±ãããã¯ã®çæ
|
---|
634 | if $cfgData[:ECN_CRE_EOBJ].length > 0
|
---|
635 | $echonetCfgC.add("ENODADRB _echonet_enodadrb_table[TNUM_ENODADR] = {")
|
---|
636 | $ENOD_LIST.each_with_index do |enodid, index|
|
---|
637 | $echonetCfgC.add(",") if index > 0
|
---|
638 | if enodid == 1
|
---|
639 | $echonetCfgC.add(" /* ENOD_MULTICAST_ID */ { true, ECHONET_MULTICAST_ADDR },")
|
---|
640 | $echonetCfgC.add(" /* ENOD_LOCAL_ID */ { true, },")
|
---|
641 | $echonetCfgC.append(" /* ENOD_API_ID */ { true, }")
|
---|
642 | else
|
---|
643 | $echonetCfgC.append(" /* ENOD_REMOTE_ID + #{enodid - 4} */ { true, }")
|
---|
644 | end
|
---|
645 | end
|
---|
646 | $echonetCfgC.add
|
---|
647 | $echonetCfgC.add("};")
|
---|
648 | else
|
---|
649 | $echonetCfgC.add("TOPPERS_EMPTY_LABEL(ENODADRB, _echonet_enodadrb_table);")
|
---|
650 | end
|
---|
651 | $echonetCfgC.add
|
---|
652 |
|
---|
653 | #
|
---|
654 | # ECHONET Lite ã«ã¼ãã«ãªãã¸ã§ã¯ãID
|
---|
655 | #
|
---|
656 | $echonetCfgC.add(<<EOS)
|
---|
657 | const ID _echonet_ecn_svc_taskid = ECHONET_SVC_TASK;
|
---|
658 | const ID _echonet_ecn_udp_taskid = ECHONET_UDP_TASK;
|
---|
659 | const ID _echonet_ecn_api_dataqueueid = ECHONET_API_DATAQUEUE;
|
---|
660 | const ID _echonet_ecn_svc_dataqueueid = ECHONET_SVC_DATAQUEUE;
|
---|
661 | const ID _echonet_ecn_udp_dataqueueid = ECHONET_UDP_DATAQUEUE;
|
---|
662 | #ifndef ECHONET_USE_MALLOC
|
---|
663 | const ID _echonet_ecn_mempoolid = ECHONET_MEMPOOL;
|
---|
664 | #endif
|
---|
665 | EOS
|
---|
666 |
|
---|
667 | $echonetCfgC.add
|
---|
668 | $echonetCfgC.add("#include \"tinet_cfg.h\"")
|
---|
669 | $echonetCfgC.add
|
---|
670 |
|
---|
671 | #
|
---|
672 | # ECHONET Lite TINETãªãã¸ã§ã¯ãID
|
---|
673 | #
|
---|
674 | $echonetCfgC.add2("const ID _echonet_ecn_udp_cepid = ECHONET_UDP_CEPID;")
|
---|