Contiki 2.6

contiki-serial-main.c

00001 /*
00002  * Copyright (c) 2007, Takahide Matsutsuka.
00003  * All rights reserved.
00004  *
00005  * Redistribution and use in source and binary forms, with or without
00006  * modification, are permitted provided that the following conditions
00007  * are met:
00008  * 1. Redistributions of source code must retain the above copyright
00009  *    notice, this list of conditions and the following disclaimer.
00010  * 2. Redistributions in binary form must reproduce the above
00011  *    copyright notice, this list of conditions and the following
00012  *    disclaimer in the documentation and/or other materials provided
00013  *    with the distribution.
00014  * 3. The name of the author may not be used to endorse or promote
00015  *    products derived from this software without specific prior
00016  *    written permission.
00017  *
00018  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
00019  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
00020  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00021  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
00022  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00023  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
00024  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00025  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
00026  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00027  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00028  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00029  *
00030  * $Id: contiki-serial-main.c,v 1.5 2009/12/11 14:59:31 matsutsuka Exp $
00031  *
00032  */
00033 
00034 /*
00035  * \file
00036  *      This is a sample main file with serial.
00037  * \author
00038  *      Takahide Matsutsuka <markn@markn.org>
00039  */
00040 
00041 #include "contiki.h"
00042 
00043 /* devices */
00044 #include "dev/serial-line.h"
00045 #include "ctk/libconio_arch-small.h"
00046 
00047 #undef RS232_INTR
00048 #ifdef RS232_INTR
00049 void rs232_arch_writeb(uint8_t ch);
00050 void rs232_arch_init(int (* callback)(unsigned char), unsigned long ubr);
00051 #else
00052 #include "dev/rs232.h"
00053 #endif
00054 
00055 PROCESS(stest_process, "Serial test process");
00056 /*---------------------------------------------------------------------------*/
00057 static void
00058 rs232_print(char* str) {
00059   while (*str != 0) {
00060     rs232_arch_writeb(*str++);
00061   }
00062 }
00063 /*---------------------------------------------------------------------------*/
00064 static void
00065 log(char* str) {
00066   while (*str != 0) {
00067     libputc_arch(*str++);
00068   }
00069 }
00070 /*---------------------------------------------------------------------------*/
00071 PROCESS_THREAD(stest_process, ev, data)
00072 {
00073   static struct etimer timer;
00074   PROCESS_BEGIN();
00075 
00076   clrscr_arch();
00077 #ifdef RS232_INTR
00078   rs232_arch_init(serial_line_input_byte, 0);
00079 #endif
00080 
00081   etimer_set(&timer, CLOCK_SECOND);
00082 
00083   log("Starting serial test process");
00084   while(1) {
00085     PROCESS_WAIT_EVENT();
00086 
00087     if (etimer_expired(&timer)) {
00088       log("Sending serial data now");
00089       rs232_print("GNU's not Unix\n");
00090       etimer_reset(&timer);
00091     }
00092 
00093     if(ev == serial_line_event_message) {
00094       log(data);
00095     }
00096   }
00097 
00098   PROCESS_END();
00099 }
00100 /*---------------------------------------------------------------------------*/
00101 void
00102 main(void)
00103 {
00104   /* initialize process manager. */
00105   process_init();
00106 
00107   /* start services */
00108   process_start(&etimer_process, NULL);
00109   process_start(&serial_line_process, NULL);
00110 #ifndef RS232_INTR
00111   process_start(&rs232_process, NULL);
00112 #endif
00113   process_start(&stest_process, NULL);
00114 
00115   while(1) {
00116     process_run();
00117     etimer_request_poll();
00118   }
00119 }