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