1 /* 2 * Copyright (c) 2009-2012 Travis Geiselbrecht 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining 5 * a copy of this software and associated documentation files 6 * (the "Software"), to deal in the Software without restriction, 7 * including without limitation the rights to use, copy, modify, merge, 8 * publish, distribute, sublicense, and/or sell copies of the Software, 9 * and to permit persons to whom the Software is furnished to do so, 10 * subject to the following conditions: 11 * 12 * The above copyright notice and this permission notice shall be 13 * included in all copies or substantial portions of the Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 19 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 20 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 21 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22 */ 23 #ifndef __APP_H 24 #define __APP_H 25 26 #include <stddef.h> 27 #include <compiler.h> 28 29 __BEGIN_CDECLS; 30 31 /* app support api */ 32 void apps_init(void); /* one time setup */ 33 34 /* app entry point */ 35 struct app_descriptor; 36 typedef void (*app_init)(const struct app_descriptor *); 37 typedef void (*app_entry)(const struct app_descriptor *, void *args); 38 39 /* app startup flags */ 40 #define APP_FLAG_DONT_START_ON_BOOT 0x1 41 #define APP_FLAG_CUSTOM_STACK_SIZE 0x2 42 43 /* each app needs to define one of these to define its startup conditions */ 44 struct app_descriptor { 45 const char *name; 46 app_init init; 47 app_entry entry; 48 unsigned int flags; 49 size_t stack_size; 50 }; 51 52 #define APP_START(appname) const struct app_descriptor _app_##appname __ALIGNED(sizeof(void *)) __SECTION(".apps") = { .name = #appname, 53 54 #define APP_END }; 55 56 __END_CDECLS; 57 58 #endif 59 60