Contiki 2.6

stunicast.h

Go to the documentation of this file.
00001 /**
00002  * \addtogroup rime
00003  * @{
00004  */
00005 
00006 /**
00007  * \defgroup rimestunicast Stubborn unicast
00008  * @{
00009  *
00010  * The stubborn single-hop unicast primitive (stunicast) repeatedly
00011  * sends a packet to a single-hop neighbor using the unicast
00012  * primitive.  The stunicast primitive sends and resends the packet
00013  * until an upper layer primitive or protocol cancels the
00014  * transmission.  While it is possible for applications and protocols
00015  * that use Rime to use the stubborn single-hop unicast primitive
00016  * directly, the stunicast primitive is primarily used by the reliable
00017  * single-hop unicast (runicast) primitive.
00018  *
00019  * Before the stunicast primitive sends a packet, it allocates a queue
00020  * buffer, to which the application data and packet attributes is
00021  * copied, and sets a timer.  When the timer expires, the stunicast
00022  * primitive copies the queue buffer to the Rime buffer and sends the
00023  * packet using the unicast primitive.  The stunicast primitive sets the
00024  * number of retransmissions for a packet as a packet attribute on 
00025  * outgoing packets.
00026  *
00027  * \section channels Channels
00028  *
00029  * The stunicast module uses 1 channel.
00030  *
00031  */
00032 
00033 /*
00034  * Copyright (c) 2006, Swedish Institute of Computer Science.
00035  * All rights reserved.
00036  *
00037  * Redistribution and use in source and binary forms, with or without
00038  * modification, are permitted provided that the following conditions
00039  * are met:
00040  * 1. Redistributions of source code must retain the above copyright
00041  *    notice, this list of conditions and the following disclaimer.
00042  * 2. Redistributions in binary form must reproduce the above copyright
00043  *    notice, this list of conditions and the following disclaimer in the
00044  *    documentation and/or other materials provided with the distribution.
00045  * 3. Neither the name of the Institute nor the names of its contributors
00046  *    may be used to endorse or promote products derived from this software
00047  *    without specific prior written permission.
00048  *
00049  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
00050  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00051  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00052  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
00053  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00054  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
00055  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
00056  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00057  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
00058  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
00059  * SUCH DAMAGE.
00060  *
00061  * This file is part of the Contiki operating system.
00062  *
00063  * $Id: stunicast.h,v 1.7 2010/06/14 19:19:17 adamdunkels Exp $
00064  */
00065 
00066 /**
00067  * \file
00068  *         Stubborn unicast header file
00069  * \author
00070  *         Adam Dunkels <adam@sics.se>
00071  */
00072 
00073 #ifndef __STUNICAST_H__
00074 #define __STUNICAST_H__
00075 
00076 #include "sys/ctimer.h"
00077 #include "net/rime/unicast.h"
00078 #include "net/queuebuf.h"
00079 
00080 struct stunicast_conn;
00081 
00082 #define STUNICAST_ATTRIBUTES  UNICAST_ATTRIBUTES
00083 
00084 struct stunicast_callbacks {
00085   void (* recv)(struct stunicast_conn *c, const rimeaddr_t *from);
00086   void (* sent)(struct stunicast_conn *c, int status, int num_tx);
00087 };
00088 
00089 struct stunicast_conn {
00090   struct unicast_conn c;
00091   struct ctimer t;
00092   struct queuebuf *buf;
00093   const struct stunicast_callbacks *u;
00094   rimeaddr_t receiver;
00095 };
00096 
00097 void stunicast_open(struct stunicast_conn *c, uint16_t channel,
00098                const struct stunicast_callbacks *u);
00099 void stunicast_close(struct stunicast_conn *c);
00100 
00101 int stunicast_send_stubborn(struct stunicast_conn *c, const rimeaddr_t *receiver,
00102                       clock_time_t rxmittime);
00103 void stunicast_cancel(struct stunicast_conn *c);
00104 
00105 int stunicast_send(struct stunicast_conn *c, const rimeaddr_t *receiver);
00106 
00107 void stunicast_set_timer(struct stunicast_conn *c, clock_time_t t);
00108 
00109 rimeaddr_t *stunicast_receiver(struct stunicast_conn *c);
00110 
00111 #endif /* __STUNICAST_H__ */
00112 /** @} */
00113 /** @} */