source: UsbWattMeter/trunk/ecnl_lwip/echonet.h@ 167

Last change on this file since 167 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: 11.4 KB
Line 
1/*
2 * TOPPERS ECHONET Lite Communication Middleware
3 *
4 * Copyright (C) 2014-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: echonet.h 167 2016-03-08 11:37:45Z coas-nagasima $
36 */
37
38#ifndef ECHONET_H
39#define ECHONET_H
40
41#include <t_stddef.h>
42#include <t_syslog.h>
43
44#include "echonet_rename.h"
45#include "echonet_class.h"
46#include "echonet_app_config.h"
47
48#ifdef __cplusplus
49extern "C" {
50#endif
51
52#define E_BRK (-100)
53
54#define EOBJ_NULL 0x00
55#define EOBJ_LOCAL_NODE 0x01 /* 自ノード */
56#define EOBJ_SYNC_REMOTE_NODE 0x02 /* 他ノード */
57#define EOBJ_ASYNC_REMOTE_NODE 0x04 /* 他ノード(非同期) */
58#define EOBJ_DEVICE 0x08 /* 機器オブジェクト */
59
60#define EPC_NONE 0x00
61#define EPC_RULE_SET 0x01 /* アクセスルール Set */
62#define EPC_RULE_GET 0x02 /* アクセスルール Get */
63#define EPC_RULE_ANNO 0x04 /* アクセスルール Anno */
64#define EPC_ANNOUNCE 0x40 /* 状態変化時通知 */
65#define EPC_VARIABLE 0x80 /* 可変長データ */
66
67typedef enum _echonet_enod_id
68{
69 ENOD_NOT_MATCH_ID = -1,
70 ENOD_MULTICAST_ID = 0, /* マルチキャストアドレスID */
71 ENOD_LOCAL_ID = 1, /* 自ノードアドレスID */
72 ENOD_API_ID = 2, /* APIアドレスID */
73 ENOD_REMOTE_ID = 3, /* 他ノードアドレスID */
74} ECN_ENOD_ID;
75
76/* ECHONET Lite規格 */
77typedef enum
78{
79 ECN_EDH1_ECHONET_LITE = 0x10
80} ECN_EHD1_ECL_VERSION;
81
82/* 電文形式1/2 */
83typedef enum
84{
85 ECN_EDH2_FORMAT_1 = 0x81, /* 電文形式1 */
86 ECN_EDH2_FORMAT_2 = 0x82 /* 電文形式2 */
87} ECN_EHD2_FORMAT;
88
89/* ECHONET Liteサービスコード */
90typedef enum _echonet_service_code
91{
92 ESV_NOP = 0, /* (機能指定なし) */
93 ESV_SET_I = 0x60, /* プロパティ値書き込み要求(応答不要) */
94 ESV_SET_C = 0x61, /* プロパティ値書き込み要求(応答要) */
95 ESV_GET = 0x62, /* プロパティ値読み出し要求 */
96 ESV_INF_REQ = 0x63, /* プロパティ値通知要求 */
97 ESV_SET_GET = 0x6E, /* プロパティ値書き込み・読み出し要求 */
98 ESV_SET_RES = 0x71, /* プロパティ値書き込み応答 */
99 ESV_GET_RES = 0x72, /* プロパティ値読み出し応答 */
100 ESV_INF = 0x73, /* プロパティ値通知 */
101 ESV_INFC = 0x74, /* プロパティ値通知(応答要) */
102 ESV_INFC_RES = 0x7A, /* プロパティ値通知応答 */
103 ESV_SET_GET_RES = 0x7E, /* プロパティ値書き込み・読み出し応答 */
104 ESV_SET_I_SNA = 0x50, /* プロパティ値書き込み要求不可応答 */
105 ESV_SET_C_SNA = 0x51, /* プロパティ値書き込み要求不可応答 */
106 ESV_GET_SNA = 0x52, /* プロパティ値読み出し不可応答 */
107 ESV_INF_SNA = 0x53, /* プロパティ値通知不可応答 */
108 ESV_SET_GET_SNA = 0x5E /* プロパティ値書き込み・読み出し不可応答 */
109} ECN_SRV_CODE;
110
111#ifdef __CA850__
112#pragma pack(1)
113#elif __RX
114#pragma pack
115#elif _MSC_VER
116#pragma pack(push, 1)
117#endif
118
119/*
120 * ECHONET Lite電文ヘッダー
121 */
122typedef struct
123{
124 uint8_t ehd1; /* ECHONET Lite電文ヘッダー1 ECN_EHD1_ECL_VERSION */
125 uint8_t ehd2; /* ECHONET Lite電文ヘッダー2 ECN_EHD2_FORMAT */
126 uint16_t tid; /* トランザクションID */
127} T_ECN_HDR;
128
129/*
130 * ECHONET Liteオブジェクトコード
131 */
132typedef struct
133{
134 uint8_t eojx1; /* クラスグループコード */
135 uint8_t eojx2; /* クラスコード */
136 uint8_t eojx3; /* インスタンスコード */
137} T_ECN_EOJ;
138
139/*
140 * ECHONET Liteデータヘッダー
141 */
142typedef struct
143{
144 T_ECN_EOJ seoj; /* 送信元ECHONET Liteオブジェクト指定 */
145 T_ECN_EOJ deoj; /* 相手先ECHONET Liteオブジェクト指定 */
146 uint8_t esv; /* ECHONET Liteサービス (ECN_SRV_CODE) */
147 uint8_t opc; /* 処理プロパティ数 */
148} T_ECN_EDATA_BODY;
149
150/*
151 * ECHONET Liteプロパティ
152 */
153typedef struct
154{
155 uint8_t epc; /* ECHONET Liteプロパティコード */
156 uint8_t pdc; /* EDTのバイト数 */
157 /*void *p_edt;*/ /* プロパティ値データ */
158} T_ECN_PRP;
159
160/*
161 * ECHONET Liteデータ
162 */
163typedef struct
164{
165 T_ECN_HDR ecn_hdr;
166 T_ECN_EDATA_BODY edata;
167 T_ECN_PRP ecn_prp;
168} T_ECN_EDT_HDR;
169
170/*
171 * ECHONET Lite 電文
172 */
173typedef struct echonet_object_data
174{
175 uint8_t _private1[192];
176 T_ECN_EDT_HDR hdr;
177 uint8_t _private2[64 - sizeof(T_ECN_EDT_HDR)];
178} T_EDATA;
179
180#ifdef __CA850__
181#pragma pack(8)
182#elif __RX
183#pragma unpack
184#elif _MSC_VER
185#pragma pack(pop)
186#endif
187
188/*
189 * 応答電文解析イテレーター
190 */
191typedef struct echonet_epc_enumerator
192{
193 T_EDATA *pk_esv;
194 uint8_t count; /* 今読み取り中のブロックにあるプロパティ総数 */
195 uint8_t got_ct; /* 今読み取り中のブロックで、読み取った数 */
196 uint8_t next_blk_ct; /* 後続ブロック数 */
197 uint8_t is_eof; /* 終端に達した時、非0 */
198 int cur;
199} T_ENUM_EPC;
200
201typedef struct echonet_property_initialization_block EPRPINIB;
202
203/*
204 * ECHONET Lite プロパティの設定関数
205 */
206typedef int (EPRP_SETTER)(const EPRPINIB *item, const void *src, int size, bool_t *anno);
207
208/*
209 * ECHONET Lite プロパティの取得関数
210 */
211typedef int (EPRP_GETTER)(const EPRPINIB *item, void *dst, int size);
212
213/*
214 * ECHONET Lite プロパティ初期化ブロック
215 */
216struct echonet_property_initialization_block
217{
218 uint8_t eprpcd; /* ECHONET Lite プロパティコード */
219 ATR eprpatr; /* ECHONET Lite プロパティ属性 */
220 uint8_t eprpsz; /* ECHONET Lite プロパティのサイズ */
221 intptr_t exinf; /* ECHONET Lite プロパティの拡張情報 */
222 EPRP_SETTER *eprpset; /* ECHONET Lite プロパティの設定関数 */
223 EPRP_GETTER *eprpget; /* ECHONET Lite プロパティの取得関数 */
224};
225
226#define TMIN_EOBJID 1 /* ECHONET Lite オブジェクトIDの最小値 */
227
228/*
229 * ECHONET Lite オブジェクト初期化ブロック
230 */
231typedef struct echonet_object_initialization_block
232{
233 ATR eobjatr; /* ECHONET Lite オブジェクト属性 */
234 ID enodid; /* ECHONET Lite ノードプロファイルオブジェクトID */
235 intptr_t exinf; /* ECHONET Lite オブジェクトの拡張情報 */
236 uint8_t eojx1; /* ECHONET Lite オブジェクトのクラスグループコード */
237 uint8_t eojx2; /* ECHONET Lite オブジェクトのクラスコード */
238 uint8_t eojx3; /* ECHONET Lite オブジェクトのインスタンスコード */
239 const EPRPINIB *eprp; /* ECHONET Lite プロパティ初期化ブロック */
240 uint_t eprpcnt; /* ECHONET Lite プロパティ初期化ブロック数 */
241} EOBJINIB;
242
243/*
244 * ECHONET Lite ノード管理ブロック
245 */
246typedef struct echonet_object_control_block
247{
248 const EOBJINIB *profile; /* ECHONET Lite ノードプロファイルへのポインタ */
249 const EOBJINIB **eobjs; /* ECHONET Lite オブジェクトリストへのポインタ */
250 uint_t eobjcnt; /* ECHONET Lite オブジェクト数 */
251} EOBJCB;
252
253/*
254 * ECHONET Lite ノードとIPアドレスの対応情報ブロックの定義
255 */
256typedef struct echonet_node_address_block
257{
258 bool_t inuse; /* 使用状況 */
259 uint8_t ipaddr[16]; /* IPアドレス */
260} ENODADRB;
261
262/*
263 * ECHONET Lite オブジェクトIDの最大値(echonet_cfg.c)
264 */
265extern const ID tmax_eobjid;
266
267/*
268 * ECHONET Lite オブジェクト初期化ブロックのエリア(echonet_cfg.c)
269 */
270extern const EOBJINIB eobjinib_table[];
271
272/*
273 * ECHONET Liteノード管理ブロックの数
274 */
275extern const int tnum_enodid;
276
277/*
278 * ECHONET Lite オブジェクト管理ブロックのエリア(echonet_cfg.c)
279 */
280extern EOBJCB eobjcb_table[];
281
282/*
283 * ECHONET LiteノードとIPアドレスの対応情報の数
284 */
285extern const int tnum_enodadr;
286
287/*
288 * ECHONET Lite ノードとIPアドレスの対応情報ブロックのエリア(echonet_cfg.c)
289 */
290extern ENODADRB enodadrb_table[];
291
292/*
293 * ECHONET Lite カーネルオブジェクトID
294 */
295extern const ID ecn_svc_taskid;
296extern const ID ecn_udp_taskid;
297extern const ID ecn_api_mailboxid;
298extern const ID ecn_svc_mailboxid;
299extern const ID ecn_udp_mailboxid;
300extern const ID ecn_mempoolid;
301extern const ID ecn_udp_cepid;
302
303/*
304 * ECHONET Lite オブジェクト管理ブロックからECHONET Lite オブジェクトIDを取り出すためのマクロ
305 */
306#define EOBJID(p_eobjcb) ((ID)(((p_eobjcb) - eobjcb_table) + TMIN_EOBJID))
307
308/*
309 * ECHONET Lite オブジェクト機能の初期化
310 */
311extern void initialize_echonet_object(void);
312
313typedef EOBJINIB T_REOBJ;
314
315typedef EPRPINIB T_RPRP;
316
317typedef ENODADRB T_ENOD_ADDR;
318
319/*
320 * ECHONET Liteサービス処理開始
321 */
322ER ecn_sta_svc();
323
324/*
325 * ECHONETオブジェクト参照
326 */
327ER ecn_ref_eobj(ID eobjid, T_REOBJ *pk_eobj);
328
329/*
330 * ECHONETプロパティ参照
331 */
332ER ecn_ref_eprp(ID eobjid, uint8_t epc, T_RPRP *pk_eprp);
333
334/*
335 * プロパティ値書き込み要求(応答不要)電文作成
336 */
337ER ecn_esv_seti(T_EDATA **ppk_esv, ID eobjid, uint8_t epc, uint8_t pdc, const void *p_edt);
338
339/*
340 * プロパティ値書き込み要求(応答要)電文作成
341 */
342ER ecn_esv_setc(T_EDATA **ppk_esv, ID eobjid, uint8_t epc, uint8_t pdc, const void *p_edt);
343
344/*
345 * プロパティ値読み出し要求電文作成
346 */
347ER ecn_esv_get(T_EDATA **ppk_esv, ID eobjid, uint8_t epc);
348
349/*
350 * プロパティ値通知要求電文作成
351 */
352ER ecn_esv_inf_req(T_EDATA **ppk_esv, ID eobjid, uint8_t epc);
353
354/*
355 * プロパティ値書き込み・読み出し要求電文作成
356 */
357ER ecn_esv_set_get(T_EDATA **ppk_esv, ID eobjid, uint8_t epc, uint8_t pdc, const void *p_edt);
358
359/*
360 * プロパティ値書き込み・読み出し要求電文折り返し指定
361 */
362ER ecn_trn_set_get(T_EDATA *pk_esv, int *p_trn_pos);
363
364/*
365 * プロパティ値書き込み・読み出し要求電文終了指定
366 */
367ER ecn_end_set_get(T_EDATA *pk_esv, int trn_pos);
368
369/*
370 * プロパティ値通知(応答要)電文作成
371 */
372ER ecn_esv_infc(T_EDATA **ppk_esv, ID eobjid, ID seobjid, uint8_t sepc);
373
374/*
375 * 要求電文へのプロパティ指定追加
376 */
377ER ecn_add_epc(T_EDATA *pk_esv, uint8_t epc);
378
379/*
380 * 要求電文へのプロパティデータ追加
381 */
382ER ecn_add_edt(T_EDATA *pk_esv, uint8_t epc, uint8_t pdc, const void *p_edt);
383
384/*
385 * 要求電文の送信
386 */
387ER ecn_snd_esv(T_EDATA *pk_esv);
388
389/*
390 * 応答電文の受信永遠待ち
391 */
392ER ecn_rcv_esv(T_EDATA **ppk_esv);
393
394/*
395 * 応答電文の受信待ちタイムアウトあり
396 */
397ER ecn_trcv_esv(T_EDATA **ppk_esv, TMO tmout);
398
399/*
400 * 応答電文の受信ポーリング
401 */
402ER ecn_prcv_esv(T_EDATA **ppk_esv);
403
404/*
405 * 応答電文の破棄
406 */
407ER ecn_rel_esv(T_EDATA *pk_esv);
408
409/*
410 * 応答電文の送信元機器オブジェクトを取得する
411 */
412ID ecn_get_eobj(T_EDATA *pk_esv);
413
414/*
415 * 応答電文解析イテレーター初期化
416 */
417ER ecn_itr_ini(T_ENUM_EPC *pk_itr, T_EDATA *pk_esv);
418
419/*
420 * 応答電文解析イテレーターインクリメント
421 */
422ER ecn_itr_nxt(T_ENUM_EPC *pk_itr, uint8_t *p_epc, uint8_t *p_pdc, void *p_edt);
423
424/*
425 * 応答電文待ちの割り込み送信
426 */
427ER ecn_brk_wai(const void *p_dat, int datsz);
428
429/*
430 * 割り込みデータの取得
431 */
432ER ecn_get_brk_dat(T_EDATA *pk_esv, void *p_buf, int bufsz, int *p_datsz);
433
434/*
435 * データ設定関数
436 */
437int ecn_data_prop_set(const EPRPINIB *item, const void *src, int size, bool_t *anno);
438
439/*
440 * データ取得関数
441 */
442int ecn_data_prop_get(const EPRPINIB *item, void *dst, int size);
443
444#ifdef __cplusplus
445}
446#endif
447
448#endif // ECHONET_H
Note: See TracBrowser for help on using the repository browser.