⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 radio-test.c

📁 Contiki是一个开源
💻 C
字号:
/* * Copyright (c) 2006, Swedish Institute of Computer Science. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. Neither the name of the Institute nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * $Id: radio-test.c,v 1.2 2006/10/09 11:55:30 adamdunkels Exp $ * * ----------------------------------------------------------------- * * Author  : Adam Dunkels, Joakim Eriksson, Niclas Finne * Created : 2006-03-07 * Updated : $Date: 2006/10/09 11:55:30 $ *           $Revision: 1.2 $ * * Simple application to indicate connectivity between two nodes: * * - Red led indicates a packet sent via radio (one packet sent each second) * - Yellow led indicates that this node can hear the other node but not *   necessary vice versa (unidirectional communication). * - Green led indicates that both nodes can communicate with each *   other (bidirectional communication) */#include "contiki-esb.h"#include <string.h>PROCESS(radio_test_process, "Radio test");AUTOSTART_PROCESSES(&radio_test_process);#define ON  1#define OFF 0#define HEADER "RTST"#define PACKET_SIZE 20#define PORT 2345struct indicator {  int onoff;  int led;  clock_time_t interval;  struct etimer timer;};/*---------------------------------------------------------------------*/static voidset(struct indicator *indicator, int onoff) {  if(indicator->onoff ^ onoff) {    indicator->onoff = onoff;    if(onoff) {      leds_on(indicator->led);    } else {      leds_off(indicator->led);    }  }  if(onoff) {    etimer_set(&indicator->timer, indicator->interval);  }}/*---------------------------------------------------------------------*/PROCESS_THREAD(radio_test_process, ev, data){  static struct etimer send_timer;  static struct uip_udp_conn *conn;  static struct indicator recv, other, flash;  PROCESS_BEGIN();  /* Initialize the indicators */  recv.onoff = other.onoff = flash.onoff = OFF;  recv.interval = other.interval = CLOCK_SECOND;  flash.interval = 1;  recv.led = LEDS_YELLOW;  other.led = LEDS_GREEN;  flash.led = LEDS_RED;  conn = udp_broadcast_new(HTONS(PORT), NULL);  etimer_set(&send_timer, CLOCK_SECOND);  while(1) {    PROCESS_WAIT_EVENT();    if(ev == PROCESS_EVENT_TIMER) {      if(data == &send_timer) {	etimer_reset(&send_timer);	tcpip_poll_udp(conn);      } else if(data == &other.timer) {	set(&other, OFF);      } else if(data == &recv.timer) {	set(&recv, OFF);      } else if(data == &flash.timer) {	set(&flash, OFF);      }    } else if(ev == tcpip_event) {      if(uip_poll()) {	/* send packet */	memcpy(uip_appdata, HEADER, sizeof(HEADER));	((char *)uip_appdata)[sizeof(HEADER)] = recv.onoff;	/* send arbitrary data to fill the packet size */	uip_send(uip_appdata, PACKET_SIZE);	set(&flash, ON);      }      if(uip_newdata()) {	/* packet received */	if(uip_datalen() < PACKET_SIZE	   || strncmp((char *)uip_appdata, HEADER, sizeof(HEADER))) {	  /* invalid message */	  leds_blink();	} else {	  set(&recv, ON);	  set(&other, ((char *)uip_appdata)[sizeof(HEADER)] ? ON : OFF);	  /* synchronize the sending to keep the nodes from sending	     simultaneously */	  etimer_set(&send_timer, CLOCK_SECOND);	  etimer_adjust(&send_timer, - (int) (CLOCK_SECOND >> 1));	  beep();	}      }    }  }  PROCESS_END();}/*---------------------------------------------------------------------*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -