aboutsummaryrefslogtreecommitdiffstats
path: root/stacks/lwip_stack/lwip_src/include/stackx/spl_timers.h
diff options
context:
space:
mode:
Diffstat (limited to 'stacks/lwip_stack/lwip_src/include/stackx/spl_timers.h')
-rw-r--r--stacks/lwip_stack/lwip_src/include/stackx/spl_timers.h108
1 files changed, 108 insertions, 0 deletions
diff --git a/stacks/lwip_stack/lwip_src/include/stackx/spl_timers.h b/stacks/lwip_stack/lwip_src/include/stackx/spl_timers.h
new file mode 100644
index 0000000..078846b
--- /dev/null
+++ b/stacks/lwip_stack/lwip_src/include/stackx/spl_timers.h
@@ -0,0 +1,108 @@
+/*
+*
+* Copyright (c) 2018 Huawei Technologies Co.,Ltd.
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at:
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#ifndef __SPL_TIMERS_H__
+#define __SPL_TIMERS_H__
+
+#include "opt.h"
+#include "common_mem_base_type.h"
+
+typedef void (*sys_timeout_handler) (void *arg);
+
+#include "rb_tree.h"
+
+#ifdef __cplusplus
+/* *INDENT-OFF* */
+extern "C" {
+/* *INDENT-ON* */
+#endif
+
+/** Function prototype for a timeout callback function. Register such a function
+ * using sys_timeout().
+ *
+ * @param arg Additional argument to pass to the function - set up by sys_timeout()
+ */
+
+/*
+ * *************************************************************************
+ * PTIMER defined 2013/3/15
+ * *************************************************************************
+ */
+#define PTIMER_DEFAULT 0x00 /* periodic mode */
+#define PTIMER_ONESHOT 0x01
+#define PTIMER_USER_DEF 0x02
+
+enum msg_type
+{
+ SYS_PTIMEROUT_MSG,
+ SYS_UNPTIMEROUT_MSG,
+};
+
+struct msg_context
+{
+ unsigned long msec;
+ union
+ {
+ sys_timeout_handler handle;
+ } action;
+#define _act_category action.act_category
+#define _phandle action.handle
+ u32_t flags; /* oneshot|user_def|... */
+ void *ctx; /* pcb ptr */
+};
+
+struct ptimer_node
+{
+ struct rb_node node;
+ unsigned long abs_nsec;
+ struct msg_context info;
+ unsigned long state;
+ u16_t index; /* store a lwip thread message box id */
+};
+
+struct ptimer_msg
+{
+ enum msg_type msg_type;
+ struct ptimer_node *node;
+ struct ptimer_msg *next, *prev;
+};
+
+struct ptimer_base
+{
+ struct rb_root active;
+ struct rb_node *first; /* point the recently timeout */
+ pthread_mutex_t lock;
+ pthread_cond_t cond;
+ struct ptimer_msg *head, *tail;
+};
+
+/*
+ * *****************************************************
+ * ptimer E-N-D
+ * *****************************************************
+ */
+void ptimer_thread(void *arg);
+void timeout_phandler(void *act, void *arg);
+void regedit_ptimer(enum msg_type type, sys_timeout_handler handler,
+ struct ptimer_node *node);
+
+#ifdef __cplusplus
+/* *INDENT-OFF* */
+}
+/* *INDENT-ON* */
+#endif
+
+#endif /* __LWIP_TIMERS_H__ */