source: uKadecot/trunk/kadecot/wamp_dealer.c@ 107

Last change on this file since 107 was 107, checked in by coas-nagasima, 9 years ago

SHIFT_JISのコードにcharsetプロパティを付けた

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/plain; charset=SHIFT_JIS
File size: 51.4 KB
Line 
1/*
2 * TOPPERS ECHONET Lite Communication Middleware
3 *
4 * Copyright (C) 2015 Cores Co., Ltd. Japan
5 *
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 * 免責すること.
28 *
29 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
30 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
31 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
32 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
33 * の責任を負わない.
34 *
35 * @(#) $Id: wamp_dealer.c 107 2015-06-10 11:40:31Z coas-nagasima $
36 */
37
38#include <string.h>
39#include "wamp.h"
40#include "wamp_dealer.h"
41#include "main.h"
42#include "fbs_string.h"
43#include "kadecot_names.h"
44#include "kernel_cfg.h"
45#include "echonet_agent.h"
46#include "arduino.h"
47#include "data_flash.h"
48#include "uip.h"
49#include "uip_adpt.h"
50
51#ifndef _MSC_VER
52#ifndef strcpy_s
53#define strcpy_s(s1, s1m, s2) strcpy(s1, s2)
54#endif
55
56#ifndef strncpy_s
57#define strncpy_s(dst, dsz, src, sz) strncpy(dst, src, sz)
58#endif
59
60size_t strnlen(const char *s, size_t maxlen);
61#endif
62
63static void wamp_dealer_call_dummy_param(wamp_dealer_t *dealer,
64 jsonsl_action_t action, struct jsonsl_state_st *state, const char *buf);
65static void wamp_dealer_call_kadecot_param(wamp_dealer_t *dealer,
66 jsonsl_action_t action, struct jsonsl_state_st *state, const char *buf);
67static void wamp_dealer_call_ecnl_param(wamp_dealer_t *dealer,
68 jsonsl_action_t action, struct jsonsl_state_st *state, const char *buf);
69static void wamp_dealer_call_arduino_param(wamp_dealer_t *dealer,
70 jsonsl_action_t action, struct jsonsl_state_st *state, const char *buf);
71static void wamp_dealer_call_init_params_param(wamp_dealer_t *dealer,
72 jsonsl_action_t action, struct jsonsl_state_st *state, const char *buf);
73
74static void wamp_dealer_none_close(struct wamp_dealer *dealer);
75static void wamp_dealer_get_devicelist_close(struct wamp_dealer *dealer);
76static void wamp_dealer_kadecot_get_close(struct wamp_dealer *dealer);
77static void wamp_dealer_kadecot_set_close(struct wamp_dealer *dealer);
78static void wamp_dealer_get_deviceinfo_close(struct wamp_dealer *dealer);
79static void wamp_dealer_ecnl_set_close(struct wamp_dealer *dealer);
80static void wamp_dealer_ecnl_get_close(struct wamp_dealer *dealer);
81static void wamp_dealer_ecnl_setget_close(struct wamp_dealer *dealer);
82static void wamp_dealer_pin_mode_close(struct wamp_dealer *dealer);
83static void wamp_dealer_digital_write_close(struct wamp_dealer *dealer);
84static void wamp_dealer_digital_read_close(struct wamp_dealer *dealer);
85static void wamp_dealer_analog_read_close(struct wamp_dealer *dealer);
86static void wamp_dealer_analog_write_close(struct wamp_dealer *dealer);
87static void wamp_dealer_set_init_params_close(struct wamp_dealer *dealer);
88static void wamp_dealer_get_init_params_close(struct wamp_dealer *dealer);
89
90static echonetlite_device_t *wamp_dealer_get_device(wamp_dealer_t *dealer, int deviceId);
91
92static bool_t wamp_dealer_get_epc(const char *propName, int nameLen,
93 uint16_t devType, uint8_t *epc, uint8_t *pdc);
94static void wamp_dealer_get_devicelist(struct wamp_dealer *dealer);
95
96int wamp_stob(const char *str, uint8_t *dst, int dstc);
97
98void wamp_dealer_register(wamp_dealer_t *dealer)
99{
100}
101
102void wamp_dealer_register_request_id(wamp_dealer_t *dealer, const char *value)
103{
104}
105
106void wamp_dealer_register_options(wamp_dealer_t *dealer, const char *value)
107{
108}
109
110void wamp_dealer_register_options_param(wamp_dealer_t *dealer, jsonsl_action_t action,
111 struct jsonsl_state_st *state, const char *buf)
112{
113}
114
115void wamp_dealer_register_procedure(wamp_dealer_t *dealer, const char *value)
116{
117}
118
119void wamp_dealer_register_close(struct wamp_state *s)
120{
121}
122
123void wamp_dealer_unregister(wamp_dealer_t *dealer)
124{
125}
126
127void wamp_dealer_unregister_request_id(wamp_dealer_t *dealer, const char *value)
128{
129}
130
131void wamp_dealer_unregister_registration_id(wamp_dealer_t *dealer, const char *value)
132{
133}
134
135void wamp_dealer_unregister_close(struct wamp_state *s)
136{
137}
138
139void wamp_dealer_call(wamp_dealer_t *dealer)
140{
141 dealer->args_parse = wamp_dealer_call_dummy_param;
142 dealer->call_close = wamp_dealer_none_close;
143
144 memset(&dealer->params, 0, sizeof(dealer->params));
145}
146
147void wamp_dealer_call_request_id(wamp_dealer_t *dealer, const char *value)
148{
149 dealer->requestId = atoi(value);
150}
151
152void wamp_dealer_call_options(wamp_dealer_t *dealer, const char *value)
153{
154}
155
156void wamp_dealer_call_options_param(wamp_dealer_t *dealer, jsonsl_action_t action,
157 struct jsonsl_state_st *state, const char *buf)
158{
159 static const char deviceId[] = "deviceId";
160
161 switch (state->level) {
162 case 3:
163 switch (action){
164 case JSONSL_ACTION_POP:
165 switch (state->type)
166 {
167 case JSONSL_T_HKEY:
168 if(strcmp(deviceId, dealer->s->jsn_buf) == 0){
169 dealer->state = WAMP_DEALER_STATE_DEVICE_ID;
170 }
171 break;
172 case JSONSL_T_SPECIAL:
173 dealer->current_device = wamp_dealer_get_device(dealer, atoi(dealer->s->jsn_buf));
174 break;
175 default:
176 break;
177 }
178 break;
179 }
180 break;
181 }
182}
183
184void wamp_dealer_call_procedure(wamp_dealer_t *dealer, const char *value)
185{
186 static const char getDeviceList[] = "com.sonycsl.kadecot.provider.procedure.getDeviceList";
187 static const char kadecotGet[] = "com.sonycsl.kadecot.echonetlite.procedure.get";
188 static const char kadecotSet[] = "com.sonycsl.kadecot.echonetlite.procedure.set";
189 static const char getDeviceInfo[] = "jp.toppers.ecnl.procedure.getDeviceInfo";
190 static const char ecnlSet[] = "jp.toppers.ecnl.procedure.set";
191 static const char ecnlGet[] = "jp.toppers.ecnl.procedure.get";
192 static const char ecnlSetGet[] = "jp.toppers.ecnl.procedure.setget";
193 static const char pinMode[] = "com.sonycsl.kadecot.arduino.pinMode";
194 static const char digitalWrite[] = "com.sonycsl.kadecot.arduino.digitalWrite";
195 static const char digitalRead[] = "com.sonycsl.kadecot.arduino.digitalRead";
196 static const char analogRead[] = "com.sonycsl.kadecot.arduino.analogRead";
197 static const char analogWrite[] = "com.sonycsl.kadecot.arduino.analogWrite";
198 static const char setInitParams[] = "jp.toppers.ecnl.procedure.setInitParams";
199 static const char getInitParams[] = "jp.toppers.ecnl.procedure.getInitParams";
200
201 if(strcmp(getDeviceList, value) == 0){
202 dealer->procedure = WAMP_DEALER_PROCEDURE_GET_DEVICELIST;
203 dealer->args_parse = wamp_dealer_call_dummy_param;
204 dealer->call_close = wamp_dealer_get_devicelist_close;
205 }
206 else if(strcmp(kadecotGet, value) == 0){
207 dealer->procedure = WAMP_DEALER_PROCEDURE_KADECOT_GET;
208 dealer->args_parse = wamp_dealer_call_kadecot_param;
209 dealer->call_close = wamp_dealer_kadecot_get_close;
210 }
211 else if(strcmp(kadecotSet, value) == 0){
212 dealer->procedure = WAMP_DEALER_PROCEDURE_KADECOT_SET;
213 dealer->args_parse = wamp_dealer_call_kadecot_param;
214 dealer->call_close = wamp_dealer_kadecot_set_close;
215 }
216 else if(strcmp(getDeviceInfo, value) == 0){
217 dealer->procedure = WAMP_DEALER_PROCEDURE_GET_DEVICEINFO;
218 dealer->args_parse = wamp_dealer_call_dummy_param;
219 dealer->call_close = wamp_dealer_get_deviceinfo_close;
220 }
221 else if(strcmp(ecnlSet, value) == 0){
222 dealer->procedure = WAMP_DEALER_PROCEDURE_ECNL_SET;
223 dealer->args_parse = wamp_dealer_call_ecnl_param;
224 dealer->call_close = wamp_dealer_ecnl_set_close;
225 }
226 else if(strcmp(ecnlGet, value) == 0){
227 dealer->procedure = WAMP_DEALER_PROCEDURE_ECNL_GET;
228 dealer->args_parse = wamp_dealer_call_ecnl_param;
229 dealer->call_close = wamp_dealer_ecnl_get_close;
230 }
231 else if(strcmp(ecnlSetGet, value) == 0){
232 dealer->procedure = WAMP_DEALER_PROCEDURE_ECNL_SETGET;
233 dealer->args_parse = wamp_dealer_call_ecnl_param;
234 dealer->call_close = wamp_dealer_ecnl_setget_close;
235 }
236 else if(strcmp(pinMode, value) == 0){
237 dealer->procedure = WAMP_DEALER_PROCEDURE_PIN_MODE;
238 dealer->args_parse = wamp_dealer_call_arduino_param;
239 dealer->call_close = wamp_dealer_pin_mode_close;
240 }
241 else if(strcmp(digitalWrite, value) == 0){
242 dealer->procedure = WAMP_DEALER_PROCEDURE_DIGITAL_WRITE;
243 dealer->args_parse = wamp_dealer_call_arduino_param;
244 dealer->call_close = wamp_dealer_digital_write_close;
245 }
246 else if(strcmp(digitalRead, value) == 0){
247 dealer->procedure = WAMP_DEALER_PROCEDURE_DIGITAL_READ;
248 dealer->args_parse = wamp_dealer_call_arduino_param;
249 dealer->call_close = wamp_dealer_digital_read_close;
250 }
251 else if(strcmp(analogRead, value) == 0){
252 dealer->procedure = WAMP_DEALER_PROCEDURE_ANALOG_READ;
253 dealer->args_parse = wamp_dealer_call_arduino_param;
254 dealer->call_close = wamp_dealer_analog_read_close;
255 }
256 else if(strcmp(analogWrite, value) == 0){
257 dealer->procedure = WAMP_DEALER_PROCEDURE_ANALOG_WRITE;
258 dealer->args_parse = wamp_dealer_call_arduino_param;
259 dealer->call_close = wamp_dealer_analog_write_close;
260 }
261 else if(strcmp(setInitParams, value) == 0){
262 dealer->procedure = WAMP_DEALER_PROCEDURE_SET_INIT_PARAMS;
263 dealer->args_parse = wamp_dealer_call_init_params_param;
264 dealer->call_close = wamp_dealer_set_init_params_close;
265 }
266 else if (strcmp(getInitParams, value) == 0) {
267 dealer->procedure = WAMP_DEALER_PROCEDURE_GET_INIT_PARAMS;
268 dealer->args_parse = wamp_dealer_call_init_params_param;
269 dealer->call_close = wamp_dealer_get_init_params_close;
270 }
271 else{
272 dealer->procedure = WAMP_DEALER_PROCEDURE_NONE;
273 dealer->args_parse = wamp_dealer_call_dummy_param;
274 dealer->call_close = wamp_dealer_none_close;
275 }
276}
277
278void wamp_dealer_call_arguments(wamp_dealer_t *dealer, const char *value)
279{
280}
281
282void wamp_dealer_call_arguments_param(wamp_dealer_t *dealer, jsonsl_action_t action,
283 struct jsonsl_state_st *state, const char *buf)
284{
285}
286
287void wamp_dealer_call_argumentskw(wamp_dealer_t *dealer, const char *value)
288{
289}
290
291void wamp_dealer_call_argumentskw_param(wamp_dealer_t *dealer, jsonsl_action_t action,
292 struct jsonsl_state_st *state, const char *buf)
293{
294 dealer->args_parse(dealer, action, state, buf);
295}
296
297static void wamp_dealer_call_dummy_param(wamp_dealer_t *dealer,
298 jsonsl_action_t action, struct jsonsl_state_st *state, const char *buf)
299{
300}
301
302static void wamp_dealer_call_kadecot_param(wamp_dealer_t *dealer,
303 jsonsl_action_t action, struct jsonsl_state_st *state, const char *buf)
304{
305 static const char propertyName[] = "propertyName";
306 static const char propertyValue[] = "propertyValue";
307
308 switch (state->level) {
309 case 3:
310 switch (action){
311 case JSONSL_ACTION_POP:
312 switch (state->type)
313 {
314 case JSONSL_T_HKEY:
315 if(strcmp(propertyName, dealer->s->jsn_buf) == 0){
316 dealer->state = WAMP_DEALER_STATE_PROPERTY_NAME;
317 }
318 else if(strcmp(propertyValue, dealer->s->jsn_buf) == 0){
319 dealer->state = WAMP_DEALER_STATE_PROPERTY_VALUE;
320 dealer->params.pdc = 0;
321 memset(dealer->params.edt, 0, sizeof(dealer->params.edt));
322 }
323 break;
324 case JSONSL_T_STRING:
325 switch(dealer->state){
326 case WAMP_DEALER_STATE_PROPERTY_NAME:
327 memcpy(dealer->params.prop_name, dealer->s->jsn_buf, sizeof(dealer->params.prop_name));
328 wamp_dealer_get_epc(dealer->params.prop_name, strnlen(dealer->params.prop_name,
329 sizeof(dealer->params.prop_name)),
330 dealer->current_device->deviceType,
331 &dealer->params.epc, &dealer->params.pdc);
332 break;
333 }
334 break;
335 default:
336 break;
337 }
338 break;
339 }
340 break;
341 case 4:
342 switch (action){
343 case JSONSL_ACTION_POP:
344 switch (state->type)
345 {
346 case JSONSL_T_SPECIAL:
347 switch(dealer->state){
348 case WAMP_DEALER_STATE_PROPERTY_VALUE:
349 dealer->params.edt[dealer->params.pdc++] = atoi(dealer->s->jsn_buf);
350 break;
351 }
352 break;
353 }
354 break;
355 }
356 break;
357 }
358}
359
360static void wamp_dealer_call_ecnl_param(wamp_dealer_t *dealer,
361 jsonsl_action_t action, struct jsonsl_state_st *state, const char *buf)
362{
363 static const char deojId[] = "deojid";
364 static const char properties[] = "properties";
365 static const char propertyCode[] = "epc";
366 static const char propertyValue[] = "edt";
367
368 switch (state->level) {
369 case 3:
370 switch (action){
371 case JSONSL_ACTION_POP:
372 switch (state->type)
373 {
374 case JSONSL_T_HKEY:
375 if(strcmp(deojId, dealer->s->jsn_buf) == 0){
376 dealer->state = WAMP_DEALER_STATE_DEOJID;
377 }
378 else if(strcmp(properties, dealer->s->jsn_buf) == 0){
379 dealer->state = WAMP_DEALER_STATE_PROPERTIES;
380 }
381 break;
382 case JSONSL_T_SPECIAL:
383 switch(dealer->state){
384 case WAMP_DEALER_STATE_DEOJID:
385 dealer->params.deojid = atoi(dealer->s->jsn_buf);
386 break;
387 }
388 break;
389 }
390 break;
391 case JSONSL_ACTION_PUSH:
392 switch (state->type)
393 {
394 case JSONSL_T_LIST:
395 switch(dealer->state){
396 case WAMP_DEALER_STATE_PROPERTIES:
397 dealer->state = WAMP_DEALER_STATE_PROPERTY_LIST;
398 break;
399 }
400 break;
401 default:
402 break;
403 }
404 break;
405 }
406 break;
407 case 4:
408 switch (action){
409 case JSONSL_ACTION_POP:
410 switch (state->type)
411 {
412 case JSONSL_T_SPECIAL:
413 switch(dealer->state){
414 }
415 break;
416 default:
417 break;
418 }
419 break;
420 }
421 break;
422 case 5:
423 switch (action){
424 case JSONSL_ACTION_POP:
425 switch (state->type)
426 {
427 case JSONSL_T_HKEY:
428 if(strcmp(propertyCode, dealer->s->jsn_buf) == 0){
429 dealer->state = WAMP_DEALER_STATE_PROPERTY_CODE;
430 }
431 else if(strcmp(propertyValue, dealer->s->jsn_buf) == 0){
432 dealer->state = WAMP_DEALER_STATE_PROPERTY_VALUE;
433 dealer->params.pdc = 0;
434 memset(dealer->params.edt, 0, sizeof(dealer->params.edt));
435 }
436 break;
437 case JSONSL_T_SPECIAL:
438 switch(dealer->state){
439 case WAMP_DEALER_STATE_PROPERTY_CODE:
440 dealer->params.epc = atoi(dealer->s->jsn_buf);
441 switch(dealer->procedure){
442 case WAMP_DEALER_PROCEDURE_ECNL_GET:
443 if (dealer->ecnl_mag == NULL){
444 ecn_esv_get(&dealer->ecnl_mag, dealer->params.deojid, dealer->params.epc);
445 }
446 else{
447 ecn_add_epc(dealer->ecnl_mag, dealer->params.epc);
448 }
449 break;
450 case WAMP_DEALER_PROCEDURE_ECNL_SETGET:
451 ecn_add_epc(dealer->ecnl_mag, dealer->params.epc);
452 break;
453 }
454 break;
455 }
456 break;
457 case JSONSL_T_STRING:
458 switch(dealer->state){
459 case WAMP_DEALER_STATE_PROPERTY_VALUE:
460 dealer->params.pdc = wamp_stob(dealer->s->jsn_buf, dealer->params.edt, sizeof(dealer->params.edt));
461 switch(dealer->procedure){
462 case WAMP_DEALER_PROCEDURE_ECNL_SET:
463 if (dealer->ecnl_mag == NULL){
464 ecn_esv_setc(&dealer->ecnl_mag, dealer->params.deojid, dealer->params.epc,
465 dealer->params.pdc, dealer->params.edt);
466 }
467 else{
468 ecn_add_edt(dealer->ecnl_mag, dealer->params.epc,
469 dealer->params.pdc, dealer->params.edt);
470 }
471 break;
472 case WAMP_DEALER_PROCEDURE_ECNL_SETGET:
473 if (dealer->ecnl_mag == NULL){
474 ecn_esv_set_get(&dealer->ecnl_mag, dealer->params.deojid, dealer->params.epc,
475 dealer->params.pdc, dealer->params.edt);
476 }
477 else{
478 ecn_add_edt(dealer->ecnl_mag, dealer->params.epc,
479 dealer->params.pdc, dealer->params.edt);
480 }
481 break;
482 }
483 break;
484 }
485 break;
486 }
487 break;
488 }
489 break;
490 }
491}
492
493static void wamp_dealer_call_arduino_param(wamp_dealer_t *dealer,
494 jsonsl_action_t action, struct jsonsl_state_st *state, const char *buf)
495{
496 static const char pin[] = "pin";
497 static const char mode[] = "mode";
498 static const char value[] = "value";
499 static const char INPUT[] = "INPUT";
500 static const char OUTPUT[] = "OUTPUT";
501 static const char INPUT_PULLUP[] = "INPUT_PULLUP";
502 static const char HIGH[] = "HIGH";
503 static const char LOW[] = "LOW";
504
505 switch (state->level) {
506 case 3:
507 switch (action){
508 case JSONSL_ACTION_POP:
509 switch (state->type)
510 {
511 case JSONSL_T_HKEY:
512 if(strcmp(pin, dealer->s->jsn_buf) == 0){
513 dealer->state = WAMP_DEALER_STATE_PIN;
514 }
515 else if(strcmp(mode, dealer->s->jsn_buf) == 0){
516 dealer->state = WAMP_DEALER_STATE_MODE;
517 }
518 else if(strcmp(value, dealer->s->jsn_buf) == 0){
519 if(dealer->procedure == WAMP_DEALER_PROCEDURE_DIGITAL_WRITE)
520 dealer->state = WAMP_DEALER_STATE_DIGITAL_VALUE;
521 else if(dealer->procedure == WAMP_DEALER_PROCEDURE_ANALOG_WRITE)
522 dealer->state = WAMP_DEALER_STATE_ANALOG_VALUE;
523 }
524 break;
525 case JSONSL_T_STRING:
526 switch(dealer->state){
527 case WAMP_DEALER_STATE_MODE:
528 if(strcmp(INPUT, dealer->s->jsn_buf) == 0){
529 dealer->arduino_params.mode = WAMP_DEALER_PIN_MODE_INPUT;
530 }
531 else if(strcmp(OUTPUT, dealer->s->jsn_buf) == 0){
532 dealer->arduino_params.mode = WAMP_DEALER_PIN_MODE_OUTPUT;
533 }
534 else if(strcmp(INPUT_PULLUP, dealer->s->jsn_buf) == 0){
535 dealer->arduino_params.mode = WAMP_DEALER_PIN_MODE_INPUT_PULLUP;
536 }
537 break;
538 case WAMP_DEALER_STATE_DIGITAL_VALUE:
539 if(strcmp(HIGH, dealer->s->jsn_buf) == 0){
540 dealer->arduino_params.digval = WAMP_DEALER_DIGITAL_VALUE_HIGH;
541 }
542 else if(strcmp(LOW, dealer->s->jsn_buf) == 0){
543 dealer->arduino_params.digval = WAMP_DEALER_DIGITAL_VALUE_LOW;
544 }
545 break;
546 }
547 break;
548 case JSONSL_T_SPECIAL:
549 switch(dealer->state){
550 case WAMP_DEALER_STATE_PIN:
551 dealer->arduino_params.pin = atoi(dealer->s->jsn_buf);
552 break;
553 case WAMP_DEALER_STATE_ANALOG_VALUE:
554 dealer->arduino_params.anaval = atoi(dealer->s->jsn_buf);
555 break;
556 }
557 break;
558 default:
559 break;
560 }
561 break;
562 }
563 break;
564 }
565}
566
567static void wamp_dealer_call_init_params_param(wamp_dealer_t *dealer,
568 jsonsl_action_t action, struct jsonsl_state_st *state, const char *buf)
569{
570 static const char macAddr[] = "macAddr";
571
572 switch (state->level) {
573 case 3:
574 switch (action){
575 case JSONSL_ACTION_POP:
576 switch (state->type)
577 {
578 case JSONSL_T_HKEY:
579 if(strcmp(macAddr, dealer->s->jsn_buf) == 0){
580 dealer->state = WAMP_DEALER_STATE_MAC_ADDR_VALUE;
581 memset(&dealer->init_params, 0, sizeof(dealer->init_params));
582 }
583 break;
584 default:
585 break;
586 }
587 break;
588 }
589 break;
590 case 4:
591 switch (action){
592 case JSONSL_ACTION_POP:
593 switch (state->type)
594 {
595 case JSONSL_T_SPECIAL:
596 switch(dealer->state){
597 case WAMP_DEALER_STATE_MAC_ADDR_VALUE:
598 dealer->init_params.mac_addr[dealer->init_params.pos++] = atoi(dealer->s->jsn_buf);
599 break;
600 }
601 break;
602 }
603 break;
604 }
605 break;
606 }
607}
608
609void wamp_dealer_call_close(struct wamp_state *s)
610{
611 wamp_dealer_t *dealer = &s->dealer;
612 ER ret;
613
614 dealer->error = internal_error;
615
616 // send RESULT
617 dealer->call_close(dealer);
618
619 if (dealer->error != NULL){
620 ret = wamp_send_error_res(s, WAMP_CODE_CALL, dealer->requestId, dealer->error);
621 if (ret != E_OK) {
622 syslog(LOG_WARNING, "wamp_dealer_call_close() : wamp_send_error_res() result = %d", ret);
623 }
624 dealer->error = NULL;
625 }
626}
627
628static void wamp_dealer_none_close(struct wamp_dealer *dealer)
629{
630 wamp_state_t *s = dealer->s;
631 ER ret;
632
633 dealer->error = NULL;
634 ret = wamp_send_error_res(s, WAMP_CODE_CALL, dealer->requestId, invalid_request);
635 if (ret != E_OK) {
636 syslog(LOG_WARNING, "wamp_dealer_none_close() : wamp_send_error_res() result = %d", ret);
637 }
638}
639
640static void wamp_dealer_get_devicelist_close(struct wamp_dealer *dealer)
641{
642 dealer->error = NULL;
643 main_get_device_list(dealer->requestId, dealer);
644}
645
646void wamp_dealer_set_devicelist(struct wamp_dealer *dealer, ECN_FBS_ID msg)
647{
648 wamp_state_t *s = dealer->s;
649 ecn_inm_get_device_item_t device;
650 ECN_FBS_SSIZE_T rlen;
651 echonetlite_device_t *dev, *end = &dealer->devices[sizeof(dealer->devices) / sizeof(dealer->devices[0])];
652 ER ret;
653
654 /* 機器情報をクリア */
655 for(dev = dealer->devices; dev < end; dev++){
656 dev->deviceId = 0;
657 }
658
659 /* メッセージから機器情報を作成 */
660 for(dev = dealer->devices; dev < end; ){
661 ret = _ecn_fbs_get_data(msg, &device, sizeof(device), &rlen);
662 if ((ret != E_OK) || (rlen != sizeof(device)))
663 break;
664
665 if (device.enodid == 0)
666 continue;
667
668 dev->deviceId = device.eobjid;
669 dev->nodeId = device.enodid;
670 dev->addrId = device.addrid;
671 dev->deviceType = (device.eojx1 << 8) | device.eojx2;
672 dev->x3 = device.eojx3;
673 dev->status = device.state != 0;
674
675 dev++;
676 }
677
678 dealer->current_device = &dealer->devices[0];
679 dealer->devices_pos = 0;
680 main_get_device_ipaddr(dealer->requestId, dealer, dealer->current_device->addrId);
681}
682
683void wamp_dealer_get_devicelist_timeout(struct wamp_dealer *dealer)
684{
685 wamp_state_t *s = dealer->s;
686 ER ret;
687
688 ret = wamp_send_error_res(s, WAMP_CODE_CALL, dealer->requestId, internal_error);
689 if (ret != E_OK) {
690 syslog(LOG_WARNING, "wamp_dealer_get_devicelist_timeout() : wamp_send_error_res() result = %d", ret);
691 }
692}
693
694void wamp_dealer_set_ipaddr(struct wamp_dealer *dealer, char *ipaddr)
695{
696 echonetlite_device_t *dev, *end = &dealer->devices[sizeof(dealer->devices) / sizeof(dealer->devices[0])];
697 int i, devicePos;
698
699 dev = dealer->current_device;
700 if ((dev != NULL) && (ipaddr != NULL)){
701 strcpy_s(dev->ip_addr, sizeof(dev->ip_addr), ipaddr);
702
703 kadecot_names_get_device_type_name(dev->deviceType, dev->deviceTypeStr, sizeof(dev->deviceTypeStr));
704 strcpy_s(dev->description, sizeof(dev->description), dev->deviceTypeStr);
705 strcpy_s(dev->nickname, sizeof(dev->nickname), dev->deviceTypeStr);
706 }
707
708 devicePos = sizeof(dealer->devices) / sizeof(dealer->devices[0]);
709 for(i = dealer->devices_pos + 1, dev = &dealer->devices[i]; dev < end; i++, dev++){
710 if(dev->deviceId == 0)
711 continue;
712
713 devicePos = i;
714 break;
715 }
716
717 if (devicePos == sizeof(dealer->devices) / sizeof(dealer->devices[0])){
718 dealer->current_device = NULL;
719 dealer->devices_pos = 0;
720 wamp_dealer_get_devicelist(dealer);
721 }
722 else{
723 dealer->current_device = &dealer->devices[devicePos];
724 dealer->devices_pos = devicePos;
725 main_get_device_ipaddr(dealer->requestId, dealer, dealer->current_device->addrId);
726 }
727}
728
729void wamp_dealer_get_ipaddr_timeout(struct wamp_dealer *dealer)
730{
731 wamp_state_t *s = dealer->s;
732 ER ret;
733
734 ret = wamp_send_error_res(s, WAMP_CODE_CALL, dealer->requestId, internal_error);
735 if (ret != E_OK) {
736 syslog(LOG_WARNING, "wamp_dealer_get_ipaddr_timeout() : wamp_send_error_res() result = %d", ret);
737 }
738}
739
740static void wamp_dealer_get_devicelist(struct wamp_dealer *dealer)
741{
742 wamp_state_t *s = dealer->s;
743 echonetlite_device_t *dev, *end = &dealer->devices[sizeof(dealer->devices) / sizeof(dealer->devices[0])];
744 ECN_FBS_ID buf;
745 ECN_FBS_SSIZE_T pos = 0, start;
746 char ip_addr[16];
747 ER ret;
748
749 ret = _ecn_fbs_cre(1, &buf);
750 if (ret != E_OK) {
751 syslog(LOG_WARNING, "_ecn_fbs_cre() result = %d", ret);
752 return;
753 }
754
755 ret = fbs_printf(buf, &pos, "[50,%d,{},[],", dealer->requestId);
756 if (ret != E_OK) {
757 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
758 _ecn_fbs_del(buf);
759 return;
760 }
761
762 ret = fbs_printf(buf, &pos, "{\"deviceList\":["
763 "{\"description\":\"GR-SAKURA\",\"deviceId\":1,\"deviceType\":\"GrSakura\",\"ip_addr\":\"%s\",\"nickname\":\"GR-SAKURA\",\"protocol\":\"arduino\",\"status\":true},",
764 ip2str(ip_addr, uip_hostaddr));
765 if (ret != E_OK) {
766 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
767 _ecn_fbs_del(buf);
768 return;
769 }
770
771 start = pos;
772 for(dev = dealer->devices; dev < end; dev++){
773 if(dev->deviceId == 0)
774 continue;
775
776 ret = fbs_printf(buf, &pos, "{\"description\":\"%s\",\"deviceId\":%d,\"deviceType\":\"%s\",\"ip_addr\":\"%s\",\"nickname\":\"%s\",\"protocol\":\"echonetlite\",\"status\":%s},",
777 dev->description, dev->deviceId, dev->deviceTypeStr, dev->ip_addr, dev->nickname, dev->status ? "true" : "false");
778 if (ret != E_OK) {
779 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
780 _ecn_fbs_del(buf);
781 return;
782 }
783 }
784
785 /* 最後の","を消す */
786 if(start != pos)
787 pos--;
788
789 ret = fbs_printf(buf, &pos, "]}]");
790 if (ret != E_OK) {
791 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
792 _ecn_fbs_del(buf);
793 return;
794 }
795
796 ret = main_send_message(buf, s->wbsid);
797 if (ret != E_OK) {
798 syslog(LOG_WARNING, "wamp_dealer_get_devicelist() : main_send_message() result = %d", ret);
799 }
800}
801
802static void wamp_dealer_kadecot_get_close(struct wamp_dealer *dealer)
803{
804 echonetlite_device_t *device = dealer->current_device;
805 uint16_t devType;
806
807 if(device == NULL)
808 return;
809
810 devType = device->deviceType;
811 if(devType == 0)
812 return;
813
814 if (dealer->params.epc == 0) {
815 dealer->error = method_not_found;
816 syslog(7, method_not_found);
817 return;
818 }
819
820 dealer->error = NULL;
821 main_kadecot_get(dealer->requestId, dealer, device->deviceId, dealer->params.epc);
822}
823
824void wamp_dealer_kadecot_get(struct wamp_dealer *dealer, int deviceId, uint8_t epc,
825 uint8_t pdc, uint8_t *edt)
826{
827 wamp_state_t *s = dealer->s;
828 ECN_FBS_ID buf;
829 ECN_FBS_SSIZE_T pos = 0, start;
830 int i;
831 const char *propName;
832 ER ret;
833
834 ret = _ecn_fbs_cre(1, &buf);
835 if (ret != E_OK) {
836 syslog(LOG_WARNING, "_ecn_fbs_cre() result = %d", ret);
837 return;
838 }
839
840 ret = fbs_printf(buf, &pos, "[50,%d,{\"deviceId\":%d},[],",
841 dealer->requestId, deviceId);
842 if (ret != E_OK) {
843 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
844 _ecn_fbs_del(buf);
845 return;
846 }
847
848 propName = dealer->params.prop_name;
849 if(propName[0] != '\0'){
850 ret = fbs_printf(buf, &pos, "{\"propertyName\":\"%s\",\"propertyValue\":[",
851 propName);
852 if (ret != E_OK) {
853 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
854 _ecn_fbs_del(buf);
855 return;
856 }
857 }
858 else{
859 ret = fbs_printf(buf, &pos, "{\"propertyName\":\"0x%02x\",\"propertyValue\":[",
860 epc);
861 if (ret != E_OK) {
862 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
863 _ecn_fbs_del(buf);
864 return;
865 }
866 }
867
868 start = pos;
869 for(i = 0; i < pdc; i++){
870 ret = fbs_printf(buf, &pos, "%d,", edt[i]);
871 if (ret != E_OK) {
872 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
873 _ecn_fbs_del(buf);
874 return;
875 }
876 }
877
878 /* 最後の","を消す */
879 if(start != pos)
880 pos--;
881
882 ret = fbs_printf(buf, &pos, "]}]");
883 if (ret != E_OK) {
884 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
885 _ecn_fbs_del(buf);
886 return;
887 }
888
889 ret = main_send_message(buf, s->wbsid);
890 if (ret != E_OK) {
891 syslog(LOG_WARNING, "wamp_dealer_kadecot_get() : main_send_message() result = %d", ret);
892 }
893}
894
895void wamp_dealer_kadecot_set_timeout(struct wamp_dealer *dealer)
896{
897 wamp_state_t *s = dealer->s;
898 ER ret;
899
900 ret = wamp_send_error_res(s, WAMP_CODE_CALL, dealer->requestId, internal_error);
901 if (ret != E_OK) {
902 syslog(LOG_WARNING, "wamp_dealer_kadecot_set_timeout() : wamp_send_error_res() result = %d", ret);
903 }
904}
905
906static void wamp_dealer_kadecot_set_close(struct wamp_dealer *dealer)
907{
908 echonetlite_device_t *device = dealer->current_device;
909 uint16_t devType;
910
911 if(device == NULL)
912 return;
913
914 devType = device->deviceType;
915 if(devType == 0)
916 return;
917
918 if(dealer->params.epc == 0){
919 dealer->error = method_not_found;
920 return;
921 }
922
923 dealer->error = NULL;
924 main_kadecot_set(dealer->requestId, dealer, device->deviceId, dealer->params.epc,
925 dealer->params.pdc, dealer->params.edt);
926}
927
928void wamp_dealer_kadecot_set(struct wamp_dealer *dealer, int deviceId, uint8_t epc)
929{
930 wamp_state_t *s = dealer->s;
931 ECN_FBS_ID buf;
932 ECN_FBS_SSIZE_T pos = 0, start;
933 int i;
934 const char *propName;
935 ER ret;
936
937 ret = _ecn_fbs_cre(1, &buf);
938 if (ret != E_OK) {
939 syslog(LOG_WARNING, "_ecn_fbs_cre() result = %d", ret);
940 return;
941 }
942
943 ret = fbs_printf(buf, &pos, "[50,%d,{\"deviceId\":%d},[],",
944 dealer->requestId, deviceId);
945 if (ret != E_OK) {
946 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
947 _ecn_fbs_del(buf);
948 return;
949 }
950
951 propName = dealer->params.prop_name;
952 if(propName[0] != '\0'){
953 ret = fbs_printf(buf, &pos, "{\"propertyName\":\"%s\",\"propertyValue\":[",
954 propName);
955 if (ret != E_OK) {
956 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
957 _ecn_fbs_del(buf);
958 return;
959 }
960 }
961 else{
962 ret = fbs_printf(buf, &pos, "{\"propertyName\":\"0x%02x\",\"propertyValue\":[",
963 epc);
964 if (ret != E_OK) {
965 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
966 _ecn_fbs_del(buf);
967 return;
968 }
969 }
970
971 start = pos;
972 for(i = 0; i < dealer->params.pdc; i++){
973 ret = fbs_printf(buf, &pos, "%d,", dealer->params.edt[i]);
974 if (ret != E_OK) {
975 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
976 _ecn_fbs_del(buf);
977 return;
978 }
979 }
980
981 /* 最後の","を消す */
982 if(start != pos)
983 pos--;
984
985 ret = fbs_printf(buf, &pos, "]}]");
986 if (ret != E_OK) {
987 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
988 _ecn_fbs_del(buf);
989 return;
990 }
991
992 ret = main_send_message(buf, s->wbsid);
993 if (ret != E_OK) {
994 syslog(LOG_WARNING, "wamp_dealer_kadecot_set() : main_send_message() result = %d", ret);
995 }
996}
997
998void wamp_dealer_kadecot_get_timeout(struct wamp_dealer *dealer)
999{
1000 wamp_state_t *s = dealer->s;
1001 ER ret;
1002
1003 ret = wamp_send_error_res(s, WAMP_CODE_CALL, dealer->requestId, internal_error);
1004 if (ret != E_OK) {
1005 syslog(LOG_WARNING, "wamp_dealer_kadecot_get_timeout() : wamp_send_error_res() result = %d", ret);
1006 }
1007}
1008
1009static void wamp_dealer_get_deviceinfo_close(struct wamp_dealer *dealer)
1010{
1011 echonetlite_device_t *device = dealer->current_device;
1012 if(device == NULL)
1013 return;
1014
1015 dealer->error = NULL;
1016 main_get_device_info(dealer->requestId, dealer, device->deviceId);
1017}
1018
1019void wamp_dealer_set_deviceinfo(struct wamp_dealer *dealer, int deviceId, uint8_t *pmset,
1020 uint8_t *pmget, uint8_t *pmanno)
1021{
1022 wamp_state_t *s = dealer->s;
1023 echonetlite_device_t *device = dealer->current_device;
1024 ECN_FBS_ID buf;
1025 ECN_FBS_SSIZE_T pos = 0;
1026 int i, j, m, prop;
1027 ER ret;
1028
1029 if(device == NULL)
1030 return;
1031
1032 ret = _ecn_fbs_cre(1, &buf);
1033 if (ret != E_OK) {
1034 syslog(LOG_WARNING, "_ecn_fbs_cre() result = %d", ret);
1035 return;
1036 }
1037
1038 ret = fbs_printf(buf, &pos, "[50,%d,{\"deviceId\":%d},[],",
1039 dealer->requestId, deviceId);
1040 if (ret != E_OK) {
1041 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1042 _ecn_fbs_del(buf);
1043 return;
1044 }
1045
1046 ret = fbs_printf(buf, &pos, "{\"x1\":%d,\"x2\":%d,\"x3\":%d,\"enodid\":%d,\"properties\":[",
1047 device->deviceType >> 8, device->deviceType & 0xFF, device->x3, device->nodeId);
1048 if (ret != E_OK) {
1049 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1050 _ecn_fbs_del(buf);
1051 return;
1052 }
1053
1054 prop = pos;
1055 for(i = 0; i < 16; i++){
1056 uint8_t pms = pmset[i], pmg = pmget[i], pma = pmanno[i], exs = pms | pmg | pma;
1057
1058 for(j = 0; j < 8; j++){
1059 m = 1 << j;
1060 if(!(exs & m))
1061 continue;
1062
1063 ret = fbs_printf(buf, &pos, "{\"epc\":%d,\"flag\":\"", 0x80 | (j << 4) | i);
1064 if (ret != E_OK) {
1065 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1066 _ecn_fbs_del(buf);
1067 return;
1068 }
1069 if (pms & m) {
1070 ret = fbs_printf(buf, &pos, "RULE_SET,");
1071 if (ret != E_OK) {
1072 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1073 _ecn_fbs_del(buf);
1074 return;
1075 }
1076 }
1077 if (pmg & m) {
1078 ret = fbs_printf(buf, &pos, "RULE_GET,");
1079 if (ret != E_OK) {
1080 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1081 _ecn_fbs_del(buf);
1082 return;
1083 }
1084 }
1085 if (pma & m) {
1086 ret = fbs_printf(buf, &pos, "ANNOUNCE,");
1087 if (ret != E_OK) {
1088 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1089 _ecn_fbs_del(buf);
1090 return;
1091 }
1092 }
1093 /* 最後の","を消す */
1094 pos--;
1095
1096 ret = fbs_printf(buf, &pos, "\"},");
1097 if (ret != E_OK) {
1098 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1099 _ecn_fbs_del(buf);
1100 return;
1101 }
1102 }
1103 }
1104
1105 /* 最後の","を消す */
1106 if(prop != pos)
1107 pos--;
1108
1109 ret = fbs_printf(buf, &pos, "]}]");
1110 if (ret != E_OK) {
1111 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1112 _ecn_fbs_del(buf);
1113 return;
1114 }
1115
1116 ret = main_send_message(buf, s->wbsid);
1117 if (ret != E_OK) {
1118 syslog(LOG_WARNING, "wamp_dealer_set_deviceinfo() : main_send_message() result = %d", ret);
1119 }
1120}
1121
1122void wamp_dealer_get_deviceinfo_timeout(struct wamp_dealer *dealer)
1123{
1124 wamp_state_t *s = dealer->s;
1125 ER ret;
1126
1127 ret = wamp_send_error_res(s, WAMP_CODE_CALL, dealer->requestId, internal_error);
1128 if (ret != E_OK) {
1129 syslog(LOG_WARNING, "wamp_dealer_get_deviceinfo_timeout() : wamp_send_error_res() result = %d", ret);
1130 }
1131}
1132
1133static void wamp_dealer_ecnl_set_close(struct wamp_dealer *dealer)
1134{
1135 ER ret;
1136 echonetlite_device_t *device = dealer->current_device;
1137 ECN_FBS_ID buf = { (T_ECN_FST_BLK *)dealer->ecnl_mag };
1138
1139 if (dealer->ecnl_mag == NULL)
1140 return;
1141
1142 if(device == NULL){
1143 _ecn_fbs_del(buf);
1144 return;
1145 }
1146
1147 ret = main_ecnl_set(dealer->requestId, dealer, device->deviceId, dealer->ecnl_mag);
1148 if (ret == E_OK) {
1149 dealer->error = NULL;
1150 }
1151 else {
1152 _ecn_fbs_del(buf);
1153 }
1154
1155 dealer->ecnl_mag = NULL;
1156}
1157
1158void wamp_dealer_ecnl_set_res(struct wamp_dealer *dealer, T_EDATA *esv)
1159{
1160 wamp_state_t *s = dealer->s;
1161 echonetlite_device_t *device = dealer->current_device;
1162 ECN_FBS_ID buf;
1163 ECN_FBS_SSIZE_T pos = 0, start;
1164 uint8_t epc;
1165 uint8_t pdc;
1166 uint8_t p_edt[256];
1167 T_ENUM_EPC enm;
1168 int j;
1169 ER ret;
1170
1171 if(device == NULL)
1172 return;
1173
1174 ret = _ecn_fbs_cre(1, &buf);
1175 if (ret != E_OK) {
1176 syslog(LOG_WARNING, "_ecn_fbs_cre() result = %d", ret);
1177 return;
1178 }
1179
1180 ret = fbs_printf(buf, &pos, "[50,%d,{\"deviceId\":%d},[],",
1181 dealer->requestId, device->deviceId);
1182 if (ret != E_OK) {
1183 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1184 _ecn_fbs_del(buf);
1185 return;
1186 }
1187
1188 /* プロパティ値書き込み応答 0x71 */
1189 ret = fbs_printf(buf, &pos, "{\"esv\":113,\"sender\":%d,\"seoj\":\"%02x%02x%02x\",\"deoj\":\"%02x%02x%02x\",\"properties\":[",
1190 ecn_get_enod(esv), esv->hdr.edata.seoj.eojx1, esv->hdr.edata.seoj.eojx2, esv->hdr.edata.seoj.eojx3,
1191 esv->hdr.edata.deoj.eojx1, esv->hdr.edata.deoj.eojx2, esv->hdr.edata.deoj.eojx3);
1192 if (ret != E_OK) {
1193 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1194 _ecn_fbs_del(buf);
1195 return;
1196 }
1197
1198 ret = ecn_itr_ini(&enm, esv);
1199 if (ret != E_OK){
1200 syslog(LOG_ERROR, "ecn_itr_ini");
1201 return;
1202 }
1203
1204 start = pos;
1205 for(;;) {
1206 while ((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) {
1207 if (pdc == 0) {
1208 ret = fbs_printf(buf, &pos, "{\"epc\":%d},", epc);
1209 if (ret != E_OK) {
1210 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1211 _ecn_fbs_del(buf);
1212 return;
1213 }
1214 }
1215 else {
1216 ret = fbs_printf(buf, &pos, "{\"epc\":%d,\"edt\":\"", epc);
1217 if (ret != E_OK) {
1218 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1219 _ecn_fbs_del(buf);
1220 return;
1221 }
1222 for(j = 0; j < pdc; j++){
1223 ret = fbs_printf(buf, &pos, "%02x", p_edt[j]);
1224 if (ret != E_OK) {
1225 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1226 _ecn_fbs_del(buf);
1227 return;
1228 }
1229 }
1230 ret = fbs_printf(buf, &pos, "\"},");
1231 if (ret != E_OK) {
1232 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1233 _ecn_fbs_del(buf);
1234 return;
1235 }
1236 }
1237 }
1238 if(ret != E_BOVR){
1239 syslog(LOG_ERROR, "ecn_itr_nxt");
1240 break;
1241 }
1242 if(enm.is_eof)
1243 break;
1244 }
1245
1246 /* 最後の","を消す */
1247 if(start != pos)
1248 pos--;
1249
1250 ret = fbs_printf(buf, &pos, "]}]");
1251 if (ret != E_OK) {
1252 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1253 _ecn_fbs_del(buf);
1254 return;
1255 }
1256
1257 ret = main_send_message(buf, s->wbsid);
1258 if (ret != E_OK) {
1259 syslog(LOG_WARNING, "wamp_dealer_ecnl_set_res() : main_send_message() result = %d", ret);
1260 }
1261}
1262
1263void wamp_dealer_ecnl_set_timeout(struct wamp_dealer *dealer)
1264{
1265 wamp_state_t *s = dealer->s;
1266 ER ret;
1267
1268 ret = wamp_send_error_res(s, WAMP_CODE_CALL, dealer->requestId, internal_error);
1269 if (ret != E_OK) {
1270 syslog(LOG_WARNING, "wamp_dealer_ecnl_set_timeout() : wamp_send_error_res() result = %d", ret);
1271 }
1272}
1273
1274static void wamp_dealer_ecnl_get_close(struct wamp_dealer *dealer)
1275{
1276 ER ret;
1277 echonetlite_device_t *device = dealer->current_device;
1278 ECN_FBS_ID buf = { (T_ECN_FST_BLK *)dealer->ecnl_mag };
1279
1280 if (dealer->ecnl_mag == NULL)
1281 return;
1282
1283 if(device == NULL){
1284 _ecn_fbs_del(buf);
1285 return;
1286 }
1287
1288 ret = main_ecnl_get(dealer->requestId, dealer, device->deviceId, dealer->ecnl_mag);
1289 if (ret == E_OK) {
1290 dealer->error = NULL;
1291 }
1292 else {
1293 _ecn_fbs_del(buf);
1294 }
1295
1296 dealer->ecnl_mag = NULL;
1297}
1298
1299void wamp_dealer_ecnl_get_res(struct wamp_dealer *dealer, T_EDATA *esv)
1300{
1301 wamp_state_t *s = dealer->s;
1302 echonetlite_device_t *device = dealer->current_device;
1303 ECN_FBS_ID buf;
1304 ECN_FBS_SSIZE_T pos = 0, start;
1305 uint8_t epc;
1306 uint8_t pdc;
1307 uint8_t p_edt[256];
1308 T_ENUM_EPC enm;
1309 int j;
1310 ER ret;
1311
1312 if(device == NULL)
1313 return;
1314
1315 ret = _ecn_fbs_cre(1, &buf);
1316 if (ret != E_OK) {
1317 syslog(LOG_WARNING, "_ecn_fbs_cre() result = %d", ret);
1318 return;
1319 }
1320
1321 ret = fbs_printf(buf, &pos, "[50,%d,{\"deviceId\":%d},[],",
1322 dealer->requestId, device->deviceId);
1323 if (ret != E_OK) {
1324 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1325 _ecn_fbs_del(buf);
1326 return;
1327 }
1328
1329 /* プロパティ値読み込み応答 0x72 */
1330 ret = fbs_printf(buf, &pos, "{\"esv\":114,\"sender\":%d,\"seoj\":\"%02x%02x%02x\",\"deoj\":\"%02x%02x%02x\",\"properties\":[",
1331 ecn_get_enod(esv), esv->hdr.edata.seoj.eojx1, esv->hdr.edata.seoj.eojx2, esv->hdr.edata.seoj.eojx3,
1332 esv->hdr.edata.deoj.eojx1, esv->hdr.edata.deoj.eojx2, esv->hdr.edata.deoj.eojx3);
1333 if (ret != E_OK) {
1334 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1335 _ecn_fbs_del(buf);
1336 return;
1337 }
1338
1339 ret = ecn_itr_ini(&enm, esv);
1340 if (ret != E_OK){
1341 syslog(LOG_ERROR, "ecn_itr_ini");
1342 return;
1343 }
1344
1345 start = pos;
1346 for(;;) {
1347 while ((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) {
1348 if (pdc == 0) {
1349 ret = fbs_printf(buf, &pos, "{\"epc\":%d},", epc);
1350 if (ret != E_OK) {
1351 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1352 _ecn_fbs_del(buf);
1353 return;
1354 }
1355 }
1356 else {
1357 ret = fbs_printf(buf, &pos, "{\"epc\":%d,\"edt\":\"", epc);
1358 if (ret != E_OK) {
1359 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1360 _ecn_fbs_del(buf);
1361 return;
1362 }
1363 for(j = 0; j < pdc; j++){
1364 ret = fbs_printf(buf, &pos, "%02x", p_edt[j]);
1365 if (ret != E_OK) {
1366 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1367 _ecn_fbs_del(buf);
1368 return;
1369 }
1370 }
1371 ret = fbs_printf(buf, &pos, "\"},");
1372 if (ret != E_OK) {
1373 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1374 _ecn_fbs_del(buf);
1375 return;
1376 }
1377 }
1378 }
1379 if(ret != E_BOVR){
1380 syslog(LOG_ERROR, "ecn_itr_nxt");
1381 break;
1382 }
1383 if(enm.is_eof)
1384 break;
1385 }
1386
1387 /* 最後の","を消す */
1388 if(start != pos)
1389 pos--;
1390
1391 ret = fbs_printf(buf, &pos, "]}]");
1392 if (ret != E_OK) {
1393 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1394 _ecn_fbs_del(buf);
1395 return;
1396 }
1397
1398 ret = main_send_message(buf, s->wbsid);
1399 if (ret != E_OK) {
1400 syslog(LOG_WARNING, "wamp_dealer_ecnl_get_res() : main_send_message() result = %d", ret);
1401 }
1402}
1403
1404void wamp_dealer_ecnl_get_timeout(struct wamp_dealer *dealer)
1405{
1406 wamp_state_t *s = dealer->s;
1407 ER ret;
1408
1409 ret = wamp_send_error_res(s, WAMP_CODE_CALL, dealer->requestId, internal_error);
1410 if (ret != E_OK) {
1411 syslog(LOG_WARNING, "wamp_dealer_ecnl_get_timeout() : wamp_send_error_res() result = %d", ret);
1412 }
1413}
1414
1415static void wamp_dealer_ecnl_setget_close(struct wamp_dealer *dealer)
1416{
1417 ER ret;
1418 echonetlite_device_t *device = dealer->current_device;
1419 ECN_FBS_ID buf = { (T_ECN_FST_BLK *)dealer->ecnl_mag };
1420
1421 if (dealer->ecnl_mag == NULL)
1422 return;
1423
1424 if(device == NULL){
1425 _ecn_fbs_del(buf);
1426 return;
1427 }
1428
1429 ret = main_ecnl_setget(dealer->requestId, dealer, device->deviceId, dealer->ecnl_mag);
1430 if (ret == E_OK) {
1431 dealer->error = NULL;
1432 }
1433 else {
1434 _ecn_fbs_del(buf);
1435 }
1436
1437 dealer->ecnl_mag = NULL;
1438}
1439
1440void wamp_dealer_ecnl_setget_res(struct wamp_dealer *dealer, T_EDATA *esv)
1441{
1442 wamp_state_t *s = dealer->s;
1443 echonetlite_device_t *device = dealer->current_device;
1444 ECN_FBS_ID buf;
1445 ECN_FBS_SSIZE_T pos = 0, start;
1446 uint8_t epc;
1447 uint8_t pdc;
1448 uint8_t p_edt[256];
1449 T_ENUM_EPC enm;
1450 int j;
1451 ER ret;
1452
1453 if(device == NULL)
1454 return;
1455
1456 ret = _ecn_fbs_cre(1, &buf);
1457 if (ret != E_OK) {
1458 syslog(LOG_WARNING, "_ecn_fbs_cre() result = %d", ret);
1459 return;
1460 }
1461
1462 ret = fbs_printf(buf, &pos, "[50,%d,{\"deviceId\":%d},[],",
1463 dealer->requestId, device->deviceId);
1464 if (ret != E_OK) {
1465 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1466 _ecn_fbs_del(buf);
1467 return;
1468 }
1469
1470 /* プロパティ値書き込み・読み込み応答 0x7E */
1471 ret = fbs_printf(buf, &pos, "{\"esv\":126,\"sender\":%d,\"seoj\":\"%02x%02x%02x\",\"deoj\":\"%02x%02x%02x\",\"properties\":[",
1472 ecn_get_enod(esv), esv->hdr.edata.seoj.eojx1, esv->hdr.edata.seoj.eojx2, esv->hdr.edata.seoj.eojx3,
1473 esv->hdr.edata.deoj.eojx1, esv->hdr.edata.deoj.eojx2, esv->hdr.edata.deoj.eojx3);
1474 if (ret != E_OK) {
1475 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1476 _ecn_fbs_del(buf);
1477 return;
1478 }
1479
1480 ret = ecn_itr_ini(&enm, esv);
1481 if (ret != E_OK){
1482 syslog(LOG_ERROR, "ecn_itr_ini");
1483 return;
1484 }
1485
1486 start = pos;
1487 for(;;) {
1488 while ((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) {
1489 if (pdc == 0) {
1490 ret = fbs_printf(buf, &pos, "{\"epc\":%d},", epc);
1491 if (ret != E_OK) {
1492 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1493 _ecn_fbs_del(buf);
1494 return;
1495 }
1496 }
1497 else {
1498 ret = fbs_printf(buf, &pos, "{\"epc\":%d,\"edt\":\"", epc);
1499 if (ret != E_OK) {
1500 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1501 _ecn_fbs_del(buf);
1502 return;
1503 }
1504 for(j = 0; j < pdc; j++){
1505 ret = fbs_printf(buf, &pos, "%02x", p_edt[j]);
1506 if (ret != E_OK) {
1507 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1508 _ecn_fbs_del(buf);
1509 return;
1510 }
1511 }
1512 ret = fbs_printf(buf, &pos, "\"},");
1513 if (ret != E_OK) {
1514 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1515 _ecn_fbs_del(buf);
1516 return;
1517 }
1518 }
1519 }
1520 if(ret != E_BOVR){
1521 syslog(LOG_ERROR, "ecn_itr_nxt");
1522 break;
1523 }
1524 if(enm.is_eof)
1525 break;
1526 }
1527
1528 /* 最後の","を消す */
1529 if(start != pos)
1530 pos--;
1531
1532 ret = fbs_printf(buf, &pos, "]}]");
1533 if (ret != E_OK) {
1534 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1535 _ecn_fbs_del(buf);
1536 return;
1537 }
1538
1539 ret = main_send_message(buf, s->wbsid);
1540 if (ret != E_OK) {
1541 syslog(LOG_WARNING, "wamp_dealer_ecnl_setget_res() : main_send_message() result = %d", ret);
1542 }
1543}
1544
1545void wamp_dealer_ecnl_setget_timeout(struct wamp_dealer *dealer)
1546{
1547 wamp_state_t *s = dealer->s;
1548 ER ret;
1549
1550 ret = wamp_send_error_res(s, WAMP_CODE_CALL, dealer->requestId, internal_error);
1551 if (ret != E_OK) {
1552 syslog(LOG_WARNING, "wamp_dealer_ecnl_setget_timeout() : wamp_send_error_res() result = %d", ret);
1553 }
1554}
1555
1556static void wamp_dealer_pin_mode_close(struct wamp_dealer *dealer)
1557{
1558 wamp_state_t *s = dealer->s;
1559 ECN_FBS_ID buf;
1560 ECN_FBS_SSIZE_T pos = 0;
1561 ER ret = E_PAR;
1562
1563 switch(dealer->arduino_params.mode){
1564 case WAMP_DEALER_PIN_MODE_INPUT:
1565 ret = arduino_pinMode(dealer->arduino_params.pin, ARDUINO_PIN_MODE_INPUT);
1566 break;
1567 case WAMP_DEALER_PIN_MODE_OUTPUT:
1568 ret = arduino_pinMode(dealer->arduino_params.pin, ARDUINO_PIN_MODE_OUTPUT);
1569 break;
1570 case WAMP_DEALER_PIN_MODE_INPUT_PULLUP:
1571 ret = arduino_pinMode(dealer->arduino_params.pin, ARDUINO_PIN_MODE_INPUT_PULLUP);
1572 break;
1573 }
1574
1575 if (ret != E_OK)
1576 return;
1577
1578 ret = _ecn_fbs_cre(1, &buf);
1579 if (ret != E_OK) {
1580 syslog(LOG_WARNING, "_ecn_fbs_cre() result = %d", ret);
1581 return;
1582 }
1583
1584 ret = fbs_printf(buf, &pos, "[50,%d,{\"deviceId\":1},[],{}]", dealer->requestId);
1585 if (ret != E_OK) {
1586 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1587 _ecn_fbs_del(buf);
1588 return;
1589 }
1590
1591 ret = main_send_message(buf, s->wbsid);
1592 if (ret != E_OK) {
1593 syslog(LOG_WARNING, "main_send_message() result = %d", ret);
1594 return;
1595 }
1596
1597 dealer->error = NULL;
1598}
1599
1600static void wamp_dealer_digital_write_close(struct wamp_dealer *dealer)
1601{
1602 wamp_state_t *s = dealer->s;
1603 ECN_FBS_ID buf;
1604 ECN_FBS_SSIZE_T pos = 0;
1605 ER ret = E_PAR;
1606
1607 switch(dealer->arduino_params.digval){
1608 case WAMP_DEALER_DIGITAL_VALUE_HIGH:
1609 ret = arduino_digitalWrite(dealer->arduino_params.pin, ARDUINO_DIGITAL_VALUE_HIGH);
1610 break;
1611 case WAMP_DEALER_DIGITAL_VALUE_LOW:
1612 ret = arduino_digitalWrite(dealer->arduino_params.pin, ARDUINO_DIGITAL_VALUE_LOW);
1613 break;
1614 }
1615
1616 if (ret != E_OK)
1617 return;
1618
1619 ret = _ecn_fbs_cre(1, &buf);
1620 if (ret != E_OK) {
1621 syslog(LOG_WARNING, "_ecn_fbs_cre() result = %d", ret);
1622 return;
1623 }
1624
1625 ret = fbs_printf(buf, &pos, "[50,%d,{\"deviceId\":1},[],{}]", dealer->requestId);
1626 if (ret != E_OK) {
1627 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1628 _ecn_fbs_del(buf);
1629 return;
1630 }
1631
1632 ret = main_send_message(buf, s->wbsid);
1633 if (ret != E_OK) {
1634 syslog(LOG_WARNING, "main_send_message() result = %d", ret);
1635 return;
1636 }
1637
1638 dealer->error = NULL;
1639}
1640
1641static void wamp_dealer_digital_read_close(struct wamp_dealer *dealer)
1642{
1643 const static char *values[] = { "", "HIGH", "LOW" };
1644 wamp_state_t *s = dealer->s;
1645 ECN_FBS_ID buf;
1646 ECN_FBS_SSIZE_T pos = 0;
1647 arduino_digital_value_t value;
1648 ER ret;
1649
1650 ret = arduino_digitalRead(dealer->arduino_params.pin, &value);
1651 if (ret != E_OK)
1652 return;
1653
1654 ret = _ecn_fbs_cre(1, &buf);
1655 if (ret != E_OK) {
1656 syslog(LOG_WARNING, "_ecn_fbs_cre() result = %d", ret);
1657 return;
1658 }
1659
1660 ret = fbs_printf(buf, &pos, "[50,%d,{\"deviceId\":1},[],{", dealer->requestId);
1661 if (ret != E_OK) {
1662 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1663 _ecn_fbs_del(buf);
1664 return;
1665 }
1666
1667 ret = fbs_printf(buf, &pos, "\"pin\":%d,\"value\":\"%s\"",
1668 dealer->arduino_params.pin, values[value]);
1669 if (ret != E_OK) {
1670 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1671 _ecn_fbs_del(buf);
1672 return;
1673 }
1674
1675 ret = fbs_printf(buf, &pos, "}]");
1676 if (ret != E_OK) {
1677 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1678 _ecn_fbs_del(buf);
1679 return;
1680 }
1681
1682 ret = main_send_message(buf, s->wbsid);
1683 if (ret != E_OK) {
1684 syslog(LOG_WARNING, "main_send_message() result = %d", ret);
1685 return;
1686 }
1687
1688 dealer->error = NULL;
1689}
1690
1691static void wamp_dealer_analog_read_close(struct wamp_dealer *dealer)
1692{
1693 wamp_state_t *s = dealer->s;
1694 ECN_FBS_ID buf;
1695 ECN_FBS_SSIZE_T pos = 0;
1696 int value;
1697 ER ret;
1698
1699 ret = arduino_analogRead(dealer->arduino_params.pin, &value);
1700 if (ret != E_OK)
1701 return;
1702
1703 ret = _ecn_fbs_cre(1, &buf);
1704 if (ret != E_OK) {
1705 syslog(LOG_WARNING, "_ecn_fbs_cre() result = %d", ret);
1706 return;
1707 }
1708
1709 ret = fbs_printf(buf, &pos, "[50,%d,{\"deviceId\":1},[],{", dealer->requestId);
1710 if (ret != E_OK) {
1711 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1712 _ecn_fbs_del(buf);
1713 return;
1714 }
1715
1716 ret = fbs_printf(buf, &pos, "\"pin\":%d,\"value\":%d",
1717 dealer->arduino_params.pin, value);
1718 if (ret != E_OK) {
1719 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1720 _ecn_fbs_del(buf);
1721 return;
1722 }
1723
1724 ret = fbs_printf(buf, &pos, "}]");
1725 if (ret != E_OK) {
1726 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1727 _ecn_fbs_del(buf);
1728 return;
1729 }
1730
1731 ret = main_send_message(buf, s->wbsid);
1732 if (ret != E_OK) {
1733 syslog(LOG_WARNING, "main_send_message() result = %d", ret);
1734 return;
1735 }
1736
1737 dealer->error = NULL;
1738}
1739
1740static void wamp_dealer_analog_write_close(struct wamp_dealer *dealer)
1741{
1742 wamp_state_t *s = dealer->s;
1743 ECN_FBS_ID buf;
1744 ECN_FBS_SSIZE_T pos = 0;
1745 ER ret;
1746
1747 ret = arduino_analogWrite(dealer->arduino_params.pin, dealer->arduino_params.anaval);
1748 if (ret != E_OK)
1749 return;
1750
1751 ret = _ecn_fbs_cre(1, &buf);
1752 if (ret != E_OK) {
1753 syslog(LOG_WARNING, "_ecn_fbs_cre() result = %d", ret);
1754 return;
1755 }
1756
1757 ret = fbs_printf(buf, &pos, "[50,%d,{\"deviceId\":1},[],{}]", dealer->requestId);
1758 if (ret != E_OK) {
1759 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1760 _ecn_fbs_del(buf);
1761 return;
1762 }
1763
1764 ret = main_send_message(buf, s->wbsid);
1765 if (ret != E_OK) {
1766 syslog(LOG_WARNING, "main_send_message() result = %d", ret);
1767 return;
1768 }
1769
1770 dealer->error = NULL;
1771}
1772
1773static void wamp_dealer_set_init_params_close(struct wamp_dealer *dealer)
1774{
1775 wamp_state_t *s = dealer->s;
1776 ECN_FBS_ID buf;
1777 ECN_FBS_SSIZE_T pos = 0;
1778 ER ret;
1779
1780 ret = data_flash_write(0, dealer->init_params.mac_addr);
1781 if (ret != E_OK) {
1782 syslog(LOG_WARNING, "data_flash_write() result = %d", ret);
1783 return;
1784 }
1785
1786 ret = _ecn_fbs_cre(1, &buf);
1787 if (ret != E_OK) {
1788 syslog(LOG_WARNING, "_ecn_fbs_cre() result = %d", ret);
1789 return;
1790 }
1791
1792 ret = fbs_printf(buf, &pos, "[50,%d,{\"deviceId\":1},[],{}]", dealer->requestId);
1793 if (ret != E_OK) {
1794 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1795 _ecn_fbs_del(buf);
1796 return;
1797 }
1798
1799 ret = main_send_message(buf, s->wbsid);
1800 if (ret != E_OK) {
1801 syslog(LOG_WARNING, "main_send_message() result = %d", ret);
1802 return;
1803 }
1804
1805 dealer->error = NULL;
1806}
1807
1808static void wamp_dealer_get_init_params_close(struct wamp_dealer *dealer)
1809{
1810 wamp_state_t *s = dealer->s;
1811 ECN_FBS_ID buf;
1812 ECN_FBS_SSIZE_T pos = 0;
1813 ER ret;
1814 int i;
1815
1816 ret = data_flash_read(0, dealer->init_params.mac_addr);
1817 if (ret != E_OK) {
1818 syslog(LOG_WARNING, "data_flash_read() result = %d", ret);
1819 return;
1820 }
1821
1822 ret = _ecn_fbs_cre(1, &buf);
1823 if (ret != E_OK) {
1824 syslog(LOG_WARNING, "_ecn_fbs_cre() result = %d", ret);
1825 return;
1826 }
1827
1828 ret = fbs_printf(buf, &pos, "[50,%d,{},[],{\"macAddr\":[", dealer->requestId);
1829 if (ret != E_OK) {
1830 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1831 _ecn_fbs_del(buf);
1832 return;
1833 }
1834
1835 for (i = 0; i < 6; i++) {
1836 ret = fbs_printf(buf, &pos, "%d,", dealer->init_params.mac_addr[i]);
1837 if (ret != E_OK) {
1838 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1839 _ecn_fbs_del(buf);
1840 return;
1841 }
1842 }
1843
1844 /* 最後の","を消す */
1845 pos--;
1846
1847 ret = fbs_printf(buf, &pos, "]}]");
1848 if (ret != E_OK) {
1849 syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
1850 _ecn_fbs_del(buf);
1851 return;
1852 }
1853
1854 ret = main_send_message(buf, s->wbsid);
1855 if (ret != E_OK) {
1856 syslog(LOG_WARNING, "main_send_message() result = %d", ret);
1857 return;
1858 }
1859
1860 dealer->error = NULL;
1861}
1862
1863void wamp_dealer_yield(wamp_dealer_t *dealer)
1864{
1865}
1866
1867void wamp_dealer_yield_request_id(wamp_dealer_t *dealer, const char *value)
1868{
1869}
1870
1871void wamp_dealer_yield_options(wamp_dealer_t *dealer, const char *value)
1872{
1873}
1874
1875void wamp_dealer_yield_options_param(wamp_dealer_t *dealer, jsonsl_action_t action,
1876 struct jsonsl_state_st *state, const char *buf)
1877{
1878}
1879
1880void wamp_dealer_yield_arguments(wamp_dealer_t *dealer, const char *value)
1881{
1882}
1883
1884void wamp_dealer_yield_arguments_param(wamp_dealer_t *dealer, jsonsl_action_t action,
1885 struct jsonsl_state_st *state, const char *buf)
1886{
1887}
1888
1889void wamp_dealer_yield_argumentskw(wamp_dealer_t *dealer, const char *value)
1890{
1891}
1892
1893void wamp_dealer_yield_argumentskw_param(wamp_dealer_t *dealer, jsonsl_action_t action,
1894 struct jsonsl_state_st *state, const char *buf)
1895{
1896}
1897
1898void wamp_dealer_yield_close(struct wamp_state *s)
1899{
1900}
1901
1902void wamp_dealer_cansel(wamp_dealer_t *dealer)
1903{
1904}
1905
1906void wamp_dealer_cansel_request_id(wamp_dealer_t *dealer, const char *value)
1907{
1908}
1909
1910void wamp_dealer_cansel_options(wamp_dealer_t *dealer, const char *value)
1911{
1912}
1913
1914void wamp_dealer_cansel_options_param(wamp_dealer_t *dealer, jsonsl_action_t action,
1915 struct jsonsl_state_st *state, const char *buf)
1916{
1917}
1918
1919void wamp_dealer_cansel_close(struct wamp_state *s)
1920{
1921}
1922
1923static bool_t wamp_dealer_get_epc(const char *propName, int nameLen,
1924 uint16_t devType, uint8_t *epc, uint8_t *pdc)
1925{
1926 if(propName[0] == '0' && propName[1] == 'x'){
1927 if((wamp_stob(&propName[2], epc, sizeof(*epc)) != 1)
1928 || (propName[4] != '\0')){
1929 *epc = 0;
1930 *pdc = 0;
1931 return false;
1932 }
1933
1934 *pdc = 1;
1935 return true;
1936 }
1937
1938 *epc = kadecot_names_get_property_code(propName, nameLen, devType);
1939 if(*epc == 0){
1940 *pdc = 0;
1941 return false;
1942 }
1943 *pdc = 1;
1944
1945 return true;
1946}
1947
1948static echonetlite_device_t *wamp_dealer_get_device(wamp_dealer_t *dealer, int deviceId)
1949{
1950 echonetlite_device_t *pos, *end = &dealer->devices[sizeof(dealer->devices) / sizeof(dealer->devices[0])];
1951
1952 if(deviceId <= 0)
1953 return NULL;
1954
1955 for(pos = dealer->devices; pos < end; pos++){
1956 if(pos->deviceId != deviceId)
1957 continue;
1958
1959 return pos;
1960 }
1961
1962 return NULL;
1963}
1964
1965int wamp_stob(const char *str, uint8_t *dst, int dstc)
1966{
1967 uint8_t *start = dst, *end = &dst[dstc];
1968 int size = 0, i;
1969 char c;
1970 uint8_t data;
1971
1972 for(i = 0; dst < end; dst++){
1973 c = str[i];
1974 if(c == '\0')
1975 break;
1976
1977 data = 0;
1978
1979 if(c >= '0' && c <= '9'){
1980 data |= (c - '0');
1981 }
1982 else if(c >= 'A' && c <= 'F'){
1983 data |= (0xA + c - 'A');
1984 }
1985 else if(c >= 'a' && c <= 'f'){
1986 data |= (0xA + c - 'a');
1987 }
1988 else
1989 break;
1990
1991 i++;
1992 c = str[i];
1993 data <<= 4;
1994
1995 if(c >= '0' && c <= '9'){
1996 data |= (c - '0');
1997 }
1998 else if(c >= 'A' && c <= 'F'){
1999 data |= (0xA + c - 'A');
2000 }
2001 else if(c >= 'a' && c <= 'f'){
2002 data |= (0xA + c - 'a');
2003 }
2004 else
2005 break;
2006
2007 i++;
2008 *dst = data;
2009 }
2010
2011 return dst - start;
2012}
2013
2014void wamp_dealer_init(wamp_dealer_t *dealer)
2015{
2016}
Note: See TracBrowser for help on using the repository browser.