source: UsbWattMeter/trunk/ecnl_lwip/echonet_agent.h@ 473

Last change on this file since 473 was 167, checked in by coas-nagasima, 8 years ago

MIMEにSJISを設定

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-chdr; charset=SHIFT_JIS
File size: 5.3 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: echonet_agent.h 167 2016-03-08 11:37:45Z coas-nagasima $
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#define TNUM_AEOBJID 50
52
53/*
54 * キューのデータ構造の定義
55 */
56typedef struct ecn_agent_queue {
57#ifdef _DEBUG
58 struct ecn_agent_queue *p_parent; /* 親キューへのポインタ */
59#endif
60 struct ecn_agent_queue *p_next; /* 次エントリへのポインタ */
61 struct ecn_agent_queue *p_prev; /* 前エントリへのポインタ */
62} ecn_agent_queue_t;
63
64#define PMAP_FLAG_SET 0x01
65#define PMAP_FLAG_GET 0x02
66#define PMAP_FLAG_ANNO 0x04
67
68typedef struct ecn_obj
69{
70 ID eobjId;
71 EOBJINIB inib;
72 uint8_t pmapFlag;
73 uint8_t pmapSet[16]; /* SETプロパティマップ */
74 uint8_t pmapGet[16]; /* GETプロパティマップ */
75 uint8_t pmapAnno[16]; /* 状態変化時通知プロパティマップ */
76 uint_t eprpcnt; /* ECHONET Lite プロパティ数 */
77} ecn_obj_t;
78
79typedef enum ecn_node_state
80{
81 ecn_node_state_idle,
82 ecn_node_state_start,
83 ecn_node_state_set_prpmap_wait,
84 ecn_node_state_get_prpmap_wait,
85 ecn_node_state_anno_prpmap_wait,
86} ecn_node_state_t;
87
88typedef struct ecn_node
89{
90 ecn_obj_t base;
91 EOBJCB eobj;
92 ECN_ENOD_ID enodId;
93 ecn_agent_queue_t devices;
94 ecn_node_state_t state;
95 TMO timer;
96 ecn_obj_t *current;
97} ecn_node_t;
98
99typedef struct ecn_device
100{
101 ecn_obj_t base;
102 ecn_node_t *node;
103} ecn_device_t;
104
105typedef struct ecn_inm_get_device_list_req
106{
107 unsigned int requestid;
108} ecn_inm_get_device_list_req_t;
109
110typedef struct ecn_inm_get_device_item
111{
112 ID eobjid; /* ECHONET Lite オブジェクトID */
113 ID enodid; /* ECHONET Lite ノードプロファイルオブジェクトID */
114 uint8_t eojx1; /* ECHONET Lite オブジェクトのクラスグループコード */
115 uint8_t eojx2; /* ECHONET Lite オブジェクトのクラスコード */
116 uint8_t eojx3; /* ECHONET Lite オブジェクトのインスタンスコード */
117 ECN_ENOD_ID addrid; /* IPアドレス取得用ID */
118} ecn_inm_get_device_item_t;
119
120typedef struct ecn_inm_get_device_list_res
121{
122 unsigned int requestid;
123 ecn_inm_get_device_item_t devices[1];
124} ecn_inm_get_device_list_res_t;
125
126typedef struct ecn_inm_get_device_info_req
127{
128 unsigned int requestid;
129 ID eobjid;
130} ecn_inm_get_device_info_req_t;
131
132typedef struct ecn_inm_get_device_info_res
133{
134 unsigned int requestid;
135 ID eobjid;
136 uint8_t pmapSet[16];
137 uint8_t pmapGet[16];
138 uint8_t pmapAnno[16];
139 uint_t eprpcnt;
140} ecn_inm_get_device_info_res_t;
141
142/* 初期化 */
143void ecn_agent_init(void);
144/* ノードを検索 */
145ecn_node_t *ecn_agent_find_node(ECN_ENOD_ID enodid);
146/* 機器を検索 */
147ecn_obj_t *ecn_agent_find_eobj(const EOBJCB *pk_nod, T_ECN_EOJ eoj);
148/* オブジェクトIDを取得 */
149ID ecn_agent_get_eobj(const EOBJINIB *pk_obj);
150/* 次の機器を取得 */
151const EOBJINIB *ecn_agent_next_eobj(const EOBJCB *pk_nod, const EOBJINIB *pk_obj);
152/* オブジェクトIDからEOJとノードIDを取得 */
153bool_t ecn_agent_get_eoj_enodid(ID eobjid, T_ECN_EOJ *eoj, ECN_ENOD_ID *enodid);
154/* タイムアウト値を返す */
155TMO ecn_agent_get_timer();
156/* タイマーの時間を進める */
157void ecn_agent_progress(TMO interval);
158/* タイムアウト処理(のための呼び出し) */
159void ecn_agent_timeout();
160/* 内部メッセージ処理 */
161bool_t ecn_agent_proc_int_msg(ECN_FBS_ID fbs, uint8_t cmd);
162/* ECHONET電文受信処理 */
163void ecn_agent_proc_ecn_msg(const EOBJCB **snod, const EOBJINIB **sobj, T_EDATA *esv);
164/* ECHONET電文受信処理終了 */
165void ecn_agent_proc_ecn_msg_end();
166/* プロパティを取得 */
167const EPRPINIB *ecn_agent_get_property(const EOBJINIB *fp_obj, uint8_t fa_epc, const EPRPINIB *item);
168
169ER ecn_agent_get_device_list(ID sender, int requestid, ECN_FBS_ID *pk_req);
170ER ecn_agent_get_device_info(ID sender, int requestid, ID eobjid, ECN_FBS_ID *pk_req);
171
172#ifdef __cplusplus
173}
174#endif
175
176#endif /* ECHONET_NODE_H */
Note: See TracBrowser for help on using the repository browser.