source: asp3_tinet_ecnl_arm/trunk/ntshell/echonet/echonet.h@ 400

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

ファイルヘッダーの更新

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-chdr;charset=UTF-8
File size: 13.5 KB
Line 
1/*
2 * TOPPERS PROJECT Home Network Working Group Software
3 *
4 * Copyright (C) 2014-2019 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#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, /* アドレスID登録なし */
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/*
112 * ECHONET Lite電文ヘッダー
113 */
114typedef struct
115{
116 uint8_t ehd1; /* ECHONET Lite電文ヘッダー1 ECN_EHD1_ECL_VERSION */
117 uint8_t ehd2; /* ECHONET Lite電文ヘッダー2 ECN_EHD2_FORMAT */
118 uint16_t tid; /* トランザクションID */
119} __attribute__((packed)) T_ECN_HDR;
120
121/*
122 * ECHONET Liteオブジェクトコード
123 */
124typedef struct
125{
126 uint8_t eojx1; /* クラスグループコード */
127 uint8_t eojx2; /* クラスコード */
128 uint8_t eojx3; /* インスタンスコード */
129} __attribute__((packed)) T_ECN_EOJ;
130
131/*
132 * ECHONET Liteデータヘッダー
133 */
134typedef struct
135{
136 T_ECN_EOJ seoj; /* 送信元ECHONET Liteオブジェクト指定 */
137 T_ECN_EOJ deoj; /* 相手先ECHONET Liteオブジェクト指定 */
138 uint8_t esv; /* ECHONET Liteサービス (ECN_SRV_CODE) */
139 uint8_t opc; /* 処理プロパティ数 */
140} __attribute__((packed)) T_ECN_EDATA_BODY;
141
142/*
143 * ECHONET Liteプロパティ
144 */
145typedef struct
146{
147 uint8_t epc; /* ECHONET Liteプロパティコード */
148 uint8_t pdc; /* EDTのバイト数 */
149 /*void *p_edt;*/ /* プロパティ値データ */
150} __attribute__((packed)) T_ECN_PRP;
151
152/*
153 * ECHONET Liteデータ
154 */
155typedef struct
156{
157 T_ECN_HDR ecn_hdr;
158 T_ECN_EDATA_BODY edata;
159 T_ECN_PRP ecn_prp;
160} __attribute__((packed)) T_ECN_EDT_HDR;
161
162/*
163 * ECHONET Lite 電文
164 */
165typedef struct echonet_object_data
166{
167 uint8_t _private1[192];
168 T_ECN_EDT_HDR hdr;
169 uint8_t _private2[64 - sizeof(T_ECN_EDT_HDR)];
170} __attribute__((packed)) T_EDATA;
171
172/*
173 * 応答電文解析イテレーター
174 */
175typedef struct echonet_epc_enumerator
176{
177 T_EDATA *pk_esv;
178 uint8_t count; /* 今読み取り中のブロックにあるプロパティ総数 */
179 uint8_t got_ct; /* 今読み取り中のブロックで、読み取った数 */
180 uint8_t next_blk_ct; /* 後続ブロック数 */
181 uint8_t is_eof; /* 終端に達した時、非0 */
182 int cur;
183} T_ENUM_EPC;
184
185typedef struct echonet_property_initialization_block EPRPINIB;
186
187/*
188 * ECHONET Lite プロパティの設定関数
189 */
190typedef int (EPRP_SETTER)(const EPRPINIB *item, const void *src, int size, bool_t *anno);
191
192/*
193 * ECHONET Lite プロパティの取得関数
194 */
195typedef int (EPRP_GETTER)(const EPRPINIB *item, void *dst, int size);
196
197/*
198 * ECHONET Lite プロパティ初期化ブロック
199 */
200struct echonet_property_initialization_block
201{
202 uint8_t eprpcd; /* ECHONET Lite プロパティコード */
203 ATR eprpatr; /* ECHONET Lite プロパティ属性 */
204 uint8_t eprpsz; /* ECHONET Lite プロパティのサイズ */
205 intptr_t exinf; /* ECHONET Lite プロパティの拡張情報 */
206 EPRP_SETTER *eprpset; /* ECHONET Lite プロパティの設定関数 */
207 EPRP_GETTER *eprpget; /* ECHONET Lite プロパティの取得関数 */
208};
209
210#define TMIN_EOBJID 1 /* ECHONET Lite オブジェクトIDの最小値 */
211
212/*
213 * ECHONET Lite オブジェクト初期化ブロック
214 */
215typedef struct echonet_object_initialization_block
216{
217 ATR eobjatr; /* ECHONET Lite オブジェクト属性 */
218 ID enodid; /* ECHONET Lite ノードプロファイルオブジェクトID */
219 intptr_t exinf; /* ECHONET Lite オブジェクトの拡張情報 */
220 uint8_t eojx1; /* ECHONET Lite オブジェクトのクラスグループコード */
221 uint8_t eojx2; /* ECHONET Lite オブジェクトのクラスコード */
222 uint8_t eojx3; /* ECHONET Lite オブジェクトのインスタンスコード */
223 const EPRPINIB *eprp; /* ECHONET Lite プロパティ初期化ブロック */
224 uint_t eprpcnt; /* ECHONET Lite プロパティ初期化ブロック数 */
225} EOBJINIB;
226
227/*
228 * ECHONET Lite ノード管理ブロック
229 */
230typedef struct echonet_object_control_block
231{
232 const EOBJINIB *profile; /* ECHONET Lite ノードプロファイルへのポインタ */
233 const EOBJINIB **eobjs; /* ECHONET Lite オブジェクトリストへのポインタ */
234 uint_t eobjcnt; /* ECHONET Lite オブジェクト数 */
235} EOBJCB;
236
237/*
238 * ECHONET Lite ノードとIPアドレスの対応情報ブロックの定義
239 */
240typedef struct echonet_node_address_block
241{
242 bool_t inuse; /* 使用状況 */
243 uint8_t ipaddr[16]; /* IPアドレス */
244} ENODADRB;
245
246/*
247 * ECHONET Lite オブジェクトIDの最大値(echonet_cfg.c)
248 */
249extern const ID tmax_eobjid;
250
251/*
252 * ECHONET Lite オブジェクト初期化ブロックのエリア(echonet_cfg.c)
253 */
254extern const EOBJINIB eobjinib_table[];
255
256/*
257 * ECHONET Liteノード管理ブロックの数
258 */
259extern const int tnum_enodid;
260
261/*
262 * ECHONET Lite オブジェクト管理ブロックのエリア(echonet_cfg.c)
263 */
264extern EOBJCB eobjcb_table[];
265
266/*
267 * ECHONET LiteノードとIPアドレスの対応情報の数
268 */
269extern const int tnum_enodadr;
270
271/*
272 * ECHONET Lite ノードとIPアドレスの対応情報ブロックのエリア(echonet_cfg.c)
273 */
274extern ENODADRB enodadrb_table[];
275
276/*
277 * ECHONET Lite カーネルオブジェクトID
278 */
279extern const ID ecn_svc_taskid;
280extern const ID ecn_udp_taskid;
281extern const ID ecn_api_dataqueueid;
282extern const ID ecn_svc_dataqueueid;
283extern const ID ecn_udp_dataqueueid;
284#ifndef ECHONET_USE_MALLOC
285extern const ID ecn_mempoolid;
286#endif
287extern const ID ecn_udp_cepid;
288
289/*
290 * ECHONET Lite オブジェクト管理ブロックからECHONET Lite オブジェクトIDを取り出すためのマクロ
291 */
292#define EOBJID(p_eobjcb) ((ID)(((p_eobjcb) - eobjcb_table) + TMIN_EOBJID))
293
294/*
295 * ECHONET Lite オブジェクト機能の初期化
296 */
297extern void initialize_echonet_object(void);
298
299typedef EOBJINIB T_REOBJ;
300
301typedef EPRPINIB T_RPRP;
302
303typedef ENODADRB T_ENOD_ADDR;
304
305/*
306 * ECHONET Liteサービス処理開始
307 */
308ER ecn_sta_svc();
309
310/*
311 * インスタンスリスト通知の送信
312 */
313ER ecn_ntf_inl();
314
315/*
316 * ECHONETオブジェクト参照
317 */
318ER ecn_ref_eobj(ID eobjid, T_REOBJ *pk_eobj);
319
320/*
321 * ECHONETプロパティ参照
322 */
323ER ecn_ref_eprp(ID eobjid, uint8_t epc, T_RPRP *pk_eprp);
324
325/*
326 * プロパティ値書き込み要求(応答不要)電文作成
327 */
328ER ecn_esv_seti(T_EDATA **ppk_esv, ID eobjid, uint8_t epc, uint8_t pdc, const void *p_edt);
329
330/*
331 * プロパティ値書き込み要求(応答要)電文作成
332 */
333ER ecn_esv_setc(T_EDATA **ppk_esv, ID eobjid, uint8_t epc, uint8_t pdc, const void *p_edt);
334
335/*
336 * プロパティ値読み出し要求電文作成
337 */
338ER ecn_esv_get(T_EDATA **ppk_esv, ID eobjid, uint8_t epc);
339
340/*
341 * プロパティ値通知要求電文作成
342 */
343ER ecn_esv_inf_req(T_EDATA **ppk_esv, ID eobjid, uint8_t epc);
344
345/*
346 * プロパティ値書き込み・読み出し要求電文作成
347 */
348ER ecn_esv_set_get(T_EDATA **ppk_esv, ID eobjid, uint8_t epc, uint8_t pdc, const void *p_edt);
349
350/*
351 * プロパティ値書き込み・読み出し要求電文折り返し指定
352 */
353ER ecn_trn_set_get(T_EDATA *pk_esv, int *p_trn_pos);
354
355/*
356 * プロパティ値書き込み・読み出し要求電文終了指定
357 */
358ER ecn_end_set_get(T_EDATA *pk_esv, int trn_pos);
359
360/*
361 * プロパティ値通知(応答要)電文作成
362 */
363ER ecn_esv_infc(T_EDATA **ppk_esv, ID eobjid, ID seobjid, uint8_t sepc);
364
365/*
366 * 要求電文へのプロパティ指定追加
367 */
368ER ecn_add_epc(T_EDATA *pk_esv, uint8_t epc);
369
370/*
371 * 要求電文へのプロパティデータ追加
372 */
373ER ecn_add_edt(T_EDATA *pk_esv, uint8_t epc, uint8_t pdc, const void *p_edt);
374
375/*
376 * 要求電文の送信
377 */
378ER ecn_snd_esv(T_EDATA *pk_esv);
379
380/*
381 * 応答電文の受信永遠待ち
382 */
383ER ecn_rcv_esv(T_EDATA **ppk_esv);
384
385/*
386 * 応答電文の受信待ちタイムアウトあり
387 */
388ER ecn_trcv_esv(T_EDATA **ppk_esv, int tmout);
389
390/*
391 * 応答電文の受信ポーリング
392 */
393ER ecn_prcv_esv(T_EDATA **ppk_esv);
394
395/*
396 * 応答電文の破棄
397 */
398ER ecn_rel_esv(T_EDATA *pk_esv);
399
400/*
401 * 応答電文の送信元ノードを取得する
402 */
403ID ecn_get_enod(T_EDATA *pk_esv);
404
405/*
406 * 応答電文の送信元機器オブジェクトを取得する
407 */
408ID ecn_get_eobj(T_EDATA *pk_esv);
409
410/*
411 * 応答電文解析イテレーター初期化
412 */
413ER ecn_itr_ini(T_ENUM_EPC *pk_itr, T_EDATA *pk_esv);
414
415/*
416 * 応答電文解析イテレーターインクリメント
417 */
418ER ecn_itr_nxt(T_ENUM_EPC *pk_itr, uint8_t *p_epc, uint8_t *p_pdc, void *p_edt);
419
420/*
421 * 応答電文待ちの割り込み送信
422 */
423ER ecn_brk_wai(const void *p_dat, int datsz);
424
425/*
426 * 割り込みデータの取得
427 */
428ER ecn_get_brk_dat(T_EDATA *pk_esv, void *p_buf, int bufsz, int *p_datsz);
429
430/*
431 * データ設定関数
432 */
433int ecn_data_prop_set(const EPRPINIB *item, const void *src, int size, bool_t *anno);
434
435/*
436 * データ取得関数
437 */
438int ecn_data_prop_get(const EPRPINIB *item, void *dst, int size);
439
440#ifdef __cplusplus
441}
442#endif
443
444#endif // ECHONET_H
Note: See TracBrowser for help on using the repository browser.