source: azure_iot_hub/trunk/ntshell/echonet/echonet_fbs.h@ 388

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

Azure IoT Hub Device C SDK を使ったサンプルの追加

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