source: uKadecot/trunk/ecnl_ssp/echonet_fbs.h@ 101

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

TOPPERS/uKadecotのソースコードを追加

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/plain
File size: 7.7 KB
RevLine 
[101]1/*
2 * TOPPERS ECHONET Lite Communication Middleware
3 *
4 * Copyright (C) 2014 Cores Co., Ltd. Japan
5 *
6 * ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
7 * ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
8 * •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
9 * (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
10 * Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
11 * ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
12 * (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
13 * —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ…
14ƒƒ“ƒgi—˜—p
15 * ŽÒƒ}ƒjƒ…
16ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
17 * ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
18 * (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
19 * —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
20 * ‚ƁD
21 * (a) Ä”z•z‚É”º‚¤ƒhƒLƒ…
22ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ…
23ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
24 * ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
25 * (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
26 * •ñ‚·‚邱‚ƁD
27 * (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
28 * ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
29 * ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
30 * —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
31 * –Ɛӂ·‚邱‚ƁD
32 *
33 * –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
34 * ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
35 * ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
36 * ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
37 * ‚̐ӔC‚𕉂í‚È‚¢D
38 *
39 * @(#) $Id: echonet_fbs.h 101 2015-06-02 15:37:23Z coas-nagasima $
40 */
41
42/*
43 * ŒÅ’è’·ƒoƒbƒtƒ@‰Â•Ï’·ƒXƒgƒŠ[ƒ€
44 */
45
46#ifndef TOPPERS_ECHONET_FBS_H
47#define TOPPERS_ECHONET_FBS_H
48
49#include <t_stddef.h>
50#include "echonet.h"
51
52#ifdef __cplusplus
53extern "C" {
54#endif
55
56#ifndef NUM_ECHONET_MEMPOOL_BLOCK
57#define NUM_ECHONET_MEMPOOL_BLOCK (60) /* “d•¶—pƒƒ‚ƒŠƒuƒƒbƒN‚̐” */
58#endif /* NUM_ECHONET_MEMPOOL_BLOCK */
59
60#ifndef ECHONET_MEMPOOL_BLOCK_SIZE
61#define ECHONET_MEMPOOL_BLOCK_SIZE (256) /* “d•¶—pƒƒ‚ƒŠƒuƒƒbƒN‚̃TƒCƒY */
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ŠÇ——̈æƒTƒCƒY */
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/* ŠÇ——̈æƒTƒCƒY(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/* ŠÇ——̈æ‚ðŠÜ‚ÞƒuƒƒbƒN‚É•ÛŽ‚·‚éƒf[ƒ^ƒTƒCƒY */
79#define DEF_ECN_FBS_FST_DAT_LEN (64)
80
81/* ƒŠƒ“ƒNƒ|ƒCƒ“ƒ^”z—ñ‚̃TƒCƒY(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/* ŒÅ’è’·ƒoƒbƒtƒ@Å‘åƒTƒCƒY */
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/* Žq—v‘fƒoƒbƒtƒ@‚̃TƒCƒY */
88#define DEF_ECN_FBS_SUB_BUF_LEN ECHONET_MEMPOOL_BLOCK_SIZE
89
90/* “d•¶‚ÌŽí•Ê(“à—e‚͉¼) */
91typedef enum
92{
93 ECN_FBS_TYPE_BLANK = 0, /* –¢Žg—pƒXƒgƒŠ[ƒ€ */
94 ECN_FBS_TYPE_INTERNAL = 1, /* “à•”ƒƒbƒZ[ƒW */
95 ECN_FBS_TYPE_ECHONET = 2 /* ECHONET“d•¶ */
96} TA_ECN_MSG_TYPE;
97
98/* ƒŠƒ“ƒNƒ|ƒCƒ“ƒ^”z—ñ‚É—ñ‹“‚³‚ê‚éAŽq—v‘fƒoƒbƒtƒ@ */
99typedef struct
100{
101 uint8_t payload[ECHONET_MEMPOOL_BLOCK_SIZE];
102} T_ECN_SUB_BLK;
103
104/* ƒŠƒ“ƒNƒ|ƒCƒ“ƒ^”z—ñ */
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; /* ƒƒbƒZ[ƒW’· */
115 uint16_t type; /* ƒƒbƒZ[ƒWƒ^ƒCƒv */
116 union{
117 ECN_ENOD_ID sender; /* ‘—MŒ³ƒm[ƒhIDiECHONET“d•¶j */
118 ID sender_mbxid; /* ‘—MŒ³ƒ[ƒ‹ƒ{ƒbƒNƒXIDi“à•”ƒƒbƒZ[ƒWj */
119 };
120 union{
121 ECN_ENOD_ID target; /* ‘—Mæƒm[ƒhIDiECHONET“d•¶j */
122 ID target_mbxid; /* ‘—Mæƒ[ƒ‹ƒ{ƒbƒNƒXIDi“à•”ƒƒbƒZ[ƒWj */
123 };
124 union{
125 ECN_ENOD_ID reply; /* •ÔMæƒm[ƒhIDiECHONET“d•¶j */
126 ID reply_mbxid; /* •ÔMæƒ[ƒ‹ƒ{ƒbƒNƒXIDi“à•”ƒƒbƒZ[ƒWj */
127 };
128
129 int rd; /* “Ç‚ÝŽæ‚èƒwƒbƒhî•ñ */
130 int wr; /* ‘‚«ž‚݃wƒbƒhî•ñ */
131} T_ECN_FBS_HDR;
132
133/* ŠÇ——̈æ‚ðŠÜ‚ÞƒuƒƒbƒN‚̍\‘¢ */
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; /* ƒŠƒ“ƒNƒ|ƒCƒ“ƒ^”z—ñ 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/* ƒƒbƒZ[ƒWƒLƒ…
150[ */
151typedef struct ecn_fbs_queue
152{
153 T_ECN_FST_BLK *pk_head; /* æ“ª‚̃ƒbƒZ[ƒW */
154 T_ECN_FST_BLK *pk_last; /* ––”ö‚̃ƒbƒZ[ƒW */
155} T_ECN_FBS_QUEUE;
156
157/* ƒƒ‚ƒŠƒuƒƒbƒNŽæ“¾ ok:ƒ|ƒCƒ“ƒ^ NG:NULL */
158void *_ecn_fbs_mbx_get(ECN_FBS_SIZE_T fa_req_size);
159
160/* ƒƒ‚ƒŠƒuƒƒbƒN‰ð•ú ok:0 NG:”ñ0 */
161ER _ecn_fbs_mbx_rel(void *p);
162
163/*
164 * —̈æŠm•Û
165 * ˆø”
166 * ECN_FBS_SIZE_T fa_req_size —v‹ƒoƒbƒtƒ@ƒTƒCƒY(byte)
167 * max: DEF_ECN_FBS_BUF_MAXLEN
168 * ECN_FBS_ID *fp_id Šm•Û‚µ‚½FBS-ID‚ÌŠi”[æ
169 * –ß‚è’l
170 * ER 0:ok Ӗ0:NG
171 */
172ER _ecn_fbs_cre(ECN_FBS_SIZE_T fa_req_size, ECN_FBS_ID *fp_id);
173
174/*
175 * —̈æ‰ð•ú
176 * ˆø”
177 * ecn_fbs_idŒ^ Šm•Û‚µ‚½FBS-ID
178 * –ß‚è’l
179 * ER 0:ok, Ӗ0:NG
180 */
181ER _ecn_fbs_del(ECN_FBS_ID fa_id);
182
183/*
184 * •ÛŽƒf[ƒ^‚Ì—L–³
185 * ˆø”
186 * ecn_fbs_idŒ^ Šm•Û‚µ‚½FBS-ID
187 * –ß‚è’l
188 * bool_t 0:–³‚µ, 1:‚ ‚è
189 */
190bool_t _ecn_fbs_exist_data(ECN_FBS_ID fa_id);
191
192/*
193 * •ÛŽƒf[ƒ^’·‚̎擾
194 * ˆø”
195 * ecn_fbs_idŒ^ Šm•Û‚µ‚½FBS-ID
196 * –ß‚è’l
197 * ECN_FBS_SSIZE_T •ÛŽ‚µ‚Ä‚¢‚éƒf[ƒ^‚Ì’·‚³(byte) -1:NG
198 */
199ECN_FBS_SSIZE_T _ecn_fbs_get_datalen(ECN_FBS_ID fa_id);
200
201/*
202 * “Ç‚ÝŽæ‚èƒJ[ƒ\ƒ‹‚̈ʒuŽæ“¾
203 * ˆø”
204 * ecn_fbs_idŒ^ Šm•Û‚µ‚½FBS-ID
205 * –ß‚è’l
206 * ECN_FBS_SIZE_T æ“ª‚©‚ç‚̐â‘Έʒu -1:NG
207 */
208ECN_FBS_SSIZE_T _ecn_fbs_get_rpos(ECN_FBS_ID fa_id);
209
210/*
211 * “Ç‚ÝŽæ‚èƒJ[ƒ\ƒ‹‚̈ʒuÝ’è
212 * ˆø”
213 * ecn_fbs_idŒ^ Šm•Û‚µ‚½FBS-ID
214 * ECN_FBS_SIZE_T fa_pos Ý’è‚·‚éˆÊ’u(æ“ª‚©‚ç‚̐â‘Έʒu)
215 * –ß‚è’l
216 * ER 0:ok, Ӗ0:NG
217 */
218ER _ecn_fbs_set_rpos(ECN_FBS_ID fa_id, ECN_FBS_SSIZE_T fa_pos);
219
220/*
221 * “Ç‚ÝŽæ‚èƒJ[ƒ\ƒ‹‚̈ʒuˆÚ“®
222 * ˆø”
223 * ecn_fbs_idŒ^ Šm•Û‚µ‚½FBS-ID
224 * ECN_FBS_SIZE_T fa_seek ˆÚ“®—Ê(Œ»óA‘Oi‚Ì‚Ý)
225 * –ß‚è’l
226 * ER 0:ok, Ӗ0:NG
227 */
228ER _ecn_fbs_seek_rpos(ECN_FBS_ID fa_id, ECN_FBS_SSIZE_T fa_seek);
229
230/*
231 * ”CˆÓŽw’èˆÊ’u‚Ì1byte“Ç‚ÝŽæ‚è
232 */
233int _ecn_fbs_peek(ECN_FBS_ID fa_id, ECN_FBS_SSIZE_T fa_seek);
234
235/*
236 * ”CˆÓŽw’èˆÊ’u‚Ì1byte‘‚«ž‚Ý
237 */
238ER _ecn_fbs_poke(ECN_FBS_ID fa_id, ECN_FBS_SSIZE_T fa_seek, int fa_val);
239
240/*
241 * ƒf[ƒ^’ljÁ
242 * ˆø”
243 * ecn_fbs_idŒ^ Šm•Û‚µ‚½FBS-ID
244 * const void * fa_dat ’ljÁ‚·‚éƒf[ƒ^
245 * ECN_FBS_SSIZE_T fa_len ’ljÁ‚·‚é’·‚³(byte)
246 * –ß‚è’l
247 * ER 0:ok, Ӗ0:NG
248 */
249ER _ecn_fbs_add_data(ECN_FBS_ID fa_id, const void *fa_dat, ECN_FBS_SSIZE_T fa_len);
250
251/*
252 * ƒf[ƒ^’ljÁ(—̈æ‚ðŽ©“®“I‚ÉŠg’£‚·‚é)
253 * ˆø”
254 * ecn_fbs_idŒ^ Šm•Û‚µ‚½FBS-ID
255 * const void * fa_dat ’ljÁ‚·‚éƒf[ƒ^
256 * ECN_FBS_SSIZE_T fa_len ’ljÁ‚·‚é’·‚³(byte)
257 * –ß‚è’l
258 * ER 0:ok, Ӗ0:NG
259 */
260ER _ecn_fbs_add_data_ex(ECN_FBS_ID fa_id, const void *fa_dat, ECN_FBS_SSIZE_T fa_len);
261
262/*
263 * ƒf[ƒ^Žæ“¾
264 * ˆø”
265 * ecn_fbs_idŒ^ Šm•Û‚µ‚½FBS-ID
266 * void * fa_buf Žæ“¾‚·‚éƒoƒbƒtƒ@
267 * ECN_FBS_SSIZE_T fa_maxlen Žæ“¾‚·‚é’·‚³(byte)
268 * ECN_FBS_SSIZE_T *p_len Žæ“¾‚µ‚½’·‚³(byte)
269 * –ß‚è’l
270 * ER 0:ok, Ӗ0:NG
271 */
272ER _ecn_fbs_get_data(ECN_FBS_ID fa_id, void *fa_buf, ECN_FBS_SSIZE_T fa_maxlen,
273 ECN_FBS_SSIZE_T *p_len);
274
275ER ecn_fbs_enqueue(T_ECN_FBS_QUEUE *pk_queue, T_ECN_FST_BLK *pk_buf);
276ER ecn_fbs_dequeue(T_ECN_FBS_QUEUE *pk_queue, T_ECN_FST_BLK **ppk_buf);
277
278#ifdef __cplusplus
279} /* extern "C" */
280#endif
281
282#endif /* #ifndef TOPPERS_ECHONET_FBS_H */
Note: See TracBrowser for help on using the repository browser.