define token list for script
[build-config.git] / src / config / lxrgmr / QStack.h
blob58d0a0cb2a7c64f1dae9920b4346af0c0f8ff035
1 /************************************************************************
2 * libcxt Project
4 * (c) Copyright 2021, devenkong(18151155@qq.com), Hangzhou, China
5 * (c) Copyright 2021, devenkong(18151155@qq.com), º¼ÖÝ, Öйú
6 ************************************************************************
7 * filename: AQStack.h
8 * function: AQStackÄ£¿é¡£
9 * createdate: 2021-05-01
10 * author: devenkong(18151155@qq.com)
11 * note£º AQStackÔ´×ÔÓÚQueue,ÊǼ¯Êý×éArray,¶ÓÁÐQueueºÍ¶ÑÕ»StackÓÚÒ»ÌåµÄ
12 * Êý¾Ý½á¹¹.ÔÚʹÓöÓÁйý³ÌÖÐ,ºÜ¶àÊý×éµÄ²Ù×÷»áÓõ½,²¢ÇÒStack¿É»ùÓÚ¶Ó
13 * ÁнṹÌåÐÅÏ¢À´½øÐÐʵÏÖ,ËùÒÔ½«¼¸ÖÖ¹¦Äܺϲ¢ÔÚÒ»Æð,ÑÜÉú³öAQStack.
14 * Stack½ö½öʹÓÃÁËQueueµÄheadÖ¸Õë,Array½ö½öʹÓÃTailÖ¸Õë.ÔÚIndex,
15 * Sum,Average,Ê×β²î¼ÆËãµÈ²Ù×÷ÖÐ,ʹÓõÄÊÇÏàͬµÄº¯Êý.StackµÄÄÚ´æ´æ´¢
16 * ·½Ê½ºÍÁíÍâÁ½¸ö²»Í¬,ËùÒÔÔÚindexºÍmemcpyʱºÍѹջµÄÊý¾Ý˳ÐòÊDz»Í¬µÄ.
17 * AQStack¿É¶Ô8/16/32bit/NbyteÊý¾Ý½øÐвÙ×÷.
18 * ΪÁËÔÚº¯ÊýʹÓÃÉÏÖ±¹ÛµÄʹÓÃQueueXXX()ºÍStackXXX()·Ö±ð¶Ô¶ÓÁкÍ
19 * ¶ÑÕ»½øÐвÙ×÷,¶¨ÒåÁËһЩºê,ʵ¼Êµ÷ÓõÄÊÇAQStackXXX().
20 ************************************************************************/
21 /* Modify record */
22 /************************************************************************
23 * date: 2021-05-01
24 * author: devenkong(18151155@qq.com)
25 * note:
27 ----------------------------------------------------------------------
28 Version-Date------Author-----Explanation
29 ----------------------------------------------------------------------
30 1.00 06-12-06 ¿×µÂ·å QueueµÚÒ»°æ
31 1.01 08-12-01 ¿×µÂ·å Ôö¼ÓÁËQueueValideCnt
32 1.02 20-05-30 ¿×µÂ·å ÓÃÓÚlinuxÇý¶¯
33 1.03 21-04-23 ¿×µÂ·å Ìí¼Óstack¹¦ÄÜ£¬¶ÓÁÐÊý¾Ý²Ù×÷·Ö³É8/16/32bitÒÔ¼°N×Ö½Ú²Ù×÷
34 1.04 21-05-01 ¿×µÂ·å ½«Queue,StackºÍArray¹¦ÄÜÌí¼Óµ½AQStack,²¢·Ö±ð¿ÉʹÓÃÔ­ÓнӿÚÃû³Æ.
35 ----------------------------------------------------------------------
36 ************************************************************************/
38 #ifndef __LIB_AQSTACK_H__
39 #define __LIB_AQSTACK_H__
41 /* Type Definations */
43 #define MUL_TASK 1
44 //#define LINUX 1
45 //#define KERNEL 1
47 #ifdef KERNEL
48 //#if 0
49 #include <linux/fs.h>
50 #include <linux/errno.h>
51 #include <linux/mm.h>
52 #include <linux/sched.h>
53 #include <linux/cdev.h>
54 #include <asm/io.h>
55 #include <asm/system.h>
56 #include <asm/uaccess.h>
58 #include "linux/init.h"
59 #include "linux/module.h"
60 #include <linux/types.h>
61 #include "linux/spinlock.h"
62 #endif
64 /* дÔÚÍ·ÎļþÒýÓõÄ×îºó£¬ÒÔÃâ¸úÄÚºËÍ·ÎļþµÄ¶¨ÒåÓгåÍ» */
65 #include "type.h"
68 typedef struct _tag_AQSTACK {
69 char * buffer;
70 volatile int size;
71 volatile int head;
72 volatile int tail;
73 volatile int count;
75 #ifdef MUL_TASK
76 #endif
77 #ifdef LINUX
78 // THREAD_MUTEX stMutex;
79 #endif
80 #ifdef KERNEL
81 spinlock_t lock;
82 #endif
83 } AQSTACK, *PAQSTACK;
86 /* Public Variables and Functions */
88 extern_XXX(Gerneral_Operation);
90 /*********************************************************************
91 * Ãû×Ö: AQStackIF_InitQueue
92 * ¹¦ÄÜ: ³õʼ»¯Queue¶ÓÁС£
93 * ²ÎÊý: pstAQStack£º¶ÓÁнṹÌåÖ¸Õë
94 * pu8Buff£º¶ÓÁÐËù²Ù×÷µÄ»º´æ
95 * u32Size£º»º´æ´óС
96 * ·µ»Ø: ÎÞ
97 *********************************************************************/
98 extern void AQStackIF_InitQueue (PAQSTACK pstAQStack, uint8 * pu8Buff, uint32 u32Size);
100 /*********************************************************************
101 * Ãû×Ö: AQStackIF_Create
102 * ¹¦ÄÜ: ʹÓÃbuffer¶¯Ì¬´´½¨Ò»¸öAQStack¶ÓÁÐ.
103 * ²ÎÊý: pu8Buff£º¶ÓÁÐËù²Ù×÷µÄ»º´æ
104 * u32Size£º»º´æ´óС
105 * ·µ»Ø: AQSTACK½á¹¹ÌåÖ¸Õë
106 *********************************************************************/
107 extern AQSTACK * AQStackIF_Create (uint8 * pu8Buff, uint32 u32Size);
109 /*********************************************************************
110 * Ãû×Ö: AQStackIF_Release
111 * ¹¦ÄÜ: ÊÍ·Å´´½¨µÄAQSTACK½á¹¹ÌåµÄ¿Õ¼ä.
112 * ²ÎÊý: pstAQStack£º¶ÓÁÐÖ¸Õë
113 * ·µ»Ø: ÎÞ
114 *********************************************************************/
115 extern void AQStackIF_Release (AQSTACK *pstAQStack);
117 /*********************************************************************
118 * Ãû×Ö: AQStackIF_Clear
119 * ¹¦ÄÜ: Çå³ý¶ÓÁÐÖеÄÊý¾Ý
120 * ²ÎÊý: pstAQStack£º¶ÓÁÐÖ¸Õë
121 * ·µ»Ø: ÎÞ
122 *********************************************************************/
123 extern void AQStackIF_Clear (AQSTACK *pstAQStack);
125 /*********************************************************************
126 * Ãû×Ö: AQStackIF_MemCpy
127 * ¹¦ÄÜ: ´Ó¶ÓÁÐÖÐHead¿ªÊ¼µÄÖ¸¶¨Æ«ÒÆ´¦È¡³öÒ»¶ÎÊý¾Ý¡£
128 * ²ÎÊý: pstAQStack£º¶ÓÁÐÖ¸Õë
129 * u32SrcOffset£º¶ÓÁÐÊý¾ÝÖеÄÆ«ÒÆÁ¿
130 * pu8DstBuff£º¿½±´µÄÄ¿±ê»º´æµØÖ·
131 * pu8DstOffset£º¿½±´µ½Ä¿±ê»º´æµÄÖ¸¶¨Æ«ÒÆÁ¿
132 * u32Size£º¿½±´µÄ´óС
133 * ·µ»Ø: ·µ»ØDst»º´æµÄµØÖ·.
134 *********************************************************************/
135 extern char * AQStackIF_MemCpy (AQSTACK *pstAQStack, uint32 u32SrcOffset, char *pu8DstBuff, uint32 u32DstOffset, uint32 u32Size);
137 /*********************************************************************
138 * Ãû×Ö: AQStackIF_IsEmpty
139 * ¹¦ÄÜ: Åж϶ÓÁÐÊÇ·ñΪ¿Õ¡£
140 * ²ÎÊý: pstAQStack£º¶ÓÁнṹÌåÖ¸Õë
141 * ·µ»Ø: ÊÇ·ñΪ¿Õ£¬true±íʾΪ¿Õ£¬false±íʾ²»Îª¿Õ
142 *********************************************************************/
143 extern bool AQStackIF_IsEmpty (AQSTACK *pstAQStack);
145 /*********************************************************************
146 * Ãû×Ö: AQStackIF_IsFull
147 * ¹¦ÄÜ: Åж϶ÓÁÐÊÇ·ñΪÂú¡£
148 * ²ÎÊý: pstAQStack£º¶ÓÁÐÖ¸Õë
149 * ·µ»Ø: ÊÇ·ñΪÂú£¬true±íʾΪÂú£¬false±íʾ²»ÎªÂú
150 *********************************************************************/
151 extern bool AQStackIF_IsFull (AQSTACK *pstAQStack);
153 /*********************************************************************
154 * Ãû×Ö: AQStackIF_GetBuffSize
155 * ¹¦ÄÜ: »ñÈ¡¶ÓÁлº´æ´óС¡£
156 * ²ÎÊý: pstAQStack£º¶ÓÁнṹÌåÖ¸Õë
157 * ·µ»Ø: ¶ÓÁÐÖÐÊý¾Ý»º´æµÄ´óС.
158 *********************************************************************/
159 extern uint32 AQStackIF_GetBuffSize (AQSTACK *pstAQStack);
161 /*********************************************************************
162 * Ãû×Ö: AQStackIF_ValidCnt
163 * ¹¦ÄÜ: ¶ÁÈ¡¶ÓÁеÄÓÐЧÊý¾Ý¸öÊý¡£
164 * ²ÎÊý: pstAQStack£º¶ÓÁÐÖ¸Õë
165 * ·µ»Ø: ÔÚ¶ÓÁÐÖеÄÓÐЧÊý¾Ý¸öÊý.
166 *********************************************************************/
167 extern uint32 AQStackIF_ValidCnt (AQSTACK *pstAQStack);
169 /*********************************************************************
170 * Ãû×Ö: AQStackIF_BlankCnt
171 * ¹¦ÄÜ: ¶ÁÈ¡¶ÓÁеĿÕÏÐÊý¾Ý¸öÊý¡£
172 * ²ÎÊý: pstAQStack£º¶ÓÁÐÖ¸Õë
173 * ·µ»Ø: ·µ»Ø¶ÓÁеĿÕÏÐÊý¾Ý¸öÊý¡£
174 *********************************************************************/
175 extern uint32 AQStackIF_BlankCnt (AQSTACK *pstAQStack);
177 extern_XXX(8bit_data_Operation);
179 extern_XXX(16bit_Data_Operation);
181 extern_XXX(U32_Data_Operation);
183 extern_XXX(NByte_Data_Operation);
185 /*********************************************************************
186 * Ãû×Ö: AQStackIF_EnQueue
187 * ¹¦ÄÜ: Ïò¶ÓÁдæÈëµ¥¸ö×Ö½ÚÊý¾Ý,¶ÓÁÐÒÑÂúʱ,²»¸²¸ÇÇ°ÃæµÄÄÚÈÝ.
188 * ²ÎÊý: pstAQStack£º¶ÓÁÐÖ¸Õë
189 * cData£ºÊµ¼Ê´æÈëµÄÊý¾Ý
190 * ·µ»Ø: ÊÇ·ñ´æÈëÊý¾Ý,¿Õ¼äÒÑÂú·µ»Øfalse.
191 *********************************************************************/
192 extern bool AQStackIF_EnQueue (AQSTACK *pstAQStack, char cData);
193 #ifndef KERNEL
194 extern bool AQStackIF_EnQueueU16 (AQSTACK *pstAQStack, uint16 u16Data);
195 extern bool AQStackIF_EnQueueU32 (AQSTACK *pstAQStack, uint32 u32Data);
196 extern bool AQStackIF_EnQueueN (AQSTACK *pstAQStack, char *pszBuff, uint32 u32Size);
197 #endif
199 /*********************************************************************
200 * Ãû×Ö: AQStackIF_LoopEnQueue(todo)
201 * ¹¦ÄÜ: Ïò¶ÓÁдæÈëµ¥¸ö×Ö½ÚÊý¾Ý,¶ÓÁÐÒÑÂúʱ,¸²¸ÇÇ°ÃæµÄÄÚÈÝ.
202 * ²ÎÊý: pstAQStack£º¶ÓÁÐÖ¸Õë
203 * cData£ºÊµ¼Ê´æÈëµÄÊý¾Ý
204 * ·µ»Ø: ÎÞ
205 *********************************************************************/
206 extern void AQStackIF_LoopEnQueue (AQSTACK *pstAQStack, char cData);
207 #ifndef KERNEL
208 extern void AQStackIF_LoopEnQueueU16 (AQSTACK *pstAQStack, uint16 u16Data);
209 extern void AQStackIF_LoopEnQueueU32 (AQSTACK *pstAQStack, uint32 u32Data);
210 extern void AQStackIF_LoopEnQueueN (AQSTACK *pstAQStack, char *pszBuff, uint32 u32Size);
211 #endif
213 /*********************************************************************
214 * Ãû×Ö: AQStackIF_DeQueue
215 * ¹¦ÄÜ: ´Ó¶ÓÁÐÖÐÈ¡³öÒ»¸ö×Ö½ÚÊý¾Ý¡£
216 * ²ÎÊý: pstAQStack£º¶ÓÁÐÖ¸Õë
217 * ·µ»Ø: È¡³öµÄÊý¾Ý
218 *********************************************************************/
219 extern char AQStackIF_DeQueue (AQSTACK *pstAQStack);
220 #ifndef KERNEL
221 extern uint16 AQStackIF_DeQueueU16 (AQSTACK *pstAQStack);
222 extern uint32 AQStackIF_DeQueueU32 (AQSTACK *pstAQStack);
223 extern char * AQStackIF_DeQueueN (AQSTACK *pstAQStack, char *pszBuff, uint32 u32Size);
224 #endif
226 /*********************************************************************
227 * Ãû×Ö: AQStackIF_GetHeadData
228 * ¹¦ÄÜ: »ñÈ¡¶ÓÁÐÖÐ×îÇ°ÃæµÄheadµÄÊý¾Ý¡£
229 * ²ÎÊý: pstAQStack£º¶ÓÁÐÖ¸Õë
230 * ·µ»Ø: ¶ÁÈ¡µÄÒ»¸ö×Ö½ÚÊý¾Ý.
231 *********************************************************************/
232 extern char AQStackIF_GetHeadData (AQSTACK *pstAQStack);
233 #ifndef KERNEL
234 extern uint16 AQStackIF_GetHeadDataU16 (AQSTACK *pstAQStack);
235 extern uint32 AQStackIF_GetHeadDataU32 (AQSTACK *pstAQStack);
236 #endif
238 /*********************************************************************
239 * Ãû×Ö: AQStackIF_GetTailData
240 * ¹¦ÄÜ: »ñÈ¡¶ÓÁÐÖÐ×îĩβµÄtailµÄÊý¾Ý¡£
241 * ²ÎÊý: pstAQStack£º¶ÓÁÐÖ¸Õë
242 * ·µ»Ø: ¶ÁÈ¡µÄÒ»¸ö×Ö½ÚÊý¾Ý.
243 *********************************************************************/
244 extern char AQStackIF_GetTailData (AQSTACK *pstAQStack);
245 #ifndef KERNEL
246 extern uint16 AQStackIF_GetTailDataU16 (AQSTACK *pstAQStack);
247 extern uint32 AQStackIF_GetTailDataU32 (AQSTACK *pstAQStack);
248 #endif
250 /*********************************************************************
251 * Ãû×Ö: AQStackIF_Index
252 * ¹¦ÄÜ: ¶ÁÈ¡¶ÓÁÐÓÐЧÊý¾ÝÖÐÖ¸¶¨Î»ÖõÄcharÀàÐÍÊý¾Ý¡£
253 * ²ÎÊý: pstAQStack£º¶ÓÁÐÖ¸Õë
254 * ·µ»Ø: Ö¸¶¨Æ«ÒÆλÖõÄÊý¾Ý
255 *********************************************************************/
256 extern char AQStackIF_Index (AQSTACK *pstAQStack, uint32 u32Pos);
257 #ifndef KERNEL
258 extern uint16 AQStackIF_IndexU16 (AQSTACK *pstAQStack, uint32 u32Pos);
259 extern uint32 AQStackIF_IndexU32 (AQSTACK *pstAQStack, uint8 u32Pos);
260 #endif
262 /*********************************************************************
263 * Ãû×Ö: AQStackIF_CheckSum(todo)
264 * ¹¦ÄÜ: ÒÔuint8ÀàÐͼÆËã¶ÓÁÐÖÐÊý¾ÝµÄÀÛ¼ÓºÍ,ʹÓÃuint16×÷Ϊ·µ»ØÖµ.
265 * ²ÎÊý: pstAQStack£º¶ÓÁÐÖ¸Õë
266 * ·µ»Ø: ·µ»Ø¼ÆËãµÄÀÛ¼ÓºÍÊý¾Ý.
267 *********************************************************************/
268 extern uint16 AQStackIF_CheckSum (AQSTACK *pstAQStack);
269 #ifndef KERNEL
270 extern uint32 AQStackIF_CheckSumU16 (AQSTACK *pstAQStack);
271 extern uint64 AQStackIF_CheckSumU32 (AQSTACK *pstAQStack);
272 #endif
274 /*********************************************************************
275 * Ãû×Ö: AQStackIF_HeadSubTail(todo)
276 * ¹¦ÄÜ: ¼ÆËã¶ÓÁÐÖÐÍ·ºÍβuint8ÀàÐÍÊý¾ÝµÄ²îÖµ,²¢·µ»Øint16Öµ.
277 * ²ÎÊý: pstAQStack£º¶ÓÁÐÖ¸Õë
278 * ·µ»Ø: ·µ»ØͷβÊý¾ÝµÄ²îÖµ.
279 *********************************************************************/
280 extern int16 AQStackIF_HeadSubTail (AQSTACK *pstAQStack);
281 #ifndef KERNEL
282 extern int32 AQStackIF_HeadSubTailU16 (AQSTACK *pstAQStack);
283 extern int64 AQStackIF_HeadSubTailU32 (AQSTACK *pstAQStack);
284 #endif
286 /*********************************************************************
287 * Ãû×Ö: AQStackIF_Average(todo)
288 * ¹¦ÄÜ: ¼ÆËã¶ÓÁÐÖÐuint8Êý¾ÝµÄƽ¾ùÖµ
289 * ²ÎÊý: pstAQStack£º¶ÓÁÐÖ¸Õë
290 * ·µ»Ø: ·µ»Ø¶ÓÁеÄƽ¾ùÖµ
291 *********************************************************************/
292 extern uint8 AQStackIF_Average (AQSTACK *pstAQStack);
293 #ifndef KERNEL
294 extern uint16 AQStackIF_AverageU16 (AQSTACK *pstAQStack);
295 extern uint32 AQStackIF_AverageU32 (AQSTACK *pstAQStack);
296 #endif
298 /*********************************************************************
299 * Ãû×Ö: AQStackIF_AverageSigned8(todo)
300 * ¹¦ÄÜ: ¼ÆËã¶ÓÁÐÖдø·ûºÅint8Êý¾ÝµÄƽ¾ùÖµ.
301 * ²ÎÊý: pstAQStack£º¶ÓÁÐÖ¸Õë
302 * ·µ»Ø: ·µ»Ø¶ÓÁеÄƽ¾ùÖµ
303 *********************************************************************/
304 extern int8 AQStackIF_AverageSigned8 (AQSTACK *pstAQStack);
305 #ifndef KERNEL
306 extern int16 AQStackIF_AverageSigned16 (AQSTACK *pstAQStack);
307 extern int32 AQStackIF_AverageSigned32 (AQSTACK *pstAQStack);
308 #endif
310 #ifndef KERNEL
312 extern_XXX(Stack_Operation);
314 /* ÓöÓÁеÄÊý¾Ý½á¹¹ÊµÏÖ¶ÑÕ»µÄ¹¦ÄÜ */
316 /*********************************************************************
317 * Ãû×Ö: AQStackIF_InitQueue
318 * ¹¦ÄÜ: ³õʼ»¯Queue¡£
319 * ²ÎÊý: pstAQStack£º¶ÓÁнṹÌåÖ¸Õë
320 * pu8Buff£º¶ÓÁÐËù²Ù×÷µÄ»º´æ
321 * szBuff£º»º´æ´óС
322 * ·µ»Ø: ÎÞ
323 *********************************************************************/
324 extern void AQStackIF_InitStack (AQSTACK *pstAQStack, uint8 * pu8Buff, uint32 u32Size);
326 /*********************************************************************
327 * Ãû×Ö: AQStackIF_Push
328 * ¹¦ÄÜ: Ïò¶ÑÕ»´æÈëÊý¾Ý
329 * ²ÎÊý: pstAQStack£º¶ÓÁÐÖ¸Õë
330 * cData£ºÊµ¼Ê´æÈëµÄÊý¾Ý
331 * ·µ»Ø: ÊÇ·ñ´æÈëÊý¾Ý
332 *********************************************************************/
333 extern bool AQStackIF_Push (AQSTACK *pstAQStack, char cData);
334 extern bool AQStackIF_PushU16 (AQSTACK *pstAQStack, uint16 u16Data);
335 extern bool AQStackIF_PushU32 (AQSTACK *pstAQStack, uint32 u32Data);
336 extern bool AQStackIF_PushN (AQSTACK *pstAQStack, char *pszBuff, uint32 u32Size);
338 /*********************************************************************
339 * Ãû×Ö: AQStackIF_Pop
340 * ¹¦ÄÜ: ´Ó¶ÑÕ»ÖÐÈ¡³öÒ»¸öÊý¾Ý¡£
341 * ²ÎÊý: pstAQStack£º¶ÓÁÐÖ¸Õë
342 * ·µ»Ø: È¡³öµÄʵ¼ÊÊý¾Ý
343 *********************************************************************/
344 extern char AQStackIF_Pop (AQSTACK *pstAQStack);
345 extern uint16 AQStackIF_PopU16 (AQSTACK *pstAQStack);
346 extern uint32 AQStackIF_PopU32 (AQSTACK *pstAQStack);
347 extern char * AQStackIF_PopN (AQSTACK *pstAQStack, char *pszBuff, uint32 u32Size);
349 #endif /* KERNEL */
351 #ifndef KERNEL
353 /* Queue²Ù×÷½Ó¿Ú¶¨Òå */
354 #define QueueIF_Init()
355 #define QueueIF_Init()
356 #define QueueIF_Init()
357 #define QueueIF_Init()
358 #define QueueIF_Init()
360 /* Stack²Ù×÷½Ó¿Ú¶¨Òå */
361 #define StackIF_Init()
362 #define StackIF_Init()
363 #define StackIF_Init()
364 #define StackIF_Init()
365 #define StackIF_Init()
367 /* Сд×Öĸ·ç¸ñµÄº¯Êý½Ó¿Ú¶¨Òå */
368 #define StackIF_Init()
369 #define StackIF_Init()
370 #define StackIF_Init()
371 #define StackIF_Init()
372 #define StackIF_Init()
374 /* ²»°üº¬Ä£¿éÃû³ÆµÄº¯Êý½Ó¿Ú¶¨Òå */
375 #define InitQueue()
376 #define EnQueue()
377 #define LoopEnQueue()
378 #define DeQueue()
379 #define StackIF_Init()
382 #endif /* KERNEL */
384 #endif /* __LIB_AQSTACK_H__ */