59 typedef unsigned char process_event_t;
60 typedef void * process_data_t;
61 typedef unsigned char process_num_events_t;
74 #define PROCESS_ERR_OK 0 82 #define PROCESS_ERR_FULL 1 85 #define PROCESS_NONE NULL 87 #ifndef PROCESS_CONF_NUMEVENTS 88 #define PROCESS_CONF_NUMEVENTS 32 91 #define PROCESS_EVENT_NONE 0x80 92 #define PROCESS_EVENT_INIT 0x81 93 #define PROCESS_EVENT_POLL 0x82 94 #define PROCESS_EVENT_EXIT 0x83 95 #define PROCESS_EVENT_SERVICE_REMOVED 0x84 96 #define PROCESS_EVENT_CONTINUE 0x85 97 #define PROCESS_EVENT_MSG 0x86 98 #define PROCESS_EVENT_EXITED 0x87 99 #define PROCESS_EVENT_TIMER 0x88 100 #define PROCESS_EVENT_COM 0x89 101 #define PROCESS_EVENT_MAX 0x8a 103 #define PROCESS_BROADCAST NULL 104 #define PROCESS_ZOMBIE ((struct process *)0x1) 120 #define PROCESS_BEGIN() PT_BEGIN(process_pt) 131 #define PROCESS_END() PT_END(process_pt) 141 #define PROCESS_WAIT_EVENT() PROCESS_YIELD() 157 #define PROCESS_WAIT_EVENT_UNTIL(c) PROCESS_YIELD_UNTIL(c) 164 #define PROCESS_YIELD() PT_YIELD(process_pt) 178 #define PROCESS_YIELD_UNTIL(c) PT_YIELD_UNTIL(process_pt, c) 192 #define PROCESS_WAIT_UNTIL(c) PT_WAIT_UNTIL(process_pt, c) 193 #define PROCESS_WAIT_WHILE(c) PT_WAIT_WHILE(process_pt, c) 200 #define PROCESS_EXIT() PT_EXIT(process_pt) 211 #define PROCESS_PT_SPAWN(pt, thread) PT_SPAWN(process_pt, pt, thread) 221 #define PROCESS_PAUSE() do { \ 222 process_post(PROCESS_CURRENT(), PROCESS_EVENT_CONTINUE, NULL); \ 223 PROCESS_WAIT_EVENT_UNTIL(ev == PROCESS_EVENT_CONTINUE); \ 242 #define PROCESS_POLLHANDLER(handler) if(ev == PROCESS_EVENT_POLL) { handler; } 254 #define PROCESS_EXITHANDLER(handler) if(ev == PROCESS_EVENT_EXIT) { handler; } 273 #define PROCESS_THREAD(name, ev, data) \ 274 static PT_THREAD(process_thread_##name(struct pt *process_pt, \ 275 process_event_t ev, \ 276 process_data_t data)) 286 #define PROCESS_NAME(name) extern struct process name 301 #if PROCESS_CONF_NO_PROCESS_NAMES 302 #define PROCESS(name, strname) \ 303 PROCESS_THREAD(name, ev, data); \ 304 struct process name = { NULL, \ 305 process_thread_##name } 307 #define PROCESS(name, strname) \ 308 PROCESS_THREAD(name, ev, data); \ 309 struct process name = { NULL, strname, \ 310 process_thread_##name } 316 struct process *next;
317 #if PROCESS_CONF_NO_PROCESS_NAMES 318 #define PROCESS_NAME_STRING(process) "" 321 #define PROCESS_NAME_STRING(process) (process)->name 323 PT_THREAD((* thread)(
struct pt *, process_event_t, process_data_t));
325 unsigned char state, needspoll;
365 int process_post(
struct process *p, process_event_t ev, process_data_t data);
378 process_event_t ev, process_data_t data);
402 #define PROCESS_CURRENT() process_current 403 extern struct process *process_current;
426 #define PROCESS_CONTEXT_BEGIN(p) {\ 427 struct process *tmp_current = PROCESS_CURRENT();\ 440 #define PROCESS_CONTEXT_END(p) process_current = tmp_current; } 524 extern struct process *process_list;
526 #define PROCESS_LIST() process_list void process_post_synch(struct process *p, process_event_t ev, process_data_t data)
Post a synchronous event to a process.
Protothreads implementation.
int process_is_running(struct process *p)
Check if a process is running.
void process_exit(struct process *p)
Cause a process to exit.
void process_init(void)
Initialize the process module.
void process_poll(struct process *p)
Request a process to be polled.
#define PT_THREAD(name_args)
Declaration of a protothread.
process_event_t process_alloc_event(void)
Allocate a global event number.
int process_nevents(void)
Number of events waiting to be processed.
int process_post(struct process *p, process_event_t ev, process_data_t data)
Post an asynchronous event.
Default definitions of C compiler quirk work-arounds.
int process_run(void)
Run the system once - call poll handlers and process one event.
void process_start(struct process *p, process_data_t data)
Start a process.