source: EcnlProtoTool/trunk/mrbgems/mruby-ecnl/src/echonet_agent.h@ 270

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

mruby版ECNLプロトタイピング・ツールを追加

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-chdr
File size: 7.4 KB
Line 
1/*
2 * TOPPERS ECHONET Lite Communication Middleware
3 *
4 * Copyright (C) 2015-2016 Cores Co., Ltd. Japan
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è²¬ã™ã‚‹ã“と.
42 *
43 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
44お
45 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
46 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
47 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
48 * の責任を負わない.
49 *
50 * @(#) $Id: echonet_agent.h 270 2017-02-09 04:03:47Z coas-nagasima $
51 */
52
53/*
54 * ECHONET Lite 動的生成ノード
55 */
56
57#ifndef ECHONET_NODE_H
58#define ECHONET_NODE_H
59
60#include "echonet.h"
61
62#ifdef __cplusplus
63extern "C" {
64#endif
65
66/*
67 * キューのデータ構造の定義
68 */
69typedef struct ecn_agent_queue {
70#ifdef _DEBUG
71 struct ecn_agent_queue *p_parent; /* 親キューへのポインタ */
72#endif
73 struct ecn_agent_queue *p_next; /* 次エントリへのポインタ */
74 struct ecn_agent_queue *p_prev; /* 前エントリへのポインタ */
75} ecn_agent_queue_t;
76
77#define PMAP_FLAG_SET 0x01
78#define PMAP_FLAG_GET 0x02
79#define PMAP_FLAG_ANNO 0x04
80
81typedef struct ecn_obj
82{
83 ecnl_svc_task_t *svc;
84 ID eobjId;
85 EOBJINIB inib;
86 uint8_t pmapSet[16]; /* SETプロパティマップ */
87 uint8_t pmapGet[16]; /* GETプロパティマップ */
88 uint8_t pmapAnno[16]; /* 状æ…
89‹å¤‰åŒ–時通知プロパティマップ */
90 uint8_t pmapFlag;
91 uint8_t eprpcnt; /* ECHONET Lite プロパティ数 */
92 uint8_t annocnt; /* 通知プロパティの数 */
93 uint8_t setcnt; /* 設定プロパティの数 */
94 uint8_t getcnt; /* 取得プロパティの数 */
95} ecn_obj_t;
96
97typedef struct ecn_node
98{
99 ecn_obj_t base;
100 EOBJCB eobj;
101 ECN_ENOD_ID enodId;
102 ecn_agent_queue_t devices;
103} ecn_node_t;
104
105typedef struct ecn_device {
106 ecn_obj_t base;
107 ecn_node_t *node;
108} ecn_device_t;
109
110typedef enum ecn_node_state {
111 ecn_node_state_idle,
112 ecn_node_state_start,
113 ecn_node_state_set_prpmap_wait,
114 ecn_node_state_get_prpmap_wait,
115 ecn_node_state_anno_prpmap_wait,
116 ecn_node_state_fault,
117} ecn_node_state_t;
118
119typedef struct ecn_node_agent {
120 ecn_node_t node;
121 ecn_node_state_t state;
122 TMO timer;
123 ecn_obj_t *current;
124 int retry;
125} ecn_node_agent_t;
126
127typedef struct ecn_agent_buffer {
128 union {
129 struct ecn_agent_buffer *free;
130 ecn_agent_queue_t queue;
131 }hdr;
132 union {
133 ecn_obj_t obj;
134 ecn_node_agent_t node;
135 ecn_device_t device;
136 }cnt;
137} ecn_agent_buffer_t;
138
139#define TNUM_AEOBJID 50
140
141typedef struct ecn_agent {
142 EPRPINIB eprpinib;
143 const EPRPINIB *peprpinib;
144 ecn_agent_queue_t nodes;
145 ecn_node_agent_t *current_node;
146 bool_t msg_proced;
147 int blkpos;
148 ecn_agent_buffer_t *free;
149 ecn_agent_buffer_t blockes[TNUM_AEOBJID];
150 int requestid;
151} ecn_agent_t;
152
153typedef struct ecn_inm_get_device_list_req
154{
155 unsigned int requestid;
156} ecn_inm_get_device_list_req_t;
157
158typedef struct ecn_inm_get_device_item
159{
160 ID eobjid; /* ECHONET Lite オブジェクトID */
161 ID enodid; /* ECHONET Lite ノードプロファイルオブジェクトID */
162 uint8_t state; /* 情
163報収集状æ…
164‹ */
165 uint8_t eojx1; /* ECHONET Lite オブジェクトのクラスグループコード */
166 uint8_t eojx2; /* ECHONET Lite オブジェクトのクラスコード */
167 uint8_t eojx3; /* ECHONET Lite オブジェクトのインスタンスコード */
168 ECN_ENOD_ID addrid; /* 通信レイヤーアドレス取得用ID */
169} ecn_inm_get_device_item_t;
170
171typedef struct ecn_inm_get_device_list_res
172{
173 unsigned int requestid;
174 ecn_inm_get_device_item_t devices[1];
175} ecn_inm_get_device_list_res_t;
176
177typedef struct ecn_inm_get_device_info_req
178{
179 unsigned int requestid;
180 ID eobjid;
181} ecn_inm_get_device_info_req_t;
182
183typedef struct ecn_inm_get_device_info_res
184{
185 unsigned int requestid;
186 ID eobjid;
187 uint8_t pmapSet[16];
188 uint8_t pmapGet[16];
189 uint8_t pmapAnno[16];
190 uint_t eprpcnt;
191} ecn_inm_get_device_info_res_t;
192
193/* 初期化 */
194void ecn_agent_init(ecnl_svc_task_t *svc);
195/* ノードを検索 */
196ecn_node_t *ecn_agent_find_node(ecnl_svc_task_t *svc, ECN_ENOD_ID enodid);
197/* 機器を検索 */
198ecn_obj_t *ecn_agent_find_eobj(const EOBJCB *pk_nod, T_ECN_EOJ eoj);
199/* オブジェクトIDを取得 */
200ID ecn_agent_get_eobj(const EOBJINIB *pk_obj);
201/* 次の機器を取得 */
202const EOBJINIB *ecn_agent_next_eobj(const EOBJCB *pk_nod, const EOBJINIB *pk_obj);
203/* オブジェクトIDからEOJとノードIDを取得 */
204bool_t ecn_agent_get_eoj_enodid(ecnl_svc_task_t *svc, ID eobjid, T_ECN_EOJ *eoj, ECN_ENOD_ID *enodid);
205/* タイムアウト値を返す */
206TMO ecn_agent_get_timer(ecnl_svc_task_t *svc);
207/* タイマーの時間を進める */
208void ecn_agent_progress(ecnl_svc_task_t *svc, TMO interval);
209/* タイムアウト処理(のための呼び出し) */
210void ecn_agent_timeout(ecnl_svc_task_t *svc);
211/* 内
212部メッセージ処理 */
213bool_t ecn_agent_proc_int_msg(ecnl_svc_task_t *svc, ECN_FBS_ID fbs, uint8_t cmd);
214/* ECHONET電文受信処理 */
215void ecn_agent_proc_ecn_msg(ecnl_svc_task_t *svc, const EOBJCB **snod, const EOBJINIB **sobj, T_EDATA *esv);
216/* ECHONET電文受信処理終了 */
217void ecn_agent_proc_ecn_msg_end(ecnl_svc_task_t *svc);
218/* プロパティを取得 */
219const EPRPINIB *ecn_agent_get_property(const EOBJINIB *fp_obj, uint8_t fa_epc, const EPRPINIB *item);
220
221ER ecn_agent_get_device_list(ecnl_svc_task_t *svc, T_ECN_FBS_QUEUE *sender, int requestid, ECN_FBS_ID *pk_req);
222ER ecn_agent_get_device_info(ecnl_svc_task_t *svc, T_ECN_FBS_QUEUE *sender, int requestid, ID eobjid, ECN_FBS_ID *pk_req);
223
224void ecn_agent_set_epc_to_prop_map(uint8_t epc, uint8_t *propMap);
225bool_t ecn_agent_contains_epc_in_prop_map(uint8_t epc, uint8_t *propMap);
226
227#ifdef __cplusplus
228}
229#endif
230
231#endif /* ECHONET_NODE_H */
Note: See TracBrowser for help on using the repository browser.