source: UsbWattMeter/trunk/ecnl_lwip/echonet_fbs.h@ 473

Last change on this file since 473 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: 7.7 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_fbs.h 167 2016-03-08 11:37:45Z coas-nagasima $
36 */
37
38/*
39 * 固定長バッファ可変長ストリーム
40 */
41
42#ifndef TOPPERS_ECHONET_FBS_H
43#define TOPPERS_ECHONET_FBS_H
44
45#include <kernel.h>
46#include "echonet.h"
47
48#ifdef __cplusplus
49extern "C" {
50#endif
51
52#ifndef ECHONET_MEMPOOL_GET_TMO
53#define ECHONET_MEMPOOL_GET_TMO (0) /* メモリプール取得時のタイムアウト指定 */
54#endif /* ECHONET_MEMPOOL_GET_TMO */
55
56#ifndef NUM_ECHONET_MEMPOOL_BLOCK
57#define NUM_ECHONET_MEMPOOL_BLOCK (60) /* 電文用メモリブロックの数 */
58#endif /* NUM_ECHONET_MEMPOOL_BLOCK */
59
60#ifndef ECHONET_MEMPOOL_BLOCK_SIZE
61#define ECHONET_MEMPOOL_BLOCK_SIZE (256) /* 電文用メモリブロックのサイズ */
62#endif /* ECHONET_MEMPOOL_BLOCK_SIZE */
63
64typedef unsigned int ECN_FBS_SIZE_T; /* size_t相当 */
65typedef int ECN_FBS_SSIZE_T; /* ssize_t相当 */
66
67/* T_EDATA管理領域サイズ */
68#ifdef TARGET_KERNEL_ASP
69#define DEF_ECN_EDT_HDR_LEN (sizeof(T_MSG))
70#else
71#define DEF_ECN_EDT_HDR_LEN (sizeof(intptr_t))
72#endif
73
74/* 管理領域サイズ(64byte - sizeof(T_MSG)) */
75/* #define DEF_ECN_FBS_LIB_HDR_LEN ((ECHONET_MEMPOOL_BLOCK_SIZE + sizeof(int) - 1)>> 2) // */
76#define DEF_ECN_FBS_LIB_HDR_LEN (64 - DEF_ECN_EDT_HDR_LEN)
77
78/* 管理領域を含むブロックに保持するデータサイズ */
79#define DEF_ECN_FBS_FST_DAT_LEN (64)
80
81/* リンクポインタ配列のサイズ(byte) */
82#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)
83
84/* 固定長バッファ最大サイズ */
85#define DEF_ECN_FBS_BUF_MAXLEN ((DEF_ECN_FBS_LNK_LEN / sizeof(void *)) * ECHONET_MEMPOOL_BLOCK_SIZE + DEF_ECN_FBS_FST_DAT_LEN)
86
87/* 子要素バッファのサイズ */
88#define DEF_ECN_FBS_SUB_BUF_LEN ECHONET_MEMPOOL_BLOCK_SIZE
89
90/* 電文の種別(内容は仮) */
91typedef enum
92{
93 ECN_FBS_TYPE_BLANK = 0, /* 未使用ストリーム */
94 ECN_FBS_TYPE_INTERNAL = 1, /* 内部メッセージ */
95 ECN_FBS_TYPE_ECHONET = 2 /* ECHONET電文 */
96} TA_ECN_MSG_TYPE;
97
98/* リンクポインタ配列に列挙される、子要素バッファ */
99typedef struct
100{
101 uint8_t payload[ECHONET_MEMPOOL_BLOCK_SIZE];
102} T_ECN_SUB_BLK;
103
104/* リンクポインタ配列 */
105typedef union
106{
107 T_ECN_SUB_BLK *p_sub[DEF_ECN_FBS_LNK_LEN / sizeof(T_ECN_SUB_BLK *)];
108 uint8_t bin[DEF_ECN_FBS_LNK_LEN];
109} T_ECN_FBS_LNK;
110
111/* 管理領域(64byte - sizeof(T_MSG)) */
112typedef struct
113{
114 uint16_t length; /* メッセージ長 */
115 uint16_t type; /* メッセージタイプ */
116 union{
117 ECN_ENOD_ID id; /* 送信元ノードID(ECHONET電文) */
118 ID mbxid; /* 送信元メールボックスID(内部メッセージ) */
119 }sender;
120 union{
121 ECN_ENOD_ID id; /* 送信先ノードID(ECHONET電文) */
122 ID mbxid; /* 送信先メールボックスID(内部メッセージ) */
123 }target;
124 union{
125 ECN_ENOD_ID id; /* 返信先ノードID(ECHONET電文) */
126 ID mbxid; /* 返信先メールボックスID(内部メッセージ) */
127 }reply;
128
129 int rd; /* 読み取りヘッド情報 */
130 int wr; /* 書き込みヘッド情報 */
131} T_ECN_FBS_HDR;
132
133/* 管理領域を含むブロックの構造 */
134typedef struct
135{
136 uint8_t _msg[DEF_ECN_EDT_HDR_LEN]; /* T_MSG */
137 T_ECN_FBS_HDR hdr; /* 管理領域 64byte - sizeof(T_MSG) */
138 uint8_t _gap[DEF_ECN_FBS_LIB_HDR_LEN - sizeof(T_ECN_FBS_HDR)];
139 T_ECN_FBS_LNK lnk; /* リンクポインタ配列 128byte */
140 uint8_t payload[DEF_ECN_FBS_FST_DAT_LEN];
141} T_ECN_FST_BLK;
142
143/* FBS-ID */
144typedef struct ecn_fbs_id_strc
145{
146 T_ECN_FST_BLK *ptr;
147} ECN_FBS_ID;
148
149/* メッセージキュー */
150typedef struct ecn_fbs_queue
151{
152 T_ECN_FST_BLK *pk_head; /* 先頭のメッセージ */
153 T_ECN_FST_BLK *pk_last; /* 末尾のメッセージ */
154} T_ECN_FBS_QUEUE;
155
156/*
157 * 領域確保
158 * 引数
159 * ECN_FBS_SIZE_T fa_req_size 要求バッファサイズ(byte)
160 * max: DEF_ECN_FBS_BUF_MAXLEN
161 * ECN_FBS_ID *fp_id 確保したFBS-IDの格納先
162 * 戻り値
163 * ER 0:ok 非0:NG
164 */
165ER _ecn_fbs_cre(ECN_FBS_SIZE_T fa_req_size, ECN_FBS_ID *fp_id);
166
167/*
168 * 領域解放
169 * 引数
170 * ecn_fbs_id型 確保したFBS-ID
171 * 戻り値
172 * ER 0:ok, 非0:NG
173 */
174ER _ecn_fbs_del(ECN_FBS_ID fa_id);
175
176/*
177 * 保持データの有無
178 * 引数
179 * ecn_fbs_id型 確保したFBS-ID
180 * 戻り値
181 * bool_t 0:無し, 1:あり
182 */
183bool_t _ecn_fbs_exist_data(ECN_FBS_ID fa_id);
184
185/*
186 * 保持データ長の取得
187 * 引数
188 * ecn_fbs_id型 確保したFBS-ID
189 * 戻り値
190 * ECN_FBS_SSIZE_T 保持しているデータの長さ(byte) -1:NG
191 */
192ECN_FBS_SSIZE_T _ecn_fbs_get_datalen(ECN_FBS_ID fa_id);
193
194/*
195 * 読み取りカーソルの位置取得
196 * 引数
197 * ecn_fbs_id型 確保したFBS-ID
198 * 戻り値
199 * ECN_FBS_SIZE_T 先頭からの絶対位置 -1:NG
200 */
201ECN_FBS_SSIZE_T _ecn_fbs_get_rpos(ECN_FBS_ID fa_id);
202
203/*
204 * 読み取りカーソルの位置設定
205 * 引数
206 * ecn_fbs_id型 確保したFBS-ID
207 * ECN_FBS_SIZE_T fa_pos 設定する位置(先頭からの絶対位置)
208 * 戻り値
209 * ER 0:ok, 非0:NG
210 */
211ER _ecn_fbs_set_rpos(ECN_FBS_ID fa_id, ECN_FBS_SSIZE_T fa_pos);
212
213/*
214 * 読み取りカーソルの位置移動
215 * 引数
216 * ecn_fbs_id型 確保したFBS-ID
217 * ECN_FBS_SIZE_T fa_seek 移動量(現状、前進のみ)
218 * 戻り値
219 * ER 0:ok, 非0:NG
220 */
221ER _ecn_fbs_seek_rpos(ECN_FBS_ID fa_id, ECN_FBS_SSIZE_T fa_seek);
222
223/*
224 * 任意指定位置の1byte読み取り
225 */
226int _ecn_fbs_peek(ECN_FBS_ID fa_id, ECN_FBS_SSIZE_T fa_seek);
227
228/*
229 * 任意指定位置の1byte書き込み
230 */
231ER _ecn_fbs_poke(ECN_FBS_ID fa_id, ECN_FBS_SSIZE_T fa_seek, int fa_val);
232
233/*
234 * データ追加
235 * 引数
236 * ecn_fbs_id型 確保したFBS-ID
237 * const void * fa_dat 追加するデータ
238 * ECN_FBS_SSIZE_T fa_len 追加する長さ(byte)
239 * 戻り値
240 * ER 0:ok, 非0:NG
241 */
242ER _ecn_fbs_add_data(ECN_FBS_ID fa_id, const void *fa_dat, ECN_FBS_SSIZE_T fa_len);
243
244/*
245 * データ追加(領域を自動的に拡張する)
246 * 引数
247 * ecn_fbs_id型 確保したFBS-ID
248 * const void * fa_dat 追加するデータ
249 * ECN_FBS_SSIZE_T fa_len 追加する長さ(byte)
250 * 戻り値
251 * ER 0:ok, 非0:NG
252 */
253ER _ecn_fbs_add_data_ex(ECN_FBS_ID fa_id, const void *fa_dat, ECN_FBS_SSIZE_T fa_len);
254
255/*
256 * データ取得
257 * 引数
258 * ecn_fbs_id型 確保したFBS-ID
259 * void * fa_buf 取得するバッファ
260 * ECN_FBS_SSIZE_T fa_maxlen 取得する長さ(byte)
261 * ECN_FBS_SSIZE_T *p_len 取得した長さ(byte)
262 * 戻り値
263 * ER 0:ok, 非0:NG
264 */
265ER _ecn_fbs_get_data(ECN_FBS_ID fa_id, void *fa_buf, ECN_FBS_SSIZE_T fa_maxlen,
266 ECN_FBS_SSIZE_T *p_len);
267
268ER ecn_fbs_enqueue(T_ECN_FBS_QUEUE *pk_queue, T_ECN_FST_BLK *pk_buf);
269ER ecn_fbs_dequeue(T_ECN_FBS_QUEUE *pk_queue, T_ECN_FST_BLK **ppk_buf);
270
271#ifdef __cplusplus
272} /* extern "C" */
273#endif
274
275#endif /* #ifndef TOPPERS_ECHONET_FBS_H */
Note: See TracBrowser for help on using the repository browser.