source: EcnlProtoTool/trunk/mrbgems/mruby-ecnl/src/echonet_fbs.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: 9.2 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/*
53 * 固定長バッファ可変長ストリーム
54 */
55
56#ifndef TOPPERS_ECHONET_FBS_H
57#define TOPPERS_ECHONET_FBS_H
58
59#include <stddef.h>
60#include <stdint.h>
61#include "echonet.h"
62
63#ifdef __cplusplus
64extern "C" {
65#endif
66
67#ifndef NUM_ECHONET_MEMPOOL_BLOCK
68#define NUM_ECHONET_MEMPOOL_BLOCK (60) /* 電文用メモリブロックの数 */
69#endif /* NUM_ECHONET_MEMPOOL_BLOCK */
70
71#ifndef ECHONET_MEMPOOL_BLOCK_SIZE
72#define ECHONET_MEMPOOL_BLOCK_SIZE (256) /* 電文用メモリブロックのサイズ */
73#endif /* ECHONET_MEMPOOL_BLOCK_SIZE */
74
75typedef unsigned int ECN_FBS_SIZE_T; /* size_t相当 */
76typedef int ECN_FBS_SSIZE_T; /* ssize_t相当 */
77
78/* T_EDATA管理領域サイズ */
79#define DEF_ECN_EDT_HDR_LEN (sizeof(intptr_t))
80
81/* 管理領域サイズ(64byte - sizeof(T_MSG)) */
82/* #define DEF_ECN_FBS_LIB_HDR_LEN ((ECHONET_MEMPOOL_BLOCK_SIZE + sizeof(int) - 1)>> 2) // */
83#define DEF_ECN_FBS_LIB_HDR_LEN (64 - DEF_ECN_EDT_HDR_LEN)
84
85/* 管理領域を含むブロックに保持するデータサイズ */
86#define DEF_ECN_FBS_FST_DAT_LEN (64)
87
88/* リンクポインタé…
89åˆ—のサイズ(byte) */
90#define DEF_ECN_FBS_LNK_LEN (ECHONET_MEMPOOL_BLOCK_SIZE - DEF_ECN_EDT_HDR_LEN - DEF_ECN_FBS_LIB_HDR_LEN - DEF_ECN_FBS_FST_DAT_LEN)
91
92/* 固定長バッファ最大サイズ */
93#define DEF_ECN_FBS_BUF_MAXLEN ((DEF_ECN_FBS_LNK_LEN / sizeof(void *)) * ECHONET_MEMPOOL_BLOCK_SIZE + DEF_ECN_FBS_FST_DAT_LEN)
94
95/* 子要素バッファのサイズ */
96#define DEF_ECN_FBS_SUB_BUF_LEN ECHONET_MEMPOOL_BLOCK_SIZE
97
98/* 電文の種別(内
99容は仮) */
100typedef enum
101{
102 ECN_FBS_TYPE_BLANK = 0, /* 未使用ストリーム */
103 ECN_FBS_TYPE_INTERNAL = 1, /* 内
104部メッセージ */
105 ECN_FBS_TYPE_ECHONET = 2 /* ECHONET電文 */
106} TA_ECN_MSG_TYPE;
107
108/* リンクポインタé…
109åˆ—に列挙される、子要素バッファ */
110typedef struct
111{
112 uint8_t payload[ECHONET_MEMPOOL_BLOCK_SIZE];
113} T_ECN_SUB_BLK;
114
115/* リンクポインタé…
116åˆ— */
117typedef union
118{
119 T_ECN_SUB_BLK *p_sub[DEF_ECN_FBS_LNK_LEN / sizeof(T_ECN_SUB_BLK *)];
120 uint8_t bin[DEF_ECN_FBS_LNK_LEN];
121} T_ECN_FBS_LNK;
122
123/* 管理領域(64byte - sizeof(T_MSG)) */
124typedef struct
125{
126 uint16_t length; /* メッセージ長 */
127 uint16_t type; /* メッセージタイプ */
128 union{
129 ECN_ENOD_ID id; /* 送信å…
130ƒãƒŽãƒ¼ãƒ‰ID(ECHONET電文) */
131 struct ecn_fbs_queue *mbxid; /* 送信å…
132ƒãƒ¡ãƒ¼ãƒ«ãƒœãƒƒã‚¯ã‚¹ID(内
133部メッセージ) */
134 }sender;
135 union{
136 ECN_ENOD_ID id; /* 送信å…
137ˆãƒŽãƒ¼ãƒ‰ID(ECHONET電文) */
138 struct ecn_fbs_queue *mbxid; /* 送信å…
139ˆãƒ¡ãƒ¼ãƒ«ãƒœãƒƒã‚¯ã‚¹ID(内
140部メッセージ) */
141 }target;
142 union{
143 ECN_ENOD_ID id; /* 返信å…
144ˆãƒŽãƒ¼ãƒ‰ID(ECHONET電文) */
145 struct ecn_fbs_queue *mbxid; /* 返信å…
146ˆãƒ¡ãƒ¼ãƒ«ãƒœãƒƒã‚¯ã‚¹ID(内
147部メッセージ) */
148 }reply;
149
150 int rd; /* 読み取りヘッド情
151å ± */
152 int wr; /* 書き込みヘッド情
153å ± */
154} T_ECN_FBS_HDR;
155
156/* 管理領域を含むブロックの構造 */
157typedef struct
158{
159 uint8_t _msg[DEF_ECN_EDT_HDR_LEN]; /* T_MSG */
160 T_ECN_FBS_HDR hdr; /* 管理領域 64byte - sizeof(T_MSG) */
161 uint8_t _gap[DEF_ECN_FBS_LIB_HDR_LEN - sizeof(T_ECN_FBS_HDR)];
162 T_ECN_FBS_LNK lnk; /* リンクポインタé…
163åˆ— 128byte */
164 uint8_t payload[DEF_ECN_FBS_FST_DAT_LEN];
165} T_ECN_FST_BLK;
166
167/* FBS-ID */
168typedef struct ecn_fbs_id_strc
169{
170 T_ECN_FST_BLK *ptr;
171} ECN_FBS_ID;
172
173/* メッセージキュー */
174typedef struct ecn_fbs_queue
175{
176 T_ECN_FST_BLK *pk_head; /* å…
177ˆé ­ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ */
178 T_ECN_FST_BLK *pk_last; /* 末尾のメッセージ */
179} T_ECN_FBS_QUEUE;
180
181/* メモリブロック取得 ok:ポインタ NG:NULL */
182void *_ecn_fbs_mbx_get(mrb_state *mrb, ECN_FBS_SIZE_T fa_req_size);
183
184/* メモリブロック解放 ok:0 NG:非0 */
185ER _ecn_fbs_mbx_rel(mrb_state *mrb, void *p);
186
187/*
188 * 領域確保
189 * 引数
190 * ECN_FBS_SIZE_T fa_req_size 要求バッファサイズ(byte)
191 * max: DEF_ECN_FBS_BUF_MAXLEN
192 * ECN_FBS_ID *fp_id 確保したFBS-IDの格納å…
193ˆ
194 * 戻り値
195 * ER 0:ok 非0:NG
196 */
197ER _ecn_fbs_cre(mrb_state *mrb, ECN_FBS_SIZE_T fa_req_size, ECN_FBS_ID *fp_id);
198
199/*
200 * 領域解放
201 * 引数
202 * ecn_fbs_id型 確保したFBS-ID
203 * 戻り値
204 * ER 0:ok, 非0:NG
205 */
206ER _ecn_fbs_del(mrb_state *mrb, ECN_FBS_ID fa_id);
207
208/*
209 * 保持データの有無
210 * 引数
211 * ecn_fbs_id型 確保したFBS-ID
212 * 戻り値
213 * bool_t 0:無し, 1:あり
214 */
215bool_t _ecn_fbs_exist_data(ECN_FBS_ID fa_id);
216
217/*
218 * 保持データ長の取得
219 * 引数
220 * ecn_fbs_id型 確保したFBS-ID
221 * 戻り値
222 * ECN_FBS_SSIZE_T 保持しているデータの長さ(byte) -1:NG
223 */
224ECN_FBS_SSIZE_T _ecn_fbs_get_datalen(ECN_FBS_ID fa_id);
225
226/*
227 * 読み取りカーソルの位置取得
228 * 引数
229 * ecn_fbs_id型 確保したFBS-ID
230 * 戻り値
231 * ECN_FBS_SIZE_T å…
232ˆé ­ã‹ã‚‰ã®çµ¶å¯¾ä½ç½® -1:NG
233 */
234ECN_FBS_SSIZE_T _ecn_fbs_get_rpos(ECN_FBS_ID fa_id);
235
236/*
237 * 読み取りカーソルの位置設定
238 * 引数
239 * ecn_fbs_id型 確保したFBS-ID
240 * ECN_FBS_SIZE_T fa_pos 設定する位置(å…
241ˆé ­ã‹ã‚‰ã®çµ¶å¯¾ä½ç½®)
242 * 戻り値
243 * ER 0:ok, 非0:NG
244 */
245ER _ecn_fbs_set_rpos(ECN_FBS_ID fa_id, ECN_FBS_SSIZE_T fa_pos);
246
247/*
248 * 読み取りカーソルの位置移動
249 * 引数
250 * ecn_fbs_id型 確保したFBS-ID
251 * ECN_FBS_SIZE_T fa_seek 移動量(現状、前進のみ)
252 * 戻り値
253 * ER 0:ok, 非0:NG
254 */
255ER _ecn_fbs_seek_rpos(ECN_FBS_ID fa_id, ECN_FBS_SSIZE_T fa_seek);
256
257/*
258 * 任意指定位置の1byte読み取り
259 */
260int _ecn_fbs_peek(mrb_state *mrb, ECN_FBS_ID fa_id, ECN_FBS_SSIZE_T fa_seek);
261
262/*
263 * 任意指定位置の1byte書き込み
264 */
265ER _ecn_fbs_poke(mrb_state *mrb, ECN_FBS_ID fa_id, ECN_FBS_SSIZE_T fa_seek, int fa_val);
266
267/*
268 * データ追加
269 * 引数
270 * ecn_fbs_id型 確保したFBS-ID
271 * const void * fa_dat 追加するデータ
272 * ECN_FBS_SSIZE_T fa_len 追加する長さ(byte)
273 * 戻り値
274 * ER 0:ok, 非0:NG
275 */
276ER _ecn_fbs_add_data(mrb_state *mrb, ECN_FBS_ID fa_id, const void *fa_dat, ECN_FBS_SSIZE_T fa_len);
277
278/*
279 * データ追加(領域を自動的に拡張する)
280 * 引数
281 * ecn_fbs_id型 確保したFBS-ID
282 * const void * fa_dat 追加するデータ
283 * ECN_FBS_SSIZE_T fa_len 追加する長さ(byte)
284 * 戻り値
285 * ER 0:ok, 非0:NG
286 */
287ER _ecn_fbs_add_data_ex(mrb_state *mrb, ECN_FBS_ID fa_id, const void *fa_dat, ECN_FBS_SSIZE_T fa_len);
288
289/*
290 * データ取得
291 * 引数
292 * ecn_fbs_id型 確保したFBS-ID
293 * void * fa_buf 取得するバッファ
294 * ECN_FBS_SSIZE_T fa_maxlen 取得する長さ(byte)
295 * ECN_FBS_SSIZE_T *p_len 取得した長さ(byte)
296 * 戻り値
297 * ER 0:ok, 非0:NG
298 */
299ER _ecn_fbs_get_data(mrb_state *mrb, ECN_FBS_ID fa_id, void *fa_buf, ECN_FBS_SSIZE_T fa_maxlen,
300 ECN_FBS_SSIZE_T *p_len);
301
302ER ecn_fbs_enqueue(T_ECN_FBS_QUEUE *pk_queue, T_ECN_FST_BLK *pk_buf);
303ER ecn_fbs_dequeue(T_ECN_FBS_QUEUE *pk_queue, T_ECN_FST_BLK **ppk_buf);
304
305#ifdef __cplusplus
306} /* extern "C" */
307#endif
308
309#endif /* #ifndef TOPPERS_ECHONET_FBS_H */
Note: See TracBrowser for help on using the repository browser.