source: EcnlProtoTool/trunk/ntshell/webserver/websocket_fbs.h@ 279

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

ファイルを追加、更新。

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-chdr
File size: 8.9 KB
Line 
1/*
2 * TOPPERS WEBSOCKET Lite Communication Middleware
3 *
4 * Copyright (C) 2017 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: websocket_fbs.h 279 2017-04-29 07:33:37Z coas-nagasima $
51 */
52
53/*
54 * 固定長バッファ可変長ストリーム
55 */
56
57#ifndef _WEBSOCKET_FBS_H_
58#define _WEBSOCKET_FBS_H_
59
60#include <kernel.h>
61
62#ifdef __cplusplus
63extern "C" {
64#endif
65
66#ifndef WEBSOCKET_MEMPOOL_GET_TMO
67#define WEBSOCKET_MEMPOOL_GET_TMO (0) /* メモリプール取得時のタイムアウト指定 */
68#endif /* WEBSOCKET_MEMPOOL_GET_TMO */
69
70#ifndef NUM_WEBSOCKET_MEMPOOL_BLOCK
71#define NUM_WEBSOCKET_MEMPOOL_BLOCK (60) /* 電文用メモリブロックの数 */
72#endif /* NUM_WEBSOCKET_MEMPOOL_BLOCK */
73
74#ifndef WEBSOCKET_MEMPOOL_BLOCK_SIZE
75#define WEBSOCKET_MEMPOOL_BLOCK_SIZE (256) /* 電文用メモリブロックのサイズ */
76#endif /* WEBSOCKET_MEMPOOL_BLOCK_SIZE */
77
78typedef unsigned int WS_FBS_SIZE_T; /* size_t相当 */
79typedef int WS_FBS_SSIZE_T; /* ssize_t相当 */
80
81/* T_WS_FST_BLK管理領域サイズ */
82#define DEF_WS_EDT_HDR_LEN (sizeof(intptr_t))
83
84/* 管理領域サイズ(64byte - sizeof(T_MSG)) */
85/* #define DEF_WS_FBS_LIB_HDR_LEN ((WEBSOCKET_MEMPOOL_BLOCK_SIZE + sizeof(int) - 1)>> 2) // */
86#define DEF_WS_FBS_LIB_HDR_LEN (64 - DEF_WS_EDT_HDR_LEN)
87
88/* 管理領域を含むブロックに保持するデータサイズ */
89#define DEF_WS_FBS_FST_DAT_LEN (64)
90
91/* リンクポインタé…
92åˆ—のサイズ(byte) */
93#define DEF_WS_FBS_LNK_LEN (WEBSOCKET_MEMPOOL_BLOCK_SIZE - DEF_WS_EDT_HDR_LEN - DEF_WS_FBS_LIB_HDR_LEN - DEF_WS_FBS_FST_DAT_LEN)
94
95/* 固定長バッファ最大サイズ */
96#define DEF_WS_FBS_BUF_MAXLEN ((DEF_WS_FBS_LNK_LEN / sizeof(void *)) * WEBSOCKET_MEMPOOL_BLOCK_SIZE + DEF_WS_FBS_FST_DAT_LEN)
97
98/* 子要素バッファのサイズ */
99#define DEF_WS_FBS_SUB_BUF_LEN WEBSOCKET_MEMPOOL_BLOCK_SIZE
100
101/* 電文の種別(内
102容は仮) */
103typedef enum
104{
105 WS_FBS_TYPE_BLANK = 0, /* 未使用ストリーム */
106 WS_FBS_TYPE_INTERNAL = 1, /* 内
107部メッセージ */
108 WS_FBS_TYPE_WEBSOCKET = 2 /* WEBSOCKET電文 */
109} TA_WS_MSG_TYPE;
110
111/* リンクポインタé…
112åˆ—に列挙される、子要素バッファ */
113typedef struct
114{
115 uint8_t payload[WEBSOCKET_MEMPOOL_BLOCK_SIZE];
116} T_WS_SUB_BLK;
117
118/* リンクポインタé…
119åˆ— */
120typedef union
121{
122 T_WS_SUB_BLK *p_sub[DEF_WS_FBS_LNK_LEN / sizeof(T_WS_SUB_BLK *)];
123 uint8_t bin[DEF_WS_FBS_LNK_LEN];
124} T_WS_FBS_LNK;
125
126/* 管理領域(64byte - sizeof(T_MSG)) */
127typedef struct
128{
129 uint16_t length; /* メッセージ長 */
130 uint16_t type; /* メッセージタイプ */
131 union{
132 ID mbxid; /* 送信å…
133ƒãƒ¡ãƒ¼ãƒ«ãƒœãƒƒã‚¯ã‚¹ID(内
134部メッセージ) */
135 }sender;
136 union{
137 ID mbxid; /* 送信å…
138ˆãƒ¡ãƒ¼ãƒ«ãƒœãƒƒã‚¯ã‚¹ID(内
139部メッセージ) */
140 }target;
141 union{
142 ID mbxid; /* 返信å…
143ˆãƒ¡ãƒ¼ãƒ«ãƒœãƒƒã‚¯ã‚¹ID(内
144部メッセージ) */
145 }reply;
146
147 int rd; /* 読み取りヘッド情
148å ± */
149 int wr; /* 書き込みヘッド情
150å ± */
151} T_WS_FBS_HDR;
152
153/* 管理領域を含むブロックの構造 */
154typedef struct
155{
156 uint8_t _msg[DEF_WS_EDT_HDR_LEN]; /* T_MSG */
157 T_WS_FBS_HDR hdr; /* 管理領域 64byte - sizeof(T_MSG) */
158 uint8_t _gap[DEF_WS_FBS_LIB_HDR_LEN - sizeof(T_WS_FBS_HDR)];
159 T_WS_FBS_LNK lnk; /* リンクポインタé…
160åˆ— 128byte */
161 uint8_t payload[DEF_WS_FBS_FST_DAT_LEN];
162} T_WS_FST_BLK;
163
164/* FBS-ID */
165typedef struct ws_fbs_id_strc
166{
167 T_WS_FST_BLK *ptr;
168} WS_FBS_ID;
169
170/* メッセージキュー */
171typedef struct ws_fbs_queue
172{
173 T_WS_FST_BLK *pk_head; /* å…
174ˆé ­ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ */
175 T_WS_FST_BLK *pk_last; /* 末尾のメッセージ */
176} T_WS_FBS_QUEUE;
177
178extern ID ws_mempoolid;
179
180/* メモリブロック取得 ok:ポインタ NG:NULL */
181void *_ws_fbs_mbx_get(WS_FBS_SIZE_T fa_req_size);
182
183/* メモリブロック解放 ok:0 NG:非0 */
184ER _ws_fbs_mbx_rel(void *p);
185
186/*
187 * 領域確保
188 * 引数
189 * WS_FBS_SIZE_T fa_req_size 要求バッファサイズ(byte)
190 * max: DEF_WS_FBS_BUF_MAXLEN
191 * WS_FBS_ID *fp_id 確保したFBS-IDの格納å…
192ˆ
193 * 戻り値
194 * ER 0:ok 非0:NG
195 */
196ER _ws_fbs_cre(WS_FBS_SIZE_T fa_req_size, WS_FBS_ID *fp_id);
197
198/*
199 * 領域解放
200 * 引数
201 * ws_fbs_id型 確保したFBS-ID
202 * 戻り値
203 * ER 0:ok, 非0:NG
204 */
205ER _ws_fbs_del(WS_FBS_ID fa_id);
206
207/*
208 * 保持データの有無
209 * 引数
210 * ws_fbs_id型 確保したFBS-ID
211 * 戻り値
212 * bool_t 0:無し, 1:あり
213 */
214bool_t _ws_fbs_exist_data(WS_FBS_ID fa_id);
215
216/*
217 * 保持データ長の取得
218 * 引数
219 * ws_fbs_id型 確保したFBS-ID
220 * 戻り値
221 * WS_FBS_SSIZE_T 保持しているデータの長さ(byte) -1:NG
222 */
223WS_FBS_SSIZE_T _ws_fbs_get_datalen(WS_FBS_ID fa_id);
224
225/*
226 * 読み取りカーソルの位置取得
227 * 引数
228 * ws_fbs_id型 確保したFBS-ID
229 * 戻り値
230 * WS_FBS_SIZE_T å…
231ˆé ­ã‹ã‚‰ã®çµ¶å¯¾ä½ç½® -1:NG
232 */
233WS_FBS_SSIZE_T _ws_fbs_get_rpos(WS_FBS_ID fa_id);
234
235/*
236 * 読み取りカーソルの位置設定
237 * 引数
238 * ws_fbs_id型 確保したFBS-ID
239 * WS_FBS_SIZE_T fa_pos 設定する位置(å…
240ˆé ­ã‹ã‚‰ã®çµ¶å¯¾ä½ç½®)
241 * 戻り値
242 * ER 0:ok, 非0:NG
243 */
244ER _ws_fbs_set_rpos(WS_FBS_ID fa_id, WS_FBS_SSIZE_T fa_pos);
245
246/*
247 * 読み取りカーソルの位置移動
248 * 引数
249 * ws_fbs_id型 確保したFBS-ID
250 * WS_FBS_SIZE_T fa_seek 移動量(現状、前進のみ)
251 * 戻り値
252 * ER 0:ok, 非0:NG
253 */
254ER _ws_fbs_seek_rpos(WS_FBS_ID fa_id, WS_FBS_SSIZE_T fa_seek);
255
256/*
257 * 任意指定位置の1byte読み取り
258 */
259int _ws_fbs_peek(WS_FBS_ID fa_id, WS_FBS_SSIZE_T fa_seek);
260
261/*
262 * 任意指定位置の1byte書き込み
263 */
264ER _ws_fbs_poke(WS_FBS_ID fa_id, WS_FBS_SSIZE_T fa_seek, int fa_val);
265
266/*
267 * データ追加
268 * 引数
269 * ws_fbs_id型 確保したFBS-ID
270 * const void * fa_dat 追加するデータ
271 * WS_FBS_SSIZE_T fa_len 追加する長さ(byte)
272 * 戻り値
273 * ER 0:ok, 非0:NG
274 */
275ER _ws_fbs_add_data(WS_FBS_ID fa_id, const void *fa_dat, WS_FBS_SSIZE_T fa_len);
276
277/*
278 * データ追加(領域を自動的に拡張する)
279 * 引数
280 * ws_fbs_id型 確保したFBS-ID
281 * const void * fa_dat 追加するデータ
282 * WS_FBS_SSIZE_T fa_len 追加する長さ(byte)
283 * 戻り値
284 * ER 0:ok, 非0:NG
285 */
286ER _ws_fbs_add_data_ex(WS_FBS_ID fa_id, const void *fa_dat, WS_FBS_SSIZE_T fa_len);
287
288/*
289 * データ取得
290 * 引数
291 * ws_fbs_id型 確保したFBS-ID
292 * void * fa_buf 取得するバッファ
293 * WS_FBS_SSIZE_T fa_maxlen 取得する長さ(byte)
294 * WS_FBS_SSIZE_T *p_len 取得した長さ(byte)
295 * 戻り値
296 * ER 0:ok, 非0:NG
297 */
298ER _ws_fbs_get_data(WS_FBS_ID fa_id, void *fa_buf, WS_FBS_SSIZE_T fa_maxlen,
299 WS_FBS_SSIZE_T *p_len);
300
301ER ws_fbs_enqueue(T_WS_FBS_QUEUE *pk_queue, T_WS_FST_BLK *pk_buf);
302ER ws_fbs_dequeue(T_WS_FBS_QUEUE *pk_queue, T_WS_FST_BLK **ppk_buf);
303
304#ifdef __cplusplus
305} /* extern "C" */
306#endif
307
308#endif /* #ifndef _WEBSOCKET_FBS_H_ */
Note: See TracBrowser for help on using the repository browser.