|
|||
Prex Home / Browse Source - Prex Version: 0.9.0 |
|||
root/usr/sample/ipc/ipc.c/* [<][>][^][v][top][bottom][index][help] */DEFINITIONSThis source file includes following definitions.1 /* 2 * Copyright (c) 2005, Kohsuke Ohtani 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 3. Neither the name of the author nor the names of any co-contributors 14 * may be used to endorse or promote products derived from this software 15 * without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27 * SUCH DAMAGE. 28 */ 29 30 /* 31 * ipc.c - A sample program for IPC message transmission. 32 */ 33 34 #include <sys/prex.h> 35 #include <ipc/ipc.h> 36 #include <stdio.h> 37 #include <string.h> 38 39 /* 40 * Message structure 41 */ 42 struct chat_msg { 43 struct msg_header hdr; /* Message header */ 44 char str[128]; /* String */ 45 }; 46 47 48 static char stack[1024]; 49 50 /* 51 * Start client task/thread 52 */ 53 static task_t 54 start_client(void (*func)(void), char *stack) 55 { 56 task_t task; 57 thread_t t; 58 59 #ifdef CONFIG_MMU 60 if (task_create(task_self(), VM_COPY, &task) != 0) 61 return 0; 62 #else 63 task = task_self(); 64 #endif 65 if (thread_create(task, &t) != 0) 66 return 0; 67 68 if (thread_load(t, func, stack) != 0) 69 return 0; 70 71 if (thread_resume(t) != 0) 72 return 0; 73 74 return task; 75 } 76 77 /* 78 * Send message to server 79 */ 80 void 81 send_message(object_t obj, const char *str) 82 { 83 struct chat_msg msg; 84 85 timer_sleep(2000, 0); 86 strcpy(msg.str, str); 87 msg_send(obj, &msg, sizeof(msg)); 88 printf("client: Received \"%s\"\n", msg.str); 89 } 90 91 92 /* 93 * Client task 94 */ 95 static void 96 client_task(void) 97 { 98 object_t obj; 99 int error; 100 101 printf("Client is started\n"); 102 103 /* 104 * Find objects. 105 */ 106 if ((error = object_lookup("test", &obj)) != 0) 107 panic("can not find object"); 108 109 /* 110 * Send message per 2 second. 111 */ 112 send_message(obj, "Hello!"); 113 send_message(obj, "This is a client task."); 114 send_message(obj, "Who are you?"); 115 send_message(obj, "How are you?"); 116 send_message(obj, "...."); 117 send_message(obj, "Bye!"); 118 send_message(obj, "Exit"); 119 120 #ifdef CONFIG_MMU 121 printf("Exit client task...\n"); 122 task_terminate(task_self()); 123 #endif 124 } 125 126 int 127 main(int argc, char *argv[]) 128 { 129 object_t obj = 0; 130 struct chat_msg msg; 131 int error, exit; 132 133 printf("IPC sample program\n"); 134 135 /* 136 * Boost priority of this thread 137 */ 138 thread_setpri(thread_self(), 90); 139 140 /* 141 * Create object 142 */ 143 if ((error = object_create("test", &obj)) != 0) 144 panic("fail to create object"); 145 146 /* 147 * Start client task. 148 */ 149 if (start_client(client_task, stack+1024) == 0) 150 panic("fail to create task"); 151 152 /* 153 * Message loop 154 */ 155 exit = 0; 156 while (exit == 0) { 157 /* 158 * Wait for an incoming request. 159 */ 160 error = msg_receive(obj, &msg, sizeof(msg)); 161 if (error) 162 continue; 163 /* 164 * Process request. 165 */ 166 printf("server: Received \"%s\"\n", msg.str); 167 if (!strcmp(msg.str, "Exit")) 168 exit = 1; 169 170 if (!strcmp(msg.str, "Hello!")) 171 strcpy(msg.str, "Hi."); 172 else if (!strcmp(msg.str, "Bye!")) 173 strcpy(msg.str, "Bye."); 174 else 175 strcpy(msg.str, "OK."); 176 177 /* 178 * Reply to the client. 179 */ 180 msg_reply(obj, &msg, sizeof(msg)); 181 } 182 timer_sleep(1000, 0); 183 printf("End...\n"); 184 return 0; 185 } /* [<][>][^][v][top][bottom][index][help] */ | |||
Copyright© 2005-2009 Kohsuke Ohtani |