mbed client lightswitch demo
Dependencies: mbed Socket lwip-eth lwip-sys lwip
Fork of mbed-client-classic-example-lwip by
Diff: mbed-client-classic/mbed-client-classic/threadwrapper.h
- Revision:
- 11:cada08fc8a70
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-client-classic/mbed-client-classic/threadwrapper.h Thu Jun 09 17:08:36 2016 +0000 @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * 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 M2M_THREAD_WRAPPER_H__ +#define M2M_THREAD_WRAPPER_H__ + +#include <Thread.h> + +namespace rtos { + +// Wrapper for more complex function as thread targets +template <typename T, void (*F)(T *)> +static void __thread_pointer_wrapper(const void *data) +{ + F((T*)data); +} + +template <typename T, void (*F)(T *)> +static Thread *create_thread(T *arg=NULL, + osPriority priority=osPriorityNormal, + uint32_t stack_size=DEFAULT_STACK_SIZE, + unsigned char *stack_pointer=NULL) +{ + return new Thread(__thread_pointer_wrapper<F,T>, (void *)arg, + priority, stack_size, stack_pointer); +} + +template <class T, void (T::*M)()> +static void __thread_class_wrapper(const void *data) +{ + (((T*)data)->*M)(); +} + +template <class T, void (T::*M)()> +static Thread *create_thread(T *obj, + osPriority priority=osPriorityNormal, + uint32_t stack_size=DEFAULT_STACK_SIZE, + unsigned char *stack_pointer=NULL) +{ + return new Thread(__thread_class_wrapper<T,M>, (void *)obj, + priority, stack_size, stack_pointer); +} + +} + + +#endif //M2M_OBJECT_THREAD_H__