Contiki 2.6

beeper.c

00001 /*
00002  * Copyright (c) 2005, Swedish Institute of Computer Science
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 copyright 
00011  *    notice, this list of conditions and the following disclaimer in the 
00012  *    documentation and/or other materials provided with the distribution. 
00013  * 3. Neither the name of the Institute nor the names of its contributors 
00014  *    may be used to endorse or promote products derived from this software 
00015  *    without specific prior written permission. 
00016  *
00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 
00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 
00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 
00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 
00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
00027  * SUCH DAMAGE. 
00028  *
00029  * This file is part of the Contiki operating system.
00030  *
00031  * @(#)$Id: beeper.c,v 1.3 2010/01/15 10:37:04 nifi Exp $
00032  */
00033 #include "contiki-esb.h"
00034 
00035 PROCESS(beeper_process, "Beeper");
00036 
00037 AUTOSTART_PROCESSES(&beeper_process);
00038 
00039 static struct etimer etimer;
00040 
00041 static struct pt beeper_pt;
00042 
00043 static
00044 PT_THREAD(beeper_thread(struct pt *pt))
00045 {
00046   PT_BEGIN(pt);
00047 
00048   while(1) {
00049     PT_WAIT_UNTIL(pt, etimer_expired(&etimer));
00050     etimer_reset(&etimer);
00051     leds_invert(LEDS_RED);
00052     beep();
00053     
00054     PT_WAIT_UNTIL(pt, etimer_expired(&etimer));
00055     etimer_reset(&etimer);
00056     leds_invert(LEDS_RED);
00057   }
00058   
00059   PT_END(pt);
00060 }
00061 
00062 PROCESS_THREAD(beeper_process, ev, data)
00063 {
00064   PROCESS_BEGIN();
00065   
00066   etimer_set(&etimer, CLOCK_SECOND / 2);
00067   PT_INIT(&beeper_pt);
00068   
00069   button_sensor.configure(SENSORS_ACTIVE, 1);
00070   
00071   while(1) {
00072 
00073     beeper_thread(&beeper_pt);
00074     
00075     PROCESS_WAIT_EVENT();
00076     
00077     if(ev == PROCESS_EVENT_EXIT) {
00078       break;
00079     } else if(ev == sensors_event &&
00080               data == &button_sensor) {
00081       leds_invert(LEDS_YELLOW);
00082     }
00083     
00084   }
00085   PROCESS_END();
00086 }