Add missing includes
[contiki-2.x.git] / apps / shell / shell-blink.c
blobf6adcd90e08cb2e499d1371d111f630addcd4156
1 /*
2 * Copyright (c) 2008, Swedish Institute of Computer Science.
3 * All rights reserved.
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 Institute nor the names of its contributors
14 * may be used to endorse or promote products derived from this software
15 * without specific prior written permission.
17 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE 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 INSTITUTE 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.
29 * This file is part of the Contiki operating system.
31 * $Id: shell-blink.c,v 1.1 2008/02/04 23:42:17 adamdunkels Exp $
34 /**
35 * \file
36 * A brief description of what this file is.
37 * \author
38 * Adam Dunkels <adam@sics.se>
41 #include "contiki.h"
42 #include "shell.h"
44 #include "dev/leds.h"
46 #include <stdio.h>
48 /*---------------------------------------------------------------------------*/
49 PROCESS(shell_blink_process, "blink");
50 SHELL_COMMAND(blink_command,
51 "blink",
52 "blink [num]: blink LEDs ([num] times)",
53 &shell_blink_process);
54 /*---------------------------------------------------------------------------*/
55 PROCESS_THREAD(shell_blink_process, ev, data)
57 static struct etimer etimer;
58 static int i, num, on = 0;
59 const char *nextptr;
61 PROCESS_EXITHANDLER(if(on) { leds_toggle(LEDS_ALL); } );
63 PROCESS_BEGIN();
65 if(data != NULL) {
66 num = shell_strtolong(data, &nextptr);
67 if(nextptr != data) {
68 etimer_set(&etimer, CLOCK_SECOND / 2);
69 for(i = 0; i < num; ++i) {
70 leds_toggle(LEDS_ALL);
71 on = 1;
72 PROCESS_WAIT_UNTIL(etimer_expired(&etimer));
73 etimer_reset(&etimer);
75 leds_toggle(LEDS_ALL);
76 on = 0;
77 PROCESS_WAIT_UNTIL(etimer_expired(&etimer));
78 etimer_reset(&etimer);
80 PROCESS_EXIT();
84 while(1) {
85 struct shell_input *input;
86 PROCESS_WAIT_EVENT();
87 if(ev == PROCESS_EVENT_TIMER && data == &etimer) {
88 if(on) {
89 leds_toggle(LEDS_ALL);
90 on = 0;
92 } else if(ev == shell_event_input) {
93 input = data;
94 if(input->len1 + input->len2 == 0) {
95 if(on) {
96 leds_toggle(LEDS_ALL);
97 on = 0;
99 PROCESS_EXIT();
101 shell_output(&blink_command,
102 input->data1, input->len1,
103 input->data2, input->len2);
105 if(on == 0) {
106 leds_toggle(LEDS_ALL);
107 on = 1;
109 etimer_set(&etimer, CLOCK_SECOND / 16);
114 PROCESS_END();
116 /*---------------------------------------------------------------------------*/
117 void
118 shell_blink_init(void)
120 shell_register_command(&blink_command);
122 /*---------------------------------------------------------------------------*/