source: azure_iot_hub/trunk/ntshell/echonet/echonet.h@ 388

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

Azure IoT Hub Device C SDK を使ったサンプルの追加

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-chdr
File size: 13.5 KB
Line 
1/*
2 * TOPPERS ECHONET Lite Communication Middleware
3 *
4 * Copyright (C) 2014 Cores Co., Ltd. Japan
5 *
6 * 上記著作権者
7は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
8 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
9 * 変・再é…
10å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
11 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
12 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
13 * スコード中に含まれていること.
14 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
15 * 用できる形で再é…
16å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
17å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
18 * 者
19マニュアルなど)に,上記の著作権表示,この利用条件および下記
20 * の無保証規定を掲載すること.
21 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
22 * 用できない形で再é…
23å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
24 * と.
25 * (a) 再é…
26å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
27マニュアルなど)に,上記の著
28 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
29 * (b) 再é…
30å¸ƒã®å½¢æ…
31‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
32 * 報告すること.
33 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
34 * 害からも,上記著作権者
35およびTOPPERSプロジェクトをå…
36è²¬ã™ã‚‹ã“と.
37 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
38 * 由に基づく請求からも,上記著作権者
39およびTOPPERSプロジェクトを
40 * å…
41è²¬ã™ã‚‹ã“と.
42 *
43 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
44お
45 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
46 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
47 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
48 * の責任を負わない.
49 *
50 * @(#) $Id: echonet.h 388 2019-05-22 11:25:18Z coas-nagasima $
51 */
52
53#ifndef ECHONET_H
54#define ECHONET_H
55
56#include <t_stddef.h>
57#include <t_syslog.h>
58
59#include "echonet_rename.h"
60#include "echonet_class.h"
61#include "echonet_app_config.h"
62
63#ifdef __cplusplus
64extern "C" {
65#endif
66
67#define E_BRK (-100)
68
69#define EOBJ_NULL 0x00
70#define EOBJ_LOCAL_NODE 0x01 /* 自ノード */
71#define EOBJ_SYNC_REMOTE_NODE 0x02 /* 他ノード */
72#define EOBJ_ASYNC_REMOTE_NODE 0x04 /* 他ノード(非同期) */
73#define EOBJ_DEVICE 0x08 /* 機器オブジェクト */
74
75#define EPC_NONE 0x00
76#define EPC_RULE_SET 0x01 /* アクセスルール Set */
77#define EPC_RULE_GET 0x02 /* アクセスルール Get */
78#define EPC_RULE_ANNO 0x04 /* アクセスルール Anno */
79#define EPC_ANNOUNCE 0x40 /* 状æ…
80‹å¤‰åŒ–時通知 */
81#define EPC_VARIABLE 0x80 /* 可変長データ */
82
83typedef enum _echonet_enod_id
84{
85 ENOD_NOT_MATCH_ID = -1, /* アドレスID登録なし */
86 ENOD_MULTICAST_ID = 0, /* マルチキャストアドレスID */
87 ENOD_LOCAL_ID = 1, /* 自ノードアドレスID */
88 ENOD_API_ID = 2, /* APIアドレスID */
89 ENOD_REMOTE_ID = 3, /* 他ノードアドレスID */
90} ECN_ENOD_ID;
91
92/* ECHONET Lite規格 */
93typedef enum
94{
95 ECN_EDH1_ECHONET_LITE = 0x10
96} ECN_EHD1_ECL_VERSION;
97
98/* 電文形式1/2 */
99typedef enum
100{
101 ECN_EDH2_FORMAT_1 = 0x81, /* 電文形式1 */
102 ECN_EDH2_FORMAT_2 = 0x82 /* 電文形式2 */
103} ECN_EHD2_FORMAT;
104
105/* ECHONET Liteサービスコード */
106typedef enum _echonet_service_code
107{
108 ESV_NOP = 0, /* (機能指定なし) */
109 ESV_SET_I = 0x60, /* プロパティ値書き込み要求(応答不要) */
110 ESV_SET_C = 0x61, /* プロパティ値書き込み要求(応答要) */
111 ESV_GET = 0x62, /* プロパティ値読み出し要求 */
112 ESV_INF_REQ = 0x63, /* プロパティ値通知要求 */
113 ESV_SET_GET = 0x6E, /* プロパティ値書き込み・読み出し要求 */
114 ESV_SET_RES = 0x71, /* プロパティ値書き込み応答 */
115 ESV_GET_RES = 0x72, /* プロパティ値読み出し応答 */
116 ESV_INF = 0x73, /* プロパティ値通知 */
117 ESV_INFC = 0x74, /* プロパティ値通知(応答要) */
118 ESV_INFC_RES = 0x7A, /* プロパティ値通知応答 */
119 ESV_SET_GET_RES = 0x7E, /* プロパティ値書き込み・読み出し応答 */
120 ESV_SET_I_SNA = 0x50, /* プロパティ値書き込み要求不可応答 */
121 ESV_SET_C_SNA = 0x51, /* プロパティ値書き込み要求不可応答 */
122 ESV_GET_SNA = 0x52, /* プロパティ値読み出し不可応答 */
123 ESV_INF_SNA = 0x53, /* プロパティ値通知不可応答 */
124 ESV_SET_GET_SNA = 0x5E /* プロパティ値書き込み・読み出し不可応答 */
125} ECN_SRV_CODE;
126
127/*
128 * ECHONET Lite電文ヘッダー
129 */
130typedef struct
131{
132 uint8_t ehd1; /* ECHONET Lite電文ヘッダー1 ECN_EHD1_ECL_VERSION */
133 uint8_t ehd2; /* ECHONET Lite電文ヘッダー2 ECN_EHD2_FORMAT */
134 uint16_t tid; /* トランザクションID */
135} __attribute__((packed)) T_ECN_HDR;
136
137/*
138 * ECHONET Liteオブジェクトコード
139 */
140typedef struct
141{
142 uint8_t eojx1; /* クラスグループコード */
143 uint8_t eojx2; /* クラスコード */
144 uint8_t eojx3; /* インスタンスコード */
145} __attribute__((packed)) T_ECN_EOJ;
146
147/*
148 * ECHONET Liteデータヘッダー
149 */
150typedef struct
151{
152 T_ECN_EOJ seoj; /* 送信å…
153ƒECHONET Liteオブジェクト指定 */
154 T_ECN_EOJ deoj; /* 相手å…
155ˆECHONET Liteオブジェクト指定 */
156 uint8_t esv; /* ECHONET Liteサービス (ECN_SRV_CODE) */
157 uint8_t opc; /* 処理プロパティ数 */
158} __attribute__((packed)) T_ECN_EDATA_BODY;
159
160/*
161 * ECHONET Liteプロパティ
162 */
163typedef struct
164{
165 uint8_t epc; /* ECHONET Liteプロパティコード */
166 uint8_t pdc; /* EDTのバイト数 */
167 /*void *p_edt;*/ /* プロパティ値データ */
168} __attribute__((packed)) T_ECN_PRP;
169
170/*
171 * ECHONET Liteデータ
172 */
173typedef struct
174{
175 T_ECN_HDR ecn_hdr;
176 T_ECN_EDATA_BODY edata;
177 T_ECN_PRP ecn_prp;
178} __attribute__((packed)) T_ECN_EDT_HDR;
179
180/*
181 * ECHONET Lite 電文
182 */
183typedef struct echonet_object_data
184{
185 uint8_t _private1[192];
186 T_ECN_EDT_HDR hdr;
187 uint8_t _private2[64 - sizeof(T_ECN_EDT_HDR)];
188} __attribute__((packed)) T_EDATA;
189
190/*
191 * 応答電文解析イテレーター
192 */
193typedef struct echonet_epc_enumerator
194{
195 T_EDATA *pk_esv;
196 uint8_t count; /* 今読み取り中のブロックにあるプロパティ総数 */
197 uint8_t got_ct; /* 今読み取り中のブロックで、読み取った数 */
198 uint8_t next_blk_ct; /* 後続ブロック数 */
199 uint8_t is_eof; /* 終端に達した時、非0 */
200 int cur;
201} T_ENUM_EPC;
202
203typedef struct echonet_property_initialization_block EPRPINIB;
204
205/*
206 * ECHONET Lite プロパティの設定関数
207 */
208typedef int (EPRP_SETTER)(const EPRPINIB *item, const void *src, int size, bool_t *anno);
209
210/*
211 * ECHONET Lite プロパティの取得関数
212 */
213typedef int (EPRP_GETTER)(const EPRPINIB *item, void *dst, int size);
214
215/*
216 * ECHONET Lite プロパティ初期化ブロック
217 */
218struct echonet_property_initialization_block
219{
220 uint8_t eprpcd; /* ECHONET Lite プロパティコード */
221 ATR eprpatr; /* ECHONET Lite プロパティ属性 */
222 uint8_t eprpsz; /* ECHONET Lite プロパティのサイズ */
223 intptr_t exinf; /* ECHONET Lite プロパティの拡張情
224å ± */
225 EPRP_SETTER *eprpset; /* ECHONET Lite プロパティの設定関数 */
226 EPRP_GETTER *eprpget; /* ECHONET Lite プロパティの取得関数 */
227};
228
229#define TMIN_EOBJID 1 /* ECHONET Lite オブジェクトIDの最小値 */
230
231/*
232 * ECHONET Lite オブジェクト初期化ブロック
233 */
234typedef struct echonet_object_initialization_block
235{
236 ATR eobjatr; /* ECHONET Lite オブジェクト属性 */
237 ID enodid; /* ECHONET Lite ノードプロファイルオブジェクトID */
238 intptr_t exinf; /* ECHONET Lite オブジェクトの拡張情
239å ± */
240 uint8_t eojx1; /* ECHONET Lite オブジェクトのクラスグループコード */
241 uint8_t eojx2; /* ECHONET Lite オブジェクトのクラスコード */
242 uint8_t eojx3; /* ECHONET Lite オブジェクトのインスタンスコード */
243 const EPRPINIB *eprp; /* ECHONET Lite プロパティ初期化ブロック */
244 uint_t eprpcnt; /* ECHONET Lite プロパティ初期化ブロック数 */
245} EOBJINIB;
246
247/*
248 * ECHONET Lite ノード管理ブロック
249 */
250typedef struct echonet_object_control_block
251{
252 const EOBJINIB *profile; /* ECHONET Lite ノードプロファイルへのポインタ */
253 const EOBJINIB **eobjs; /* ECHONET Lite オブジェクトリストへのポインタ */
254 uint_t eobjcnt; /* ECHONET Lite オブジェクト数 */
255} EOBJCB;
256
257/*
258 * ECHONET Lite ノードとIPアドレスの対応情
259報ブロックの定義
260 */
261typedef struct echonet_node_address_block
262{
263 bool_t inuse; /* 使用状況 */
264 uint8_t ipaddr[16]; /* IPアドレス */
265} ENODADRB;
266
267/*
268 * ECHONET Lite オブジェクトIDの最大値(echonet_cfg.c)
269 */
270extern const ID tmax_eobjid;
271
272/*
273 * ECHONET Lite オブジェクト初期化ブロックのエリア(echonet_cfg.c)
274 */
275extern const EOBJINIB eobjinib_table[];
276
277/*
278 * ECHONET Liteノード管理ブロックの数
279 */
280extern const int tnum_enodid;
281
282/*
283 * ECHONET Lite オブジェクト管理ブロックのエリア(echonet_cfg.c)
284 */
285extern EOBJCB eobjcb_table[];
286
287/*
288 * ECHONET LiteノードとIPアドレスの対応情
289報の数
290 */
291extern const int tnum_enodadr;
292
293/*
294 * ECHONET Lite ノードとIPアドレスの対応情
295報ブロックのエリア(echonet_cfg.c)
296 */
297extern ENODADRB enodadrb_table[];
298
299/*
300 * ECHONET Lite カーネルオブジェクトID
301 */
302extern const ID ecn_svc_taskid;
303extern const ID ecn_udp_taskid;
304extern const ID ecn_api_dataqueueid;
305extern const ID ecn_svc_dataqueueid;
306extern const ID ecn_udp_dataqueueid;
307#ifndef ECHONET_USE_MALLOC
308extern const ID ecn_mempoolid;
309#endif
310extern const ID ecn_udp_cepid;
311
312/*
313 * ECHONET Lite オブジェクト管理ブロックからECHONET Lite オブジェクトIDを取り出すためのマクロ
314 */
315#define EOBJID(p_eobjcb) ((ID)(((p_eobjcb) - eobjcb_table) + TMIN_EOBJID))
316
317/*
318 * ECHONET Lite オブジェクト機能の初期化
319 */
320extern void initialize_echonet_object(void);
321
322typedef EOBJINIB T_REOBJ;
323
324typedef EPRPINIB T_RPRP;
325
326typedef ENODADRB T_ENOD_ADDR;
327
328/*
329 * ECHONET Liteサービス処理開始
330 */
331ER ecn_sta_svc();
332
333/*
334 * インスタンスリスト通知の送信
335 */
336ER ecn_ntf_inl();
337
338/*
339 * ECHONETオブジェクト参ç…
340§
341 */
342ER ecn_ref_eobj(ID eobjid, T_REOBJ *pk_eobj);
343
344/*
345 * ECHONETプロパティ参ç…
346§
347 */
348ER ecn_ref_eprp(ID eobjid, uint8_t epc, T_RPRP *pk_eprp);
349
350/*
351 * プロパティ値書き込み要求(応答不要)電文作成
352 */
353ER ecn_esv_seti(T_EDATA **ppk_esv, ID eobjid, uint8_t epc, uint8_t pdc, const void *p_edt);
354
355/*
356 * プロパティ値書き込み要求(応答要)電文作成
357 */
358ER ecn_esv_setc(T_EDATA **ppk_esv, ID eobjid, uint8_t epc, uint8_t pdc, const void *p_edt);
359
360/*
361 * プロパティ値読み出し要求電文作成
362 */
363ER ecn_esv_get(T_EDATA **ppk_esv, ID eobjid, uint8_t epc);
364
365/*
366 * プロパティ値通知要求電文作成
367 */
368ER ecn_esv_inf_req(T_EDATA **ppk_esv, ID eobjid, uint8_t epc);
369
370/*
371 * プロパティ値書き込み・読み出し要求電文作成
372 */
373ER ecn_esv_set_get(T_EDATA **ppk_esv, ID eobjid, uint8_t epc, uint8_t pdc, const void *p_edt);
374
375/*
376 * プロパティ値書き込み・読み出し要求電文折り返し指定
377 */
378ER ecn_trn_set_get(T_EDATA *pk_esv, int *p_trn_pos);
379
380/*
381 * プロパティ値書き込み・読み出し要求電文終了指定
382 */
383ER ecn_end_set_get(T_EDATA *pk_esv, int trn_pos);
384
385/*
386 * プロパティ値通知(応答要)電文作成
387 */
388ER ecn_esv_infc(T_EDATA **ppk_esv, ID eobjid, ID seobjid, uint8_t sepc);
389
390/*
391 * 要求電文へのプロパティ指定追加
392 */
393ER ecn_add_epc(T_EDATA *pk_esv, uint8_t epc);
394
395/*
396 * 要求電文へのプロパティデータ追加
397 */
398ER ecn_add_edt(T_EDATA *pk_esv, uint8_t epc, uint8_t pdc, const void *p_edt);
399
400/*
401 * 要求電文の送信
402 */
403ER ecn_snd_esv(T_EDATA *pk_esv);
404
405/*
406 * 応答電文の受信永遠待
407ち
408 */
409ER ecn_rcv_esv(T_EDATA **ppk_esv);
410
411/*
412 * 応答電文の受信待
413ちタイムアウトあり
414 */
415ER ecn_trcv_esv(T_EDATA **ppk_esv, int tmout);
416
417/*
418 * 応答電文の受信ポーリング
419 */
420ER ecn_prcv_esv(T_EDATA **ppk_esv);
421
422/*
423 * 応答電文の破棄
424 */
425ER ecn_rel_esv(T_EDATA *pk_esv);
426
427/*
428 * 応答電文の送信å…
429ƒãƒŽãƒ¼ãƒ‰ã‚’取得する
430 */
431ID ecn_get_enod(T_EDATA *pk_esv);
432
433/*
434 * 応答電文の送信å…
435ƒæ©Ÿå™¨ã‚ªãƒ–ジェクトを取得する
436 */
437ID ecn_get_eobj(T_EDATA *pk_esv);
438
439/*
440 * 応答電文解析イテレーター初期化
441 */
442ER ecn_itr_ini(T_ENUM_EPC *pk_itr, T_EDATA *pk_esv);
443
444/*
445 * 応答電文解析イテレーターインクリメント
446 */
447ER ecn_itr_nxt(T_ENUM_EPC *pk_itr, uint8_t *p_epc, uint8_t *p_pdc, void *p_edt);
448
449/*
450 * 応答電文待
451ちの割り込み送信
452 */
453ER ecn_brk_wai(const void *p_dat, int datsz);
454
455/*
456 * 割り込みデータの取得
457 */
458ER ecn_get_brk_dat(T_EDATA *pk_esv, void *p_buf, int bufsz, int *p_datsz);
459
460/*
461 * データ設定関数
462 */
463int ecn_data_prop_set(const EPRPINIB *item, const void *src, int size, bool_t *anno);
464
465/*
466 * データ取得関数
467 */
468int ecn_data_prop_get(const EPRPINIB *item, void *dst, int size);
469
470#ifdef __cplusplus
471}
472#endif
473
474#endif // ECHONET_H
Note: See TracBrowser for help on using the repository browser.