Merge pull request #962 from g-oikonomou/doxy-fixes
Improve doxygen docs across the board
This commit is contained in:
commit
9daf31ee81
69 changed files with 1675 additions and 1109 deletions
|
@ -31,9 +31,11 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \file Shell command for downloading files from a remote node.
|
* \file
|
||||||
|
*
|
||||||
|
* Shell command for downloading files from a remote node.
|
||||||
* Example usage:
|
* Example usage:
|
||||||
* 'download <node addr> <filename> | write <local_filename'.
|
* 'download \<node addr\> \<filename\> | write \<local_filename\>'.
|
||||||
*
|
*
|
||||||
* \author Luca Mottola <luca@sics.se>, Fredrik Osterlind <fros@sics.se>
|
* \author Luca Mottola <luca@sics.se>, Fredrik Osterlind <fros@sics.se>
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -201,6 +201,7 @@ void ctk_draw_clear_window(struct ctk_window *window,
|
||||||
* drawn, in screen coordinates (line 1 is the first line below the
|
* drawn, in screen coordinates (line 1 is the first line below the
|
||||||
* menus)
|
* menus)
|
||||||
*
|
*
|
||||||
|
* \param draw_borders The border style
|
||||||
*/
|
*/
|
||||||
void ctk_draw_window(struct ctk_window *window,
|
void ctk_draw_window(struct ctk_window *window,
|
||||||
unsigned char focus,
|
unsigned char focus,
|
||||||
|
@ -318,7 +319,7 @@ extern unsigned char ctk_draw_windowborder_width,
|
||||||
/**
|
/**
|
||||||
* The character used for the Return/Enter key.
|
* The character used for the Return/Enter key.
|
||||||
*
|
*
|
||||||
* \define #define CH_ENTER '\n'
|
* \#define CH_ENTER '\n'
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -77,7 +77,7 @@ unsigned short crc16_add(unsigned char b, unsigned short crc);
|
||||||
* \brief Calculate the CRC16 over a data area
|
* \brief Calculate the CRC16 over a data area
|
||||||
* \param data Pointer to the data
|
* \param data Pointer to the data
|
||||||
* \param datalen The length of the data
|
* \param datalen The length of the data
|
||||||
* \param crc The accumulated CRC that is to be updated (or zero).
|
* \param acc The accumulated CRC that is to be updated (or zero).
|
||||||
* \return The CRC16 checksum.
|
* \return The CRC16 checksum.
|
||||||
*
|
*
|
||||||
* This function calculates the CRC16 checksum of a data area.
|
* This function calculates the CRC16 checksum of a data area.
|
||||||
|
|
|
@ -142,7 +142,7 @@ int simple_udp_sendto(struct simple_udp_connection *c,
|
||||||
* \param data A pointer to the data to be sent
|
* \param data A pointer to the data to be sent
|
||||||
* \param datalen The length of the data
|
* \param datalen The length of the data
|
||||||
* \param to The IP address of the receiver
|
* \param to The IP address of the receiver
|
||||||
* \param port The UDP port of the receiver, in host byte order
|
* \param to_port The UDP port of the receiver, in host byte order
|
||||||
*
|
*
|
||||||
* This function sends a UDP packet to a specified IP
|
* This function sends a UDP packet to a specified IP
|
||||||
* address and UDP port. The packet will be sent with the
|
* address and UDP port. The packet will be sent with the
|
||||||
|
|
|
@ -350,7 +350,7 @@ void uip_setipid(uint16_t id);
|
||||||
* Periodic processing for a connection identified by its number.
|
* Periodic processing for a connection identified by its number.
|
||||||
*
|
*
|
||||||
* This function does the necessary periodic processing (timers,
|
* This function does the necessary periodic processing (timers,
|
||||||
* polling) for a uIP TCP conneciton, and should be called when the
|
* polling) for a uIP TCP connection, and should be called when the
|
||||||
* periodic uIP timer goes off. It should be called for every
|
* periodic uIP timer goes off. It should be called for every
|
||||||
* connection, regardless of whether they are open of closed.
|
* connection, regardless of whether they are open of closed.
|
||||||
*
|
*
|
||||||
|
@ -393,8 +393,10 @@ void uip_setipid(uint16_t id);
|
||||||
uip_process(UIP_TIMER); } while (0)
|
uip_process(UIP_TIMER); } while (0)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Macro to determine whether a specific uIP connection is active
|
||||||
*
|
*
|
||||||
*
|
* \param conn The connection's number
|
||||||
|
* \retval 0 Connection closed
|
||||||
*/
|
*/
|
||||||
#define uip_conn_active(conn) (uip_conns[conn].tcpstateflags != UIP_CLOSED)
|
#define uip_conn_active(conn) (uip_conns[conn].tcpstateflags != UIP_CLOSED)
|
||||||
|
|
||||||
|
@ -489,7 +491,7 @@ void uip_reass_over(void);
|
||||||
/**
|
/**
|
||||||
* The uIP packet buffer.
|
* The uIP packet buffer.
|
||||||
*
|
*
|
||||||
* The uip_buf array is used to hold incoming and outgoing
|
* The uip_aligned_buf array is used to hold incoming and outgoing
|
||||||
* packets. The device driver should place incoming data into this
|
* packets. The device driver should place incoming data into this
|
||||||
* buffer. When sending data, the device driver should read the link
|
* buffer. When sending data, the device driver should read the link
|
||||||
* level headers and the TCP/IP headers from this buffer. The size of
|
* level headers and the TCP/IP headers from this buffer. The size of
|
||||||
|
@ -519,6 +521,8 @@ typedef union {
|
||||||
} uip_buf_t;
|
} uip_buf_t;
|
||||||
|
|
||||||
CCIF extern uip_buf_t uip_aligned_buf;
|
CCIF extern uip_buf_t uip_aligned_buf;
|
||||||
|
|
||||||
|
/** Macro to access uip_aligned_buf as an array of bytes */
|
||||||
#define uip_buf (uip_aligned_buf.u8)
|
#define uip_buf (uip_aligned_buf.u8)
|
||||||
|
|
||||||
|
|
||||||
|
@ -1097,7 +1101,7 @@ struct uip_udp_conn *uip_udp_new(const uip_ipaddr_t *ripaddr, uint16_t rport);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* Check if an address is a broadcast address for a network.
|
* Check if an address is a broadcast address for a network.
|
||||||
*
|
*
|
||||||
* Checks if an address is the broadcast address for a network. The
|
* Checks if an address is the broadcast address for a network. The
|
||||||
|
@ -2172,7 +2176,7 @@ CCIF extern uip_lladdr_t uip_lladdr;
|
||||||
*
|
*
|
||||||
* See RFC1071.
|
* See RFC1071.
|
||||||
*
|
*
|
||||||
* \param buf A pointer to the buffer over which the checksum is to be
|
* \param data A pointer to the buffer over which the checksum is to be
|
||||||
* computed.
|
* computed.
|
||||||
*
|
*
|
||||||
* \param len The length of the buffer over which the checksum is to
|
* \param len The length of the buffer over which the checksum is to
|
||||||
|
@ -2180,7 +2184,7 @@ CCIF extern uip_lladdr_t uip_lladdr;
|
||||||
*
|
*
|
||||||
* \return The Internet checksum of the buffer.
|
* \return The Internet checksum of the buffer.
|
||||||
*/
|
*/
|
||||||
uint16_t uip_chksum(uint16_t *buf, uint16_t len);
|
uint16_t uip_chksum(uint16_t *data, uint16_t len);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculate the IP header checksum of the packet header in uip_buf.
|
* Calculate the IP header checksum of the packet header in uip_buf.
|
||||||
|
|
|
@ -93,7 +93,7 @@ void uip_add32(uint8_t *op32, uint16_t op16);
|
||||||
* \note This function is not called in the current version of uIP,
|
* \note This function is not called in the current version of uIP,
|
||||||
* but future versions might make use of it.
|
* but future versions might make use of it.
|
||||||
*
|
*
|
||||||
* \param buf A pointer to the buffer over which the checksum is to be
|
* \param data A pointer to the buffer over which the checksum is to be
|
||||||
* computed.
|
* computed.
|
||||||
*
|
*
|
||||||
* \param len The length of the buffer over which the checksum is to
|
* \param len The length of the buffer over which the checksum is to
|
||||||
|
@ -101,7 +101,7 @@ void uip_add32(uint8_t *op32, uint16_t op16);
|
||||||
*
|
*
|
||||||
* \return The Internet checksum of the buffer.
|
* \return The Internet checksum of the buffer.
|
||||||
*/
|
*/
|
||||||
uint16_t uip_chksum(uint16_t *buf, uint16_t len);
|
uint16_t uip_chksum(uint16_t *data, uint16_t len);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculate the IP header checksum of the packet header in uip_buf.
|
* Calculate the IP header checksum of the packet header in uip_buf.
|
||||||
|
|
|
@ -234,7 +234,7 @@ struct sicslowpan_addr_context {
|
||||||
* \brief check whether we can compress the IID in
|
* \brief check whether we can compress the IID in
|
||||||
* address 'a' to 16 bits.
|
* address 'a' to 16 bits.
|
||||||
* This is used for unicast addresses only, and is true
|
* This is used for unicast addresses only, and is true
|
||||||
* if the address is on the format <PREFIX>::0000:00ff:fe00:XXXX
|
* if the address is on the format \<PREFIX\>::0000:00ff:fe00:XXXX
|
||||||
* NOTE: we currently assume 64-bits prefixes
|
* NOTE: we currently assume 64-bits prefixes
|
||||||
*/
|
*/
|
||||||
#define sicslowpan_is_iid_16_bit_compressable(a) \
|
#define sicslowpan_is_iid_16_bit_compressable(a) \
|
||||||
|
|
|
@ -29,20 +29,20 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \addtogroup uip6
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \file
|
* \file
|
||||||
* IPv6 Neighbor cache (link-layer/IPv6 address mapping)
|
* IPv6 Neighbor cache (link-layer/IPv6 address mapping)
|
||||||
* \author Mathilde Durvy <mdurvy@cisco.com>
|
* \author Mathilde Durvy <mdurvy@cisco.com>
|
||||||
* \author Julien Abeille <jabeille@cisco.com>
|
* \author Julien Abeille <jabeille@cisco.com>
|
||||||
* \author Simon Duquennoy <simonduq@sics.se>
|
* \author Simon Duquennoy <simonduq@sics.se>
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
|
||||||
* \addtogroup uip6
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
|
@ -29,20 +29,20 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \addtogroup uip6
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \file
|
* \file
|
||||||
* IPv6 Neighbor cache (link-layer/IPv6 address mapping)
|
* IPv6 Neighbor cache (link-layer/IPv6 address mapping)
|
||||||
* \author Mathilde Durvy <mdurvy@cisco.com>
|
* \author Mathilde Durvy <mdurvy@cisco.com>
|
||||||
* \author Julien Abeille <jabeille@cisco.com>
|
* \author Julien Abeille <jabeille@cisco.com>
|
||||||
* \author Simon Duquennoy <simonduq@sics.se>
|
* \author Simon Duquennoy <simonduq@sics.se>
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
|
||||||
* \addtogroup uip6
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef UIP_DS6_NEIGHBOR_H_
|
#ifndef UIP_DS6_NEIGHBOR_H_
|
||||||
#define UIP_DS6_NEIGHBOR_H_
|
#define UIP_DS6_NEIGHBOR_H_
|
||||||
|
|
||||||
|
@ -99,12 +99,12 @@ int uip_ds6_nbr_num(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief
|
* \brief
|
||||||
* This searches inside the neighbor table for the neighbor that is about to
|
* This searches inside the neighbor table for the neighbor that is about to
|
||||||
* expire the next.
|
* expire the next.
|
||||||
*
|
*
|
||||||
* \return
|
* \return
|
||||||
* A reference to the neighbor about to expire the next or NULL if
|
* A reference to the neighbor about to expire the next or NULL if
|
||||||
* table is empty.
|
* table is empty.
|
||||||
*/
|
*/
|
||||||
uip_ds6_nbr_t *uip_ds6_get_least_lifetime_neighbor(void);
|
uip_ds6_nbr_t *uip_ds6_get_least_lifetime_neighbor(void);
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,15 @@
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
/**
|
||||||
|
* \addtogroup uip6
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file
|
||||||
|
* Routing table manipulation
|
||||||
|
*/
|
||||||
#include "net/ipv6/uip-ds6.h"
|
#include "net/ipv6/uip-ds6.h"
|
||||||
#include "net/ip/uip.h"
|
#include "net/ip/uip.h"
|
||||||
|
|
||||||
|
@ -636,3 +645,4 @@ uip_ds6_defrt_periodic(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
|
/** @} */
|
||||||
|
|
|
@ -29,6 +29,14 @@
|
||||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
/**
|
||||||
|
* \addtogroup uip6
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* \file
|
||||||
|
* Header file for routing table manipulation
|
||||||
|
*/
|
||||||
#ifndef UIP_DS6_ROUTE_H
|
#ifndef UIP_DS6_ROUTE_H
|
||||||
#define UIP_DS6_ROUTE_H
|
#define UIP_DS6_ROUTE_H
|
||||||
|
|
||||||
|
@ -158,3 +166,4 @@ uip_ds6_route_t *uip_ds6_route_next(uip_ds6_route_t *);
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
#endif /* UIP_DS6_ROUTE_H */
|
#endif /* UIP_DS6_ROUTE_H */
|
||||||
|
/** @} */
|
||||||
|
|
|
@ -29,17 +29,17 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \file
|
* \addtogroup uip6
|
||||||
* IPv6 data structures handling functions.
|
* @{
|
||||||
* Comprises part of the Neighbor discovery (RFC 4861)
|
|
||||||
* and auto configuration (RFC 4862) state machines.
|
|
||||||
* \author Mathilde Durvy <mdurvy@cisco.com>
|
|
||||||
* \author Julien Abeille <jabeille@cisco.com>
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \addtogroup uip6
|
* \file
|
||||||
* @{
|
* IPv6 data structure manipulation.
|
||||||
|
* Comprises part of the Neighbor discovery (RFC 4861)
|
||||||
|
* and auto configuration (RFC 4862) state machines.
|
||||||
|
* \author Mathilde Durvy <mdurvy@cisco.com>
|
||||||
|
* \author Julien Abeille <jabeille@cisco.com>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \file
|
* \file
|
||||||
* Network interface and stateless autoconfiguration (RFC 4862)
|
* Header file for IPv6-related data structures
|
||||||
* \author Mathilde Durvy <mdurvy@cisco.com>
|
* \author Mathilde Durvy <mdurvy@cisco.com>
|
||||||
* \author Julien Abeille <jabeille@cisco.com>
|
* \author Julien Abeille <jabeille@cisco.com>
|
||||||
*
|
*
|
||||||
|
|
|
@ -31,15 +31,15 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \file
|
* \addtogroup uip6
|
||||||
* ICMPv6 echo request and error messages (RFC 4443)
|
* @{
|
||||||
* \author Julien Abeille <jabeille@cisco.com>
|
|
||||||
* \author Mathilde Durvy <mdurvy@cisco.com>
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \addtogroup uip6
|
* \file
|
||||||
* @{
|
* ICMPv6 (RFC 4443) implementation, with message and error handling
|
||||||
|
* \author Julien Abeille <jabeille@cisco.com>
|
||||||
|
* \author Mathilde Durvy <mdurvy@cisco.com>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
|
@ -31,15 +31,15 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \file
|
* \addtogroup uip6
|
||||||
* ICMPv6 echo request and error messages (RFC 4443)
|
* @{
|
||||||
* \author Julien Abeille <jabeille@cisco.com>
|
|
||||||
* \author Mathilde Durvy <mdurvy@cisco.com>
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \addtogroup uip6
|
* \file
|
||||||
* @{
|
* Header file for ICMPv6 message and error handing (RFC 4443)
|
||||||
|
* \author Julien Abeille <jabeille@cisco.com>
|
||||||
|
* \author Mathilde Durvy <mdurvy@cisco.com>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef ICMP6_H_
|
#ifndef ICMP6_H_
|
||||||
|
|
|
@ -57,15 +57,15 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \file
|
* \addtogroup uip6
|
||||||
* Neighbor discovery (RFC 4861)
|
* @{
|
||||||
* \author Mathilde Durvy <mdurvy@cisco.com>
|
|
||||||
* \author Julien Abeille <jabeille@cisco.com>
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \addtogroup uip6
|
* \file
|
||||||
* @{
|
* Neighbor discovery (RFC 4861)
|
||||||
|
* \author Mathilde Durvy <mdurvy@cisco.com>
|
||||||
|
* \author Julien Abeille <jabeille@cisco.com>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
|
@ -31,15 +31,15 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \file
|
* \addtogroup uip6
|
||||||
* Neighbor discovery (RFC 4861)
|
* @{
|
||||||
* \author Julien Abeille <jabeille@cisco.com>
|
|
||||||
* \author Mathilde Durvy <mdurvy@cisco.com>
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \addtogroup uip6
|
* \file
|
||||||
* @{
|
* Header file for IPv6 Neighbor discovery (RFC 4861)
|
||||||
|
* \author Julien Abeille <jabeille@cisco.com>
|
||||||
|
* \author Mathilde Durvy <mdurvy@cisco.com>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef UIP_ND6_H_
|
#ifndef UIP_ND6_H_
|
||||||
|
|
|
@ -31,20 +31,20 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \addtogroup uip6
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \file
|
* \file
|
||||||
* The uIP TCP/IPv6 stack code.
|
* The uIP TCP/IPv6 stack code.
|
||||||
*
|
*
|
||||||
* \author Adam Dunkels <adam@sics.se>
|
* \author Adam Dunkels <adam@sics.se>
|
||||||
* \author Julien Abeille <jabeille@cisco.com> (IPv6 related code)
|
* \author Julien Abeille <jabeille@cisco.com> (IPv6 related code)
|
||||||
* \author Mathilde Durvy <mdurvy@cisco.com> (IPv6 related code)
|
* \author Mathilde Durvy <mdurvy@cisco.com> (IPv6 related code)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
|
||||||
* \addtogroup uip6
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* uIP is a small implementation of the IP, UDP and TCP protocols (as
|
* uIP is a small implementation of the IP, UDP and TCP protocols (as
|
||||||
* well as some basic ICMP stuff). The implementation couples the IP,
|
* well as some basic ICMP stuff). The implementation couples the IP,
|
||||||
|
@ -105,7 +105,10 @@ struct uip_stats uip_stat;
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/** @{ \name Layer 2 variables */
|
/**
|
||||||
|
* \name Layer 2 variables
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/** Host L2 address */
|
/** Host L2 address */
|
||||||
#if UIP_CONF_LL_802154
|
#if UIP_CONF_LL_802154
|
||||||
|
@ -116,7 +119,10 @@ uip_lladdr_t uip_lladdr = {{0x00,0x06,0x98,0x00,0x02,0x32}};
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/** @{ \name Layer 3 variables */
|
/**
|
||||||
|
* \name Layer 3 variables
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/**
|
/**
|
||||||
* \brief Type of the next header in IPv6 header or extension headers
|
* \brief Type of the next header in IPv6 header or extension headers
|
||||||
|
@ -141,8 +147,9 @@ uint8_t uip_ext_opt_offset = 0;
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/* Buffers */
|
/* Buffers */
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/** \name Buffer defines
|
/**
|
||||||
* @{
|
* \name Buffer defines
|
||||||
|
* @{
|
||||||
*/
|
*/
|
||||||
#define FBUF ((struct uip_tcpip_hdr *)&uip_reassbuf[0])
|
#define FBUF ((struct uip_tcpip_hdr *)&uip_reassbuf[0])
|
||||||
#define UIP_IP_BUF ((struct uip_ip_hdr *)&uip_buf[UIP_LLH_LEN])
|
#define UIP_IP_BUF ((struct uip_ip_hdr *)&uip_buf[UIP_LLH_LEN])
|
||||||
|
@ -161,8 +168,9 @@ uint8_t uip_ext_opt_offset = 0;
|
||||||
#endif /* UIP_CONF_IPV6_RPL */
|
#endif /* UIP_CONF_IPV6_RPL */
|
||||||
#define UIP_ICMP6_ERROR_BUF ((struct uip_icmp6_error *)&uip_buf[uip_l2_l3_icmp_hdr_len])
|
#define UIP_ICMP6_ERROR_BUF ((struct uip_icmp6_error *)&uip_buf[uip_l2_l3_icmp_hdr_len])
|
||||||
/** @} */
|
/** @} */
|
||||||
/** \name Buffer variables
|
/**
|
||||||
* @{
|
* \name Buffer variables
|
||||||
|
* @{
|
||||||
*/
|
*/
|
||||||
/** Packet buffer for incoming and outgoing packets */
|
/** Packet buffer for incoming and outgoing packets */
|
||||||
#ifndef UIP_CONF_EXTERNAL_BUFFER
|
#ifndef UIP_CONF_EXTERNAL_BUFFER
|
||||||
|
@ -185,7 +193,10 @@ uint16_t uip_len, uip_slen;
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/** @{ \name General variables */
|
/**
|
||||||
|
* \name General variables
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
/* The uip_flags variable is used for communication between the TCP/IP stack
|
/* The uip_flags variable is used for communication between the TCP/IP stack
|
||||||
|
@ -209,7 +220,8 @@ static uint16_t lastport;
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/* TCP */
|
/* TCP */
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/** \name TCP defines
|
/**
|
||||||
|
* \name TCP defines
|
||||||
*@{
|
*@{
|
||||||
*/
|
*/
|
||||||
/* Structures and definitions. */
|
/* Structures and definitions. */
|
||||||
|
@ -227,7 +239,8 @@ static uint16_t lastport;
|
||||||
|
|
||||||
#define TCP_OPT_MSS_LEN 4 /* Length of TCP MSS option. */
|
#define TCP_OPT_MSS_LEN 4 /* Length of TCP MSS option. */
|
||||||
/** @} */
|
/** @} */
|
||||||
/** \name TCP variables
|
/**
|
||||||
|
* \name TCP variables
|
||||||
*@{
|
*@{
|
||||||
*/
|
*/
|
||||||
#if UIP_TCP
|
#if UIP_TCP
|
||||||
|
@ -248,7 +261,10 @@ static uint16_t tmp16;
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/** @{ \name UDP variables */
|
/**
|
||||||
|
* \name UDP variables
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
#if UIP_UDP
|
#if UIP_UDP
|
||||||
struct uip_udp_conn *uip_udp_conn;
|
struct uip_udp_conn *uip_udp_conn;
|
||||||
|
@ -257,7 +273,10 @@ struct uip_udp_conn uip_udp_conns[UIP_UDP_CONNS];
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/** @{ \name ICMPv6 variables */
|
/**
|
||||||
|
* \name ICMPv6 variables
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
#if UIP_CONF_ICMP6
|
#if UIP_CONF_ICMP6
|
||||||
/** single possible icmpv6 "connection" */
|
/** single possible icmpv6 "connection" */
|
||||||
|
|
|
@ -64,12 +64,13 @@ uint32_t anti_replay_get_counter(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Initializes the anti-replay information about the sender
|
* \brief Initializes the anti-replay information about the sender
|
||||||
|
* \param info Anti-replay information about the sender
|
||||||
*/
|
*/
|
||||||
void anti_replay_init_info(struct anti_replay_info *info);
|
void anti_replay_init_info(struct anti_replay_info *info);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Checks if received frame was replayed
|
* \brief Checks if received frame was replayed
|
||||||
* \param last_counters Anti-replay information about the sender
|
* \param info Anti-replay information about the sender
|
||||||
* \retval 0 <-> received frame was not replayed
|
* \retval 0 <-> received frame was not replayed
|
||||||
*/
|
*/
|
||||||
int anti_replay_was_replayed(struct anti_replay_info *info);
|
int anti_replay_was_replayed(struct anti_replay_info *info);
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \defgroup llsec802154
|
* \defgroup llsec802154 Link Layer Security Common Functionality
|
||||||
*
|
*
|
||||||
* Common functionality of 802.15.4-compliant llsec_drivers.
|
* Common functionality of 802.15.4-compliant llsec_drivers.
|
||||||
*
|
*
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \defgroup noncoresec
|
* \defgroup noncoresec LLSEC driver using a network-wide key (NONCORESEC)
|
||||||
*
|
*
|
||||||
* Noncompromise-resilient 802.15.4 security
|
* Noncompromise-resilient 802.15.4 security
|
||||||
*
|
*
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \defgroup nullsec
|
* \defgroup nullsec LLSEC driver with zero security (NULLSEC)
|
||||||
*
|
*
|
||||||
* Insecure link layer security driver.
|
* Insecure link layer security driver.
|
||||||
*
|
*
|
||||||
|
|
|
@ -44,7 +44,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \addtogroup net 802.15.4 frame creation and parsing
|
* \addtogroup net
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,7 @@
|
||||||
* The abc module sends packets to all local area neighbors. The abc
|
* The abc module sends packets to all local area neighbors. The abc
|
||||||
* module adds no headers to outgoing packets.
|
* module adds no headers to outgoing packets.
|
||||||
*
|
*
|
||||||
* \section channels Channels
|
* \section abc-channels Channels
|
||||||
*
|
*
|
||||||
* The abc module uses 1 channel.
|
* The abc module uses 1 channel.
|
||||||
*
|
*
|
||||||
|
|
|
@ -131,6 +131,7 @@ void announcement_remove(struct announcement *a);
|
||||||
* \brief Set the value of an announcement
|
* \brief Set the value of an announcement
|
||||||
* \param a A pointer to a struct announcement that has
|
* \param a A pointer to a struct announcement that has
|
||||||
* previously been registered
|
* previously been registered
|
||||||
|
* \param value The new value
|
||||||
*
|
*
|
||||||
* This function sets the value of an announcement that
|
* This function sets the value of an announcement that
|
||||||
* has previously been registered with
|
* has previously been registered with
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
* announcement. THe module announces the announcements that have been
|
* announcement. THe module announces the announcements that have been
|
||||||
* registered with the \ref rimeannouncement "announcement module".
|
* registered with the \ref rimeannouncement "announcement module".
|
||||||
*
|
*
|
||||||
* \section channels Channels
|
* \section bcast-announce-channels Channels
|
||||||
*
|
*
|
||||||
* The broadcast announcement module uses 1 channel.
|
* The broadcast announcement module uses 1 channel.
|
||||||
*
|
*
|
||||||
|
|
|
@ -56,7 +56,7 @@
|
||||||
* either directly or indirectly through any of the other
|
* either directly or indirectly through any of the other
|
||||||
* communication primitives that are based on the broadcast primitive.
|
* communication primitives that are based on the broadcast primitive.
|
||||||
*
|
*
|
||||||
* \section channels Channels
|
* \section broadcast-channels Channels
|
||||||
*
|
*
|
||||||
* The broadcast module uses 1 channel.
|
* The broadcast module uses 1 channel.
|
||||||
*
|
*
|
||||||
|
|
|
@ -49,7 +49,7 @@
|
||||||
* The collect module implements a hop-by-hop reliable data collection
|
* The collect module implements a hop-by-hop reliable data collection
|
||||||
* mechanism.
|
* mechanism.
|
||||||
*
|
*
|
||||||
* \section channels Channels
|
* \section collect-channels Channels
|
||||||
*
|
*
|
||||||
* The collect module uses 2 channels; one for neighbor discovery and one
|
* The collect module uses 2 channels; one for neighbor discovery and one
|
||||||
* for data packets.
|
* for data packets.
|
||||||
|
|
|
@ -84,7 +84,7 @@
|
||||||
* The polite broadcast module does not add any packet attributes to
|
* The polite broadcast module does not add any packet attributes to
|
||||||
* outgoing packets apart from those added by the upper layer.
|
* outgoing packets apart from those added by the upper layer.
|
||||||
*
|
*
|
||||||
* \section channels Channels
|
* \section ipolite-channels Channels
|
||||||
*
|
*
|
||||||
* The ipolite module uses 1 channel.
|
* The ipolite module uses 1 channel.
|
||||||
*
|
*
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
* receiver somewhere in the network.
|
* receiver somewhere in the network.
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* \section channels Channels
|
* \section mesh-channels Channels
|
||||||
*
|
*
|
||||||
* The mesh module uses 3 channel; one for the multi-hop forwarding
|
* The mesh module uses 3 channel; one for the multi-hop forwarding
|
||||||
* (\ref rimemultihop "multihop") and two for the route disovery (\ref
|
* (\ref rimemultihop "multihop") and two for the route disovery (\ref
|
||||||
|
|
|
@ -61,7 +61,7 @@
|
||||||
* process.
|
* process.
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* \section channels Channels
|
* \section multihop-channels Channels
|
||||||
*
|
*
|
||||||
* The multihop module uses 1 channel.
|
* The multihop module uses 1 channel.
|
||||||
*
|
*
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
* discovery mechanism. A callback is invoked for every incoming
|
* discovery mechanism. A callback is invoked for every incoming
|
||||||
* neighbor discovery message.
|
* neighbor discovery message.
|
||||||
*
|
*
|
||||||
* \section channels Channels
|
* \section neighbor-discovery-channels Channels
|
||||||
*
|
*
|
||||||
* The neighbor-discovery module uses 1 channel.
|
* The neighbor-discovery module uses 1 channel.
|
||||||
*
|
*
|
||||||
|
|
|
@ -65,7 +65,7 @@
|
||||||
* If the time to live reaches zero, the primitive does not forward
|
* If the time to live reaches zero, the primitive does not forward
|
||||||
* the packet.
|
* the packet.
|
||||||
*
|
*
|
||||||
* \section channels Channels
|
* \section netflood-channels Channels
|
||||||
*
|
*
|
||||||
* The netflood module uses 1 channel.
|
* The netflood module uses 1 channel.
|
||||||
*
|
*
|
||||||
|
|
|
@ -78,7 +78,7 @@ struct packetqueue {
|
||||||
* This structure holds the state of a packet queue. It is
|
* This structure holds the state of a packet queue. It is
|
||||||
* an opaque structure with no user-visible elements. The
|
* an opaque structure with no user-visible elements. The
|
||||||
* function packetqueue_queuebuf() is used to extract a
|
* function packetqueue_queuebuf() is used to extract a
|
||||||
* \ref queuebuf "queubuf" from the item. The function
|
* "queubuf" from the item. The function
|
||||||
* packetqueue_ptr() is used to extract the opaque pointer
|
* packetqueue_ptr() is used to extract the opaque pointer
|
||||||
* that was registered with the
|
* that was registered with the
|
||||||
* packetqueue_enqueue_packetbuf() function.
|
* packetqueue_enqueue_packetbuf() function.
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
* announcement. THe module announces the announcements that have been
|
* announcement. THe module announces the announcements that have been
|
||||||
* registered with the \ref rimeannouncement "announcement module".
|
* registered with the \ref rimeannouncement "announcement module".
|
||||||
*
|
*
|
||||||
* \section channels Channels
|
* \section polite-announcement-channels Channels
|
||||||
*
|
*
|
||||||
* The polite announcement module uses 1 channel.
|
* The polite announcement module uses 1 channel.
|
||||||
*
|
*
|
||||||
|
|
|
@ -84,7 +84,7 @@
|
||||||
* The polite broadcast module does not add any packet attributes to
|
* The polite broadcast module does not add any packet attributes to
|
||||||
* outgoing packets apart from those added by the upper layer.
|
* outgoing packets apart from those added by the upper layer.
|
||||||
*
|
*
|
||||||
* \section channels Channels
|
* \section polite-channels Channels
|
||||||
*
|
*
|
||||||
* The polite module uses 1 channel.
|
* The polite module uses 1 channel.
|
||||||
*
|
*
|
||||||
|
|
|
@ -56,7 +56,7 @@
|
||||||
* reliable single-hop primitive for the communication between two
|
* reliable single-hop primitive for the communication between two
|
||||||
* single-hop neighbors.
|
* single-hop neighbors.
|
||||||
*
|
*
|
||||||
* \section channels Channels
|
* \section rmh-channels Channels
|
||||||
*
|
*
|
||||||
* The rmh module uses 1 channel.
|
* The rmh module uses 1 channel.
|
||||||
*
|
*
|
||||||
|
|
|
@ -48,7 +48,7 @@
|
||||||
*
|
*
|
||||||
* The route-discovery module does route discovery for Rime.
|
* The route-discovery module does route discovery for Rime.
|
||||||
*
|
*
|
||||||
* \section channels Channels
|
* \section route-discovery-channels Channels
|
||||||
*
|
*
|
||||||
* The ibc module uses 2 channels; one for the flooded route request
|
* The ibc module uses 2 channels; one for the flooded route request
|
||||||
* packets and one for the unicast route replies.
|
* packets and one for the unicast route replies.
|
||||||
|
|
|
@ -49,7 +49,7 @@
|
||||||
* The rudolph0 module implements a single-hop reliable bulk data
|
* The rudolph0 module implements a single-hop reliable bulk data
|
||||||
* transfer mechanism.
|
* transfer mechanism.
|
||||||
*
|
*
|
||||||
* \section channels Channels
|
* \section rudolph0-channels Channels
|
||||||
*
|
*
|
||||||
* The rudolph0 module uses 2 channels; one for data packets and one
|
* The rudolph0 module uses 2 channels; one for data packets and one
|
||||||
* for NACK and repair packets.
|
* for NACK and repair packets.
|
||||||
|
|
|
@ -49,7 +49,7 @@
|
||||||
* The rudolph1 module implements a multi-hop reliable bulk data
|
* The rudolph1 module implements a multi-hop reliable bulk data
|
||||||
* transfer mechanism.
|
* transfer mechanism.
|
||||||
*
|
*
|
||||||
* \section channels Channels
|
* \section rudolph1-channels Channels
|
||||||
*
|
*
|
||||||
* The rudolph1 module uses 2 channels; one for data transmissions and
|
* The rudolph1 module uses 2 channels; one for data transmissions and
|
||||||
* one for NACKs and repair packets.
|
* one for NACKs and repair packets.
|
||||||
|
|
|
@ -49,7 +49,7 @@
|
||||||
* The rudolph2 module implements a single-hop reliable bulk data
|
* The rudolph2 module implements a single-hop reliable bulk data
|
||||||
* transfer mechanism.
|
* transfer mechanism.
|
||||||
*
|
*
|
||||||
* \section channels Channels
|
* \section rudolph2-channels Channels
|
||||||
*
|
*
|
||||||
* The rudolph2 module uses 2 channels; one for data packets and one
|
* The rudolph2 module uses 2 channels; one for data packets and one
|
||||||
* for NACK and repair packets.
|
* for NACK and repair packets.
|
||||||
|
|
|
@ -69,7 +69,7 @@
|
||||||
* callback.
|
* callback.
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* \section channels Channels
|
* \section runicast-channels Channels
|
||||||
*
|
*
|
||||||
* The runicast module uses 1 channel.
|
* The runicast module uses 1 channel.
|
||||||
*
|
*
|
||||||
|
|
|
@ -51,7 +51,7 @@
|
||||||
* either the message is canceled or a new message is sent. Messages
|
* either the message is canceled or a new message is sent. Messages
|
||||||
* sent with the stbroadcast module are not identified with a sender ID.
|
* sent with the stbroadcast module are not identified with a sender ID.
|
||||||
*
|
*
|
||||||
* \section channels Channels
|
* \section stbroadcast-channels Channels
|
||||||
*
|
*
|
||||||
* The stbroadcast module uses 1 channel.
|
* The stbroadcast module uses 1 channel.
|
||||||
*
|
*
|
||||||
|
|
|
@ -63,7 +63,7 @@
|
||||||
* number of retransmissions for a packet as a packet attribute on
|
* number of retransmissions for a packet as a packet attribute on
|
||||||
* outgoing packets.
|
* outgoing packets.
|
||||||
*
|
*
|
||||||
* \section channels Channels
|
* \section stunicast-channels Channels
|
||||||
*
|
*
|
||||||
* The stunicast module uses 1 channel.
|
* The stunicast module uses 1 channel.
|
||||||
*
|
*
|
||||||
|
|
|
@ -48,7 +48,7 @@
|
||||||
*
|
*
|
||||||
* The trickle module sends a single packet to all nodes on the network.
|
* The trickle module sends a single packet to all nodes on the network.
|
||||||
*
|
*
|
||||||
* \section channels Channels
|
* \section trickle-channels Channels
|
||||||
*
|
*
|
||||||
* The trickle module uses 1 channel.
|
* The trickle module uses 1 channel.
|
||||||
*
|
*
|
||||||
|
|
|
@ -53,7 +53,7 @@
|
||||||
* single-hop receiver address attribute and discards the packet if
|
* single-hop receiver address attribute and discards the packet if
|
||||||
* the address does not match the address of the node.
|
* the address does not match the address of the node.
|
||||||
*
|
*
|
||||||
* \section channels Channels
|
* \section unicast-channels Channels
|
||||||
*
|
*
|
||||||
* The unicast module uses 1 channel.
|
* The unicast module uses 1 channel.
|
||||||
*
|
*
|
||||||
|
|
|
@ -133,7 +133,7 @@
|
||||||
* strings.
|
* strings.
|
||||||
*
|
*
|
||||||
* We need use two macros (CC_CONCAT and CC_CONCAT2) in order to allow
|
* We need use two macros (CC_CONCAT and CC_CONCAT2) in order to allow
|
||||||
* concatenation of two #defined macros.
|
* concatenation of two \#defined macros.
|
||||||
*/
|
*/
|
||||||
#define CC_CONCAT(s1, s2) CC_CONCAT2(s1, s2)
|
#define CC_CONCAT(s1, s2) CC_CONCAT2(s1, s2)
|
||||||
|
|
||||||
|
|
|
@ -57,7 +57,7 @@
|
||||||
*
|
*
|
||||||
* \note The clock library need in many cases not be used
|
* \note The clock library need in many cases not be used
|
||||||
* directly. Rather, the \ref timer "timer library", \ref etimer
|
* directly. Rather, the \ref timer "timer library", \ref etimer
|
||||||
* "event timers", or \ref trimer "rtimer library" should be used.
|
* "event timers", or \ref rtimer "rtimer library" should be used.
|
||||||
*
|
*
|
||||||
* \sa \ref timer "Timer library"
|
* \sa \ref timer "Timer library"
|
||||||
* \sa \ref etimer "Event timers"
|
* \sa \ref etimer "Event timers"
|
||||||
|
|
|
@ -105,7 +105,7 @@ struct dsc {
|
||||||
*
|
*
|
||||||
* \param prgname The name of the program on disk.
|
* \param prgname The name of the program on disk.
|
||||||
*
|
*
|
||||||
* \param initfunc A pointer to the initialization function of the
|
* \param process A pointer to the initialization function of the
|
||||||
* program.
|
* program.
|
||||||
*
|
*
|
||||||
* \param icon A pointer to the CTK icon.
|
* \param icon A pointer to the CTK icon.
|
||||||
|
|
|
@ -267,7 +267,7 @@ do_event(void)
|
||||||
receiver = events[fevent].p;
|
receiver = events[fevent].p;
|
||||||
|
|
||||||
/* Since we have seen the new event, we move pointer upwards
|
/* Since we have seen the new event, we move pointer upwards
|
||||||
and decrese the number of events. */
|
and decrease the number of events. */
|
||||||
fevent = (fevent + 1) % PROCESS_CONF_NUMEVENTS;
|
fevent = (fevent + 1) % PROCESS_CONF_NUMEVENTS;
|
||||||
--nevents;
|
--nevents;
|
||||||
|
|
||||||
|
@ -337,7 +337,7 @@ process_post(struct process *p, process_event_t ev, process_data_t data)
|
||||||
if(p == PROCESS_BROADCAST) {
|
if(p == PROCESS_BROADCAST) {
|
||||||
printf("soft panic: event queue is full when broadcast event %d was posted from %s\n", ev, PROCESS_NAME_STRING(process_current));
|
printf("soft panic: event queue is full when broadcast event %d was posted from %s\n", ev, PROCESS_NAME_STRING(process_current));
|
||||||
} else {
|
} else {
|
||||||
printf("soft panic: event queue is full when event %d was posted to %s frpm %s\n", ev, PROCESS_NAME_STRING(p), PROCESS_NAME_STRING(process_current));
|
printf("soft panic: event queue is full when event %d was posted to %s from %s\n", ev, PROCESS_NAME_STRING(p), PROCESS_NAME_STRING(process_current));
|
||||||
}
|
}
|
||||||
#endif /* DEBUG */
|
#endif /* DEBUG */
|
||||||
return PROCESS_ERR_FULL;
|
return PROCESS_ERR_FULL;
|
||||||
|
|
|
@ -335,7 +335,7 @@ struct process {
|
||||||
*
|
*
|
||||||
* \param p A pointer to a process structure.
|
* \param p A pointer to a process structure.
|
||||||
*
|
*
|
||||||
* \param arg An argument pointer that can be passed to the new
|
* \param data An argument pointer that can be passed to the new
|
||||||
* process
|
* process
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -159,7 +159,7 @@ clock_set_seconds(unsigned long sec)
|
||||||
seconds = sec;
|
seconds = sec;
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/**
|
/*
|
||||||
* Wait for a number of clock ticks.
|
* Wait for a number of clock ticks.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
|
@ -175,7 +175,7 @@ clock_wait(clock_time_t t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/**
|
/*
|
||||||
* Delay the CPU for up to 65535*(4000000/F_CPU) microseconds.
|
* Delay the CPU for up to 65535*(4000000/F_CPU) microseconds.
|
||||||
* Copied from _delay_loop_2 in AVR library delay_basic.h, 4 clocks per loop.
|
* Copied from _delay_loop_2 in AVR library delay_basic.h, 4 clocks per loop.
|
||||||
* For accurate short delays, inline _delay_loop_2 in the caller, use a constant
|
* For accurate short delays, inline _delay_loop_2 in the caller, use a constant
|
||||||
|
@ -193,44 +193,44 @@ my_delay_loop_2(uint16_t __count)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
clock_delay_usec(uint16_t howlong)
|
clock_delay_usec(uint16_t dt)
|
||||||
{
|
{
|
||||||
#if 0
|
#if 0
|
||||||
/* Accurate delay at any frequency, but introduces a 64 bit intermediate
|
/* Accurate delay at any frequency, but introduces a 64 bit intermediate
|
||||||
* and has a 279 clock overhead.
|
* and has a 279 clock overhead.
|
||||||
*/
|
*/
|
||||||
if(howlong<=(uint16_t)(279000000UL/F_CPU)) return;
|
if(dt<=(uint16_t)(279000000UL/F_CPU)) return;
|
||||||
howlong-=(uint16_t) (279000000UL/F_CPU);
|
dt-=(uint16_t) (279000000UL/F_CPU);
|
||||||
my_delay_loop_2(((uint64_t)(howlong) * (uint64_t) F_CPU) / 4000000ULL);
|
my_delay_loop_2(((uint64_t)(dt) * (uint64_t) F_CPU) / 4000000ULL);
|
||||||
/* Remaining numbers tweaked for the breakpoint CPU frequencies */
|
/* Remaining numbers tweaked for the breakpoint CPU frequencies */
|
||||||
/* Add other frequencies as necessary */
|
/* Add other frequencies as necessary */
|
||||||
#elif F_CPU>=16000000UL
|
#elif F_CPU>=16000000UL
|
||||||
if(howlong<1) return;
|
if(dt<1) return;
|
||||||
my_delay_loop_2((howlong*(uint16_t)(F_CPU/3250000)));
|
my_delay_loop_2((dt*(uint16_t)(F_CPU/3250000)));
|
||||||
#elif F_CPU >= 12000000UL
|
#elif F_CPU >= 12000000UL
|
||||||
if(howlong<2) return;
|
if(dt<2) return;
|
||||||
howlong-=(uint16_t) (3*12000000/F_CPU);
|
dt-=(uint16_t) (3*12000000/F_CPU);
|
||||||
my_delay_loop_2((howlong*(uint16_t)(F_CPU/3250000)));
|
my_delay_loop_2((dt*(uint16_t)(F_CPU/3250000)));
|
||||||
#elif F_CPU >= 8000000UL
|
#elif F_CPU >= 8000000UL
|
||||||
if(howlong<4) return;
|
if(dt<4) return;
|
||||||
howlong-=(uint16_t) (3*8000000/F_CPU);
|
dt-=(uint16_t) (3*8000000/F_CPU);
|
||||||
my_delay_loop_2((howlong*(uint16_t)(F_CPU/2000000))/2);
|
my_delay_loop_2((dt*(uint16_t)(F_CPU/2000000))/2);
|
||||||
#elif F_CPU >= 4000000UL
|
#elif F_CPU >= 4000000UL
|
||||||
if(howlong<5) return;
|
if(dt<5) return;
|
||||||
howlong-=(uint16_t) (4*4000000/F_CPU);
|
dt-=(uint16_t) (4*4000000/F_CPU);
|
||||||
my_delay_loop_2((howlong*(uint16_t)(F_CPU/2000000))/2);
|
my_delay_loop_2((dt*(uint16_t)(F_CPU/2000000))/2);
|
||||||
#elif F_CPU >= 2000000UL
|
#elif F_CPU >= 2000000UL
|
||||||
if(howlong<11) return;
|
if(dt<11) return;
|
||||||
howlong-=(uint16_t) (10*2000000/F_CPU);
|
dt-=(uint16_t) (10*2000000/F_CPU);
|
||||||
my_delay_loop_2((howlong*(uint16_t)(F_CPU/1000000))/4);
|
my_delay_loop_2((dt*(uint16_t)(F_CPU/1000000))/4);
|
||||||
#elif F_CPU >= 1000000UL
|
#elif F_CPU >= 1000000UL
|
||||||
if(howlong<=17) return;
|
if(dt<=17) return;
|
||||||
howlong-=(uint16_t) (17*1000000/F_CPU);
|
dt-=(uint16_t) (17*1000000/F_CPU);
|
||||||
my_delay_loop_2((howlong*(uint16_t)(F_CPU/1000000))/4);
|
my_delay_loop_2((dt*(uint16_t)(F_CPU/1000000))/4);
|
||||||
#else
|
#else
|
||||||
howlong >> 5;
|
dt >> 5;
|
||||||
if (howlong < 1) return;
|
if (dt < 1) return;
|
||||||
my_delay_loop_2(howlong);
|
my_delay_loop_2(dt);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -250,7 +250,7 @@ clock_delay(unsigned int howlong)
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/**
|
/**
|
||||||
* Delay up to 65535 milliseconds.
|
* Delay up to 65535 milliseconds.
|
||||||
* \param dt How many milliseconds to delay.
|
* \param howlong How many milliseconds to delay.
|
||||||
*
|
*
|
||||||
* Neither interrupts nor the watchdog timer is disabled over the delay.
|
* Neither interrupts nor the watchdog timer is disabled over the delay.
|
||||||
* Platforms are not required to implement this call.
|
* Platforms are not required to implement this call.
|
||||||
|
@ -279,7 +279,7 @@ clock_delay_msec(uint16_t howlong)
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/**
|
/**
|
||||||
* Adjust the system current clock time.
|
* Adjust the system current clock time.
|
||||||
* \param dt How many ticks to add
|
* \param howmany How many ticks to add
|
||||||
*
|
*
|
||||||
* Typically used to add ticks after an MCU sleep
|
* Typically used to add ticks after an MCU sleep
|
||||||
* clock_seconds will increment if necessary to reflect the tick addition.
|
* clock_seconds will increment if necessary to reflect the tick addition.
|
||||||
|
|
|
@ -54,7 +54,7 @@ static unsigned long timer_value;
|
||||||
static volatile CC_AT_DATA clock_time_t count = 0; /* Uptime in ticks */
|
static volatile CC_AT_DATA clock_time_t count = 0; /* Uptime in ticks */
|
||||||
static volatile CC_AT_DATA clock_time_t seconds = 0; /* Uptime in secs */
|
static volatile CC_AT_DATA clock_time_t seconds = 0; /* Uptime in secs */
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/**
|
/*
|
||||||
* Each iteration is ~1.0xy usec, so this function delays for roughly len usec
|
* Each iteration is ~1.0xy usec, so this function delays for roughly len usec
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
|
@ -68,7 +68,7 @@ clock_delay_usec(uint16_t len)
|
||||||
ENABLE_INTERRUPTS();
|
ENABLE_INTERRUPTS();
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/**
|
/*
|
||||||
* Wait for a multiple of ~8 ms (a tick)
|
* Wait for a multiple of ~8 ms (a tick)
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
|
|
|
@ -136,16 +136,15 @@ clock_wait(clock_time_t i)
|
||||||
while(clock_time() - start < (clock_time_t)i);
|
while(clock_time() - start < (clock_time_t)i);
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/**
|
/*
|
||||||
* \brief Arch-specific implementation of clock_delay_usec for the cc2538
|
* Arch-specific implementation of clock_delay_usec for the cc2538
|
||||||
* \param len Delay \e len uSecs
|
|
||||||
*
|
*
|
||||||
* See clock_init() for GPT0 Timer A's configuration
|
* See clock_init() for GPT0 Timer A's configuration
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
clock_delay_usec(uint16_t len)
|
clock_delay_usec(uint16_t dt)
|
||||||
{
|
{
|
||||||
REG(GPT_0_BASE | GPTIMER_TAILR) = len;
|
REG(GPT_0_BASE | GPTIMER_TAILR) = dt;
|
||||||
REG(GPT_0_BASE | GPTIMER_CTL) |= GPTIMER_CTL_TAEN;
|
REG(GPT_0_BASE | GPTIMER_CTL) |= GPTIMER_CTL_TAEN;
|
||||||
|
|
||||||
/* One-Shot mode: TAEN will be cleared when the timer reaches 0 */
|
/* One-Shot mode: TAEN will be cleared when the timer reaches 0 */
|
||||||
|
|
|
@ -70,7 +70,7 @@ clock_delay_usec(uint16_t len)
|
||||||
ENABLE_INTERRUPTS();
|
ENABLE_INTERRUPTS();
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/**
|
/*
|
||||||
* Wait for a multiple of ~8 ms (a tick)
|
* Wait for a multiple of ~8 ms (a tick)
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
|
|
|
@ -97,7 +97,7 @@ clock_wait(clock_time_t t)
|
||||||
while ((signed long)(current_clock - endticks) < 0) {;}
|
while ((signed long)(current_clock - endticks) < 0) {;}
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/**
|
/*
|
||||||
* Delay the CPU for up to 65535 microseconds.
|
* Delay the CPU for up to 65535 microseconds.
|
||||||
* Use the 250KHz MACA clock for longer delays to avoid interrupt effects.
|
* Use the 250KHz MACA clock for longer delays to avoid interrupt effects.
|
||||||
* However that can't be used if the radio is being power cycled!
|
* However that can't be used if the radio is being power cycled!
|
||||||
|
@ -118,7 +118,7 @@ clock_delay_usec(uint16_t howlong)
|
||||||
while(--i);
|
while(--i);
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/**
|
/*
|
||||||
* Delay the CPU for up to 65535 milliseconds. The watchdog is NOT disabled.
|
* Delay the CPU for up to 65535 milliseconds. The watchdog is NOT disabled.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
|
@ -127,7 +127,7 @@ clock_delay_msec(uint16_t howlong)
|
||||||
while(howlong--) clock_delay_usec(1000);
|
while(howlong--) clock_delay_usec(1000);
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/**
|
/*
|
||||||
* Legacy delay. The original clock_delay for the msp430 used a granularity
|
* Legacy delay. The original clock_delay for the msp430 used a granularity
|
||||||
* of 2.83 usec. This approximates that delay for values up to 1456 usec.
|
* of 2.83 usec. This approximates that delay for values up to 1456 usec.
|
||||||
* (The largest core call in leds.c uses 400).
|
* (The largest core call in leds.c uses 400).
|
||||||
|
@ -139,7 +139,7 @@ clock_delay(unsigned int howlong)
|
||||||
clock_delay_usec((283*howlong)/100);
|
clock_delay_usec((283*howlong)/100);
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/**
|
/*
|
||||||
* Adjust clock ticks after a cpu sleep.
|
* Adjust clock ticks after a cpu sleep.
|
||||||
*/
|
*/
|
||||||
void clock_adjust_ticks(clock_time_t howmany) {
|
void clock_adjust_ticks(clock_time_t howmany) {
|
||||||
|
|
|
@ -195,7 +195,7 @@ clock_delay(unsigned int i)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/**
|
/*
|
||||||
* Wait for a multiple of 10 ms.
|
* Wait for a multiple of 10 ms.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -192,7 +192,7 @@ clock_delay(unsigned int i)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/**
|
/*
|
||||||
* Wait for a multiple of 10 ms.
|
* Wait for a multiple of 10 ms.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -113,7 +113,7 @@ clock_delay(unsigned int i)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/**
|
/*
|
||||||
* Wait for a multiple of 1 ms.
|
* Wait for a multiple of 1 ms.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
|
|
2371
doc/Doxyfile
2371
doc/Doxyfile
File diff suppressed because it is too large
Load diff
|
@ -1,7 +1,5 @@
|
||||||
/**
|
/**
|
||||||
\defgroup buildsystem The Contiki build system
|
\defgroup buildsystem The Contiki build system
|
||||||
|
|
||||||
.
|
|
||||||
|
|
||||||
The Contiki build system is designed to make it easy to compile
|
The Contiki build system is designed to make it easy to compile
|
||||||
Contiki applications for either to a hardware platform or into a
|
Contiki applications for either to a hardware platform or into a
|
||||||
|
@ -18,18 +16,15 @@
|
||||||
builds an entire Contiki system as a program that runs on the
|
builds an entire Contiki system as a program that runs on the
|
||||||
development system. After compiling the application for the
|
development system. After compiling the application for the
|
||||||
<tt>native</tt> target it is possible to run the Contiki system with
|
<tt>native</tt> target it is possible to run the Contiki system with
|
||||||
the application by running the file <tt>hello-world.native</tt>. To
|
the application by running the file <tt>hello-world.native</tt>.
|
||||||
compile the application and a Contiki system for the \ref esb "ESB
|
|
||||||
platform" the command <tt>make TARGET=esb</tt> is used. This produces
|
|
||||||
a hello-world.esb file that can be loaded into an ESB board.
|
|
||||||
|
|
||||||
To compile the hello-world application into a stand-alone executable
|
To compile the hello-world application into a stand-alone executable
|
||||||
that can be loaded into a running Contiki system, the command
|
that can be loaded into a running Contiki system, the command
|
||||||
<tt>make hello-world.ce</tt> is used. To build an executable file for
|
<tt>make hello-world.ce</tt> is used. To build an executable file for
|
||||||
the ESB platform, <tt>make TARGET=esb hello-world.ce</tt> is run.
|
the Sky platform, <tt>make TARGET=sky hello-world.sky</tt> is run.
|
||||||
|
|
||||||
To avoid having to type <tt>TARGET=</tt> every time <tt>make</tt> is
|
To avoid having to type <tt>TARGET=</tt> every time <tt>make</tt> is
|
||||||
run, it is possible to run <tt>make TARGET=esb savetarget</tt> to
|
run, it is possible to run <tt>make TARGET=sky savetarget</tt> to
|
||||||
save the selected target as the default target platform for
|
save the selected target as the default target platform for
|
||||||
subsequent invocations of <tt>make</tt>. A file called
|
subsequent invocations of <tt>make</tt>. A file called
|
||||||
<tt>Makefile.target</tt> containing the currently saved target is
|
<tt>Makefile.target</tt> containing the currently saved target is
|
||||||
|
|
|
@ -93,8 +93,6 @@ Contiki is designed to run on many different \ref platform "platforms". It is al
|
||||||
possible to compile and build both the Contiki system and Contiki
|
possible to compile and build both the Contiki system and Contiki
|
||||||
applications on many different development platforms.
|
applications on many different development platforms.
|
||||||
|
|
||||||
See \ref esb-getting-started "Getting started with Contiki for the ESB platform
|
|
||||||
|
|
||||||
\section contiki-mainpage-building Building the Contiki system and its applications
|
\section contiki-mainpage-building Building the Contiki system and its applications
|
||||||
|
|
||||||
The Contiki build system is designed to make it easy to compile
|
The Contiki build system is designed to make it easy to compile
|
||||||
|
|
|
@ -11,18 +11,18 @@ support on Atmel RAVEN hardware.
|
||||||
|
|
||||||
|
|
||||||
\section toc Table of contents
|
\section toc Table of contents
|
||||||
\ref introduction<br>
|
\ref tutorial-raven-introduction <br>
|
||||||
\ref hardware<br>
|
\ref hardware <br>
|
||||||
\ref software<br>
|
\ref software <br>
|
||||||
\ref overview<br>
|
\ref overview <br>
|
||||||
\ref installation<br>
|
\ref installation <br>
|
||||||
\ref running<br>
|
\ref running <br>
|
||||||
\ref advanced<br>
|
\ref advanced <br>
|
||||||
\ref issues<br>
|
\ref issues <br>
|
||||||
\ref annex<br>
|
\ref annex <br>
|
||||||
|
|
||||||
<HR>
|
<HR>
|
||||||
\section introduction Introduction
|
\section tutorial-raven-introduction Introduction
|
||||||
This tutorial explains how to run Contiki with IPv6 and 6lowpan
|
This tutorial explains how to run Contiki with IPv6 and 6lowpan
|
||||||
support on Atmel RAVEN evaluation kit (ATAVRRZRAVEN) hardware. We
|
support on Atmel RAVEN evaluation kit (ATAVRRZRAVEN) hardware. We
|
||||||
present basic example system architecture and application scenarios,
|
present basic example system architecture and application scenarios,
|
||||||
|
@ -419,7 +419,7 @@ is the one to the file you just modified and click on "Program".
|
||||||
The third is to modify the default value in the code:
|
The third is to modify the default value in the code:
|
||||||
|
|
||||||
\li Edit the file contiki-raven-main.c in the directory
|
\li Edit the file contiki-raven-main.c in the directory
|
||||||
platform\avr-raven. You will see the MAC address set in a line like:
|
platform\\avr-raven. You will see the MAC address set in a line like:
|
||||||
|
|
||||||
\code
|
\code
|
||||||
/* Put default MAC address in EEPROM */
|
/* Put default MAC address in EEPROM */
|
||||||
|
|
|
@ -66,7 +66,7 @@ This part of the code is very similar to the \ref ipreass "IPv4 fragmentation co
|
||||||
is not assumed to be a TCP packet. As a result, we use a different
|
is not assumed to be a TCP packet. As a result, we use a different
|
||||||
%timer to time-out reassembly if all fragments have not been received
|
%timer to time-out reassembly if all fragments have not been received
|
||||||
after #UIP_REASS_MAXAGE = 60s.
|
after #UIP_REASS_MAXAGE = 60s.
|
||||||
\note Fragment reassembly is enabled if #UIP_CONF_REASSEMBLY is set to 1.
|
\note Fragment reassembly is enabled if #UIP_REASSEMBLY is set to 1.
|
||||||
\note We can only reassemble packet of at most #UIP_LINK_MTU = 1280
|
\note We can only reassemble packet of at most #UIP_LINK_MTU = 1280
|
||||||
bytes as we do not have larger buffers.
|
bytes as we do not have larger buffers.
|
||||||
|
|
||||||
|
@ -81,9 +81,9 @@ typedef union uip_ip6addr_t {
|
||||||
\endcode
|
\endcode
|
||||||
|
|
||||||
We assume that each node has a <em>single interface</em> of type
|
We assume that each node has a <em>single interface</em> of type
|
||||||
#uip_netif.
|
#uip_ds6_netif_t.
|
||||||
|
|
||||||
Each interface can have up to #UIP_NETIF_MAX_ADDRESSES unicast IPv6
|
Each interface can have a configurable number of unicast IPv6
|
||||||
addresses including its link-local address. It also has a
|
addresses including its link-local address. It also has a
|
||||||
solicited-node multicast address. We assume that the unicast
|
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"
|
||||||
|
@ -377,5 +377,7 @@ We pass all the tests for phase 2 except:
|
||||||
|
|
||||||
|
|
||||||
<HR>
|
<HR>
|
||||||
|
@{
|
||||||
*/
|
*/
|
||||||
/** @} */
|
/** @} */
|
||||||
|
/** @} */
|
||||||
|
|
|
@ -85,7 +85,7 @@ void rs232_set_speed(unsigned char speed);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Print a text string on RS232
|
* \brief Print a text string on RS232
|
||||||
* \param str A pointer to the string that is to be printed
|
* \param text A pointer to the string that is to be printed
|
||||||
*
|
*
|
||||||
* This function prints a string to RS232. The string must
|
* This function prints a string to RS232. The string must
|
||||||
* be terminated by a null byte. The RS232 module must be
|
* be terminated by a null byte. The RS232 module must be
|
||||||
|
|
|
@ -222,7 +222,7 @@ __delay_cycles(unsigned long c)
|
||||||
}
|
}
|
||||||
#endif /* __GNUC__ */
|
#endif /* __GNUC__ */
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/**
|
/*
|
||||||
* Wait for a multiple of 10 ms.
|
* Wait for a multiple of 10 ms.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -126,7 +126,7 @@ void clock_delay(unsigned int i)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/**
|
/*
|
||||||
* Wait for a multiple of 1 ms.
|
* Wait for a multiple of 1 ms.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -129,7 +129,7 @@ clock_delay(unsigned int i)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/**
|
/*
|
||||||
* Wait for a multiple of 1 / 128 sec = 7.8125 ms.
|
* Wait for a multiple of 1 / 128 sec = 7.8125 ms.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
380
|
291
|
||||||
|
|
Loading…
Add table
Reference in a new issue