source: uKadecot/trunk/ecnl_ssp/echonet_agent.h

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

MIMEプロパティの変更

  • 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 108 2015-06-11 09:15:46Z 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 20
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_fault,
87} ecn_node_state_t;
88
89typedef struct ecn_node
90{
91 ecn_obj_t base;
92 EOBJCB eobj;
93 ECN_ENOD_ID enodId;
94 ecn_agent_queue_t devices;
95 ecn_node_state_t state;
96 TMO timer;
97 ecn_obj_t *current;
98 int retry;
99} ecn_node_t;
100
101typedef struct ecn_device
102{
103 ecn_obj_t base;
104 ecn_node_t *node;
105} ecn_device_t;
106
107typedef struct ecn_inm_get_device_list_req
108{
109 unsigned int requestid;
110} ecn_inm_get_device_list_req_t;
111
112typedef struct ecn_inm_get_device_item
113{
114 ID eobjid; /* ECHONET Lite オブジェクトID */
115 ID enodid; /* ECHONET Lite ノードプロファイルオブジェクトID */
116 uint8_t state; /* 情報収集状態 */
117 uint8_t eojx1; /* ECHONET Lite オブジェクトのクラスグループコード */
118 uint8_t eojx2; /* ECHONET Lite オブジェクトのクラスコード */
119 uint8_t eojx3; /* ECHONET Lite オブジェクトのインスタンスコード */
120 ECN_ENOD_ID addrid; /* IPアドレス取得用ID */
121} ecn_inm_get_device_item_t;
122
123typedef struct ecn_inm_get_device_list_res
124{
125 unsigned int requestid;
126 ecn_inm_get_device_item_t devices[1];
127} ecn_inm_get_device_list_res_t;
128
129typedef struct ecn_inm_get_device_info_req
130{
131 unsigned int requestid;
132 ID eobjid;
133} ecn_inm_get_device_info_req_t;
134
135typedef struct ecn_inm_get_device_info_res
136{
137 unsigned int requestid;
138 ID eobjid;
139 uint8_t pmapSet[16];
140 uint8_t pmapGet[16];
141 uint8_t pmapAnno[16];
142 uint_t eprpcnt;
143} ecn_inm_get_device_info_res_t;
144
145/* 初期化 */
146void ecn_agent_init(void);
147/* ノードを検索 */
148ecn_node_t *ecn_agent_find_node(ECN_ENOD_ID enodid);
149/* 機器を検索 */
150ecn_obj_t *ecn_agent_find_eobj(const EOBJCB *pk_nod, T_ECN_EOJ eoj);
151/* オブジェクトIDを取得 */
152ID ecn_agent_get_eobj(const EOBJINIB *pk_obj);
153/* 次の機器を取得 */
154const EOBJINIB *ecn_agent_next_eobj(const EOBJCB *pk_nod, const EOBJINIB *pk_obj);
155/* オブジェクトIDからEOJとノードIDを取得 */
156bool_t ecn_agent_get_eoj_enodid(ID eobjid, T_ECN_EOJ *eoj, ECN_ENOD_ID *enodid);
157/* タイムアウト値を返す */
158TMO ecn_agent_get_timer();
159/* タイマーの時間を進める */
160void ecn_agent_progress(TMO interval);
161/* タイムアウト処理(のための呼び出し) */
162void ecn_agent_timeout();
163/* 内部メッセージ処理 */
164bool_t ecn_agent_proc_int_msg(ECN_FBS_ID fbs, uint8_t cmd);
165/* ECHONET電文受信処理 */
166void ecn_agent_proc_ecn_msg(const EOBJCB **snod, const EOBJINIB **sobj, T_EDATA *esv);
167/* ECHONET電文受信処理終了 */
168void ecn_agent_proc_ecn_msg_end();
169/* プロパティを取得 */
170const EPRPINIB *ecn_agent_get_property(const EOBJINIB *fp_obj, uint8_t fa_epc, const EPRPINIB *item);
171
172ER ecn_agent_get_device_list(ID sender, int requestid, ECN_FBS_ID *pk_req);
173ER ecn_agent_get_device_info(ID sender, int requestid, ID eobjid, ECN_FBS_ID *pk_req);
174
175#ifdef __cplusplus
176}
177#endif
178
179#endif /* ECHONET_NODE_H */
Note: See TracBrowser for help on using the repository browser.