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

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

文字コードを設定

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-chdr;charset=UTF-8
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 * 上記著作権者は,以下の(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$
36 */
37
38/*
39 * ECHONET Lite 動的生成ノード
40 */
41
42#ifndef ECHONET_NODE_H
43#define ECHONET_NODE_H
44
45#include "echonet.h"
46
47#ifdef __cplusplus
48extern "C" {
49#endif
50
51/*
52 * キューのデータ構造の定義
53 */
54typedef struct ecn_agent_queue {
55#ifdef _DEBUG
56 struct ecn_agent_queue *p_parent; /* 親キューへのポインタ */
57#endif
58 struct ecn_agent_queue *p_next; /* 次エントリへのポインタ */
59 struct ecn_agent_queue *p_prev; /* 前エントリへのポインタ */
60} ecn_agent_queue_t;
61
62#define PMAP_FLAG_SET 0x01
63#define PMAP_FLAG_GET 0x02
64#define PMAP_FLAG_ANNO 0x04
65
66typedef struct ecn_obj
67{
68 ecnl_svc_task_t *svc;
69 ID eobjId;
70 EOBJINIB inib;
71 uint8_t pmapSet[16]; /* SETプロパティマップ */
72 uint8_t pmapGet[16]; /* GETプロパティマップ */
73 uint8_t pmapAnno[16]; /* 状態変化時通知プロパティマップ */
74 uint8_t pmapFlag;
75 uint8_t eprpcnt; /* ECHONET Lite プロパティ数 */
76 uint8_t annocnt; /* 通知プロパティの数 */
77 uint8_t setcnt; /* 設定プロパティの数 */
78 uint8_t getcnt; /* 取得プロパティの数 */
79} ecn_obj_t;
80
81typedef struct ecn_node
82{
83 ecn_obj_t base;
84 EOBJCB eobj;
85 ECN_ENOD_ID enodId;
86 ecn_agent_queue_t devices;
87} ecn_node_t;
88
89typedef struct ecn_device {
90 ecn_obj_t base;
91 ecn_node_t *node;
92} ecn_device_t;
93
94typedef enum ecn_node_state {
95 ecn_node_state_idle,
96 ecn_node_state_start,
97 ecn_node_state_set_prpmap_wait,
98 ecn_node_state_get_prpmap_wait,
99 ecn_node_state_anno_prpmap_wait,
100 ecn_node_state_fault,
101} ecn_node_state_t;
102
103typedef struct ecn_node_agent {
104 ecn_node_t node;
105 ecn_node_state_t state;
106 TMO timer;
107 ecn_obj_t *current;
108 int retry;
109} ecn_node_agent_t;
110
111typedef struct ecn_agent_buffer {
112 union {
113 struct ecn_agent_buffer *free;
114 ecn_agent_queue_t queue;
115 }hdr;
116 union {
117 ecn_obj_t obj;
118 ecn_node_agent_t node;
119 ecn_device_t device;
120 }cnt;
121} ecn_agent_buffer_t;
122
123#define TNUM_AEOBJID 50
124
125typedef struct ecn_agent {
126 EPRPINIB eprpinib;
127 const EPRPINIB *peprpinib;
128 ecn_agent_queue_t nodes;
129 ecn_node_agent_t *current_node;
130 bool_t msg_proced;
131 int blkpos;
132 ecn_agent_buffer_t *free;
133 ecn_agent_buffer_t blockes[TNUM_AEOBJID];
134 int requestid;
135} ecn_agent_t;
136
137typedef struct ecn_inm_get_device_list_req
138{
139 unsigned int requestid;
140} ecn_inm_get_device_list_req_t;
141
142typedef struct ecn_inm_get_device_item
143{
144 ID eobjid; /* ECHONET Lite オブジェクトID */
145 ID enodid; /* ECHONET Lite ノードプロファイルオブジェクトID */
146 uint8_t state; /* 情報収集状態 */
147 uint8_t eojx1; /* ECHONET Lite オブジェクトのクラスグループコード */
148 uint8_t eojx2; /* ECHONET Lite オブジェクトのクラスコード */
149 uint8_t eojx3; /* ECHONET Lite オブジェクトのインスタンスコード */
150 ECN_ENOD_ID addrid; /* 通信レイヤーアドレス取得用ID */
151} ecn_inm_get_device_item_t;
152
153typedef struct ecn_inm_get_device_list_res
154{
155 unsigned int requestid;
156 ecn_inm_get_device_item_t devices[1];
157} ecn_inm_get_device_list_res_t;
158
159typedef struct ecn_inm_get_device_info_req
160{
161 unsigned int requestid;
162 ID eobjid;
163} ecn_inm_get_device_info_req_t;
164
165typedef struct ecn_inm_get_device_info_res
166{
167 unsigned int requestid;
168 ID eobjid;
169 uint8_t pmapSet[16];
170 uint8_t pmapGet[16];
171 uint8_t pmapAnno[16];
172 uint_t eprpcnt;
173} ecn_inm_get_device_info_res_t;
174
175/* 初期化 */
176void ecn_agent_init(ecnl_svc_task_t *svc);
177/* ノードを検索 */
178ecn_node_t *ecn_agent_find_node(ecnl_svc_task_t *svc, ECN_ENOD_ID enodid);
179/* 機器を検索 */
180ecn_obj_t *ecn_agent_find_eobj(const EOBJCB *pk_nod, T_ECN_EOJ eoj);
181/* オブジェクトIDを取得 */
182ID ecn_agent_get_eobj(const EOBJINIB *pk_obj);
183/* 次の機器を取得 */
184const EOBJINIB *ecn_agent_next_eobj(const EOBJCB *pk_nod, const EOBJINIB *pk_obj);
185/* オブジェクトIDからEOJとノードIDを取得 */
186bool_t ecn_agent_get_eoj_enodid(ecnl_svc_task_t *svc, ID eobjid, T_ECN_EOJ *eoj, ECN_ENOD_ID *enodid);
187/* タイムアウト値を返す */
188TMO ecn_agent_get_timer(ecnl_svc_task_t *svc);
189/* タイマーの時間を進める */
190void ecn_agent_progress(ecnl_svc_task_t *svc, TMO interval);
191/* タイムアウト処理(のための呼び出し) */
192void ecn_agent_timeout(ecnl_svc_task_t *svc);
193/* 内部メッセージ処理 */
194bool_t ecn_agent_proc_int_msg(ecnl_svc_task_t *svc, ECN_FBS_ID fbs, uint8_t cmd);
195/* ECHONET電文受信処理 */
196void ecn_agent_proc_ecn_msg(ecnl_svc_task_t *svc, const EOBJCB **snod, const EOBJINIB **sobj, T_EDATA *esv);
197/* ECHONET電文受信処理終了 */
198void ecn_agent_proc_ecn_msg_end(ecnl_svc_task_t *svc);
199/* プロパティを取得 */
200const EPRPINIB *ecn_agent_get_property(const EOBJINIB *fp_obj, uint8_t fa_epc, const EPRPINIB *item);
201
202ER ecn_agent_get_device_list(ecnl_svc_task_t *svc, T_ECN_FBS_QUEUE *sender, int requestid, ECN_FBS_ID *pk_req);
203ER ecn_agent_get_device_info(ecnl_svc_task_t *svc, T_ECN_FBS_QUEUE *sender, int requestid, ID eobjid, ECN_FBS_ID *pk_req);
204
205void ecn_agent_set_epc_to_prop_map(uint8_t epc, uint8_t *propMap);
206bool_t ecn_agent_contains_epc_in_prop_map(uint8_t epc, uint8_t *propMap);
207
208#ifdef __cplusplus
209}
210#endif
211
212#endif /* ECHONET_NODE_H */
Note: See TracBrowser for help on using the repository browser.