TuyaOS
sys.h
浏览该文件的文档.
1
6/*
7 * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
8 * All rights reserved.
9 *
10 * Redistribution and use in source and binary forms, with or without modification,
11 * are permitted provided that the following conditions are met:
12 *
13 * 1. Redistributions of source code must retain the above copyright notice,
14 * this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright notice,
16 * this list of conditions and the following disclaimer in the documentation
17 * and/or other materials provided with the distribution.
18 * 3. The name of the author may not be used to endorse or promote products
19 * derived from this software without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
22 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
23 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
24 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
26 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
29 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
30 * OF SUCH DAMAGE.
31 *
32 * This file is part of the lwIP TCP/IP stack.
33 *
34 * Author: Adam Dunkels <adam@sics.se>
35 */
36
37#ifndef LWIP_HDR_SYS_H
38#define LWIP_HDR_SYS_H
39
40#include "lwip/opt.h"
41
42#ifdef __cplusplus
43extern "C" {
44#endif
45
46#if NO_SYS
47
48/* For a totally minimal and standalone system, we provide null
49 definitions of the sys_ functions. */
50typedef u8_t sys_sem_t;
51typedef u8_t sys_mutex_t;
52typedef u8_t sys_mbox_t;
53
54#define sys_sem_new(s, c) ERR_OK
55#define sys_sem_signal(s)
56#define sys_sem_wait(s)
57#define sys_arch_sem_wait(s,t)
58#define sys_sem_free(s)
59#define sys_sem_valid(s) 0
60#define sys_sem_valid_val(s) 0
61#define sys_sem_set_invalid(s)
62#define sys_sem_set_invalid_val(s)
63#define sys_mutex_new(mu) ERR_OK
64#define sys_mutex_lock(mu)
65#define sys_mutex_unlock(mu)
66#define sys_mutex_free(mu)
67#define sys_mutex_valid(mu) 0
68#define sys_mutex_set_invalid(mu)
69#define sys_mbox_new(m, s) ERR_OK
70#define sys_mbox_fetch(m,d)
71#define sys_mbox_tryfetch(m,d)
72#define sys_mbox_post(m,d)
73#define sys_mbox_trypost(m,d)
74#define sys_mbox_free(m)
75#define sys_mbox_valid(m)
76#define sys_mbox_valid_val(m)
77#define sys_mbox_set_invalid(m)
78#define sys_mbox_set_invalid_val(m)
79
80#define sys_thread_new(n,t,a,s,p)
81
82#define sys_msleep(t)
83
84#else /* NO_SYS */
85
87#define SYS_ARCH_TIMEOUT 0xffffffffUL
88
92#define SYS_MBOX_EMPTY SYS_ARCH_TIMEOUT
93
94#include "lwip/err.h"
95#include "arch/sys_arch.h"
96
98typedef void (*lwip_thread_fn)(void *arg);
99
100/* Function prototypes for functions to be implemented by platform ports
101 (in sys_arch.c) */
102
103/* Mutex functions: */
104
107#ifndef LWIP_COMPAT_MUTEX
108#define LWIP_COMPAT_MUTEX 0
109#endif
110
111#if LWIP_COMPAT_MUTEX
112/* for old ports that don't have mutexes: define them to binary semaphores */
113#define sys_mutex_t sys_sem_t
114#define sys_mutex_new(mutex) sys_sem_new(mutex, 1)
115#define sys_mutex_lock(mutex) sys_sem_wait(mutex)
116#define sys_mutex_unlock(mutex) sys_sem_signal(mutex)
117#define sys_mutex_free(mutex) sys_sem_free(mutex)
118#define sys_mutex_valid(mutex) sys_sem_valid(mutex)
119#define sys_mutex_set_invalid(mutex) sys_sem_set_invalid(mutex)
120
121#else /* LWIP_COMPAT_MUTEX */
122
137err_t sys_mutex_new(sys_mutex_t *mutex);
143void sys_mutex_lock(sys_mutex_t *mutex);
149void sys_mutex_unlock(sys_mutex_t *mutex);
155void sys_mutex_free(sys_mutex_t *mutex);
156#ifndef sys_mutex_valid
164int sys_mutex_valid(sys_mutex_t *mutex);
165#endif
166#ifndef sys_mutex_set_invalid
174void sys_mutex_set_invalid(sys_mutex_t *mutex);
175#endif
176#endif /* LWIP_COMPAT_MUTEX */
177
178/* Semaphore functions: */
179
195err_t sys_sem_new(sys_sem_t *sem, u8_t count);
201void sys_sem_signal(sys_sem_t *sem);
219u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout);
225void sys_sem_free(sys_sem_t *sem);
227#define sys_sem_wait(sem) sys_arch_sem_wait(sem, 0)
228#ifndef sys_sem_valid
236int sys_sem_valid(sys_sem_t *sem);
237#endif
238#ifndef sys_sem_set_invalid
246void sys_sem_set_invalid(sys_sem_t *sem);
247#endif
248#ifndef sys_sem_valid_val
252#define sys_sem_valid_val(sem) sys_sem_valid(&(sem))
253#endif
254#ifndef sys_sem_set_invalid_val
258#define sys_sem_set_invalid_val(sem) sys_sem_set_invalid(&(sem))
259#endif
260
261#ifndef sys_msleep
266void sys_msleep(u32_t ms); /* only has a (close to) 1 ms resolution. */
267#endif
268
269/* Mailbox functions. */
270
285err_t sys_mbox_new(sys_mbox_t *mbox, int size);
294void sys_mbox_post(sys_mbox_t *mbox, void *msg);
304err_t sys_mbox_trypost(sys_mbox_t *mbox, void *msg);
314err_t sys_mbox_trypost_fromisr(sys_mbox_t *mbox, void *msg);
336u32_t sys_arch_mbox_fetch(sys_mbox_t *mbox, void **msg, u32_t timeout);
337/* Allow port to override with a macro, e.g. special timeout for sys_arch_mbox_fetch() */
338#ifndef sys_arch_mbox_tryfetch
355u32_t sys_arch_mbox_tryfetch(sys_mbox_t *mbox, void **msg);
356#endif
360#define sys_mbox_tryfetch(mbox, msg) sys_arch_mbox_tryfetch(mbox, msg)
369void sys_mbox_free(sys_mbox_t *mbox);
370#define sys_mbox_fetch(mbox, msg) sys_arch_mbox_fetch(mbox, msg, 0)
371#ifndef sys_mbox_valid
379int sys_mbox_valid(sys_mbox_t *mbox);
380#endif
381#ifndef sys_mbox_set_invalid
389void sys_mbox_set_invalid(sys_mbox_t *mbox);
390#endif
391#ifndef sys_mbox_valid_val
395#define sys_mbox_valid_val(mbox) sys_mbox_valid(&(mbox))
396#endif
397#ifndef sys_mbox_set_invalid_val
401#define sys_mbox_set_invalid_val(mbox) sys_mbox_set_invalid(&(mbox))
402#endif
403
404
420sys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread, void *arg, int stacksize, int prio);
421
422#endif /* NO_SYS */
423
429void sys_init(void);
430
431#ifndef sys_jiffies
435u32_t sys_jiffies(void);
436#endif
437
446u32_t sys_now(void);
447
448/* Critical Region Protection */
449/* These functions must be implemented in the sys_arch.c file.
450 In some implementations they can provide a more light-weight protection
451 mechanism than using semaphores. Otherwise semaphores can be used for
452 implementation */
453#ifndef SYS_ARCH_PROTECT
459#if SYS_LIGHTWEIGHT_PROT
460
468#define SYS_ARCH_DECL_PROTECT(lev) sys_prot_t lev
480#define SYS_ARCH_PROTECT(lev) lev = sys_arch_protect()
491#define SYS_ARCH_UNPROTECT(lev) sys_arch_unprotect(lev)
492sys_prot_t sys_arch_protect(void);
493void sys_arch_unprotect(sys_prot_t pval);
494
495#else
496
497#define SYS_ARCH_DECL_PROTECT(lev)
498#define SYS_ARCH_PROTECT(lev)
499#define SYS_ARCH_UNPROTECT(lev)
500
501#endif /* SYS_LIGHTWEIGHT_PROT */
502
503#endif /* SYS_ARCH_PROTECT */
504
505/*
506 * Macros to set/get and increase/decrease variables in a thread-safe way.
507 * Use these for accessing variable that are used from more than one thread.
508 */
509
510#ifndef SYS_ARCH_INC
511#define SYS_ARCH_INC(var, val) do { \
512 SYS_ARCH_DECL_PROTECT(old_level); \
513 SYS_ARCH_PROTECT(old_level); \
514 var += val; \
515 SYS_ARCH_UNPROTECT(old_level); \
516 } while(0)
517#endif /* SYS_ARCH_INC */
518
519#ifndef SYS_ARCH_DEC
520#define SYS_ARCH_DEC(var, val) do { \
521 SYS_ARCH_DECL_PROTECT(old_level); \
522 SYS_ARCH_PROTECT(old_level); \
523 var -= val; \
524 SYS_ARCH_UNPROTECT(old_level); \
525 } while(0)
526#endif /* SYS_ARCH_DEC */
527
528#ifndef SYS_ARCH_GET
529#define SYS_ARCH_GET(var, ret) do { \
530 SYS_ARCH_DECL_PROTECT(old_level); \
531 SYS_ARCH_PROTECT(old_level); \
532 ret = var; \
533 SYS_ARCH_UNPROTECT(old_level); \
534 } while(0)
535#endif /* SYS_ARCH_GET */
536
537#ifndef SYS_ARCH_SET
538#define SYS_ARCH_SET(var, val) do { \
539 SYS_ARCH_DECL_PROTECT(old_level); \
540 SYS_ARCH_PROTECT(old_level); \
541 var = val; \
542 SYS_ARCH_UNPROTECT(old_level); \
543 } while(0)
544#endif /* SYS_ARCH_SET */
545
546#ifndef SYS_ARCH_LOCKED
547#define SYS_ARCH_LOCKED(code) do { \
548 SYS_ARCH_DECL_PROTECT(old_level); \
549 SYS_ARCH_PROTECT(old_level); \
550 code; \
551 SYS_ARCH_UNPROTECT(old_level); \
552 } while(0)
553#endif /* SYS_ARCH_LOCKED */
554
555#if LWIP_TUYA_APP_TCPIP_THREAD_SWITCH //tuya应用线程和TCPIP线程的优先级优化功能
556#define TUYA_APP_TCPIP_THREAD_PRIO_UP(prio)
557#define TUYA_APP_TCPIP_THREAD_PRIO_BACK(prio)
558#else
559#define TUYA_APP_TCPIP_THREAD_PRIO_UP(prio)
560#define TUYA_APP_TCPIP_THREAD_PRIO_BACK(prio)
561#endif /* LWIP_TUYA_PACKET_PRINT */
562
563#ifdef __cplusplus
564}
565#endif
566
567#endif /* LWIP_HDR_SYS_H */
s8_t err_t
Definition: err.h:96
int sys_sem_valid(sys_sem_t *sem)
sys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread, void *arg, int stacksize, int prio)
u32_t sys_now(void)
void sys_mutex_free(sys_mutex_t *mutex)
err_t sys_mutex_new(sys_mutex_t *mutex)
void sys_mutex_set_invalid(sys_mutex_t *mutex)
void sys_sem_set_invalid(sys_sem_t *sem)
void sys_mutex_lock(sys_mutex_t *mutex)
void sys_mbox_set_invalid(sys_mbox_t *mbox)
void sys_mutex_unlock(sys_mutex_t *mutex)
u32_t sys_arch_mbox_fetch(sys_mbox_t *mbox, void **msg, u32_t timeout)
void sys_msleep(u32_t ms)
void sys_sem_free(sys_sem_t *sem)
int sys_mbox_valid(sys_mbox_t *mbox)
u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout)
void sys_mbox_post(sys_mbox_t *mbox, void *msg)
err_t sys_mbox_trypost(sys_mbox_t *mbox, void *msg)
void sys_sem_signal(sys_sem_t *sem)
err_t sys_mbox_new(sys_mbox_t *mbox, int size)
void sys_mbox_free(sys_mbox_t *mbox)
u32_t sys_jiffies(void)
void(* lwip_thread_fn)(void *arg)
Definition: sys.h:98
int sys_mutex_valid(sys_mutex_t *mutex)
void sys_init(void)
err_t sys_mbox_trypost_fromisr(sys_mbox_t *mbox, void *msg)
err_t sys_sem_new(sys_sem_t *sem, u8_t count)
u32_t sys_arch_mbox_tryfetch(sys_mbox_t *mbox, void **msg)
LWIP-ϵͳ¶Ô½Ó½Ó¿Ú·â×°