source: EcnlProtoTool/trunk/mrbgems/mruby-ecnl/src/echonet.h@ 270

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

mruby版ECNLプロトタイピング・ツールを追加

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