Merge pull request #1390 from tsparber/fix-doxygen-whitespace

Cleanup some trailing spaces and convert tabs to spaces
This commit is contained in:
George Oikonomou 2015-11-22 11:53:01 +00:00
commit 41ea0308a3
29 changed files with 1001 additions and 1033 deletions

View file

@ -1,19 +1,19 @@
/*
* Copyright (c) 2003, Adam Dunkels.
* All rights reserved.
* 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.
* 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.
* with the distribution.
* 3. The name of the author may not be used to endorse or promote
* products derived from this software without specific prior
* written permission.
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
@ -25,7 +25,7 @@
* 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.
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This file is part of the Contiki desktop OS
*
@ -35,7 +35,7 @@
/**
* \file
* The program handler, used for loading programs and starting the
* screensaver.
* screensaver.
* \author Adam Dunkels <adam@dunkels.com>
*
* The Contiki program handler is responsible for the Contiki menu and
@ -45,7 +45,7 @@
* The program handler also is responsible for starting the
* screensaver when the CTK detects that it should be started.
*/
#include <string.h>
#include <stdlib.h>
@ -161,7 +161,7 @@ char program_handler_screensaver[20];
/*-----------------------------------------------------------------------------------*/
void
program_handler_add(struct dsc *dsc, char *menuname,
unsigned char desktop)
unsigned char desktop)
{
contikidsc[contikidsclast++] = dsc;
ctk_menuitem_add(&contikimenu, menuname);
@ -228,7 +228,7 @@ program_handler_load(char *name, char *arg)
{
#ifdef WITH_LOADER_ARCH
struct pnarg *pnarg;
pnarg = pnarg_copy(name, arg);
if(pnarg != NULL) {
process_post(&program_handler_process, LOADER_EVENT_DISPLAY_NAME, pnarg);
@ -272,17 +272,17 @@ static void
make_windows(void)
{
ctk_window_new(&runwindow, 16, 3, "Run");
CTK_WIDGET_ADD(&runwindow, &namelabel);
CTK_WIDGET_ADD(&runwindow, &nameentry);
CTK_WIDGET_ADD(&runwindow, &loadbutton);
CTK_WIDGET_FOCUS(&runwindow, &nameentry);
ctk_dialog_new(&loadingdialog, 25, 1);
CTK_WIDGET_ADD(&loadingdialog, &loadingmsg);
CTK_WIDGET_ADD(&loadingdialog, &loadingname);
ctk_dialog_new(&errordialog, 22, 8);
CTK_WIDGET_ADD(&errordialog, &errormsg);
CTK_WIDGET_ADD(&errordialog, &errorfilelabel);
@ -302,20 +302,20 @@ PROCESS_THREAD(program_handler_process, ev, data)
struct dsc **dscp;
PROCESS_BEGIN();
/* Create the menus */
ctk_menu_add(&contikimenu);
#if WITH_LOADER_ARCH
runmenuitem = ctk_menuitem_add(&contikimenu, "Run program...");
make_windows();
#endif /* WITH_LOADER_ARCH */
#if QUIT_MENU
quitmenuitem = ctk_menuitem_add(&contikimenu, "Quit");
#endif /* QUIT_MENU */
displayname = NULL;
#if CTK_CONF_SCREENSAVER
program_handler_screensaver[0] = 0;
#endif /* CTK_CONF_SCREENSAVER */
@ -325,106 +325,106 @@ PROCESS_THREAD(program_handler_process, ev, data)
if(ev == ctk_signal_button_activate) {
#ifdef WITH_LOADER_ARCH
if(data == (process_data_t)&loadbutton) {
ctk_window_close(&runwindow);
program_handler_load(name, NULL);
ctk_window_close(&runwindow);
program_handler_load(name, NULL);
} else if(data == (process_data_t)&errorokbutton) {
ctk_dialog_close();
ctk_dialog_close();
}
#endif /* WITH_LOADER_ARCH */
#if QUIT_MENU
if(data == (process_data_t)&quityesbutton) {
ctk_draw_init();
exit(EXIT_SUCCESS);
ctk_draw_init();
exit(EXIT_SUCCESS);
} else if(data == (process_data_t)&quitnobutton) {
ctk_dialog_close();
ctk_dialog_close();
}
#endif /* QUIT_MENU */
dscp = &contikidsc[0];
for(i = 0; i < CTK_MAXMENUITEMS; ++i) {
if(*dscp != NULL
for(i = 0; i < CTK_MAXMENUITEMS; ++i) {
if(*dscp != NULL
#if CTK_CONF_ICONS
&& data == (process_data_t)(*dscp)->icon
&& data == (process_data_t)(*dscp)->icon
#endif /* CTK_CONF_ICONS */
) {
RUN((*dscp)->prgname, (*dscp)->process, NULL);
break;
}
++dscp;
) {
RUN((*dscp)->prgname, (*dscp)->process, NULL);
break;
}
++dscp;
}
} else if(ev == ctk_signal_menu_activate) {
if((struct ctk_menu *)data == &contikimenu) {
#if WITH_LOADER_ARCH
dsc = contikidsc[contikimenu.active];
if(dsc != NULL) {
RUN(dsc->prgname, dsc->process, NULL);
} else if(contikimenu.active == runmenuitem) {
make_windows();
ctk_window_close(&runwindow);
ctk_window_open(&runwindow);
CTK_WIDGET_FOCUS(&runwindow, &nameentry);
}
dsc = contikidsc[contikimenu.active];
if(dsc != NULL) {
RUN(dsc->prgname, dsc->process, NULL);
} else if(contikimenu.active == runmenuitem) {
make_windows();
ctk_window_close(&runwindow);
ctk_window_open(&runwindow);
CTK_WIDGET_FOCUS(&runwindow, &nameentry);
}
#else /* WITH_LOADER_ARCH */
if(contikidsc[contikimenu.active] != NULL) {
RUN(contikidsc[contikimenu.active]->prgname,
contikidsc[contikimenu.active]->process,
NULL);
}
if(contikidsc[contikimenu.active] != NULL) {
RUN(contikidsc[contikimenu.active]->prgname,
contikidsc[contikimenu.active]->process,
NULL);
}
#endif /* WITH_LOADER_ARCH */
#if QUIT_MENU
if(contikimenu.active == quitmenuitem) {
ctk_dialog_new(&quitdialog, 24, 5);
CTK_WIDGET_ADD(&quitdialog, &quitdialoglabel);
CTK_WIDGET_ADD(&quitdialog, &quityesbutton);
CTK_WIDGET_ADD(&quitdialog, &quitnobutton);
CTK_WIDGET_FOCUS(&quitdialog, &quitnobutton);
ctk_dialog_open(&quitdialog);
}
if(contikimenu.active == quitmenuitem) {
ctk_dialog_new(&quitdialog, 24, 5);
CTK_WIDGET_ADD(&quitdialog, &quitdialoglabel);
CTK_WIDGET_ADD(&quitdialog, &quityesbutton);
CTK_WIDGET_ADD(&quitdialog, &quitnobutton);
CTK_WIDGET_FOCUS(&quitdialog, &quitnobutton);
ctk_dialog_open(&quitdialog);
}
#endif /* QUIT_MENU */
}
#if CTK_CONF_SCREENSAVER
} else if(ev == ctk_signal_screensaver_start) {
#if WITH_LOADER_ARCH
if(program_handler_screensaver[0] != 0) {
program_handler_load(program_handler_screensaver, NULL);
program_handler_load(program_handler_screensaver, NULL);
}
#endif /* WITH_LOADER_ARCH */
#endif /* CTK_CONF_SCREENSAVER */
} else if(ev == LOADER_EVENT_DISPLAY_NAME) {
#if WITH_LOADER_ARCH
if(displayname == NULL) {
make_windows();
ctk_label_set_text(&loadingname, ((struct pnarg *)data)->name);
ctk_dialog_open(&loadingdialog);
process_post(&program_handler_process, LOADER_EVENT_LOAD, data);
displayname = data;
make_windows();
ctk_label_set_text(&loadingname, ((struct pnarg *)data)->name);
ctk_dialog_open(&loadingdialog);
process_post(&program_handler_process, LOADER_EVENT_LOAD, data);
displayname = data;
} else {
/* Try again. */
process_post(&program_handler_process, LOADER_EVENT_DISPLAY_NAME, data);
/* Try again. */
process_post(&program_handler_process, LOADER_EVENT_DISPLAY_NAME, data);
}
#endif /* WITH_LOADER_ARCH */
} else if(ev == LOADER_EVENT_LOAD) {
#if WITH_LOADER_ARCH
if(displayname == data) {
ctk_dialog_close();
displayname = NULL;
log_message("Loading ", ((struct pnarg *)data)->name);
err = LOADER_LOAD(((struct pnarg *)data)->name,
((struct pnarg *)data)->arg);
if(err != LOADER_OK) {
make_windows();
errorfilename[0] = '"';
strncpy(errorfilename + 1, ((struct pnarg *)data)->name,
sizeof(errorfilename) - 2);
errorfilename[1 + strlen(((struct pnarg *)data)->name)] = '"';
ctk_label_set_text(&errortype, (char *)errormsgs[err]);
ctk_dialog_open(&errordialog);
log_message((char *)errormsgs[err], errorfilename);
}
pnarg_free(data);
ctk_dialog_close();
displayname = NULL;
log_message("Loading ", ((struct pnarg *)data)->name);
err = LOADER_LOAD(((struct pnarg *)data)->name,
((struct pnarg *)data)->arg);
if(err != LOADER_OK) {
make_windows();
errorfilename[0] = '"';
strncpy(errorfilename + 1, ((struct pnarg *)data)->name,
sizeof(errorfilename) - 2);
errorfilename[1 + strlen(((struct pnarg *)data)->name)] = '"';
ctk_label_set_text(&errortype, (char *)errormsgs[err]);
ctk_dialog_open(&errordialog);
log_message((char *)errormsgs[err], errorfilename);
}
pnarg_free(data);
} else {
/* Try again. */
process_post(&program_handler_process, LOADER_EVENT_DISPLAY_NAME, data);
/* Try again. */
process_post(&program_handler_process, LOADER_EVENT_DISPLAY_NAME, data);
}
#endif /* WITH_LOADEER_ARCH */
}

View file

@ -64,17 +64,11 @@
#define UIP_TCPH_LEN 20 /* Size of TCP header */
#define UIP_ICMPH_LEN 4 /* Size of ICMP header */
#define UIP_IPUDPH_LEN (UIP_UDPH_LEN + UIP_IPH_LEN) /* Size of IP +
* UDP
* header */
#define UIP_IPTCPH_LEN (UIP_TCPH_LEN + UIP_IPH_LEN) /* Size of IP +
* TCP
* header */
#define UIP_IPUDPH_LEN (UIP_UDPH_LEN + UIP_IPH_LEN) /* Size of IP + UDP header */
#define UIP_IPTCPH_LEN (UIP_TCPH_LEN + UIP_IPH_LEN) /* Size of IP + TCP header */
#define UIP_TCPIP_HLEN UIP_IPTCPH_LEN
#define UIP_IPICMPH_LEN (UIP_IPH_LEN + UIP_ICMPH_LEN) /* size of ICMP
+ IP header */
#define UIP_LLIPH_LEN (UIP_LLH_LEN + UIP_IPH_LEN) /* size of L2
+ IP header */
#define UIP_IPICMPH_LEN (UIP_IPH_LEN + UIP_ICMPH_LEN) /* Size of ICMP + IP header */
#define UIP_LLIPH_LEN (UIP_LLH_LEN + UIP_IPH_LEN) /* Size of L2 + IP header */
#if NETSTACK_CONF_WITH_IPV6
/**
* The sums below are quite used in ND. When used for uip_buf, we
@ -99,12 +93,12 @@
*
*/
typedef union uip_ip4addr_t {
uint8_t u8[4]; /* Initializer, must come first. */
uint8_t u8[4]; /* Initializer, must come first. */
uint16_t u16[2];
} uip_ip4addr_t;
typedef union uip_ip6addr_t {
uint8_t u8[16]; /* Initializer, must come first. */
uint8_t u8[16]; /* Initializer, must come first. */
uint16_t u16[8];
} uip_ip6addr_t;
@ -1057,7 +1051,7 @@ struct uip_udp_conn *uip_udp_new(const uip_ipaddr_t *ripaddr, uint16_t rport);
* \hideinitializer
*/
#define uip_ip4addr_cmp(addr1, addr2) ((addr1)->u16[0] == (addr2)->u16[0] && \
(addr1)->u16[1] == (addr2)->u16[1])
(addr1)->u16[1] == (addr2)->u16[1])
#define uip_ip6addr_cmp(addr1, addr2) (memcmp(addr1, addr2, sizeof(uip_ip6addr_t)) == 0)
#if NETSTACK_CONF_WITH_IPV6
@ -1358,26 +1352,21 @@ struct uip_conn {
uint16_t lport; /**< The local TCP port, in network byte order. */
uint16_t rport; /**< The local remote TCP port, in network byte
order. */
order. */
uint8_t rcv_nxt[4]; /**< The sequence number that we expect to
receive next. */
uint8_t snd_nxt[4]; /**< The sequence number that was last sent by
us. */
receive next. */
uint8_t snd_nxt[4]; /**< The sequence number that was last sent by us. */
uint16_t len; /**< Length of the data that was previously sent. */
uint16_t mss; /**< Current maximum segment size for the
connection. */
uint16_t initialmss; /**< Initial maximum segment size for the
connection. */
uint8_t sa; /**< Retransmission time-out calculation state
variable. */
uint8_t sv; /**< Retransmission time-out calculation state
variable. */
uint16_t mss; /**< Current maximum segment size for the connection. */
uint16_t initialmss; /**< Initial maximum segment size for the connection. */
uint8_t sa; /**< Retransmission time-out calculation state variable. */
uint8_t sv; /**< Retransmission time-out calculation state variable. */
uint8_t rto; /**< Retransmission time-out. */
uint8_t tcpstateflags; /**< TCP state and flags. */
uint8_t timer; /**< The retransmission timer. */
uint8_t nrtx; /**< The number of retransmissions for the last
segment sent. */
segment sent. */
/** The application state. */
uip_tcp_appstate_t appstate;
@ -1431,9 +1420,9 @@ struct uip_fallback_interface {
void (*init)(void);
/**
* \retval >=0
* in case of success
* in case of success
* \retval <0
* in case of failure
* in case of failure
*/
int (*output)(void);
};
@ -1464,51 +1453,43 @@ extern struct uip_stats uip_stat;
*/
struct uip_stats {
struct {
uip_stats_t recv; /**< Number of received packets at the IP
layer. */
uip_stats_t sent; /**< Number of sent packets at the IP
layer. */
uip_stats_t forwarded;/**< Number of forwarded packets at the IP
layer. */
uip_stats_t drop; /**< Number of dropped packets at the IP
layer. */
uip_stats_t recv; /**< Number of received packets at the IP layer. */
uip_stats_t sent; /**< Number of sent packets at the IP layer. */
uip_stats_t forwarded;/**< Number of forwarded packets at the IP layer. */
uip_stats_t drop; /**< Number of dropped packets at the IP layer. */
uip_stats_t vhlerr; /**< Number of packets dropped due to wrong
IP version or header length. */
IP version or header length. */
uip_stats_t hblenerr; /**< Number of packets dropped due to wrong
IP length, high byte. */
IP length, high byte. */
uip_stats_t lblenerr; /**< Number of packets dropped due to wrong
IP length, low byte. */
IP length, low byte. */
uip_stats_t fragerr; /**< Number of packets dropped because they
were IP fragments. */
were IP fragments. */
uip_stats_t chkerr; /**< Number of packets dropped due to IP
checksum errors. */
checksum errors. */
uip_stats_t protoerr; /**< Number of packets dropped because they
were neither ICMP, UDP nor TCP. */
were neither ICMP, UDP nor TCP. */
} ip; /**< IP statistics. */
struct {
uip_stats_t recv; /**< Number of received ICMP packets. */
uip_stats_t sent; /**< Number of sent ICMP packets. */
uip_stats_t drop; /**< Number of dropped ICMP packets. */
uip_stats_t typeerr; /**< Number of ICMP packets with a wrong
type. */
uip_stats_t chkerr; /**< Number of ICMP packets with a bad
checksum. */
uip_stats_t typeerr; /**< Number of ICMP packets with a wrong type. */
uip_stats_t chkerr; /**< Number of ICMP packets with a bad checksum. */
} icmp; /**< ICMP statistics. */
#if UIP_TCP
struct {
uip_stats_t recv; /**< Number of recived TCP segments. */
uip_stats_t sent; /**< Number of sent TCP segments. */
uip_stats_t drop; /**< Number of dropped TCP segments. */
uip_stats_t chkerr; /**< Number of TCP segments with a bad
checksum. */
uip_stats_t ackerr; /**< Number of TCP segments with a bad ACK
number. */
uip_stats_t chkerr; /**< Number of TCP segments with a bad checksum. */
uip_stats_t ackerr; /**< Number of TCP segments with a bad ACK number. */
uip_stats_t rst; /**< Number of received TCP RST (reset) segments. */
uip_stats_t rexmit; /**< Number of retransmitted TCP segments. */
uip_stats_t syndrop; /**< Number of dropped SYNs because too few
connections were available. */
connections were available. */
uip_stats_t synrst; /**< Number of SYNs for closed ports,
triggering a RST. */
triggering a RST. */
} tcp; /**< TCP statistics. */
#endif
#if UIP_UDP
@ -1517,7 +1498,7 @@ struct uip_stats {
uip_stats_t recv; /**< Number of recived UDP segments. */
uip_stats_t sent; /**< Number of sent UDP segments. */
uip_stats_t chkerr; /**< Number of UDP segments with a bad
checksum. */
checksum. */
} udp; /**< UDP statistics. */
#endif /* UIP_UDP */
#if NETSTACK_CONF_WITH_IPV6
@ -1554,33 +1535,33 @@ CCIF extern uint8_t uip_flags;
functions/macros. */
#define UIP_ACKDATA 1 /* Signifies that the outstanding data was
acked and the application should send
out new data instead of retransmitting
the last data. */
acked and the application should send
out new data instead of retransmitting
the last data. */
#define UIP_NEWDATA 2 /* Flags the fact that the peer has sent
us new data. */
us new data. */
#define UIP_REXMIT 4 /* Tells the application to retransmit the
data that was last sent. */
data that was last sent. */
#define UIP_POLL 8 /* Used for polling the application, to
check if the application has data that
it wants to send. */
check if the application has data that
it wants to send. */
#define UIP_CLOSE 16 /* The remote host has closed the
connection, thus the connection has
gone away. Or the application signals
that it wants to close the
connection. */
connection, thus the connection has
gone away. Or the application signals
that it wants to close the
connection. */
#define UIP_ABORT 32 /* The remote host has aborted the
connection, thus the connection has
gone away. Or the application signals
that it wants to abort the
connection. */
connection, thus the connection has
gone away. Or the application signals
that it wants to abort the
connection. */
#define UIP_CONNECTED 64 /* We have got a connection from a remote
host and have set up a new connection
for it, or an active connection has
been successfully established. */
#define UIP_TIMEDOUT 128 /* The connection has been aborted due to
too many retransmissions. */
too many retransmissions. */
/**
@ -1606,16 +1587,16 @@ void uip_process(uint8_t flag);
the macros defined in this file. */
#define UIP_DATA 1 /* Tells uIP that there is incoming
data in the uip_buf buffer. The
length of the data is stored in the
global variable uip_len. */
data in the uip_buf buffer. The
length of the data is stored in the
global variable uip_len. */
#define UIP_TIMER 2 /* Tells uIP that the periodic timer
has fired. */
has fired. */
#define UIP_POLL_REQUEST 3 /* Tells uIP that a connection should
be polled. */
be polled. */
#define UIP_UDP_SEND_CONN 4 /* Tells uIP that a UDP datagram
should be constructed in the
uip_buf buffer. */
should be constructed in the
uip_buf buffer. */
#if UIP_UDP
#define UIP_UDP_TIMER 5
#endif /* UIP_UDP */

View file

@ -52,9 +52,9 @@
* FOR HC-06 COMPLIANCE TODO:
* -Add compression options to UDP, currently only supports
* both ports compressed or both ports elided
*
*
* -Verify TC/FL compression works
*
*
* -Add stateless multicast option
*/
@ -317,7 +317,7 @@ set_packet_attrs()
/** Addresses contexts for IPHC. */
#if SICSLOWPAN_CONF_MAX_ADDR_CONTEXTS > 0
static struct sicslowpan_addr_context
static struct sicslowpan_addr_context
addr_contexts[SICSLOWPAN_CONF_MAX_ADDR_CONTEXTS];
#endif
@ -381,7 +381,7 @@ addr_context_lookup_by_prefix(uip_ipaddr_t *ipaddr)
static struct sicslowpan_addr_context*
addr_context_lookup_by_number(uint8_t number)
{
/* Remove code to avoid warnings and save flash if no context is used */
/* Remove code to avoid warnings and save flash if no context is used */
#if SICSLOWPAN_CONF_MAX_ADDR_CONTEXTS > 0
int i;
for(i = 0; i < SICSLOWPAN_CONF_MAX_ADDR_CONTEXTS; i++) {
@ -540,11 +540,11 @@ compress_hdr_hc06(linkaddr_t *link_destaddr)
* We have to process both in the same time as the offset of traffic class
* depends on the presence of version and flow label
*/
/* hc06 format of tc is ECN | DSCP , original is DSCP | ECN */
tmp = (UIP_IP_BUF->vtc << 4) | (UIP_IP_BUF->tcflow >> 4);
tmp = ((tmp & 0x03) << 6) | (tmp >> 2);
if(((UIP_IP_BUF->tcflow & 0x0F) == 0) &&
(UIP_IP_BUF->flow == 0)) {
/* flow label can be compressed */
@ -585,7 +585,7 @@ compress_hdr_hc06(linkaddr_t *link_destaddr)
iphc0 |= SICSLOWPAN_IPHC_NH_C;
}
#endif /*UIP_CONF_UDP*/
#ifdef SICSLOWPAN_NH_COMPRESSOR
#ifdef SICSLOWPAN_NH_COMPRESSOR
if(SICSLOWPAN_NH_COMPRESSOR.is_compressable(UIP_IP_BUF->proto)) {
iphc0 |= SICSLOWPAN_IPHC_NH_C;
}
@ -627,7 +627,7 @@ compress_hdr_hc06(linkaddr_t *link_destaddr)
!= NULL) {
/* elide the prefix - indicate by CID and set context + SAC */
PRINTF("IPHC: compressing src with context - setting CID & SAC ctx: %d\n",
context->number);
context->number);
iphc1 |= SICSLOWPAN_IPHC_CID | SICSLOWPAN_IPHC_SAC;
PACKETBUF_IPHC_BUF[2] |= context->number << 4;
/* compession compare with this nodes address (source) */
@ -636,9 +636,9 @@ compress_hdr_hc06(linkaddr_t *link_destaddr)
&UIP_IP_BUF->srcipaddr, &uip_lladdr);
/* No context found for this address */
} else if(uip_is_addr_linklocal(&UIP_IP_BUF->srcipaddr) &&
UIP_IP_BUF->destipaddr.u16[1] == 0 &&
UIP_IP_BUF->destipaddr.u16[2] == 0 &&
UIP_IP_BUF->destipaddr.u16[3] == 0) {
UIP_IP_BUF->destipaddr.u16[1] == 0 &&
UIP_IP_BUF->destipaddr.u16[2] == 0 &&
UIP_IP_BUF->destipaddr.u16[3] == 0) {
iphc1 |= compress_addr_64(SICSLOWPAN_IPHC_SAM_BIT,
&UIP_IP_BUF->srcipaddr, &uip_lladdr);
} else {
@ -684,12 +684,13 @@ compress_hdr_hc06(linkaddr_t *link_destaddr)
/* compession compare with link adress (destination) */
iphc1 |= compress_addr_64(SICSLOWPAN_IPHC_DAM_BIT,
&UIP_IP_BUF->destipaddr, (uip_lladdr_t *)link_destaddr);
&UIP_IP_BUF->destipaddr,
(uip_lladdr_t *)link_destaddr);
/* No context found for this address */
} else if(uip_is_addr_linklocal(&UIP_IP_BUF->destipaddr) &&
UIP_IP_BUF->destipaddr.u16[1] == 0 &&
UIP_IP_BUF->destipaddr.u16[2] == 0 &&
UIP_IP_BUF->destipaddr.u16[3] == 0) {
UIP_IP_BUF->destipaddr.u16[1] == 0 &&
UIP_IP_BUF->destipaddr.u16[2] == 0 &&
UIP_IP_BUF->destipaddr.u16[3] == 0) {
iphc1 |= compress_addr_64(SICSLOWPAN_IPHC_DAM_BIT,
&UIP_IP_BUF->destipaddr, (uip_lladdr_t *)link_destaddr);
} else {
@ -706,7 +707,7 @@ compress_hdr_hc06(linkaddr_t *link_destaddr)
/* UDP header compression */
if(UIP_IP_BUF->proto == UIP_PROTO_UDP) {
PRINTF("IPHC: Uncompressed UDP ports on send side: %x, %x\n",
UIP_HTONS(UIP_UDP_BUF->srcport), UIP_HTONS(UIP_UDP_BUF->destport));
UIP_HTONS(UIP_UDP_BUF->srcport), UIP_HTONS(UIP_UDP_BUF->destport));
/* Mask out the last 4 bits can be used as a mask */
if(((UIP_HTONS(UIP_UDP_BUF->srcport) & 0xfff0) == SICSLOWPAN_UDP_4_BIT_PORT_MIN) &&
((UIP_HTONS(UIP_UDP_BUF->destport) & 0xfff0) == SICSLOWPAN_UDP_4_BIT_PORT_MIN)) {
@ -714,10 +715,10 @@ compress_hdr_hc06(linkaddr_t *link_destaddr)
*hc06_ptr = SICSLOWPAN_NHC_UDP_CS_P_11;
PRINTF("IPHC: remove 12 b of both source & dest with prefix 0xFOB\n");
*(hc06_ptr + 1) =
(uint8_t)((UIP_HTONS(UIP_UDP_BUF->srcport) -
SICSLOWPAN_UDP_4_BIT_PORT_MIN) << 4) +
(uint8_t)((UIP_HTONS(UIP_UDP_BUF->destport) -
SICSLOWPAN_UDP_4_BIT_PORT_MIN));
(uint8_t)((UIP_HTONS(UIP_UDP_BUF->srcport) -
SICSLOWPAN_UDP_4_BIT_PORT_MIN) << 4) +
(uint8_t)((UIP_HTONS(UIP_UDP_BUF->destport) -
SICSLOWPAN_UDP_4_BIT_PORT_MIN));
hc06_ptr += 2;
} else if((UIP_HTONS(UIP_UDP_BUF->destport) & 0xff00) == SICSLOWPAN_UDP_8_BIT_PORT_MIN) {
/* we can compress 8 bits of dest, leave source. */
@ -725,16 +726,16 @@ compress_hdr_hc06(linkaddr_t *link_destaddr)
PRINTF("IPHC: leave source, remove 8 bits of dest with prefix 0xF0\n");
memcpy(hc06_ptr + 1, &UIP_UDP_BUF->srcport, 2);
*(hc06_ptr + 3) =
(uint8_t)((UIP_HTONS(UIP_UDP_BUF->destport) -
SICSLOWPAN_UDP_8_BIT_PORT_MIN));
(uint8_t)((UIP_HTONS(UIP_UDP_BUF->destport) -
SICSLOWPAN_UDP_8_BIT_PORT_MIN));
hc06_ptr += 4;
} else if((UIP_HTONS(UIP_UDP_BUF->srcport) & 0xff00) == SICSLOWPAN_UDP_8_BIT_PORT_MIN) {
/* we can compress 8 bits of src, leave dest. Copy compressed port */
*hc06_ptr = SICSLOWPAN_NHC_UDP_CS_P_10;
PRINTF("IPHC: remove 8 bits of source with prefix 0xF0, leave dest. hch: %i\n", *hc06_ptr);
*(hc06_ptr + 1) =
(uint8_t)((UIP_HTONS(UIP_UDP_BUF->srcport) -
SICSLOWPAN_UDP_8_BIT_PORT_MIN));
(uint8_t)((UIP_HTONS(UIP_UDP_BUF->srcport) -
SICSLOWPAN_UDP_8_BIT_PORT_MIN));
memcpy(hc06_ptr + 2, &UIP_UDP_BUF->destport, 2);
hc06_ptr += 4;
} else {
@ -811,13 +812,13 @@ uncompress_hdr_hc06(uint16_t ip_len)
SICSLOWPAN_IP_BUF->vtc = 0x60 | ((tmp >> 2) & 0x0f);
/* ECN rolled down two steps + lowest DSCP bits at top two bits */
SICSLOWPAN_IP_BUF->tcflow = ((tmp >> 2) & 0x30) | (tmp << 6) |
(SICSLOWPAN_IP_BUF->tcflow & 0x0f);
(SICSLOWPAN_IP_BUF->tcflow & 0x0f);
} else {
/* Traffic class is compressed (set version and no TC)*/
SICSLOWPAN_IP_BUF->vtc = 0x60;
/* highest flow label bits + ECN bits */
SICSLOWPAN_IP_BUF->tcflow = (*hc06_ptr & 0x0F) |
((*hc06_ptr >> 2) & 0x30);
((*hc06_ptr >> 2) & 0x30);
memcpy(&SICSLOWPAN_IP_BUF->flow, hc06_ptr + 1, 2);
hc06_ptr += 3;
}
@ -908,14 +909,13 @@ uncompress_hdr_hc06(uint16_t ip_len)
/* no multicast */
/* Context based */
if(iphc1 & SICSLOWPAN_IPHC_DAC) {
uint8_t dci = (iphc1 & SICSLOWPAN_IPHC_CID) ?
PACKETBUF_IPHC_BUF[2] & 0x0f : 0;
uint8_t dci = (iphc1 & SICSLOWPAN_IPHC_CID) ? PACKETBUF_IPHC_BUF[2] & 0x0f : 0;
context = addr_context_lookup_by_number(dci);
/* all valid cases below need the context! */
if(context == NULL) {
PRINTF("sicslowpan uncompress_hdr: error context not found\n");
return;
PRINTF("sicslowpan uncompress_hdr: error context not found\n");
return;
}
uncompress_addr(&SICSLOWPAN_IP_BUF->destipaddr, context->prefix,
unc_ctxconf[tmp],
@ -939,56 +939,56 @@ uncompress_hdr_hc06(uint16_t ip_len)
PRINTF("IPHC: Incoming header value: %i\n", *hc06_ptr);
switch(*hc06_ptr & SICSLOWPAN_NHC_UDP_CS_P_11) {
case SICSLOWPAN_NHC_UDP_CS_P_00:
/* 1 byte for NHC, 4 byte for ports, 2 bytes chksum */
memcpy(&SICSLOWPAN_UDP_BUF->srcport, hc06_ptr + 1, 2);
memcpy(&SICSLOWPAN_UDP_BUF->destport, hc06_ptr + 3, 2);
PRINTF("IPHC: Uncompressed UDP ports (ptr+5): %x, %x\n",
UIP_HTONS(SICSLOWPAN_UDP_BUF->srcport), UIP_HTONS(SICSLOWPAN_UDP_BUF->destport));
hc06_ptr += 5;
break;
/* 1 byte for NHC, 4 byte for ports, 2 bytes chksum */
memcpy(&SICSLOWPAN_UDP_BUF->srcport, hc06_ptr + 1, 2);
memcpy(&SICSLOWPAN_UDP_BUF->destport, hc06_ptr + 3, 2);
PRINTF("IPHC: Uncompressed UDP ports (ptr+5): %x, %x\n",
UIP_HTONS(SICSLOWPAN_UDP_BUF->srcport), UIP_HTONS(SICSLOWPAN_UDP_BUF->destport));
hc06_ptr += 5;
break;
case SICSLOWPAN_NHC_UDP_CS_P_01:
/* 1 byte for NHC + source 16bit inline, dest = 0xF0 + 8 bit inline */
PRINTF("IPHC: Decompressing destination\n");
memcpy(&SICSLOWPAN_UDP_BUF->srcport, hc06_ptr + 1, 2);
SICSLOWPAN_UDP_BUF->destport = UIP_HTONS(SICSLOWPAN_UDP_8_BIT_PORT_MIN + (*(hc06_ptr + 3)));
PRINTF("IPHC: Uncompressed UDP ports (ptr+4): %x, %x\n",
UIP_HTONS(SICSLOWPAN_UDP_BUF->srcport), UIP_HTONS(SICSLOWPAN_UDP_BUF->destport));
hc06_ptr += 4;
break;
PRINTF("IPHC: Decompressing destination\n");
memcpy(&SICSLOWPAN_UDP_BUF->srcport, hc06_ptr + 1, 2);
SICSLOWPAN_UDP_BUF->destport = UIP_HTONS(SICSLOWPAN_UDP_8_BIT_PORT_MIN + (*(hc06_ptr + 3)));
PRINTF("IPHC: Uncompressed UDP ports (ptr+4): %x, %x\n",
UIP_HTONS(SICSLOWPAN_UDP_BUF->srcport), UIP_HTONS(SICSLOWPAN_UDP_BUF->destport));
hc06_ptr += 4;
break;
case SICSLOWPAN_NHC_UDP_CS_P_10:
/* 1 byte for NHC + source = 0xF0 + 8bit inline, dest = 16 bit inline*/
PRINTF("IPHC: Decompressing source\n");
SICSLOWPAN_UDP_BUF->srcport = UIP_HTONS(SICSLOWPAN_UDP_8_BIT_PORT_MIN +
(*(hc06_ptr + 1)));
memcpy(&SICSLOWPAN_UDP_BUF->destport, hc06_ptr + 2, 2);
PRINTF("IPHC: Uncompressed UDP ports (ptr+4): %x, %x\n",
UIP_HTONS(SICSLOWPAN_UDP_BUF->srcport), UIP_HTONS(SICSLOWPAN_UDP_BUF->destport));
hc06_ptr += 4;
break;
PRINTF("IPHC: Decompressing source\n");
SICSLOWPAN_UDP_BUF->srcport = UIP_HTONS(SICSLOWPAN_UDP_8_BIT_PORT_MIN +
(*(hc06_ptr + 1)));
memcpy(&SICSLOWPAN_UDP_BUF->destport, hc06_ptr + 2, 2);
PRINTF("IPHC: Uncompressed UDP ports (ptr+4): %x, %x\n",
UIP_HTONS(SICSLOWPAN_UDP_BUF->srcport), UIP_HTONS(SICSLOWPAN_UDP_BUF->destport));
hc06_ptr += 4;
break;
case SICSLOWPAN_NHC_UDP_CS_P_11:
/* 1 byte for NHC, 1 byte for ports */
SICSLOWPAN_UDP_BUF->srcport = UIP_HTONS(SICSLOWPAN_UDP_4_BIT_PORT_MIN +
(*(hc06_ptr + 1) >> 4));
SICSLOWPAN_UDP_BUF->destport = UIP_HTONS(SICSLOWPAN_UDP_4_BIT_PORT_MIN +
((*(hc06_ptr + 1)) & 0x0F));
PRINTF("IPHC: Uncompressed UDP ports (ptr+2): %x, %x\n",
UIP_HTONS(SICSLOWPAN_UDP_BUF->srcport), UIP_HTONS(SICSLOWPAN_UDP_BUF->destport));
hc06_ptr += 2;
break;
/* 1 byte for NHC, 1 byte for ports */
SICSLOWPAN_UDP_BUF->srcport = UIP_HTONS(SICSLOWPAN_UDP_4_BIT_PORT_MIN +
(*(hc06_ptr + 1) >> 4));
SICSLOWPAN_UDP_BUF->destport = UIP_HTONS(SICSLOWPAN_UDP_4_BIT_PORT_MIN +
((*(hc06_ptr + 1)) & 0x0F));
PRINTF("IPHC: Uncompressed UDP ports (ptr+2): %x, %x\n",
UIP_HTONS(SICSLOWPAN_UDP_BUF->srcport), UIP_HTONS(SICSLOWPAN_UDP_BUF->destport));
hc06_ptr += 2;
break;
default:
PRINTF("sicslowpan uncompress_hdr: error unsupported UDP compression\n");
return;
PRINTF("sicslowpan uncompress_hdr: error unsupported UDP compression\n");
return;
}
if(!checksum_compressed) { /* has_checksum, default */
memcpy(&SICSLOWPAN_UDP_BUF->udpchksum, hc06_ptr, 2);
hc06_ptr += 2;
PRINTF("IPHC: sicslowpan uncompress_hdr: checksum included\n");
memcpy(&SICSLOWPAN_UDP_BUF->udpchksum, hc06_ptr, 2);
hc06_ptr += 2;
PRINTF("IPHC: sicslowpan uncompress_hdr: checksum included\n");
} else {
PRINTF("IPHC: sicslowpan uncompress_hdr: checksum *NOT* included\n");
PRINTF("IPHC: sicslowpan uncompress_hdr: checksum *NOT* included\n");
}
uncomp_hdr_len += UIP_UDPH_LEN;
}
@ -1000,7 +1000,7 @@ uncompress_hdr_hc06(uint16_t ip_len)
}
packetbuf_hdr_len = hc06_ptr - packetbuf_ptr;
/* IP length field. */
if(ip_len == 0) {
int len = packetbuf_datalen() - packetbuf_hdr_len + uncomp_hdr_len - UIP_IPH_LEN;
@ -1012,7 +1012,7 @@ uncompress_hdr_hc06(uint16_t ip_len)
SICSLOWPAN_IP_BUF->len[0] = (ip_len - UIP_IPH_LEN) >> 8;
SICSLOWPAN_IP_BUF->len[1] = (ip_len - UIP_IPH_LEN) & 0x00FF;
}
/* length field in UDP header */
if(SICSLOWPAN_IP_BUF->proto == UIP_PROTO_UDP) {
memcpy(&SICSLOWPAN_UDP_BUF->udplen, &SICSLOWPAN_IP_BUF->len[0], 2);
@ -1144,7 +1144,7 @@ compress_hdr_hc1(linkaddr_t *link_destaddr)
UIP_HTONS(UIP_UDP_BUF->destport) < SICSLOWPAN_UDP_PORT_MAX) {
/* HC1 encoding */
PACKETBUF_HC1_HC_UDP_PTR[PACKETBUF_HC1_HC_UDP_HC1_ENCODING] = 0xFB;
/* HC_UDP encoding, ttl, src and dest ports, checksum */
PACKETBUF_HC1_HC_UDP_PTR[PACKETBUF_HC1_HC_UDP_UDP_ENCODING] = 0xE0;
PACKETBUF_HC1_HC_UDP_PTR[PACKETBUF_HC1_HC_UDP_TTL] = UIP_IP_BUF->ttl;
@ -1192,17 +1192,17 @@ uncompress_hdr_hc1(uint16_t ip_len)
SICSLOWPAN_IP_BUF->vtc = 0x60;
SICSLOWPAN_IP_BUF->tcflow = 0;
SICSLOWPAN_IP_BUF->flow = 0;
/* src and dest ip addresses */
uip_ip6addr(&SICSLOWPAN_IP_BUF->srcipaddr, 0xfe80, 0, 0, 0, 0, 0, 0, 0);
uip_ds6_set_addr_iid(&SICSLOWPAN_IP_BUF->srcipaddr,
(uip_lladdr_t *)packetbuf_addr(PACKETBUF_ADDR_SENDER));
(uip_lladdr_t *)packetbuf_addr(PACKETBUF_ADDR_SENDER));
uip_ip6addr(&SICSLOWPAN_IP_BUF->destipaddr, 0xfe80, 0, 0, 0, 0, 0, 0, 0);
uip_ds6_set_addr_iid(&SICSLOWPAN_IP_BUF->destipaddr,
(uip_lladdr_t *)packetbuf_addr(PACKETBUF_ADDR_RECEIVER));
(uip_lladdr_t *)packetbuf_addr(PACKETBUF_ADDR_RECEIVER));
uncomp_hdr_len += UIP_IPH_LEN;
/* Next header field */
switch(PACKETBUF_HC1_PTR[PACKETBUF_HC1_ENCODING] & 0x06) {
case SICSLOWPAN_HC1_NH_ICMP6:
@ -1248,7 +1248,7 @@ uncompress_hdr_hc1(uint16_t ip_len)
/* this shouldn't happen, drop */
return;
}
/* IP length field. */
if(ip_len == 0) {
int len = packetbuf_datalen() - packetbuf_hdr_len + uncomp_hdr_len - UIP_IPH_LEN;
@ -1412,7 +1412,7 @@ output(const uip_lladdr_t *localdest)
} else {
linkaddr_copy(&dest, (const linkaddr_t *)localdest);
}
PRINTFO("sicslowpan output: sending packet len %d\n", uip_len);
if(uip_len >= COMPRESSION_THRESHOLD) {
@ -1512,7 +1512,7 @@ output(const uip_lladdr_t *localdest)
/* set processed_ip_out_len to what we already sent from the IP payload*/
processed_ip_out_len = packetbuf_payload_len + uncomp_hdr_len;
/*
* Create following fragments
* Datagram tag is already in the buffer, we need to set the
@ -1527,7 +1527,7 @@ output(const uip_lladdr_t *localdest)
while(processed_ip_out_len < uip_len) {
PRINTFO("sicslowpan output: fragment ");
PACKETBUF_FRAG_PTR[PACKETBUF_FRAG_OFFSET] = processed_ip_out_len >> 3;
/* Copy payload and send */
if(uip_len - processed_ip_out_len < packetbuf_payload_len) {
/* last fragment */
@ -1759,8 +1759,8 @@ input(void)
PACKETBUF_HC1_PTR[PACKETBUF_HC1_DISPATCH]);
return;
}
#if SICSLOWPAN_CONF_FRAG
copypayload:
#endif /*SICSLOWPAN_CONF_FRAG*/
@ -1791,7 +1791,7 @@ input(void)
}
memcpy((uint8_t *)SICSLOWPAN_IP_BUF + uncomp_hdr_len + (uint16_t)(frag_offset << 3), packetbuf_ptr + packetbuf_hdr_len, packetbuf_payload_len);
/* update processed_ip_in_len if fragment, sicslowpan_len otherwise */
#if SICSLOWPAN_CONF_FRAG
@ -1873,13 +1873,13 @@ sicslowpan_init(void)
* The platform contiki-conf.h file can override this using e.g.
* #define SICSLOWPAN_CONF_ADDR_CONTEXT_0 {addr_contexts[0].prefix[0]=0xbb;addr_contexts[0].prefix[1]=0xbb;}
*/
#if SICSLOWPAN_CONF_MAX_ADDR_CONTEXTS > 0
#if SICSLOWPAN_CONF_MAX_ADDR_CONTEXTS > 0
addr_contexts[0].used = 1;
addr_contexts[0].number = 0;
#ifdef SICSLOWPAN_CONF_ADDR_CONTEXT_0
SICSLOWPAN_CONF_ADDR_CONTEXT_0;
SICSLOWPAN_CONF_ADDR_CONTEXT_0;
#else
addr_contexts[0].prefix[0] = 0xaa;
addr_contexts[0].prefix[0] = 0xaa;
addr_contexts[0].prefix[1] = 0xaa;
#endif
#endif /* SICSLOWPAN_CONF_MAX_ADDR_CONTEXTS > 0 */
@ -1889,23 +1889,22 @@ sicslowpan_init(void)
int i;
for(i = 1; i < SICSLOWPAN_CONF_MAX_ADDR_CONTEXTS; i++) {
#ifdef SICSLOWPAN_CONF_ADDR_CONTEXT_1
if (i==1) {
addr_contexts[1].used = 1;
addr_contexts[1].number = 1;
SICSLOWPAN_CONF_ADDR_CONTEXT_1;
if (i==1) {
addr_contexts[1].used = 1;
addr_contexts[1].number = 1;
SICSLOWPAN_CONF_ADDR_CONTEXT_1;
#ifdef SICSLOWPAN_CONF_ADDR_CONTEXT_2
} else if (i==2) {
addr_contexts[2].used = 1;
addr_contexts[2].number = 2;
SICSLOWPAN_CONF_ADDR_CONTEXT_2;
addr_contexts[2].used = 1;
addr_contexts[2].number = 2;
SICSLOWPAN_CONF_ADDR_CONTEXT_2;
#endif
} else {
addr_contexts[i].used = 0;
}
}
#else
addr_contexts[i].used = 0;
#endif /* SICSLOWPAN_CONF_ADDR_CONTEXT_1 */
}
}
#endif /* SICSLOWPAN_CONF_MAX_ADDR_CONTEXTS > 1 */

View file

@ -203,18 +203,18 @@ uip_ds6_link_neighbor_callback(int status, int numtx)
#if UIP_DS6_LL_NUD
/* From RFC4861, page 72, last paragraph of section 7.3.3:
*
* "In some cases, link-specific information may indicate that a path to
* a neighbor has failed (e.g., the resetting of a virtual circuit). In
* such cases, link-specific information may be used to purge Neighbor
* Cache entries before the Neighbor Unreachability Detection would do
* so. However, link-specific information MUST NOT be used to confirm
* the reachability of a neighbor; such information does not provide
* end-to-end confirmation between neighboring IP layers."
* "In some cases, link-specific information may indicate that a path to
* a neighbor has failed (e.g., the resetting of a virtual circuit). In
* such cases, link-specific information may be used to purge Neighbor
* Cache entries before the Neighbor Unreachability Detection would do
* so. However, link-specific information MUST NOT be used to confirm
* the reachability of a neighbor; such information does not provide
* end-to-end confirmation between neighboring IP layers."
*
* However, we assume that receiving a link layer ack ensures the delivery
* of the transmitted packed to the IP stack of the neighbour. This is a
* fair assumption and allows battery powered nodes save some battery by
* not re-testing the state of a neighbour periodically if it
* of the transmitted packed to the IP stack of the neighbour. This is a
* fair assumption and allows battery powered nodes save some battery by
* not re-testing the state of a neighbour periodically if it
* acknowledges link packets. */
if(status == MAC_TX_OK) {
uip_ds6_nbr_t *nbr;

View file

@ -297,9 +297,9 @@ uip_ds6_prefix_t *
uip_ds6_prefix_lookup(uip_ipaddr_t *ipaddr, uint8_t ipaddrlen)
{
if(uip_ds6_list_loop((uip_ds6_element_t *)uip_ds6_prefix_list,
UIP_DS6_PREFIX_NB, sizeof(uip_ds6_prefix_t),
ipaddr, ipaddrlen,
(uip_ds6_element_t **)&locprefix) == FOUND) {
UIP_DS6_PREFIX_NB, sizeof(uip_ds6_prefix_t),
ipaddr, ipaddrlen,
(uip_ds6_element_t **)&locprefix) == FOUND) {
return locprefix;
}
return NULL;
@ -489,8 +489,8 @@ uip_ds6_aaddr_lookup(uip_ipaddr_t *ipaddr)
{
#if UIP_DS6_AADDR_NB
if(uip_ds6_list_loop((uip_ds6_element_t *)uip_ds6_if.aaddr_list,
UIP_DS6_AADDR_NB, sizeof(uip_ds6_aaddr_t), ipaddr, 128,
(uip_ds6_element_t **)&locaaddr) == FOUND) {
UIP_DS6_AADDR_NB, sizeof(uip_ds6_aaddr_t), ipaddr, 128,
(uip_ds6_element_t **)&locaaddr) == FOUND) {
return locaaddr;
}
#endif /* UIP_DS6_AADDR_NB */

View file

@ -93,7 +93,7 @@ void uip_log(char *msg);
/** \name Pointers to the header structures.
* All pointers except UIP_IP_BUF depend on uip_ext_len, which at
* packet reception, is the total length of the extension headers.
*
*
* The pointer to ND6 options header also depends on nd6_opt_offset,
* which we set in each function.
*
@ -143,7 +143,7 @@ extract_lladdr_aligned(uip_lladdr_t *dest) {
}
#endif /* UIP_ND6_SEND_NA || UIP_ND6_SEND_RA || !UIP_CONF_ROUTER */
/*------------------------------------------------------------------*/
/* create a llao */
/* create a llao */
static void
create_llao(uint8_t *llao, uint8_t type) {
llao[UIP_ND6_OPT_TYPE_OFFSET] = type;
@ -361,7 +361,7 @@ uip_nd6_ns_output(uip_ipaddr_t * src, uip_ipaddr_t * dest, uip_ipaddr_t * tgt)
UIP_IP_BUF->len[0] = 0; /* length will not be more than 255 */
/*
* check if we add a SLLAO option: for DAD, MUST NOT, for NUD, MAY
* (here yes), for Address resolution , MUST
* (here yes), for Address resolution , MUST
*/
if(!(uip_ds6_is_my_addr(tgt))) {
if(src != NULL) {
@ -378,7 +378,7 @@ uip_nd6_ns_output(uip_ipaddr_t * src, uip_ipaddr_t * dest, uip_ipaddr_t * tgt)
UIP_ICMPH_LEN + UIP_ND6_NS_LEN + UIP_ND6_OPT_LLAO_LEN;
create_llao(&uip_buf[uip_l2_l3_icmp_hdr_len + UIP_ND6_NS_LEN],
UIP_ND6_OPT_SLLAO);
UIP_ND6_OPT_SLLAO);
uip_len =
UIP_IPH_LEN + UIP_ICMPH_LEN + UIP_ND6_NS_LEN + UIP_ND6_OPT_LLAO_LEN;
@ -437,9 +437,9 @@ na_input(void)
PRINTF("\n");
UIP_STAT(++uip_stat.nd6.recv);
/*
/*
* booleans. the three last one are not 0 or 1 but 0 or 0x80, 0x40, 0x20
* but it works. Be careful though, do not use tests such as is_router == 1
* but it works. Be careful though, do not use tests such as is_router == 1
*/
is_llchange = 0;
is_router = ((UIP_ND6_NA_BUF->flagsreserved & UIP_ND6_NA_FLAG_ROUTER));
@ -505,7 +505,7 @@ na_input(void)
goto discard;
}
memcpy(lladdr, &nd6_opt_llao[UIP_ND6_OPT_DATA_OFFSET],
UIP_LLADDR_LEN);
UIP_LLADDR_LEN);
if(is_solicited) {
nbr->state = NBR_REACHABLE;
nbr->nscount = 0;
@ -528,7 +528,7 @@ na_input(void)
|| nd6_opt_llao == 0) {
if(nd6_opt_llao != 0) {
memcpy(lladdr, &nd6_opt_llao[UIP_ND6_OPT_DATA_OFFSET],
UIP_LLADDR_LEN);
UIP_LLADDR_LEN);
}
if(is_solicited) {
nbr->state = NBR_REACHABLE;
@ -564,7 +564,7 @@ na_input(void)
uip_packetqueue_free(&nbr->packethandle);
return;
}
#endif /*UIP_CONF_IPV6_QUEUE_PKT */
discard:
@ -590,7 +590,7 @@ rs_input(void)
#if UIP_CONF_IPV6_CHECKS
/*
* Check hop limit / icmp code
* Check hop limit / icmp code
* target address must not be multicast
* if the NA is solicited, dest must not be multicast
*/
@ -796,7 +796,7 @@ uip_nd6_rs_output(void)
UIP_ICMPH_LEN + UIP_ND6_RS_LEN + UIP_ND6_OPT_LLAO_LEN;
create_llao(&uip_buf[uip_l2_l3_icmp_hdr_len + UIP_ND6_RS_LEN],
UIP_ND6_OPT_SLLAO);
UIP_ND6_OPT_SLLAO);
}
UIP_ICMP_BUF->icmpchksum = 0;
@ -877,9 +877,9 @@ ra_input(void)
nbr->state = NBR_STALE;
}
if(memcmp(&nd6_opt_llao[UIP_ND6_OPT_DATA_OFFSET],
lladdr, UIP_LLADDR_LEN) != 0) {
lladdr, UIP_LLADDR_LEN) != 0) {
memcpy(lladdr, &nd6_opt_llao[UIP_ND6_OPT_DATA_OFFSET],
UIP_LLADDR_LEN);
UIP_LLADDR_LEN);
nbr->state = NBR_STALE;
}
nbr->isrouter = 1;
@ -937,7 +937,7 @@ ra_input(void)
if((nd6_opt_prefix_info->flagsreserved1 & UIP_ND6_RA_FLAG_AUTONOMOUS)
&& (nd6_opt_prefix_info->validlt != 0)
&& (nd6_opt_prefix_info->preflen == UIP_DEFAULT_PREFIX_LEN)) {
uip_ipaddr_copy(&ipaddr, &nd6_opt_prefix_info->prefix);
uip_ds6_set_addr_iid(&ipaddr, &uip_lladdr);
addr = uip_ds6_addr_lookup(&ipaddr);

View file

@ -128,9 +128,9 @@
#endif
#ifdef UIP_CONF_ND6_RETRANS_TIMER
#define UIP_ND6_RETRANS_TIMER UIP_CONF_ND6_RETRANS_TIMER
#define UIP_ND6_RETRANS_TIMER UIP_CONF_ND6_RETRANS_TIMER
#else
#define UIP_ND6_RETRANS_TIMER 1000
#define UIP_ND6_RETRANS_TIMER 1000
#endif
#define UIP_ND6_DELAY_FIRST_PROBE_TIME 5

View file

@ -103,7 +103,7 @@ void uip_log(char *msg);
#if UIP_STATISTICS == 1
struct uip_stats uip_stat;
#endif /* UIP_STATISTICS == 1 */
/*---------------------------------------------------------------------------*/
/**
@ -299,15 +299,15 @@ uip_add32(uint8_t *op32, uint16_t op16)
uip_acc32[2] = op32[2] + (op16 >> 8);
uip_acc32[1] = op32[1];
uip_acc32[0] = op32[0];
if(uip_acc32[2] < (op16 >> 8)) {
++uip_acc32[1];
if(uip_acc32[1] == 0) {
++uip_acc32[0];
}
}
if(uip_acc32[3] < (op16 & 0xff)) {
++uip_acc32[2];
if(uip_acc32[2] == 0) {
@ -332,7 +332,7 @@ chksum(uint16_t sum, const uint8_t *data, uint16_t len)
dataptr = data;
last_byte = data + len - 1;
while(dataptr < last_byte) { /* At least two more bytes */
t = (dataptr[0] << 8) + dataptr[1];
sum += t;
@ -341,7 +341,7 @@ chksum(uint16_t sum, const uint8_t *data, uint16_t len)
}
dataptr += 2;
}
if(dataptr == last_byte) {
t = (dataptr[0] << 8) + 0;
sum += t;
@ -386,11 +386,11 @@ upper_layer_chksum(uint8_t proto)
*/
volatile uint16_t upper_layer_len;
uint16_t sum;
upper_layer_len = (((uint16_t)(UIP_IP_BUF->len[0]) << 8) + UIP_IP_BUF->len[1] - uip_ext_len);
PRINTF("Upper layer checksum len: %d from: %d\n", upper_layer_len,
UIP_IPH_LEN + UIP_LLH_LEN + uip_ext_len);
UIP_IPH_LEN + UIP_LLH_LEN + uip_ext_len);
/* First sum pseudoheader. */
/* IP protocol and length fields. This addition cannot carry. */
@ -401,7 +401,7 @@ upper_layer_chksum(uint8_t proto)
/* Sum TCP header and data. */
sum = chksum(sum, &uip_buf[UIP_IPH_LEN + UIP_LLH_LEN + uip_ext_len],
upper_layer_len);
return (sum == 0) ? 0xffff : uip_htons(sum);
}
/*---------------------------------------------------------------------------*/
@ -409,7 +409,7 @@ uint16_t
uip_icmp6chksum(void)
{
return upper_layer_chksum(UIP_PROTO_ICMP6);
}
/*---------------------------------------------------------------------------*/
#if UIP_TCP
@ -432,7 +432,7 @@ uip_udpchksum(void)
void
uip_init(void)
{
uip_ds6_init();
uip_icmp6_init();
uip_nd6_init();
@ -466,7 +466,7 @@ struct uip_conn *
uip_connect(const uip_ipaddr_t *ripaddr, uint16_t rport)
{
register struct uip_conn *conn, *cconn;
/* Find an unused local port. */
again:
++lastport;
@ -503,7 +503,7 @@ uip_connect(const uip_ipaddr_t *ripaddr, uint16_t rport)
if(conn == 0) {
return 0;
}
conn->tcpstateflags = UIP_SYN_SENT;
conn->snd_nxt[0] = iss[0];
@ -517,7 +517,7 @@ uip_connect(const uip_ipaddr_t *ripaddr, uint16_t rport)
conn->rcv_nxt[3] = 0;
conn->initialmss = conn->mss = UIP_TCP_MSS;
conn->len = 1; /* TCP length of the SYN is one. */
conn->nrtx = 0;
conn->timer = 1; /* Send the SYN next time around. */
@ -527,7 +527,7 @@ uip_connect(const uip_ipaddr_t *ripaddr, uint16_t rport)
conn->lport = uip_htons(lastport);
conn->rport = rport;
uip_ipaddr_copy(&conn->ripaddr, ripaddr);
return conn;
}
#endif /* UIP_TCP && UIP_ACTIVE_OPEN */
@ -538,14 +538,14 @@ remove_ext_hdr(void)
/* Remove ext header before TCP/UDP processing. */
if(uip_ext_len > 0) {
PRINTF("Cutting ext-header before processing (extlen: %d, uiplen: %d)\n",
uip_ext_len, uip_len);
uip_ext_len, uip_len);
if(uip_len < UIP_IPH_LEN + uip_ext_len) {
PRINTF("ERROR: uip_len too short compared to ext len\n");
uip_clear_buf();
return;
}
memmove(((uint8_t *)UIP_TCP_BUF), (uint8_t *)UIP_TCP_BUF + uip_ext_len,
uip_len - UIP_IPH_LEN - uip_ext_len);
uip_len - UIP_IPH_LEN - uip_ext_len);
uip_len -= uip_ext_len;
@ -561,7 +561,7 @@ struct uip_udp_conn *
uip_udp_new(const uip_ipaddr_t *ripaddr, uint16_t rport)
{
register struct uip_udp_conn *conn;
/* Find an unused local port. */
again:
++lastport;
@ -569,7 +569,7 @@ uip_udp_new(const uip_ipaddr_t *ripaddr, uint16_t rport)
if(lastport >= 32000) {
lastport = 4096;
}
for(c = 0; c < UIP_UDP_CONNS; ++c) {
if(uip_udp_conns[c].lport == uip_htons(lastport)) {
goto again;
@ -587,7 +587,7 @@ uip_udp_new(const uip_ipaddr_t *ripaddr, uint16_t rport)
if(conn == 0) {
return 0;
}
conn->lport = UIP_HTONS(lastport);
conn->rport = rport;
if(ripaddr == NULL) {
@ -596,7 +596,7 @@ uip_udp_new(const uip_ipaddr_t *ripaddr, uint16_t rport)
uip_ipaddr_copy(&conn->ripaddr, ripaddr);
}
conn->ttl = uip_ds6_if.cur_hop_limit;
return conn;
}
#endif /* UIP_UDP */
@ -668,7 +668,7 @@ uip_reass(void)
uint16_t offset=0;
uint16_t len;
uint16_t i;
/* If ip_reasstmr is zero, no packet is present in the buffer */
/* We first write the unfragmentable part of IP header into the reassembly
buffer. The reset the other reassembly variables. */
@ -710,9 +710,9 @@ uip_reass(void)
PRINTF("dest ");
PRINT6ADDR(&FBUF->destipaddr);
PRINTF("next %d\n", UIP_IP_BUF->proto);
}
/* If the offset or the offset + fragment length overflows the
reassembly buffer, we discard the entire packet. */
if(offset > UIP_REASS_BUFSIZE ||
@ -744,12 +744,12 @@ uip_reass(void)
return uip_len;
}
}
/* Copy the fragment into the reassembly buffer, at the right
offset. */
memcpy((uint8_t *)FBUF + UIP_IPH_LEN + uip_ext_len + offset,
(uint8_t *)UIP_FRAG_BUF + UIP_FRAGH_LEN, len);
/* Update the bitmap. */
if(offset >> 6 == (offset + len) >> 6) {
uip_reassbitmap[offset >> 6] |=
@ -760,18 +760,18 @@ uip_reass(void)
bytes in the endpoints and fill the stuff inbetween with
0xff. */
uip_reassbitmap[offset >> 6] |= bitmap_bits[(offset >> 3) & 7];
for(i = (1 + (offset >> 6)); i < ((offset + len) >> 6); ++i) {
uip_reassbitmap[i] = 0xff;
}
uip_reassbitmap[(offset + len) >> 6] |=
~bitmap_bits[((offset + len) >> 3) & 7];
}
/* Finally, we check if we have a full packet in the buffer. We do
this by checking if we have the last fragment and if all bits
in the bitmap are set. */
if(uip_reassflags & UIP_REASS_FLAG_LASTFRAG) {
/* Check all bytes up to and including all but the last byte in
the bitmap. */
@ -798,9 +798,9 @@ uip_reass(void)
UIP_IP_BUF->len[1] = ((uip_reasslen - UIP_IPH_LEN) & 0xff);
PRINTF("REASSEMBLED PAQUET %d (%d)\n", uip_reasslen,
(UIP_IP_BUF->len[0] << 8) | UIP_IP_BUF->len[1]);
return uip_reasslen;
}
} else {
PRINTF("Already reassembling another paquet\n");
@ -831,7 +831,7 @@ uip_reass_over(void)
memcpy(UIP_IP_BUF, FBUF, UIP_IPH_LEN); /* copy the header for src
and dest address*/
uip_icmp6_error_output(ICMP6_TIME_EXCEEDED, ICMP6_TIME_EXCEED_REASSEMBLY, 0);
UIP_STAT(++uip_stat.ip.sent);
uip_flags = 0;
}
@ -881,14 +881,14 @@ ext_hdr_options_process(void)
uip_ext_opt_offset += UIP_EXT_HDR_OPT_PADN_BUF->opt_len + 2;
break;
case UIP_EXT_HDR_OPT_RPL:
/* Fixes situation when a node that is not using RPL
* joins a network which does. The received packages will include the
* RPL header and processed by the "default" case of the switch
* (0x63 & 0xC0 = 0x40). Hence, the packet is discarded as the header
* is considered invalid.
* Using this fix, the header is ignored, and the next header (if
* present) is processed.
*/
/* Fixes situation when a node that is not using RPL
* joins a network which does. The received packages will include the
* RPL header and processed by the "default" case of the switch
* (0x63 & 0xC0 = 0x40). Hence, the packet is discarded as the header
* is considered invalid.
* Using this fix, the header is ignored, and the next header (if
* present) is processed.
*/
#if UIP_CONF_IPV6_RPL
PRINTF("Processing RPL option\n");
if(rpl_verify_header(uip_ext_opt_offset)) {
@ -949,7 +949,7 @@ uip_process(uint8_t flag)
}
#endif /* UIP_UDP */
uip_sappdata = uip_appdata = &uip_buf[UIP_IPTCPH_LEN + UIP_LLH_LEN];
/* Check if we were invoked because of a poll request for a
particular connection. */
if(flag == UIP_POLL_REQUEST) {
@ -974,7 +974,7 @@ uip_process(uint8_t flag)
#if UIP_TCP
uip_clear_buf();
uip_slen = 0;
/* Increase the initial sequence number. */
if(++iss[3] == 0) {
if(++iss[2] == 0) {
@ -983,7 +983,7 @@ uip_process(uint8_t flag)
}
}
}
/*
* Check if the connection is in a state in which we simply wait
* for the connection to time out. If so, we increase the
@ -1009,7 +1009,7 @@ uip_process(uint8_t flag)
uip_connr->tcpstateflags == UIP_SYN_RCVD) &&
uip_connr->nrtx == UIP_MAXSYNRTX)) {
uip_connr->tcpstateflags = UIP_CLOSED;
/*
* We call UIP_APPCALL() with uip_flags set to
* UIP_TIMEDOUT to inform the application that the
@ -1017,18 +1017,18 @@ uip_process(uint8_t flag)
*/
uip_flags = UIP_TIMEDOUT;
UIP_APPCALL();
/* We also send a reset packet to the remote host. */
UIP_TCP_BUF->flags = TCP_RST | TCP_ACK;
goto tcp_send_nodata;
}
/* Exponential backoff. */
uip_connr->timer = UIP_RTO << (uip_connr->nrtx > 4?
4:
uip_connr->nrtx);
++(uip_connr->nrtx);
/*
* Ok, so we need to retransmit. We do this differently
* depending on which state we are in. In ESTABLISHED, we
@ -1042,14 +1042,14 @@ uip_process(uint8_t flag)
case UIP_SYN_RCVD:
/* In the SYN_RCVD state, we should retransmit our SYNACK. */
goto tcp_send_synack;
#if UIP_ACTIVE_OPEN
case UIP_SYN_SENT:
/* In the SYN_SENT state, we retransmit out SYN. */
UIP_TCP_BUF->flags = 0;
goto tcp_send_syn;
#endif /* UIP_ACTIVE_OPEN */
case UIP_ESTABLISHED:
/*
* In the ESTABLISHED state, we call upon the application
@ -1060,7 +1060,7 @@ uip_process(uint8_t flag)
uip_flags = UIP_REXMIT;
UIP_APPCALL();
goto apprexmit;
case UIP_FIN_WAIT_1:
case UIP_CLOSING:
case UIP_LAST_ACK:
@ -1096,12 +1096,12 @@ uip_process(uint8_t flag)
}
#endif /* UIP_UDP */
/* This is where the input processing starts. */
UIP_STAT(++uip_stat.ip.recv);
/* Start of IP input header processing code. */
/* Check validity of the IP header. */
if((UIP_IP_BUF->vtc & 0xf0) != 0x60) { /* IP version and header length. */
UIP_STAT(++uip_stat.ip.drop);
@ -1117,7 +1117,7 @@ uip_process(uint8_t flag)
* the packet has been padded and we set uip_len to the correct
* value..
*/
if((UIP_IP_BUF->len[0] << 8) + UIP_IP_BUF->len[1] <= uip_len) {
uip_len = (UIP_IP_BUF->len[0] << 8) + UIP_IP_BUF->len[1] + UIP_IPH_LEN;
/*
@ -1135,7 +1135,7 @@ uip_process(uint8_t flag)
UIP_LOG("ip: packet shorter than reported in IP header.");
goto drop;
}
PRINTF("IPv6 packet received from ");
PRINT6ADDR(&UIP_IP_BUF->srcipaddr);
PRINTF(" to ");
@ -1168,11 +1168,11 @@ uip_process(uint8_t flag)
uip_ext_len += (UIP_EXT_BUF->len << 3) + 8;
break;
case 1:
PRINTF("Dropping packet after extension header processing\n");
PRINTF("Dropping packet after extension header processing\n");
/* silently discard */
goto drop;
case 2:
PRINTF("Sending error message after extension header processing\n");
PRINTF("Sending error message after extension header processing\n");
/* send icmp error message (created in ext_hdr_options_process)
* and discard*/
goto send;
@ -1417,7 +1417,7 @@ uip_process(uint8_t flag)
UIP_LOG("ip6: unrecognized header");
goto send;
/* End of headers processing */
icmp6_input:
/* This is IPv6 ICMPv6 processing code. */
PRINTF("icmp6_input: length %d type: %d \n", uip_len, UIP_ICMP_BUF->type);
@ -1459,14 +1459,14 @@ uip_process(uint8_t flag)
UIP_LOG("icmp6: unknown ICMPv6 message.");
uip_clear_buf();
}
if(uip_len > 0) {
goto send;
} else {
goto drop;
}
/* End of IPv6 ICMP processing. */
#if UIP_UDP
/* UDP input processing. */
@ -1475,7 +1475,7 @@ uip_process(uint8_t flag)
remove_ext_hdr();
PRINTF("Receiving UDP packet\n");
/* UDP processing is really just a hack. We don't do anything to the
UDP/IP headers, but let the UDP application do all the hard
work. If the application sets uip_slen, it has a packet to
@ -1538,7 +1538,7 @@ uip_process(uint8_t flag)
udp_found:
PRINTF("In udp_found\n");
UIP_STAT(++uip_stat.udp.recv);
uip_conn = NULL;
uip_flags = UIP_NEWDATA;
uip_sappdata = uip_appdata = &uip_buf[UIP_IPUDPH_LEN + UIP_LLH_LEN];
@ -1597,7 +1597,7 @@ uip_process(uint8_t flag)
UIP_STAT(++uip_stat.tcp.recv);
PRINTF("Receiving TCP packet\n");
/* Start of TCP input header processing code. */
if(uip_tcpchksum() != 0xffff) { /* Compute and check the TCP
checksum. */
UIP_STAT(++uip_stat.tcp.drop);
@ -1632,7 +1632,7 @@ uip_process(uint8_t flag)
if((UIP_TCP_BUF->flags & TCP_CTL) != TCP_SYN) {
goto reset;
}
tmp16 = UIP_TCP_BUF->destport;
/* Next, check listening connections. */
for(c = 0; c < UIP_LISTENPORTS; ++c) {
@ -1640,7 +1640,7 @@ uip_process(uint8_t flag)
goto found_listen;
}
}
/* No matching connection found, so we send a RST packet. */
UIP_STAT(++uip_stat.tcp.synrst);
@ -1652,7 +1652,7 @@ uip_process(uint8_t flag)
}
UIP_STAT(++uip_stat.tcp.rst);
UIP_TCP_BUF->flags = TCP_RST | TCP_ACK;
uip_len = UIP_IPTCPH_LEN;
UIP_TCP_BUF->tcpoffset = 5 << 4;
@ -1661,15 +1661,15 @@ uip_process(uint8_t flag)
c = UIP_TCP_BUF->seqno[3];
UIP_TCP_BUF->seqno[3] = UIP_TCP_BUF->ackno[3];
UIP_TCP_BUF->ackno[3] = c;
c = UIP_TCP_BUF->seqno[2];
UIP_TCP_BUF->seqno[2] = UIP_TCP_BUF->ackno[2];
UIP_TCP_BUF->ackno[2] = c;
c = UIP_TCP_BUF->seqno[1];
UIP_TCP_BUF->seqno[1] = UIP_TCP_BUF->ackno[1];
UIP_TCP_BUF->ackno[1] = c;
c = UIP_TCP_BUF->seqno[0];
UIP_TCP_BUF->seqno[0] = UIP_TCP_BUF->ackno[0];
UIP_TCP_BUF->ackno[0] = c;
@ -1684,12 +1684,12 @@ uip_process(uint8_t flag)
}
}
}
/* Swap port numbers. */
tmp16 = UIP_TCP_BUF->srcport;
UIP_TCP_BUF->srcport = UIP_TCP_BUF->destport;
UIP_TCP_BUF->destport = tmp16;
/* Swap IP addresses. */
uip_ipaddr_copy(&UIP_IP_BUF->destipaddr, &UIP_IP_BUF->srcipaddr);
uip_ds6_select_src(&UIP_IP_BUF->srcipaddr, &UIP_IP_BUF->destipaddr);
@ -1730,7 +1730,7 @@ uip_process(uint8_t flag)
goto drop;
}
uip_conn = uip_connr;
/* Fill in the necessary fields for the new connection. */
uip_connr->rto = uip_connr->timer = UIP_RTO;
uip_connr->sa = 0;
@ -1771,7 +1771,7 @@ uip_process(uint8_t flag)
(uint16_t)uip_buf[UIP_IPTCPH_LEN + UIP_LLH_LEN + 3 + c];
uip_connr->initialmss = uip_connr->mss =
tmp16 > UIP_TCP_MSS? UIP_TCP_MSS: tmp16;
/* And we are done processing options. */
break;
} else {
@ -1786,19 +1786,19 @@ uip_process(uint8_t flag)
}
}
}
/* Our response will be a SYNACK. */
#if UIP_ACTIVE_OPEN
tcp_send_synack:
UIP_TCP_BUF->flags = TCP_ACK;
tcp_send_syn:
UIP_TCP_BUF->flags |= TCP_SYN;
#else /* UIP_ACTIVE_OPEN */
tcp_send_synack:
UIP_TCP_BUF->flags = TCP_SYN | TCP_ACK;
#endif /* UIP_ACTIVE_OPEN */
/* We send out the TCP Maximum Segment Size option with our
SYNACK. */
UIP_TCP_BUF->optdata[0] = TCP_OPT_MSS;
@ -1839,9 +1839,9 @@ uip_process(uint8_t flag)
receive a SYN, in which case we should retransmit our SYNACK
(which is done futher down). */
if(!((((uip_connr->tcpstateflags & UIP_TS_MASK) == UIP_SYN_SENT) &&
((UIP_TCP_BUF->flags & TCP_CTL) == (TCP_SYN | TCP_ACK))) ||
((UIP_TCP_BUF->flags & TCP_CTL) == (TCP_SYN | TCP_ACK))) ||
(((uip_connr->tcpstateflags & UIP_TS_MASK) == UIP_SYN_RCVD) &&
((UIP_TCP_BUF->flags & TCP_CTL) == TCP_SYN)))) {
((UIP_TCP_BUF->flags & TCP_CTL) == TCP_SYN)))) {
if((uip_len > 0 || ((UIP_TCP_BUF->flags & (TCP_SYN | TCP_FIN)) != 0)) &&
(UIP_TCP_BUF->seqno[0] != uip_connr->rcv_nxt[0] ||
UIP_TCP_BUF->seqno[1] != uip_connr->rcv_nxt[1] ||
@ -1875,7 +1875,7 @@ uip_process(uint8_t flag)
uip_connr->snd_nxt[1] = uip_acc32[1];
uip_connr->snd_nxt[2] = uip_acc32[2];
uip_connr->snd_nxt[3] = uip_acc32[3];
/* Do RTT estimation, unless we have done retransmissions. */
if(uip_connr->nrtx == 0) {
signed char m;
@ -1899,7 +1899,7 @@ uip_process(uint8_t flag)
/* Reset length of outstanding data. */
uip_connr->len = 0;
}
}
/* Do different things depending on in what state the connection is. */
@ -1927,7 +1927,7 @@ uip_process(uint8_t flag)
}
/* We need to retransmit the SYNACK */
if((UIP_TCP_BUF->flags & TCP_CTL) == TCP_SYN) {
goto tcp_send_synack;
goto tcp_send_synack;
}
goto drop;
#if UIP_ACTIVE_OPEN
@ -1991,7 +1991,7 @@ uip_process(uint8_t flag)
uip_conn->tcpstateflags = UIP_CLOSED;
goto reset;
#endif /* UIP_ACTIVE_OPEN */
case UIP_ESTABLISHED:
/* In the ESTABLISHED state, we call upon the application to feed
data into the uip_buf. If the UIP_ACKDATA flag is set, the
@ -2093,7 +2093,7 @@ uip_process(uint8_t flag)
UIP_APPCALL();
appsend:
if(uip_flags & UIP_ABORT) {
uip_slen = 0;
uip_connr->tcpstateflags = UIP_CLOSED;
@ -2145,7 +2145,7 @@ uip_process(uint8_t flag)
uip_connr->nrtx = 0;
apprexmit:
uip_appdata = uip_sappdata;
/* If the application has data to be sent, or if the incoming
packet had new data in it, we must send out a packet. */
if(uip_slen > 0 && uip_connr->len > 0) {
@ -2174,7 +2174,7 @@ uip_process(uint8_t flag)
UIP_APPCALL();
}
break;
case UIP_FIN_WAIT_1:
/* The application has closed the connection, but the remote host
hasn't closed its end yet. Thus we do nothing but wait for a
@ -2203,7 +2203,7 @@ uip_process(uint8_t flag)
goto tcp_send_ack;
}
goto drop;
case UIP_FIN_WAIT_2:
if(uip_len > 0) {
uip_add_rcv_nxt(uip_len);
@ -2223,7 +2223,7 @@ uip_process(uint8_t flag)
case UIP_TIME_WAIT:
goto tcp_send_ack;
case UIP_CLOSING:
if(uip_flags & UIP_ACKDATA) {
uip_connr->tcpstateflags = UIP_TIME_WAIT;
@ -2231,7 +2231,7 @@ uip_process(uint8_t flag)
}
}
goto drop;
/* We jump here when we are ready to send the packet, and just want
to set the appropriate TCP sequence numbers in the TCP header. */
tcp_send_ack:
@ -2249,12 +2249,12 @@ uip_process(uint8_t flag)
packet. */
tcp_send:
PRINTF("In tcp_send\n");
UIP_TCP_BUF->ackno[0] = uip_connr->rcv_nxt[0];
UIP_TCP_BUF->ackno[1] = uip_connr->rcv_nxt[1];
UIP_TCP_BUF->ackno[2] = uip_connr->rcv_nxt[2];
UIP_TCP_BUF->ackno[3] = uip_connr->rcv_nxt[3];
UIP_TCP_BUF->seqno[0] = uip_connr->snd_nxt[0];
UIP_TCP_BUF->seqno[1] = uip_connr->snd_nxt[1];
UIP_TCP_BUF->seqno[2] = uip_connr->snd_nxt[2];
@ -2288,7 +2288,7 @@ uip_process(uint8_t flag)
UIP_IP_BUF->len[1] = ((uip_len - UIP_IPH_LEN) & 0xff);
UIP_TCP_BUF->urgp[0] = UIP_TCP_BUF->urgp[1] = 0;
/* Calculate TCP checksum. */
UIP_TCP_BUF->tcpchksum = 0;
UIP_TCP_BUF->tcpchksum = ~(uip_tcpchksum());
@ -2304,7 +2304,7 @@ uip_process(uint8_t flag)
send:
PRINTF("Sending packet with length %d (%d)\n", uip_len,
(UIP_IP_BUF->len[0] << 8) | UIP_IP_BUF->len[1]);
UIP_STAT(++uip_stat.ip.sent);
/* Return and let the caller do the actual transmission. */
uip_flags = 0;

File diff suppressed because it is too large Load diff

View file

@ -49,7 +49,7 @@
#define RADIO_SPI_CLK_FREQ 4000000 // 4 MHz SPI CLK for radio interface
#define SYSTEM_UCLK 16000000 // 16 MHz UCLK
// Default Radio Parameters
#define DEFAULT_CHNL_FREQ 915000000
#define DEFAULT_CHNL_FREQ 915000000
#define FREQ_CNVRT_VAL 0.00252061538
// Defines for radio memory mapped areas
#define PACKETRAM_START 0x10
@ -68,14 +68,14 @@
#define MCR_rssi_readback_Adr 0x312
#define MCR_gpio_configure_Adr 0x3fa
#define MCR_ext_uc_clk_divide_Adr 0x32e
#define MCR_interrupt_source_0_Adr 0x336
#define MCR_interrupt_source_0_Adr 0x336
#define MCR_interrupt_source_1_Adr 0x337
// Macros for manual GPIO checking of Radio MISO pin P2.0 (SPI0)
#define RADIO_MISO_IN GP2IN_IN0_BBA
#define RADIO_MISO_IN GP2IN_IN0_BBA
// Macros for manual GPIO control of P2.3 (Radio SPI CS) (SPI0)
#define RADIO_CSN_DEASSERT (pADI_GP2->GPSET = GP2SET_SET3)
#define RADIO_CSN_ASSERT (pADI_GP2->GPCLR = GP2CLR_CLR3)
#define RADIO_CSN_DEASSERT (pADI_GP2->GPSET = GP2SET_SET3)
#define RADIO_CSN_ASSERT (pADI_GP2->GPCLR = GP2CLR_CLR3)
// Macros for Sending\Receiving single bytes via SPI
#define SEND_SPI(x) pADI_SPI0->SPITX = x
#define WAIT_SPI_RX while((pADI_SPI0->SPISTA & SPISTA_RXFSTA_MSK) == 0x0);
@ -92,7 +92,7 @@
/*************************************************************************/
/* Radio Command Codes */
/*************************************************************************/
typedef enum
typedef enum
{
CMD_SYNC = 0xA2, // Synchronizatio
CMD_PHY_OFF = 0xB0, // Transition to state PHY_OFF
@ -137,54 +137,54 @@ typedef enum
/*************************************************************************/
/* Radio Configuration Structure */
/*************************************************************************/
/**
/**
\internal Hide from Doxegen
\var TyRadioConfiguration
**/
typedef struct
{
RIE_U8 interrupt_mask_0_r; // 0x100
RIE_U8 cfg_101_r; // 0x101
RIE_U8 cfg_102_r; // 0x102
RIE_U8 cfg_103_r; // 0x103
RIE_U8 cfg_104_r; // 0x104
RIE_U8 cfg_105_r; // 0x105
RIE_U8 cfg_106_r; // 0x106
RIE_U8 cfg_107_r; // 0x107
RIE_U8 cfg_108_r; // 0x108
RIE_U8 channel_freq_0_r; // 0x109
RIE_U8 channel_freq_1_r; // 0x10A
RIE_U8 channel_freq_2_r; // 0x10B
RIE_U8 cfg_10C_r; // 0x10C
RIE_U8 cfg_10D_r; // 0x10D
RIE_U8 cfg_10E_r; // 0x10E
RIE_U8 cfg_10F_r; // 0x10F
RIE_U8 cfg_110_r; // 0x110
RIE_U8 cfg_111_r; // 0x111
RIE_U8 cfg_112_r; // 0x112
RIE_U8 cfg_113_r; // 0x113
RIE_U8 radio_cfg_8_r; // 0x114
RIE_U8 radio_cfg_9_r; // 0x115
RIE_U8 cfg_116_r; // 0x116
RIE_U8 cfg_117_r; // 0x117
RIE_U8 image_reject_cal_phase_r; // 0x118
RIE_U8 image_reject_cal_amplitude_r; // 0x119
RIE_U8 cfg_11A_r; // 0x11A
RIE_U8 cfg_11B_r; // 0x11B
RIE_U8 symbol_mode_r; // 0x11C
RIE_U8 cfg_11D_r; // 0x11D
RIE_U8 cfg_11E_r; // 0x11E
RIE_U8 cfg_11F_r; // 0x11F
RIE_U8 cfg_120_r; // 0x120
RIE_U8 cfg_121_r; // 0x121
RIE_U8 cfg_122_r; // 0x122
RIE_U8 cfg_123_r; // 0x123
RIE_U8 tx_base_adr_r; // 0x124
RIE_U8 rx_base_adr_r; // 0x125
RIE_U8 packet_length_control_r; // 0x126
RIE_U8 packet_length_max_r; // 0x127
RIE_U8 cfg_128_r; // 0x128
RIE_U8 cfg_129_r; // 0x129
RIE_U8 interrupt_mask_0_r; // 0x100
RIE_U8 cfg_101_r; // 0x101
RIE_U8 cfg_102_r; // 0x102
RIE_U8 cfg_103_r; // 0x103
RIE_U8 cfg_104_r; // 0x104
RIE_U8 cfg_105_r; // 0x105
RIE_U8 cfg_106_r; // 0x106
RIE_U8 cfg_107_r; // 0x107
RIE_U8 cfg_108_r; // 0x108
RIE_U8 channel_freq_0_r; // 0x109
RIE_U8 channel_freq_1_r; // 0x10A
RIE_U8 channel_freq_2_r; // 0x10B
RIE_U8 cfg_10C_r; // 0x10C
RIE_U8 cfg_10D_r; // 0x10D
RIE_U8 cfg_10E_r; // 0x10E
RIE_U8 cfg_10F_r; // 0x10F
RIE_U8 cfg_110_r; // 0x110
RIE_U8 cfg_111_r; // 0x111
RIE_U8 cfg_112_r; // 0x112
RIE_U8 cfg_113_r; // 0x113
RIE_U8 radio_cfg_8_r; // 0x114
RIE_U8 radio_cfg_9_r; // 0x115
RIE_U8 cfg_116_r; // 0x116
RIE_U8 cfg_117_r; // 0x117
RIE_U8 image_reject_cal_phase_r; // 0x118
RIE_U8 image_reject_cal_amplitude_r; // 0x119
RIE_U8 cfg_11A_r; // 0x11A
RIE_U8 cfg_11B_r; // 0x11B
RIE_U8 symbol_mode_r; // 0x11C
RIE_U8 cfg_11D_r; // 0x11D
RIE_U8 cfg_11E_r; // 0x11E
RIE_U8 cfg_11F_r; // 0x11F
RIE_U8 cfg_120_r; // 0x120
RIE_U8 cfg_121_r; // 0x121
RIE_U8 cfg_122_r; // 0x122
RIE_U8 cfg_123_r; // 0x123
RIE_U8 tx_base_adr_r; // 0x124
RIE_U8 rx_base_adr_r; // 0x125
RIE_U8 packet_length_control_r; // 0x126
RIE_U8 packet_length_max_r; // 0x127
RIE_U8 cfg_128_r; // 0x128
RIE_U8 cfg_129_r; // 0x129
RIE_U8 cfg_12A_r; // 0x12A
RIE_U8 cfg_12B_r; // 0x12B
RIE_U8 cfg_12C_r; // 0x12C
@ -205,14 +205,14 @@ typedef struct
RIE_U8 cfg_13B_r; // 0x13B
RIE_U8 cfg_13C_r; // 0x13C
RIE_U8 cfg_13D_r; // 0x13D
RIE_U8 cfg_13E_r; // 0x13E
RIE_U8 cfg_13F_r; // 0x13F
RIE_U8 cfg_13E_r; // 0x13E
RIE_U8 cfg_13F_r; // 0x13F
} TyRadioConfiguration;
/*************************************************************************/
/* Radio Configuration Constants */
/*************************************************************************/
#define interrupt_mask_0_interrupt_tx_eof (0x1 << 4)
#define interrupt_mask_0_interrupt_crc_correct (0x1 << 2)
#define interrupt_mask_0_interrupt_tx_eof (0x1 << 4)
#define interrupt_mask_0_interrupt_crc_correct (0x1 << 2)
#define packet_length_control_length_offset_offset (0)
#define packet_length_control_length_offset_minus0 (0x4 << packet_length_control_length_offset_offset)
@ -237,7 +237,7 @@ typedef struct
#define radio_cfg_8_pa_power_setting_63 (0xF << radio_cfg_8_pa_power_offset)
#define radio_cfg_8_pa_ramp_numbits (3)
#define radio_cfg_8_pa_ramp_offset (0)
#define radio_cfg_8_pa_ramp_16 (0x5 << radio_cfg_8_pa_ramp_offset)
#define radio_cfg_8_pa_ramp_16 (0x5 << radio_cfg_8_pa_ramp_offset)
#define radio_cfg_9_demod_scheme_offset (0)
#define radio_cfg_9_demod_scheme_FSK (0x0 << radio_cfg_9_demod_scheme_offset)
@ -256,13 +256,13 @@ typedef struct
/* Local Variables */
/*************************************************************************/
static TyRadioConfiguration RadioConfiguration;
static RIE_BOOL bRadioConfigurationChanged = RIE_FALSE;
static RIE_BOOL bTestModeEnabled = RIE_FALSE;
static RIE_U32 DataRate = 38400;
static RIE_BOOL bRadioConfigurationChanged = RIE_FALSE;
static RIE_BOOL bTestModeEnabled = RIE_FALSE;
static RIE_U32 DataRate = 38400;
static volatile RIE_BOOL bPacketTx = RIE_FALSE;
static volatile RIE_BOOL bPacketRx = RIE_FALSE;
const RIE_U8 DR_38_4kbps_Dev20kHz_Configuration[] =
const RIE_U8 DR_38_4kbps_Dev20kHz_Configuration[] =
{
0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x00,0x76,0x62,0x21,
@ -272,11 +272,11 @@ const RIE_U8 DR_38_4kbps_Dev20kHz_Configuration[] =
0x40,0x0C,0x00,0x0C,0x00,0x00,
0x10,0x00,0xC3,0x36,0x10,0x10,0x24,0xF0,0x2A,0x00,0x2F,0x19,0x5E,0x46,0x5F,0x78,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
const RIE_U8 DR_300_0kbps_Dev75_0kHz_Configuration[] =
const RIE_U8 DR_300_0kbps_Dev75_0kHz_Configuration[] =
{
0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x00,0x76,0x62,0x21,
@ -291,7 +291,7 @@ const RIE_U8 DR_300_0kbps_Dev75_0kHz_Configuration[] =
const RIE_U8 DR_1_0kbps_Dev10_0kHz_Configuration[] =
const RIE_U8 DR_1_0kbps_Dev10_0kHz_Configuration[] =
{
0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x00,0x76,0x62,0x21,
// 0 1 2 3 4 5 6 7 8 9 A B
@ -312,8 +312,8 @@ static RIE_Responses RadioSendCommandBytes (RIE_U8 * pCmdBytes,
RIE_U8 NumBytes);
static RIE_Responses RadioSendCommandNoWait (Radio_CmdCodes CmdCode);
static RIE_Responses RadioSendCommandWait (Radio_CmdCodes CmdCode);
static RIE_Responses RadioMMapRead (RIE_U32 ulAdr,
RIE_U32 ulLen,
static RIE_Responses RadioMMapRead (RIE_U32 ulAdr,
RIE_U32 ulLen,
RIE_U8 * pData);
static RIE_Responses RadioMMapWrite (RIE_U32 ulAdr,
RIE_U32 ulLen,
@ -337,7 +337,7 @@ static RIE_Responses RadioWaitOnCmdLdr (void);
@brief Return the Radio Interface Engine API Version
@param pVersion :{}
pVersion Storage for Radio Interface Engine API version.
@code
@code
RIE_U32 Version;
Response = RadioGetAPIVersion(&Version);
@endcode
@ -361,8 +361,8 @@ RIE_Responses RadioGetAPIVersion(RIE_U32 *pVersion)
- DR_1_0kbps_Dev10_0kHz Base configuration of 1 kbps datarate, 10.0 kHz frequency deviation.
- DR_38_4kbps_Dev20kHz Base configuration of 38.4 kbps datarate, 20 kHz frequency deviation.
- DR_300_0kbps_Dev75_0kHz Base configuration of 300 kbps datarate, 75 kHz frequency deviation.
@pre
RadioInit() must be called before this function is called.
@pre
RadioInit() must be called before this function is called.
@return RIE_Responses Error code.
**/
@ -388,7 +388,7 @@ RIE_Responses RadioSwitchConfig(RIE_BaseConfigs BaseConfig)
- DR_1_0kbps_Dev10_0kHz Base configuration of 1 kbps datarate, 10.0 kHz frequency deviation.
- DR_38_4kbps_Dev20kHz Base configuration of 38.4 kbps datarate, 20 kHz frequency deviation.
- DR_300_0kbps_Dev75_0kHz Base configuration of 300 kbps datarate, 75 kHz frequency deviation.
@note
@note
This must be called before any other function is called.
@return RIE_Responses Error code.
**/
@ -401,13 +401,13 @@ RIE_Responses RadioInit(RIE_BaseConfigs BaseConfig)
NVIC_DisableIRQ(UHFTRX_IRQn);
// Initialise GPIO Port 2 for Radio Use
pADI_GP2->GPCON = GP2CON_CON0_SPI0MISO | GP2CON_CON1_SPI0SCLK |
GP2CON_CON2_SPI0MOSI | GP2CON_CON3_GPIO |
pADI_GP2->GPCON = GP2CON_CON0_SPI0MISO | GP2CON_CON1_SPI0SCLK |
GP2CON_CON2_SPI0MOSI | GP2CON_CON3_GPIO |
GP2CON_CON4_IRQ8 | GP2CON_CON5_GPIO |
GP2CON_CON6_GPIO | GP2CON_CON7_GPIOIRQ7;
pADI_GP2->GPOEN = GP2OEN_OEN0_IN | GP2OEN_OEN1_IN |
GP2OEN_OEN2_IN | GP2OEN_OEN3_OUT |
pADI_GP2->GPOEN = GP2OEN_OEN0_IN | GP2OEN_OEN1_IN |
GP2OEN_OEN2_IN | GP2OEN_OEN3_OUT |
GP2OEN_OEN4_IN | GP2OEN_OEN5_IN |
GP2OEN_OEN6_IN | GP2OEN_OEN7_IN;
@ -435,8 +435,8 @@ RIE_Responses RadioInit(RIE_BaseConfigs BaseConfig)
// we enable the Cortex interrupt handling of it
if(Response == RIE_Success)
Response = RadioPowerOff();
// Configure a "high level" radio interrupt ...
pADI_INTERRUPT->EI2CFG = EI2CFG_IRQ8MDE_HIGHLEVEL | EI2CFG_IRQ8EN;
// Configure a "high level" radio interrupt ...
pADI_INTERRUPT->EI2CFG = EI2CFG_IRQ8MDE_HIGHLEVEL | EI2CFG_IRQ8EN;
// ... and set it up in the NVIC so that our interrupt handler is called
// when the radio wants our attention. Clear any pre-existing condition
// before enabling the interrupt.
@ -463,7 +463,7 @@ RIE_Responses RadioInit(RIE_BaseConfigs BaseConfig)
/**
@fn RIE_U32 RadioDeInit(void)
@brief Deinitialise the Radio, and power it down.
@note
@note
This can be called independently of all other functions to power down
the radio
@return RIE_Responses Error code.
@ -477,13 +477,13 @@ RIE_Responses RadioDeInit(void)
NVIC_DisableIRQ(UHFTRX_IRQn);
// Initialise GPIO Port 2 for Radio Use
pADI_GP2->GPCON = GP2CON_CON0_SPI0MISO | GP2CON_CON1_SPI0SCLK |
GP2CON_CON2_SPI0MOSI | GP2CON_CON3_GPIO |
pADI_GP2->GPCON = GP2CON_CON0_SPI0MISO | GP2CON_CON1_SPI0SCLK |
GP2CON_CON2_SPI0MOSI | GP2CON_CON3_GPIO |
GP2CON_CON4_IRQ8 | GP2CON_CON5_GPIO |
GP2CON_CON6_GPIO | GP2CON_CON7_GPIOIRQ7;
pADI_GP2->GPOEN = GP2OEN_OEN0_IN | GP2OEN_OEN1_IN |
GP2OEN_OEN2_IN | GP2OEN_OEN3_OUT |
pADI_GP2->GPOEN = GP2OEN_OEN0_IN | GP2OEN_OEN1_IN |
GP2OEN_OEN2_IN | GP2OEN_OEN3_OUT |
GP2OEN_OEN4_IN | GP2OEN_OEN5_IN |
GP2OEN_OEN6_IN | GP2OEN_OEN7_IN;
@ -512,8 +512,8 @@ RIE_Responses RadioDeInit(void)
/**
@fn RIE_Responses RadioPowerOff(void)
@brief Shutdown the radio and place it in its lowest power sleep mode.
@pre
@brief Shutdown the radio and place it in its lowest power sleep mode.
@pre
RadioInit() must be called before this function is called.
@return RIE_Response Error code.
**/
@ -532,14 +532,14 @@ RIE_Responses RadioPowerOff(void)
return Response;
}
/**
/**
@fn RIE_Responses RadioTerminateRadioOp(void)
@brief Terminate a currently running radio RX or TX operation.
@pre RadioInit() must be called before this function is called.
@code
@code
if (RIE_Response == RIE_Success)
RIE_Response = RadioRxPacketFixedLen(12);
// Delay for a while waiting for a packet
// Delay for a while waiting for a packet
if (RIE_Response == RIE_Success)
{
// Abort the waiting
@ -557,15 +557,15 @@ RIE_Responses RadioTerminateRadioOp (void)
return Response;
}
/**
/**
@fn RIE_Responses RadioSetFrequency(RIE_U32 Frequency)
@brief Set frequency for radio communications
@param Frequency :{431000000-928000000}
- This must be within the available bands of the radio:
- 431000000Hz to 464000000Hz and
@param Frequency :{431000000-928000000}
- This must be within the available bands of the radio:
- 431000000Hz to 464000000Hz and
- 862000000Hz to 928000000Hz.
@pre RadioInit() must be called before this function is called.
@code
@code
if (RIE_Response == RIE_Success)
RIE_Response = RadioSetFrequency(915000000);
@endcode
@ -584,18 +584,18 @@ RIE_Responses RadioSetFrequency(RIE_U32 Frequency)
RadioConfiguration.channel_freq_2_r = (EncodedFrequency >> 16)& 0xFF;
if (Frequency >= 862000000)
{
RadioConfiguration.image_reject_cal_amplitude_r = 0x07;
RadioConfiguration.image_reject_cal_amplitude_r = 0x07;
RadioConfiguration.image_reject_cal_phase_r = 0x16;
}
else
{
RadioConfiguration.image_reject_cal_amplitude_r = 0x03;
RadioConfiguration.image_reject_cal_amplitude_r = 0x03;
RadioConfiguration.image_reject_cal_phase_r = 0x08;
}
return Response;
}
/**
/**
@fn RIE_Responses RadioSetModulationType(RIE_ModulationTypes ModulationType)
@brief Set the Radio Transmitter Modulation Type. Can be FSK_Modulation or GFSK_Modulation.
@param ModulationType :{DR_1_0kbps_Dev10_0kHz , DR_38_4kbps_Dev20kHz ,DR_300_0kbps_Dev75_0kHz }
@ -603,7 +603,7 @@ RIE_Responses RadioSetFrequency(RIE_U32 Frequency)
- DR_38_4kbps_Dev20kHz Base configuration of 38.4 kbps datarate, 20 kHz frequency deviation.
- DR_300_0kbps_Dev75_0kHz Base configuration of 300 kbps datarate, 75 kHz frequency deviation.
@pre RadioInit() must be called before this function is called.
@code
@code
Response = RadioSetModulationType(GFSK_Modulation);
@endcode
@note FSK_Modulation is used by default.
@ -636,31 +636,31 @@ RIE_Responses RadioSetModulationType(RIE_ModulationTypes ModulationType)
if (ucNewRegVal != RadioConfiguration.radio_cfg_9_r )
{
bRadioConfigurationChanged = RIE_TRUE;
RadioConfiguration.radio_cfg_9_r = ucNewRegVal;
RadioConfiguration.radio_cfg_9_r = ucNewRegVal;
}
}
return Response;
}
/**
@fn RIE_Responses RadioPayldManchesterEncode(RIE_BOOL bEnable)
/**
@fn RIE_Responses RadioPayldManchesterEncode(RIE_BOOL bEnable)
@brief Enable or Disable Manchester Encoding of payload data.
Manchester encoding can be used to ensure a dc-free (zero mean)
transmission.
Manchester encoding can be used to ensure a dc-free (zero mean)
transmission.
A Binary 0 is mapped to 10, and a Binary 1 is mapped to 01.
A Binary 0 is mapped to 10, and a Binary 1 is mapped to 01.
Manchester encoding and decoding are applied to the payload data
and the CRC.
Manchester encoding and decoding are applied to the payload data
and the CRC.
@param bEnable :{RIE_FALSE,RIE_TRUE}
- RIE_TRUE if Manchester Encoding is to be enabled.
- RIE_TRUE if Manchester Encoding is to be enabled.
- RIE_FALSE if disabled.
@pre RadioInit() must be called before this function is called.
@code
@code
Response = RadioPayldManchesterEncode(RIE_TRUE);
@endcode
@ -689,37 +689,37 @@ RIE_Responses RadioPayldManchesterEncode(RIE_BOOL bEnable)
if (ucNewRegVal != RadioConfiguration.symbol_mode_r )
{
bRadioConfigurationChanged = RIE_TRUE;
RadioConfiguration.symbol_mode_r = ucNewRegVal;
RadioConfiguration.symbol_mode_r = ucNewRegVal;
}
}
return Response;
}
/**
/**
@fn RIE_Responses RadioPayldDataWhitening(RIE_BOOL bEnable)
@brief Enable or Disable Data Whitening of payload data.
@brief Enable or Disable Data Whitening of payload data.
Data whitening can be employed to avoid long runs of 1s or 0s
in the transmitted data stream.
in the transmitted data stream.
This ensures sufficient bit transitions in the packet, which
aids in receiver clock and data recovery because the encoding
breaks up long runs of 1s or 0s in the transmit packet.
This ensures sufficient bit transitions in the packet, which
aids in receiver clock and data recovery because the encoding
breaks up long runs of 1s or 0s in the transmit packet.
The data, excluding the preamble and sync word, is automatically
whitened before transmission by XORing the data with an 8-bit
pseudorandom sequence.
whitened before transmission by XORing the data with an 8-bit
pseudorandom sequence.
At the receiver, the data is XORed with the same pseudorandom
sequence, thereby reversing the whitening.
At the receiver, the data is XORed with the same pseudorandom
sequence, thereby reversing the whitening.
The linear feedback shift register polynomial used is x7 + x1 + 1.
@param bEnable :{RIE_FALSE, RIE_TRUE}
- RIE_TRUE if Manchester Encoding is to be enabled.
- RIE_TRUE if Manchester Encoding is to be enabled.
- RIE_FALSE if disabled.
@pre RadioInit() must be called before this function is called.
@code
@code
Response = RadioPayldDataWhitening(RIE_TRUE);
@endcode
@ -748,19 +748,19 @@ RIE_Responses RadioPayldDataWhitening(RIE_BOOL bEnable)
if (ucNewRegVal != RadioConfiguration.symbol_mode_r )
{
bRadioConfigurationChanged = RIE_TRUE;
RadioConfiguration.symbol_mode_r = ucNewRegVal;
RadioConfiguration.symbol_mode_r = ucNewRegVal;
}
}
return Response;
}
/**
@fn RIE_Responses RadioTxPacketFixedLen(RIE_U8 Len, RIE_U8 *pData)
@brief Transmit a fixed length packet.
/**
@fn RIE_Responses RadioTxPacketFixedLen(RIE_U8 Len, RIE_U8 *pData)
@brief Transmit a fixed length packet.
@param Len :{1-240} Length of packet to be transmitted.
@param pData :{} Data bytes to be transmitted.
@pre RadioInit() must be called before this function is called.
@code
@code
if (RIE_Response == RIE_Success)
RIE_Response = RadioTxSetPA(DifferentialPA,PowerLevel15);
if (RIE_Response == RIE_Success)
@ -795,13 +795,13 @@ RIE_Responses RadioTxPacketFixedLen(RIE_U8 Len, RIE_U8 *pData)
return Response;
}
/**
@fn RIE_Responses RadioTxPacketVariableLen(RIE_U8 Len, RIE_U8 *pData)
@brief Transmit a Variable length packet.
/**
@fn RIE_Responses RadioTxPacketVariableLen(RIE_U8 Len, RIE_U8 *pData)
@brief Transmit a Variable length packet.
@param Len :{1-240} Length of packet to be transmitted.
@param pData :{} Data bytes to be transmitted.
@pre RadioInit() must be called before this function is called.
@code
@code
if (RIE_Response == RIE_Success)
RIE_Response = RadioTxSetPA(DifferentialPA,PowerLevel15);
if (RIE_Response == RIE_Success)
@ -841,12 +841,12 @@ RIE_Responses RadioTxPacketVariableLen(RIE_U8 Len, RIE_U8 *pData)
}
/**
@fn RIE_BOOL RadioTxPacketComplete(void)
/**
@fn RIE_BOOL RadioTxPacketComplete(void)
@brief Checks if a packet has finished transmitting
@pre RadioInit() must be called before this function is called.
@pre RadioRxPacketFixedLen() or equivalent should be called first.
@code
@code
if (RIE_Response == RIE_Success)
RIE_Response = RadioTxSetPA(DifferentialPA,PowerLevel15);
if (RIE_Response == RIE_Success)
@ -860,16 +860,16 @@ RIE_BOOL RadioTxPacketComplete (void)
return bPacketTx;
}
/**
@fn RIE_Responses RadioTxSetPA(RIE_PATypes PAType,RIE_PAPowerLevel Power)
@brief Set PA Type and the Transmit Power Level for Radio Transmission.
/**
@fn RIE_Responses RadioTxSetPA(RIE_PATypes PAType,RIE_PAPowerLevel Power)
@brief Set PA Type and the Transmit Power Level for Radio Transmission.
@param PAType :{DifferentialPA, SingleEndedPA} Select Single Ended or Differential PA Type
@param Power :{PowerLevel0 ,PowerLevel1 ,PowerLevel2 ,PowerLevel3,
PowerLevel4 ,PowerLevel5 ,PowerLevel6 ,PowerLevel7,
PowerLevel8 ,PowerLevel9 ,PowerLevel10,PowerLevel11,
PowerLevel12,PowerLevel13,PowerLevel14,PowerLevel15}
PowerLevel12,PowerLevel13,PowerLevel14,PowerLevel15}
@pre RadioInit() must be called before this function is called.
@code
@code
Response = RadioTxSetPA(SingleEndedPA,PowerLevel8);
@endcode
@note Differential PA is enabled by default.
@ -940,17 +940,17 @@ RIE_Responses RadioTxSetPA(RIE_PATypes PAType,RIE_PAPowerLevel Power)
if (ucNewRegVal != RadioConfiguration.radio_cfg_8_r )
{
bRadioConfigurationChanged = RIE_TRUE;
RadioConfiguration.radio_cfg_8_r = ucNewRegVal;
RadioConfiguration.radio_cfg_8_r = ucNewRegVal;
}
}
return Response;
}
/**
/**
@fn RIE_Responses RadioTxCarrier(void)
@brief Transmit a carrier tone
using the current radio configuration.
@pre RadioInit() must be called before this function is called.
@code
@code
Response = RadioTxCarrier();
@endcode
@note Terminate this mode by calling RadioTerminateRadioOp();
@ -973,12 +973,12 @@ RIE_Responses RadioTxCarrier (void)
Response = RadioSendCommandWait(CMD_PHY_TX);
return Response;
}
/**
/**
@fn RIE_Responses RadioTxPreamble(void)
@brief Transmit a pre-amble (alternating ones and zeros)
using the current radio configuration.
@pre RadioInit() must be called before this function is called.
@code
@code
Response = RadioTxPreamble();
@endcode
@note Terminate this mode by calling RadioTerminateRadioOp();
@ -1002,14 +1002,14 @@ RIE_Responses RadioTxPreamble (void)
return Response;
}
/**
/**
@fn RIE_Responses RadioRxPacketFixedLen(RIE_U8 Len)
@brief Enter receive mode and wait for a packet to be received.
Radio will stay in Receive Mode until
1) A packet is received.
Radio will stay in Receive Mode until
1) A packet is received.
2) User manually exits Receive Mode with a call to RadioTerminateRadioOp()
@param Len :{1-240} Fixed Length of packet to be received.
@pre RadioInit() must be called before this function is called.
@return RIE_Responses Error code
@ -1036,14 +1036,14 @@ RIE_Responses RadioRxPacketFixedLen(RIE_U8 Len)
return Response;
}
/**
/**
@fn RIE_Responses RadioRxPacketVariableLen(void)
@brief Enter receive mode and wait for a packet to be received.
Radio will stay in Receive Mode until
1) A packet is received.
Radio will stay in Receive Mode until
1) A packet is received.
2) User manually exits Receive Mode with a call to RadioTerminateRadioOp()
@pre RadioInit() must be called before this function is called.
@return RIE_Responses Error code
**/
@ -1067,12 +1067,12 @@ RIE_Responses RadioRxPacketVariableLen(void)
return Response;
}
/**
@fn RIE_BOOL RadioRxPacketAvailable(void)
@brief Checks if a packet has been received.
/**
@fn RIE_BOOL RadioRxPacketAvailable(void)
@brief Checks if a packet has been received.
@pre RadioInit() must be called before this function is called.
@pre RadioRxPacketFixedLen() or equivalent should be called first.
@code
@code
if (RIE_Response == RIE_Success)
RIE_Response = RadioRxPacketFixedLen(12);
if (RIE_Response == RIE_Success)
@ -1095,7 +1095,7 @@ RIE_BOOL RadioRxPacketAvailable(void)
}
/**
/**
@fn RIE_Responses RadioRxPacketRead(RIE_U8 BufferLen,RIE_U8 *pPktLen,RIE_U8 *pData,RIE_S8 *pRSSIdBm)
@brief Read the packet that was received by the radio.
@param BufferLen :{1-240} Size of passed in buffer
@ -1104,7 +1104,7 @@ RIE_BOOL RadioRxPacketAvailable(void)
@param pRSSIdBm :{} RSSI of received packet in dBm.
@pre RadioInit() must be called before this function is called.
@pre RadioRxPacketFixedLen() or equivalent should be called first.
@code
@code
if (RIE_Response == RIE_Success)
RIE_Response = RadioRxPacketFixedLen(12);
if (RIE_Response == RIE_Success)
@ -1170,13 +1170,13 @@ RIE_Responses RadioRxPacketRead(RIE_U8 BufferLen,RIE_U8 *pPktLen,RIE_U8 *pData,R
return Response;
}
/**
/**
@fn RIE_Responses RadioRxBERTestMode(void)
@brief Enter receiver Bit Error Rate (BER) test mode where the
clock and data appear on GPIO pins.
Clock on P0.6 and Data on P2.6
@pre RadioInit() must be called before this function is called.
@code
@code
Response = RadioRxBERTestMode();
@endcode
@note Terminate this mode by calling RadioTerminateRadioOp();
@ -1187,7 +1187,7 @@ RIE_Responses RadioRxBERTestMode(void)
RIE_Responses Response = RIE_Success;
RIE_U8 Data;
// Enables internal radio signals on external pins
// but overrides some of the standard GPIO muxed
// but overrides some of the standard GPIO muxed
// functionality (UART?)
pADI_MISC->RFTST = 0x7E1;
@ -1211,7 +1211,7 @@ RIE_Responses RadioRxBERTestMode(void)
return Response;
}
/**
/**
@internal Hide from Doxegen
@fn RIE_Responses RadioCommitRadioConfig(void)
@brief Configures the radio if any changes were made
@ -1247,7 +1247,7 @@ static RIE_Responses RadioCommitRadioConfig(void)
}
return Response;
}
/**
/**
@fn RIE_Responses RadioReadState(RadioState *pState)
@brief Read the current state
@param pState Pointer to return storage of state
@ -1271,7 +1271,7 @@ static RIE_Responses RadioReadState(RadioState *pState)
return Response;
}
/**
/**
@fn RIE_Responses RadioWaitOnState(RadioState FinalState)
@brief Wait for Final State to be reached
@param FinalState State to wait on
@ -1289,7 +1289,7 @@ static RIE_Responses RadioWaitOnState(RadioState FinalState)
return Response;
}
/**
/**
@fn RIE_Responses RadioWaitOnCmdLdr(void)
@brief Wait for Final State to be reached
@param FinalState State to wait on
@ -1307,7 +1307,7 @@ static RIE_Responses RadioWaitOnCmdLdr(void)
Response = RadioSPIXferByte(SPI_NOP,NULL);
if (Response == RIE_Success)
Response = RadioSPIXferByte(SPI_NOP,&StatusByte);
RADIO_CSN_DEASSERT;
RADIO_CSN_DEASSERT;
NVIC_EnableIRQ (UHFTRX_IRQn);
if ((Response == RIE_Success))
if(StatusByte & STATUS_BYTE_CMD_READY)
@ -1317,13 +1317,13 @@ static RIE_Responses RadioWaitOnCmdLdr(void)
return Response;
}
/**
/**
@internal Hide from Doxegen
@fn RIE_Responses RadioToOnMode(void)
@brief Transition to On Mode
Handle all possible states that the radio could be in
and brings it back to PHY_ON state
Handle all possible states that the radio could be in
and brings it back to PHY_ON state
@param None
@return RIE_Responses Error code
**/
@ -1365,12 +1365,12 @@ static RIE_Responses RadioToOnMode(void)
}
return Response;
}
/**
/**
@internal Hide from Doxegen
@fn RIE_Responses RadioToOffMode(void)
@brief Transition to Off Mode
Handle all possible states that the radio could be in
Handle all possible states that the radio could be in
and bring it back to PHY_OFF state.
@param None
@ -1414,7 +1414,7 @@ static RIE_Responses RadioToOffMode(void)
}
return Response;
}
/**
/**
@internal Hide from Doxegen
@fn RIE_Responses RadioSyncComms (void)
@brief Sync comms with the radio
@ -1430,7 +1430,7 @@ static RIE_Responses RadioSyncComms (void)
Response = RadioWaitOnCmdLdr();
return Response;
}
/**
/**
@fn RIE_Responses RadioWaitForPowerUp(void)
@brief Wake Up the Part
@ -1444,7 +1444,7 @@ static RIE_Responses RadioWaitForPowerUp(void)
RIE_Responses Response = RIE_Success;
int i = 0x0;
RADIO_CSN_ASSERT;
while (!RADIO_MISO_IN && (i < 1000))
while (!RADIO_MISO_IN && (i < 1000))
i++;
if (1000 == i)// Timed out waiting for MISO high?
Response = RIE_RadioSPICommsFail;
@ -1452,7 +1452,7 @@ static RIE_Responses RadioWaitForPowerUp(void)
return Response;
}
/**
/**
\internal Hide from Doxegen
\fn void Ext_Int8_Handler(void)
\brief Radio Interrupt Handler
@ -1482,7 +1482,7 @@ void Ext_Int8_Handler (void)
// Clear the interrupt
pADI_INTERRUPT->EICLR = EICLR_IRQ8;
}
/**
/**
\internal Hide from Doxegen
\fn void RadioSPIXferByte(RIE_U8 ucByte,RIE_U8 *pData)
\brief Transfer a byte via SPI to the radio and optionally return
@ -1504,13 +1504,13 @@ static RIE_Responses RadioSPIXferByte(RIE_U8 ucByte,RIE_U8 *pData)
(void)READ_SPI;
return Response;
}
/**
/**
\internal Hide from Doxegen
\fn RIE_Responses RadioSendCommandBytes(RIE_U8 *pCmdBytes,RIE_U8 NumBytes)
\brief Send a complete command to the radio.
It is neccessary to disable the radio interrupt when doing this
as a command in progress must finish before a radio interrupt
as a command in progress must finish before a radio interrupt
can be handled.
\param pCmdBytes Pointer to a number of bytes to be transferred.
@ -1531,7 +1531,7 @@ static RIE_Responses RadioSendCommandBytes(RIE_U8 *pCmdBytes,RIE_U8 NumBytes)
return Response;
}
/**
/**
\internal Hide from Doxegen
\fn RIE_Responses RadioSendCommandNoWait (Radio_CmdCodes CmdCode )
\brief Send a single byte command to the radio.
@ -1543,7 +1543,7 @@ static RIE_Responses RadioSendCommandNoWait (Radio_CmdCodes CmdCode )
RIE_U8 Command = (RIE_U8)CmdCode;
return RadioSendCommandBytes(&Command,0x1);
}
/**
/**
\internal Hide from Doxegen
\fn RIE_Responses RadioSendCommandWait (Radio_CmdCodes CmdCode )
\brief Send a single byte command to the radio.
@ -1561,7 +1561,7 @@ static RIE_Responses RadioSendCommandWait (Radio_CmdCodes CmdCode )
Response = RadioSendCommandBytes(&Command,0x1);
return Response;
}
/**
/**
\fn RIE_Responses RadioMMapRead(RIE_U32 ulAdr, RIE_U32 ulLen, RIE_U8 *pData)
\brief Read bytes from specified memory map address
\param ulAdr Address to read at.
@ -1575,7 +1575,7 @@ static RIE_Responses RadioMMapRead(RIE_U32 ulAdr, RIE_U32 ulLen, RIE_U8 *pData)
NVIC_DisableIRQ(UHFTRX_IRQn);
RADIO_CSN_ASSERT;
if(Response == RIE_Success) // Send first byte (SPI_MEMR_RD + Bytes)
Response = RadioSPIXferByte(SPI_MEM_RD | ((ulAdr & 0x700) >> 8),NULL);
if(Response == RIE_Success)// Send Second byte remainder of address
@ -1589,7 +1589,7 @@ static RIE_Responses RadioMMapRead(RIE_U32 ulAdr, RIE_U32 ulLen, RIE_U8 *pData)
return Response;
}
/**
/**
\fn RIE_Responses RadioMMapWrite(RIE_U32 ulAdr, RIE_U32 ulLen, RIE_U8 *pData)
\brief Read bytes from specified memory map address
\param ulAdr Address to read at.
@ -1615,7 +1615,7 @@ static RIE_Responses RadioMMapWrite(RIE_U32 ulAdr,RIE_U32 ulLen,RIE_U8 * pDat
return Response;
}
/**
/**
\internal Hide from Doxegen
\fn void SetRadioConfiguration(void)
\brief Create a default radio configuration that all base configurations
@ -1654,7 +1654,7 @@ static RIE_Responses SetRadioConfiguration(RIE_BaseConfigs BaseConfig)
}
return Response;
}
/**
/**
@internal Hide from Doxegen
@fn RIE_Responses RadioConfigure (void)
@brief Configure the Radio as per the current configuration
@ -1666,8 +1666,8 @@ RIE_Responses RadioConfigure (void)
if(Response == RIE_Success)
Response = RadioToOffMode();
if(Response == RIE_Success) // Write the configuration to the radio memory
Response = RadioMMapWrite(BBRAM_START,
sizeof(TyRadioConfiguration),
Response = RadioMMapWrite(BBRAM_START,
sizeof(TyRadioConfiguration),
(RIE_U8 *)&RadioConfiguration);
if(Response == RIE_Success) // Apply that configuration to the radio
Response = RadioSendCommandWait(CMD_CONFIG_DEV);
@ -1677,12 +1677,12 @@ RIE_Responses RadioConfigure (void)
}
/**
/**
@fn RIE_Responses RadioRadioGetRSSI (RIE_S8 *pRSSIdBm)
@brief Return a Received Signal Strength Indicator value
@param pRSSIdBm :{} detected RSSI in dBm.
@pre RadioInit() must be called before this function is called.
@code
@code
RIE_S8 RSSIdBm;
if (RIE_Response == RIE_Success)
RIE_Response = RadioRadioGetRSSI(&RSSIdBm);
@ -1700,7 +1700,7 @@ RIE_Responses RadioRadioGetRSSI (RIE_S8 *pRSSIdBm)
if (Response == RIE_Success)
Response = RadioSendCommandWait(CMD_GET_RSSI);
if (Response == RIE_Success)
Response = RadioSyncComms(); //
Response = RadioSyncComms(); //
if (pRSSIdBm)
{
if (Response == RIE_Success)
@ -1710,15 +1710,15 @@ RIE_Responses RadioRadioGetRSSI (RIE_S8 *pRSSIdBm)
return Response;
}
/**
@fn RIE_Responses RadioTxSetPower(RIE_PAPowerLevel Power)
@brief Set the Transmit Power Level for Radio Transmission.
/**
@fn RIE_Responses RadioTxSetPower(RIE_PAPowerLevel Power)
@brief Set the Transmit Power Level for Radio Transmission.
@param Power :{PowerLevel0 ,PowerLevel1 ,PowerLevel2 ,PowerLevel3,
PowerLevel4 ,PowerLevel5 ,PowerLevel6 ,PowerLevel7,
PowerLevel8 ,PowerLevel9 ,PowerLevel10,PowerLevel11,
PowerLevel12,PowerLevel13,PowerLevel14,PowerLevel15}
PowerLevel12,PowerLevel13,PowerLevel14,PowerLevel15}
@pre RadioInit() must be called before this function is called.
@code
@code
Response = RadioTxSetPower(PowerLevel8);
@endcode
@note Max TX Power is used by default.
@ -1783,7 +1783,7 @@ RIE_Responses RadioTxSetPower (RIE_PAPowerLevel Power)
// Write directly to the MCR in this case and avoid a reconfigure
if (Response == RIE_Success)
Response = RadioMMapWrite(MCR_pa_level_mcr_Adr, 0x1, (RIE_U8 *)&ucNewRegVal);
RadioConfiguration.radio_cfg_8_r = ucNewRegVal;
RadioConfiguration.radio_cfg_8_r = ucNewRegVal;
}
}
return Response;

View file

@ -89,10 +89,10 @@
* processor.
*/
int elfloader_arch_relocate(int input_fd,
struct elfloader_output *output,
unsigned int sectionoffset,
char *sectionaddr,
struct elf32_rela *rela, char *addr);
struct elfloader_output *output,
unsigned int sectionoffset,
char *sectionaddr,
struct elf32_rela *rela, char *addr);
#endif /* ELFLOADER_ARCH_H_ */

View file

@ -37,7 +37,7 @@
* Header file for the Contiki ELF loader.
* \author
* Adam Dunkels <adam@sics.se>
* Simon Berg <ksb@users.sourceforge.net>
* Simon Berg <ksb@users.sourceforge.net>
*
*/
@ -132,7 +132,7 @@
* Return value from elfloader_load() indicating that the offset for
* a relative addressing mode was too big.
*/
#define ELFLOADER_OUTOF_RANGE 9
#define ELFLOADER_OUTOF_RANGE 9
/**
* Return value from elfloader_load() indicating that the relocations
@ -144,13 +144,13 @@
* Return value from elfloader_load() indicating that reading from the
* ELF file failed in some way.
*/
#define ELFLOADER_INPUT_ERROR 11
#define ELFLOADER_INPUT_ERROR 11
/**
* Return value from elfloader_load() indicating that writing to a segment
* failed.
*/
#define ELFLOADER_OUTPUT_ERROR 12
#define ELFLOADER_OUTPUT_ERROR 12
#define ELFLOADER_SEG_TEXT 1
@ -164,10 +164,10 @@
* This object defines methods (callbacks) for writing the segments to memory.
* It can be extended by the user to include any necessary state.
*/
struct elfloader_output {
const struct elfloader_output_ops *ops;
};
/**
* \brief Allocate a new segment
* \param input The output object
@ -178,9 +178,8 @@ struct elfloader_output {
* The returned address doesn't need to correspond to any real memory,
* since it's only used for calculating the relocations.
*/
void *elfloader_allocate_segment(struct elfloader_output *output,
unsigned int type, int size);
unsigned int type, int size);
/**
* \brief Start writing to a new segment
@ -191,15 +190,14 @@ void *elfloader_allocate_segment(struct elfloader_output *output,
* \return Returns ELFLOADER_OK if successful, otherwise an error code
*
*/
int elfloader_start_segment(struct elfloader_output *output,
unsigned int type, void *addr, int size);
unsigned int type, void *addr, int size);
/**
* \brief Mark end of segment
* \param input The output object
* \return Zero if successful
*/
int elfloader_end_segment(struct elfloader_output *output);
/**
@ -209,9 +207,8 @@ int elfloader_end_segment(struct elfloader_output *output);
* \param len Length of data
* \return The number of bytes actually written, or negative if failed.
*/
int elfloader_write_segment(struct elfloader_output *output, const char *buf,
unsigned int len);
unsigned int len);
/**
* \brief Get the current offset in the file where the next data will
@ -219,7 +216,6 @@ int elfloader_write_segment(struct elfloader_output *output, const char *buf,
* \param input The output object
* \return The current offset.
*/
unsigned int elfloader_segment_offset(struct elfloader_output *output);
#define elfloader_output_alloc_segment(output, type, size) \
@ -240,12 +236,12 @@ unsigned int elfloader_segment_offset(struct elfloader_output *output);
struct elfloader_output_ops {
void * (*allocate_segment)(struct elfloader_output *output,
unsigned int type, int size);
unsigned int type, int size);
int (*start_segment)(struct elfloader_output *output,
unsigned int type, void *addr, int size);
unsigned int type, void *addr, int size);
int (*end_segment)(struct elfloader_output *output);
int (*write_segment)(struct elfloader_output *output, const char *buf,
unsigned int len);
unsigned int len);
unsigned int (*segment_offset)(struct elfloader_output *output);
};
@ -269,8 +265,7 @@ void elfloader_init(void);
* elfloader_loaded_process variable.
*
*/
int elfloader_load(int input_fd,
struct elfloader_output *output);
int elfloader_load(int input_fd, struct elfloader_output *output);
/**
* A pointer to the processes loaded with elfloader_load().

View file

@ -1001,11 +1001,11 @@ static NETBUF *NicGetPacket(void)
* Hack alert: Rev A chips never set the odd frame indicator.
*/
fbc -= 3;
/* nb = NutNetBufAlloc(0, NBAF_DATALINK, fbc);*/
/* nb = NutNetBufAlloc(0, NBAF_DATALINK, fbc);*/
/* Perform the read. */
/* if (nb)
NicRead(nb->nb_dl.vp, fbc);*/
/* if (nb)
NicRead(nb->nb_dl.vp, fbc);*/
}
/* Release the packet. */
@ -1191,12 +1191,12 @@ PROCESS_THREAD(lanc111_process, ev, data)
*/
imsk = nic_inlb(NIC_MSK);
nic_outlb(NIC_MSK, 0);
/* while ((nb = NicGetPacket()) != 0) {
if (nb != (NETBUF *) 0xFFFF) {
ni->ni_rx_packets++;
(*ifn->if_recv) (dev, nb);
}
}*/
/* while ((nb = NicGetPacket()) != 0) {
if (nb != (NETBUF *) 0xFFFF) {
ni->ni_rx_packets++;
(*ifn->if_recv) (dev, nb);
}
}*/
nic_outlb(NIC_MSK, imsk | INT_RCV | INT_ERCV);
}
@ -1351,7 +1351,7 @@ lanc111_init(void)
/* Register interrupt handler and enable interrupts. */
/* if (NutRegisterIrqHandler(&LANC111_SIGNAL, NicInterrupt, dev))
return -1;*/
return -1;*/
/*
* Start the receiver thread.

View file

@ -1,31 +1,30 @@
/*
* Copyright (c) 2006, Swedish Institute of Computer Science
* All rights reserved.
* 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.
* 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.
*
/**
* \file

View file

@ -28,7 +28,7 @@
* SUCH DAMAGE.
*
* This file is part of libmc1322x: see http://mc1322x.devl.org
* for details.
* for details.
*
*
*/

View file

@ -80,15 +80,15 @@ ISR(TIMERA1, timera1)
++count;
/* Make sure the CLOCK_CONF_SECOND is a power of two, to ensure
that the modulo operation below becomes a logical and and not
an expensive divide. Algorithm from Wikipedia:
http://en.wikipedia.org/wiki/Power_of_two */
that the modulo operation below becomes a logical and and not
an expensive divide. Algorithm from Wikipedia:
http://en.wikipedia.org/wiki/Power_of_two */
#if (CLOCK_CONF_SECOND & (CLOCK_CONF_SECOND - 1)) != 0
#error CLOCK_CONF_SECOND must be a power of two (i.e., 1, 2, 4, 8, 16, 32, 64, ...).
#error Change CLOCK_CONF_SECOND in contiki-conf.h.
#endif
if(count % CLOCK_CONF_SECOND == 0) {
++seconds;
++seconds;
energest_flush();
}
last_tar = read_tar();

View file

@ -52,5 +52,3 @@ enum {
/**@} // End of addtogroup
*/

View file

@ -2,7 +2,7 @@
* @brief Cortex-M3 Non-Volatile Memory data storage system.
* See @ref nvm for documentation.
*
* The functions in this file return an ::StStatus value.
* The functions in this file return an ::StStatus value.
* See error-def.h for definitions of all ::StStatus return values.
*
* See hal/micro/cortexm3/nvm.h for source code.
@ -27,7 +27,7 @@
* that is a multiple of physical flash pages. There are two pages: LEFT
* and RIGHT. The term "flash page" is used to refer to a page of
* physical flash.
*
*
* NVM data storage works by alternating between two pages: LEFT and RIGHT.
* The basic algorithm is driven by a call to halCommonSaveToNvm(). It will:
* - erase the inactive page
@ -58,35 +58,35 @@
* is LEFT then the state machine will advance until state 7 and then exit.
* If "Read from" is RIGHT, then the state machine will advance until
* state 3 and then exit.
*
*
* @code
* Starting from erased or invalid mgmt, write to LEFT
* State # 0 0 1 2 3
* Reads from: x x e w L L L
* State # 0 0 1 2 3
* Reads from: x x e w L L L
* Valid xx|xx FF|FF r r 00|FF 00|FF 00|00
* Active xx|xx FF|FF a i 00|FF 00|FF 00|00
* Dead xx|xx FF|FF s t FF|FF FF|00 FF|00
* Spare xx|xx FF|FF e e FF|FF FF|FF FF|FF
*
*
*
*
* Starting from LEFT page, transition to RIGHT page:
* State # 3 4 5 6 7
* Reads from: L e L w R R R
* State # 3 4 5 6 7
* Reads from: L e L w R R R
* Valid 00|00 r 00|FF r 00|00 00|00 00|00
* Active 00|00 a 00|FF i 00|FF 00|FF 00|00
* Dead FF|00 s FF|FF t FF|FF 00|FF 00|FF
* Spare FF|FF e FF|FF e FF|FF FF|FF FF|FF
*
*
*
*
* Starting from RIGHT page, transition to LEFT page:
* State # 7 8 9 10 3
* Reads from: R e R w L L L
* State # 7 8 9 10 3
* Reads from: R e R w L L L
* Valid 00|00 r FF|00 r 00|00 00|00 00|00
* Active 00|00 a FF|00 i FF|00 FF|00 00|00
* Dead 00|FF s FF|FF t FF|FF FF|00 FF|00
* Spare FF|FF e FF|FF e FF|FF FF|FF FF|FF
* @endcode
*
*
* Based on the 10 possible states, there are 5 valid 32bit mgmt words:
* - 0xFFFFFFFF
* - 0xFFFFFF00
@ -95,7 +95,7 @@
* - 0xFF00FFFF
* The algorithm determines the current state by using these 5 mgmt words
* with the 10 possible combinations of LEFT mgmt and RIGHT mgmt.
*
*
* Detailed State Description:
* - State 0:
* In this state the mgmt bytes do not conform to any of the other states
@ -135,8 +135,8 @@
* Once at these states, the current page is marked Valid and Active and
* the old page is marked as Dead. The algorithm knows which page to
* read from and which page needs to be erased on the next write to the NVM.
*
*
*
*
* Notes on algorithm behavior:
* - Refer to nvm-def.h for a list of offset/length that define the data
* stored in NVM storage space.
@ -189,14 +189,14 @@
/**
* @brief Copy the NVM data from flash into the provided RAM location.
* It is illegal for the offset to be greater than NVM_DATA_SIZE_B.
*
*
* @param data A (RAM) pointer to where the data should be copied.
*
*
* @param offset The location from which the data should be copied. Must be
* 16bit aligned.
*
*
* @param length The length of the data in bytes. Must be 16bit aligned.
*
*
* @return An StStatus value indicating the success of the function.
* - ST_SUCCESS if the read completed cleanly.
* - ST_ERR_FATAL if the NVM storage management indicated an invalid
@ -206,10 +206,10 @@ StStatus halCommonReadFromNvm(void *data, uint32_t offset, uint16_t length);
/**
* @brief Return the address of the token in NVM
*
*
* @param offset The location offset from which the address should be returned
*
*
*
*
* @return The address requested
*/
uint16_t *halCommonGetAddressFromNvm(uint32_t offset);
@ -217,14 +217,14 @@ uint16_t *halCommonGetAddressFromNvm(uint32_t offset);
/**
* @brief Write the NVM data from the provided location RAM into flash.
* It is illegal for the offset to be greater than NVM_DATA_SIZE_B.
*
*
* @param data A (RAM) pointer from where the data should be taken.
*
*
* @param offset The location to which the data should be written. Must be
* 16bit aligned.
*
*
* @param length The length of the data in bytes. Must be 16bit aligned.
*
*
* @return An StStatus value indicating the success of the function.
* - ST_SUCCESS if the write completed cleanly.
* - Any other status value is an error code generated by the low level

View file

@ -23,14 +23,14 @@ typedef enum
/**
* @brief Initialize the UART
*
*
* @param baudrate The baudrate which will be used for communication.
* Ex: 115200
*
*
* @param databits The number of data bits used for communication.
* Valid values are 7 or 8
*
* @param parity The type of parity used for communication.
*
* @param parity The type of parity used for communication.
* See the SerialParity enum for possible values
*
* @return stopbits The number of stop bits used for communication.
@ -45,9 +45,9 @@ void uartInit(uint32_t baudrate, uint8_t databits, SerialParity parity, uint8_t
* instead which does not define fflush(). Therefore, we manually define
* fflush() in the low level UART driver. This function simply redirects
* to the __write() function with a NULL buffer, triggering a flush.
*
*
* @param handle The output stream. Should be set to 'stdout' like normal.
*
*
* @return Zero, indicating success.
*/
size_t fflush(int handle);
@ -61,7 +61,7 @@ size_t fflush(int handle);
#define stdout _LLIO_STDOUT
#endif
/**
* @brief Read the input byte if any.
* @brief Read the input byte if any.
*/
boolean __io_getcharNonBlocking(uint8_t *data);
void __io_putchar( char c );

View file

@ -1,6 +1,6 @@
/**
/**
* \brief Compiler and Platform specific definitions and typedefs common to
* all platforms.
* all platforms.
*
* platform-common.h provides PLATFORM_HEADER defaults and common definitions.
* This head should never be included directly, it should only be included
@ -20,7 +20,7 @@
* <!--(C) COPYRIGHT 2010 STMicroelectronics. All rights reserved. -->
*/
#ifndef PLATCOMMONOKTOINCLUDE
// This header should only be included by a PLATFORM_HEADER
#error platform-common.h should not be included directly
@ -29,7 +29,7 @@
#ifndef PLATFORMCOMMON_H_
#define PLATFORMCOMMON_H_
////////////////////////////////////////////////////////////////////////////////
// Many of the common definitions must be explicitly enabled by the
// Many of the common definitions must be explicitly enabled by the
// particular PLATFORM_HEADER being used
////////////////////////////////////////////////////////////////////////////////
@ -69,16 +69,16 @@
////////////////////////////////////////////////////////////////////////////////
#ifdef _HAL_USE_COMMON_DIVMOD_
/** \name Divide and Modulus Operations
* Some platforms can perform divide and modulus operations on 32 bit
* Some platforms can perform divide and modulus operations on 32 bit
* quantities more efficiently when the divisor is only a 16 bit quantity.
* C compilers will always promote the divisor to 32 bits before performing the
* operation, so the following utility functions are instead required to take
* operation, so the following utility functions are instead required to take
* advantage of this optimisation.
*/
//@{
/**
* \brief Provide a portable name for the uint32_t by uint16_t division
* library function (which can perform the division with only a single
* library function (which can perform the division with only a single
* assembly instruction on some platforms)
*/
#define halCommonUDiv32By16(x, y) ((uint16_t) (((uint32_t) (x)) / ((uint16_t) (y))))
@ -111,12 +111,12 @@
#ifdef _HAL_USE_COMMON_MEMUTILS_
/** \name C Standard Library Memory Utilities
* These should be used in place of the standard library functions.
*
*
* These functions have the same parameters and expected results as their C
* Standard Library equivalents but may take advantage of certain implementation
* optimizations.
*
* Unless otherwise noted, these functions are utilized by the StStack and are
*
* Unless otherwise noted, these functions are utilized by the StStack and are
* therefore required to be implemented in the HAL. Additionally, unless otherwise
* noted, applications that find these functions useful may utilze them.
*/
@ -212,22 +212,22 @@
#define SETBIT(reg, bit) reg |= BIT(bit)
/**
* \brief Sets the bits in the \c reg register or the byte
* as specified in the bitmask \c bits.
* \brief Sets the bits in the \c reg register or the byte
* as specified in the bitmask \c bits.
* @note This is never a single atomic operation.
*/
#define SETBITS(reg, bits) reg |= (bits)
/**
* \brief Clears a bit in the \c reg register or byte.
* @note Assuming \c reg is an IO register, some platforms (such as the AVR)
* \brief Clears a bit in the \c reg register or byte.
* @note Assuming \c reg is an IO register, some platforms (such as the AVR)
* can implement this in a single atomic operation.
*/
#define CLEARBIT(reg, bit) reg &= ~(BIT(bit))
/**
* \brief Clears the bits in the \c reg register or byte
* as specified in the bitmask \c bits.
* \brief Clears the bits in the \c reg register or byte
* as specified in the bitmask \c bits.
* @note This is never a single atomic operation.
*/
#define CLEARBITS(reg, bits) reg &= ~(bits)
@ -238,7 +238,7 @@
#define READBIT(reg, bit) (reg & (BIT(bit)))
/**
* \brief Returns the value of the bitmask \c bits within
* \brief Returns the value of the bitmask \c bits within
* the register or byte \c reg.
*/
#define READBITS(reg, bits) (reg & (bits))
@ -263,13 +263,13 @@
#define HIGH_BYTE(n) ((uint8_t)(LOW_BYTE((n) >> 8)))
/**
* \brief Returns the value built from the two \c uint8_t
* \brief Returns the value built from the two \c uint8_t
* values \c high and \c low.
*/
#define HIGH_LOW_TO_INT(high, low) ( \
(( (uint16_t) (high) ) << 8) + \
( (uint16_t) ( (low) & 0xFF)) \
)
)
/**
* \brief Returns the low byte of the 32-bit value \c n as an \c uint8_t.
@ -301,21 +301,21 @@
//@{
/**
* \brief Returns the elapsed time between two 8 bit values.
* \brief Returns the elapsed time between two 8 bit values.
* Result may not be valid if the time samples differ by more than 127
*/
#define elapsedTimeInt8u(oldTime, newTime) \
((uint8_t) ((uint8_t)(newTime) - (uint8_t)(oldTime)))
/**
* \brief Returns the elapsed time between two 16 bit values.
* \brief Returns the elapsed time between two 16 bit values.
* Result may not be valid if the time samples differ by more than 32767
*/
#define elapsedTimeInt16u(oldTime, newTime) \
((uint16_t) ((uint16_t)(newTime) - (uint16_t)(oldTime)))
/**
* \brief Returns the elapsed time between two 32 bit values.
* \brief Returns the elapsed time between two 32 bit values.
* Result may not be valid if the time samples differ by more than 2147483647
*/
#define elapsedTimeInt32u(oldTime, newTime) \

View file

@ -149,4 +149,3 @@ StStatus halBootloaderStart(uint8_t mode, uint8_t channel, uint16_t panId);
/** @} END micro group */
/** @} */

View file

@ -7,11 +7,11 @@
* \defgroup sicslowpan 6LoWPAN implementation
* @{
6lowpan is a Working Group in IETF which defines the use of IPv6 on
6lowpan is a Working Group in IETF which defines the use of IPv6 on
IEEE 802.15.4 links.
Our implementation is based on RFC4944 <em>Transmission of IPv6
Packets over IEEE 802.15.4 Networks</em>, draft-hui-6lowpan-interop-00
Packets over IEEE 802.15.4 Networks</em>, draft-hui-6lowpan-interop-00
<em>Interoperability Test for 6LoWPAN</em>, and draft-hui-6lowpan-hc-01
<em>Compression format for IPv6 datagrams in 6lowpan Networks</em>.
@ -24,7 +24,7 @@ Packets over IEEE 802.15.4 Networks</em>, draft-hui-6lowpan-interop-00
\subsection rfc4944 RFC 4944
RFC4944 defines address configuration mechanisms based on 802.15.4
16-bit and 64-bit addresses, fragmentation of IPv6 packets below IP
16-bit and 64-bit addresses, fragmentation of IPv6 packets below IP
layer, IPv6 and UDP header compression, a mesh header to enable link-layer
forwarding in a mesh under topology, and a broadcast header to enable
broadcast in a mesh under topology.
@ -32,7 +32,7 @@ broadcast in a mesh under topology.
We implement addressing, fragmentation, and header compression. We support
the header compression scenarios defined in draft-hui-6lowpan-interop-00.
This draft defines an interoperability scenario which was used between
This draft defines an interoperability scenario which was used between
ArchRock and Sensinode implementations.
We do not implement mesh under related features, as we target route over
@ -40,8 +40,8 @@ techniques.
\subsection hc01 draft-hui-6lowpan-hc-01
draft-hui-6lowpan-hc-01 defines a stateful header compression mechanism
which should soon deprecate the stateless header compression mechanism
draft-hui-6lowpan-hc-01 defines a stateful header compression mechanism
which should soon deprecate the stateless header compression mechanism
defined in RFC4944. It is much more powerfull and flexible, in
particular it allows compression of some multicast addresses and of all
global unicast addresses.
@ -59,7 +59,7 @@ It is initialized from the MAC %process, which calls sicslowpan_init
The main 6lowpan functions are implemented in the sicslowpan.h and
sicslowpan.c files. They are used to format packets between the
802.15.4 and the IPv6 layers.
802.15.4 and the IPv6 layers.
6lowpan also creates a few IPv6 and link-layer dependencies which are
detailed in the next section.
@ -89,13 +89,13 @@ typedef struct uip_802154_longaddr uip_lladdr_t;
\endcode
<b>Neighbor Discovery Link Layer Address options </b><br>
The format of ND link-layer address options depends on the length of
the link-layer addresses.
The format of ND link-layer address options depends on the length of
the link-layer addresses.
802.15.4 specificities regarding link-layer address options are implemented in uip-nd6.h.
\code
#define UIP_ND6_OPT_SHORT_LLAO_LEN 8
#define UIP_ND6_OPT_LONG_LLAO_LEN 16
#define UIP_ND6_OPT_LLAO_LEN UIP_ND6_OPT_LONG_LLAO_LEN
#define UIP_ND6_OPT_LLAO_LEN UIP_ND6_OPT_LONG_LLAO_LEN
\endcode
<b>Address Autoconfiguration</b><br>
@ -105,7 +105,7 @@ the link-layer address. The dependency is reflected in the
\code
#if (UIP_LLADDR_LEN == 8)
memcpy(ipaddr->u8 + 8, lladdr, UIP_LLADDR_LEN);
ipaddr->u8[8] ^= 0x02;
ipaddr->u8[8] ^= 0x02;
\endcode
\subsection io Packet Input/Output
@ -119,24 +119,24 @@ destination link-layer addresses as two rime addresses.
\code
packetbuf_copyfrom(&rx_frame.payload, rx_frame.payload_length);
packetbuf_set_datalen(rx_frame.payload_length);
packetbuf_set_addr(PACKETBUF_ADDR_RECEIVER, (const rimeaddr_t *)&rx_frame.dest_addr);
packetbuf_set_addr(PACKETBUF_ADDR_RECEIVER, (const rimeaddr_t *)&rx_frame.dest_addr);
packetbuf_set_addr(PACKETBUF_ADDR_SENDER, (const rimeaddr_t *)&rx_frame.src_addr);
\endcode
It then calls the sicslowpan #input function. Similarly, when the IPv6 layer
It then calls the sicslowpan #input function. Similarly, when the IPv6 layer
has a packet to send over the radio, it puts the packet in uip_buf,
sets uip_len and calls the sicslowpan #output function.
\subsection frag Fragmentation
\li #output function: When an IP packet, after header compression, is
too big to fit in a 802.15.4 frame, it is fragmented in several packets
which are sent successively over the radio. The packets are formatted
too big to fit in a 802.15.4 frame, it is fragmented in several packets
which are sent successively over the radio. The packets are formatted
as defined in RFC 4944. Only the first fragment contains the IP/UDP
compressed or uncompressed header fields.
\li #input function: This function takes care of fragment
reassembly. We do not assume that the fragments are received in order.
When reassembly of a packet is ongoing, we discard any non fragmented
reassembly. We do not assume that the fragments are received in order.
When reassembly of a packet is ongoing, we discard any non fragmented
packet or fragment from another packet. Reassembly times out after
#SICSLOWPAN_REASS_MAXAGE = 20s.
@ -145,7 +145,7 @@ compilation option.
\note As we do not support complex buffer allocation mechanism, for now
we define a new 1280 bytes buffer (#sicslowpan_buf) to reassemble packets.
At reception, once all the fragments are received, we copy the packet
At reception, once all the fragments are received, we copy the packet
to #uip_buf, set #uip_len, and call #tcpip_input.
\note #MAC_MAX_PAYLOAD defines the maximum payload
@ -161,7 +161,7 @@ The #SICSLOWPAN_CONF_COMPRESSION compilation option defines the
HC1 and IPv6 compression are defined in RFC4944, HC01 in
draft-hui-6lowpan-hc. What we call IPv6 compression means sending packets
with no compression, and adding the IPv6 dispatch before the IPv6 header.<br>
If at compile time IPv6 "compression" is chosen, packets sent will never
If at compile time IPv6 "compression" is chosen, packets sent will never
be compressed, and compressed packets will not be processed at reception.<br>
If at compile time either HC1 or HC01 are chosen, we will try to compress
all fields at sending, and will accept packets compressed with the
@ -170,7 +170,7 @@ Note that HC1 and HC01 supports are mutually exclusive. HC01 should soon
deprecate HC1.
<b>Compression related functions</b><br>
When a packet is received, the #input function is called. Fragmentation
When a packet is received, the #input function is called. Fragmentation
issues are handled, then we check the dispatch byte: if it is IPv6, we
treat the packet inline. If it is HC1 or HC01, the corresponding
decompression function (#uncompress_hdr_hc1 or #uncompress_hdr_hc01)
@ -184,21 +184,21 @@ to compress the packet as much as possible.
<b>HC1 comments</b><br>
In HC1, if the IPv6 flow label is not compressed, we would need to copy
the fields after the flow label starting in the middle of a byte (the
flow label is 20 bits long). To avoid this, we compress the packets only
flow label is 20 bits long). To avoid this, we compress the packets only
if all fields can be compressed. If we cannot, we use the IPv6 dispatch
and send all headers fields inline. This behavior is the one defined in
draft-hui-6lowpan-interop-00.<br>
In the same way, if the packet is an UDP packet, we compress the UDP
In the same way, if the packet is an UDP packet, we compress the UDP
header only if all fields can be compressed.<br>
Note that HC1 can only compress unicast link local addresses. For this
Note that HC1 can only compress unicast link local addresses. For this
reason, we recommend using HC01.
<b>HC01 comments</b><br>
HC01 uses address contexts to enable compression of global unicast
HC01 uses address contexts to enable compression of global unicast
addresses. All nodes must share context (namely the global prefixes in
use) to compress and uncompress such addresses successfully. The context
number is defined by 2 bits. Context 00 is reserved for the link local
context. Other contexts have to be distributed within the LoWPAN
number is defined by 2 bits. Context 00 is reserved for the link local
context. Other contexts have to be distributed within the LoWPAN
dynamically, by means of ND extensions yet to be defined.<br>
Until then, if you want to test global address compression, you need
to configure the global contexts manually.

View file

@ -6,7 +6,7 @@
/**
* \defgroup uip6 uIP IPv6 specific features
*
The uIP IPv6 stack provides new Internet communication abilities to Contiki.
The uIP IPv6 stack provides new Internet communication abilities to Contiki.
This document describes Ipv6 specific features. For features that
are common to the IPv4 and IPv6 code please refer to \ref uip "uIP".
@ -21,7 +21,7 @@ for extensions and options, and its new QoS and security capabilities.
The uip IPv6 stack implementation targets constrained devices such as
sensors. The code size is around 11.5Kbyte and the RAM usage around
1.7Kbyte (see \ref size "below" for more detailed information).
1.7Kbyte (see \ref size "below" for more detailed information).
Our implementation follows closely RFC 4294 <em>IPv6 Node Requirements</em>
whose goal is to allow "IPv6 to function well and
interoperate in a large number of situations and deployments".
@ -38,12 +38,12 @@ http://www.ietf.org/rfc.html.
\note The #NETSTACK_CONF_WITH_IPV6 compilation flag is used to enable IPv6.
It is also recommended to set #UIP_CONF_IPV6_CHECKS to 1
if one cannot guarantee that the incoming packets are correctly formed.
if one cannot guarantee that the incoming packets are correctly formed.
\subsection ipv6 IPv6 (RFC 2460)
The IP packets are processed in the #uip_process function.
After a few validity checks on the IPv6 header, the extension headers
are processed until an upper layer (ICMPv6, UDP or TCP) header is found.
are processed until an upper layer (ICMPv6, UDP or TCP) header is found.
We support 4 extension headers:
\li Hop-by-Hop Options: this header is used to carry optional
information that need to be examined only by a packet's destination node.
@ -81,18 +81,18 @@ typedef union uip_ip6addr_t {
\endcode
We assume that each node has a <em>single interface</em> of type
#uip_ds6_netif_t.
#uip_ds6_netif_t.
Each interface can have a configurable number of unicast IPv6
addresses including its link-local address. It also has a
solicited-node multicast address. We assume that the unicast
addresses are obtained via \ref autoconf "stateless address autoconfiguration"
addresses are obtained via \ref autoconf "stateless address autoconfiguration"
so that the solicited-node address is the same for all the
unicast addresses. Indeed, the solicited-node multicast address
is formed by combining the prefix FF02::1:FF00:0/104 and the
last 24-bits of the corresponding IPv6 address. When using stateless address
autoconfiguration these bits are always equal to the last 24-bits of
the link-layer address.
the link-layer address.
\subsection multicast Multicast support
We do not support applications using multicast. Nevertheless, our node
@ -108,7 +108,7 @@ safely skipped and we do so.
other's presence, to determine each other's link-layer addresses, to
find routers, and to maintain reachability information about the paths
to active neighbors" (citation from the abstract of RFC
4861).
4861).
\note In IPv6 terminology, a \em link is a communication medium over
which nodes can communicate at the link layer, i.e., the layer
@ -157,7 +157,7 @@ different entry fields.
<b>Neighbor discovery processes </b><br>
\li Address resolution\n
Determine the link-layer address of a %neighbor given its IPv6 address.\n
-> send a NS (done in #tcpip_ipv6_output).
-> send a NS (done in #tcpip_ipv6_output).
\li Neighbor unreachability detection\n
Verify that a neighbor is still reachable via a cached link-layer
address.\n
@ -183,7 +183,7 @@ Configure an address for an interface by combining a received prefix
and the interface ID (see #uip_netif_addr_add). The interface ID is
obtained from the link-layer address using #uip_netif_get_interface_id.\n
-> Receive a RA with a prefix information option that has the
autonomous flag set.
autonomous flag set.
When an interface becomes active, its link-local address is created
by combining the FE80::0/64 prefix and the interface ID. DAD is then
@ -196,14 +196,14 @@ performed in #uip_netif_init.
\subsection icmpv6 ICMPv6 (RFC 4443)
We support ICMPv6 Error messages as well as Echo Reply and Echo Request
messages. The application used for sending Echo Requests (see ping6.c)
is not part of the IP stack.
is not part of the IP stack.
\note RFC 4443 stipulates that 'Every ICMPv6 error message MUST
include as much of the IPv6 offending (invoking) packet as
possible'. In a constrained environment this is not very resource
friendly.
The ICMPv6 message headers and constants are defined in uip-icmp6.h.
The ICMPv6 message headers and constants are defined in uip-icmp6.h.
<HR>
@ -232,16 +232,16 @@ This could be avoided by using callback timers to handle ND and Netif structures
<HR>
\section compileflags Compile time flags and variables
This section just lists all IPv6 related compile time flags. Each flag
This section just lists all IPv6 related compile time flags. Each flag
function is documented in this page in the appropriate section.
\code
/*Boolean flags*/
NETSTACK_CONF_WITH_IPV6
NETSTACK_CONF_WITH_IPV6
UIP_CONF_IPV6_CHECKS
UIP_CONF_IPV6_QUEUE_PKT
UIP_CONF_IPV6_REASSEMBLY
UIP_CONF_IPV6_QUEUE_PKT
UIP_CONF_IPV6_REASSEMBLY
/*Integer flags*/
UIP_CONF_NETIF_MAX_ADDRESSES
UIP_CONF_NETIF_MAX_ADDRESSES
NBR_TABLE_CONF_MAX_NEIGHBORS
\endcode
@ -252,7 +252,7 @@ The IPv6 code uses the same \ref memory "single global buffer" as the
IPv4 code. This buffer should be large enough to contain one
packet of maximum size, i.e., #UIP_LINK_MTU = 1280 bytes. When \ref
reass "fragment reassembly" is enabled an additional buffer of the
same size is used.
same size is used.
The only difference with the IPv4 code is the per %neighbor buffering
that is available when #UIP_CONF_IPV6_QUEUE_PKT is set to 1. This
@ -272,20 +272,20 @@ our code. These numbers are obtained using 'avr-gcc 4.2.2 (WinAVR
\note The following compilation flags were used:
\code
UIP_CONF_IPV6 1
UIP_CONF_IPV6_CHECKS 1
UIP_CONF_IPV6_QUEUE_PKT 0
UIP_CONF_IPV6_REASSEMBLY 0
UIP_CONF_IPV6 1
UIP_CONF_IPV6_CHECKS 1
UIP_CONF_IPV6_QUEUE_PKT 0
UIP_CONF_IPV6_REASSEMBLY 0
UIP_NETIF_MAX_ADDRESSES 3
UIP_ND6_MAX_PREFIXES 3
UIP_ND6_MAX_NEIGHBORS 4
UIP_ND6_MAX_DEFROUTER 2
UIP_NETIF_MAX_ADDRESSES 3
UIP_ND6_MAX_PREFIXES 3
UIP_ND6_MAX_NEIGHBORS 4
UIP_ND6_MAX_DEFROUTER 2
\endcode
The total IPv6 code size is approximately 11.5Kbyte and the RAM usage around
1.8Kbyte. For an additional NEIGHBOR count 35bytes, 25 for an additional
PREFIX, 7 for an additional DEFROUTER, and 25 for an additional ADDRESS.
PREFIX, 7 for an additional DEFROUTER, and 25 for an additional ADDRESS.
<HR>
@ -345,7 +345,7 @@ We will soon support RFC4944 transmission of IPv6 packets over 802.15.4\n
\li ICMPv6 RFC 4443 (MUST): full support
\li IPv6 addressing architecture RFC 3513 (MUST): full support
\li Privacy extensions for address autoconfiguration RFC 3041 (SHOULD): no support.
\li Default Address Selection RFC 3484 (MUST): full support.
\li Default Address Selection RFC 3484 (MUST): full support.
\li MLDv1 (RFC 2710) and MLDv2 (RFC 3810) (conditional MUST applying here): no support. As we run IPv6 over Multicast or broadcast capable links (Ethernet or 802.15.4), the conditional MUST applies. We should be able to send an MLD report when joining a solicited node multicast group at address configuration time. This will be available in a later release.
<b>DNS (RFC 1034, 1035, 3152, 3363, 3596) and DHCPv6 (RFC 3315) (conditional MUST)</b><br>

View file

@ -103,7 +103,7 @@ void menu_process(char c);
extern char usb_busy;
//! Counter for USB Serial port
extern U8 tx_counter;
extern U8 tx_counter;
//! Timers for LEDs
uint8_t led3_timer;

View file

@ -66,7 +66,7 @@ extract_random_bit_() {
cli();
#ifdef PRR
// Enable ADC module
// Enable ADC module
PRR &= ~(1 << PRADC);
#endif
@ -100,7 +100,7 @@ extract_random_bit_() {
// Toggling the reference voltage
// seems to help introduce noise.
ADMUX^=(1<<REFS1);
// We only want to exit the loop if the first
// and second sampled bits are different.
// This is preliminary conditioning.
@ -156,7 +156,7 @@ static uint8_t
extract_random_bit_() {
uint8_t ret;
uint8_t trx_ctrl_0 = hal_register_read(TRX_CTRL_0);
// Set radio clock output to 8MHz
hal_register_write(TRX_CTRL_0,0x8|5);
@ -170,10 +170,10 @@ extract_random_bit_() {
// Toss out the other bit, we only care about one of them.
ret &= 1;
// Restore the clkm state
hal_register_write(TRX_CTRL_0,trx_ctrl_0);
return ret;
}

View file

@ -191,7 +191,7 @@ contiki_init(void)
/* Initialize communication stack */
netstack_init();
printf("%s/%s/%s, channel check rate %lu Hz\n",
NETSTACK_NETWORK.name, NETSTACK_MAC.name, NETSTACK_RDC.name,
NETSTACK_NETWORK.name, NETSTACK_MAC.name, NETSTACK_RDC.name,
CLOCK_SECOND / (NETSTACK_RDC.channel_check_interval() == 0 ? 1:
NETSTACK_RDC.channel_check_interval()));

View file

@ -228,7 +228,7 @@ contiki_init()
set_rime_addr();
{
uint8_t longaddr[8];
memset(longaddr, 0, sizeof(longaddr));
linkaddr_copy((linkaddr_t *)&longaddr, &linkaddr_node_addr);
printf("MAC %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x ",
@ -241,7 +241,7 @@ contiki_init()
/* Initialize communication stack */
netstack_init();
printf("%s/%s/%s, channel check rate %lu Hz\n",
NETSTACK_NETWORK.name, NETSTACK_MAC.name, NETSTACK_RDC.name,
NETSTACK_NETWORK.name, NETSTACK_MAC.name, NETSTACK_RDC.name,
CLOCK_SECOND / (NETSTACK_RDC.channel_check_interval() == 0 ? 1:
NETSTACK_RDC.channel_check_interval()));
@ -294,11 +294,11 @@ contiki_init()
int i;
lladdr = uip_ds6_get_link_local(-1);
for(i = 0; i < 7; ++i) {
printf("%02x%02x:", lladdr->ipaddr.u8[i * 2],
lladdr->ipaddr.u8[i * 2 + 1]);
printf("%02x%02x:", lladdr->ipaddr.u8[i * 2],
lladdr->ipaddr.u8[i * 2 + 1]);
}
printf("%02x%02x\n", lladdr->ipaddr.u8[14],
lladdr->ipaddr.u8[15]);
lladdr->ipaddr.u8[15]);
}
if(1) {
@ -320,7 +320,7 @@ contiki_init()
/* Initialize eeprom */
eeprom_init();
/* Start serial process */
serial_line_init();
@ -417,10 +417,9 @@ JNIEXPORT void JNICALL
Java_org_contikios_cooja_corecomm_CLASSNAME_setMemory(JNIEnv *env, jobject obj, jint rel_addr, jint length, jbyteArray mem_arr)
{
jbyte *mem = (*env)->GetByteArrayElements(env, mem_arr, 0);
memcpy(
(char*) (((long)rel_addr) + referenceVar),
mem,
length);
memcpy((char*) (((long)rel_addr) + referenceVar),
mem,
length);
(*env)->ReleaseByteArrayElements(env, mem_arr, mem, 0);
}
/*---------------------------------------------------------------------------*/
@ -453,7 +452,7 @@ Java_org_contikios_cooja_corecomm_CLASSNAME_tick(JNIEnv *env, jobject obj)
doActionsBeforeTick();
/* Poll etimer process */
if (etimer_pending()) {
if(etimer_pending()) {
etimer_request_poll();
}
@ -481,9 +480,9 @@ Java_org_contikios_cooja_corecomm_CLASSNAME_tick(JNIEnv *env, jobject obj)
nextRtimer = rtimer_arch_next() - (rtimer_clock_t) simCurrentTime;
if(etimer_pending() && rtimer_arch_pending()) {
simNextExpirationTime = MIN(nextEtimer, nextRtimer);
} else if (etimer_pending()) {
} else if(etimer_pending()) {
simNextExpirationTime = nextEtimer;
} else if (rtimer_arch_pending()) {
} else if(rtimer_arch_pending()) {
simNextExpirationTime = nextRtimer;
}
}

View file

@ -122,5 +122,4 @@ status(int type)
}
}
/*---------------------------------------------------------------------------*/
SENSORS_SENSOR(acc_sensor, ACC_SENSOR,
value, configure, status);
SENSORS_SENSOR(acc_sensor, ACC_SENSOR, value, configure, status);

View file

@ -100,5 +100,4 @@ configure(int type, int c)
}
}
/*---------------------------------------------------------------------------*/
SENSORS_SENSOR(ext_sensor, "Ext",
value, configure, status);
SENSORS_SENSOR(ext_sensor, "Ext", value, configure, status);