Contiki 2.5
stunicast.h
Go to the documentation of this file.
1 /**
2  * \addtogroup rime
3  * @{
4  */
5 
6 /**
7  * \defgroup rimestunicast Stubborn unicast
8  * @{
9  *
10  * The stubborn single-hop unicast primitive (stunicast) repeatedly
11  * sends a packet to a single-hop neighbor using the unicast
12  * primitive. The stunicast primitive sends and resends the packet
13  * until an upper layer primitive or protocol cancels the
14  * transmission. While it is possible for applications and protocols
15  * that use Rime to use the stubborn single-hop unicast primitive
16  * directly, the stunicast primitive is primarily used by the reliable
17  * single-hop unicast (runicast) primitive.
18  *
19  * Before the stunicast primitive sends a packet, it allocates a queue
20  * buffer, to which the application data and packet attributes is
21  * copied, and sets a timer. When the timer expires, the stunicast
22  * primitive copies the queue buffer to the Rime buffer and sends the
23  * packet using the unicast primitive. The stunicast primitive sets the
24  * number of retransmissions for a packet as a packet attribute on
25  * outgoing packets.
26  *
27  * \section channels Channels
28  *
29  * The stunicast module uses 1 channel.
30  *
31  */
32 
33 /*
34  * Copyright (c) 2006, Swedish Institute of Computer Science.
35  * All rights reserved.
36  *
37  * Redistribution and use in source and binary forms, with or without
38  * modification, are permitted provided that the following conditions
39  * are met:
40  * 1. Redistributions of source code must retain the above copyright
41  * notice, this list of conditions and the following disclaimer.
42  * 2. Redistributions in binary form must reproduce the above copyright
43  * notice, this list of conditions and the following disclaimer in the
44  * documentation and/or other materials provided with the distribution.
45  * 3. Neither the name of the Institute nor the names of its contributors
46  * may be used to endorse or promote products derived from this software
47  * without specific prior written permission.
48  *
49  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
50  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
51  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
52  * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
53  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
54  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
55  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
56  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
57  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
58  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
59  * SUCH DAMAGE.
60  *
61  * This file is part of the Contiki operating system.
62  *
63  * $Id: stunicast.h,v 1.7 2010/06/14 19:19:17 adamdunkels Exp $
64  */
65 
66 /**
67  * \file
68  * Stubborn unicast header file
69  * \author
70  * Adam Dunkels <adam@sics.se>
71  */
72 
73 #ifndef __STUNICAST_H__
74 #define __STUNICAST_H__
75 
76 #include "sys/ctimer.h"
77 #include "net/rime/unicast.h"
78 #include "net/queuebuf.h"
79 
80 struct stunicast_conn;
81 
82 #define STUNICAST_ATTRIBUTES UNICAST_ATTRIBUTES
83 
84 struct stunicast_callbacks {
85  void (* recv)(struct stunicast_conn *c, const rimeaddr_t *from);
86  void (* sent)(struct stunicast_conn *c, int status, int num_tx);
87 };
88 
89 struct stunicast_conn {
90  struct unicast_conn c;
91  struct ctimer t;
92  struct queuebuf *buf;
93  const struct stunicast_callbacks *u;
94  rimeaddr_t receiver;
95 };
96 
97 void stunicast_open(struct stunicast_conn *c, uint16_t channel,
98  const struct stunicast_callbacks *u);
99 void stunicast_close(struct stunicast_conn *c);
100 
101 int stunicast_send_stubborn(struct stunicast_conn *c, const rimeaddr_t *receiver,
102  clock_time_t rxmittime);
103 void stunicast_cancel(struct stunicast_conn *c);
104 
105 int stunicast_send(struct stunicast_conn *c, const rimeaddr_t *receiver);
106 
107 void stunicast_set_timer(struct stunicast_conn *c, clock_time_t t);
108 
109 rimeaddr_t *stunicast_receiver(struct stunicast_conn *c);
110 
111 #endif /* __STUNICAST_H__ */
112 /** @} */
113 /** @} */