50 #include "dev/radio-sensor.h"
52 #include "lib/random.h"
54 #if CONTIKI_TARGET_NETSIM
69 #define PRINTF(...) printf(__VA_ARGS__)
78 struct neighbor_discovery_conn *c = ptr;
89 PRINTF(
"%d.%d: sending neighbor advertisement with val %d\n",
95 adv_packet_received(
struct broadcast_conn *ibc,
const linkaddr_t *from)
97 struct neighbor_discovery_conn *c = (
struct neighbor_discovery_conn *)ibc;
102 PRINTF(
"%d.%d: adv_packet_received from %d.%d with val %d\n",
104 from->u8[0], from->u8[1], msg.val);
108 if(msg.val < c->val) {
113 c->u->recv(c, from, msg.val);
118 adv_packet_sent(
struct broadcast_conn *bc,
int status,
int num_tx)
122 static void send_timer(
void *ptr);
125 set_timers(
struct neighbor_discovery_conn *c)
127 ctimer_set(&c->interval_timer, c->current_interval, send_timer, c);
129 (c->current_interval / 2),
134 send_timer(
void *ptr)
136 struct neighbor_discovery_conn *c = ptr;
137 clock_time_t interval;
139 interval = c->current_interval * 2;
141 if(interval > c->max_interval) {
142 interval = c->max_interval;
145 c->current_interval = interval;
149 PRINTF(
"current_interval %lu\n", (
long unsigned int) interval);
155 {adv_packet_received, adv_packet_sent };
158 neighbor_discovery_open(
struct neighbor_discovery_conn *c, uint16_t channel,
159 clock_time_t initial,
162 const struct neighbor_discovery_callbacks *cb)
164 PRINTF(
"%d.%d: neighbor discovery open channel %d\n",
169 c->initial_interval = initial;
170 c->min_interval = min;
171 c->max_interval = max;
175 neighbor_discovery_close(
struct neighbor_discovery_conn *c)
183 neighbor_discovery_set_val(
struct neighbor_discovery_conn *c, uint16_t val)
189 neighbor_discovery_start(
struct neighbor_discovery_conn *c, uint16_t val)
191 c->current_interval = c->initial_interval;
linkaddr_t linkaddr_node_addr
The Rime address of the node.
#define CC_CONST_FUNCTION
Configure if the C compiler have problems with const function pointers.
void broadcast_close(struct broadcast_conn *c)
Close a broadcast connection.
Neighbor discovery header file
void packetbuf_set_datalen(uint16_t len)
Set the length of the data in the packetbuf.
Header file for the Rime stack
void ctimer_set(struct ctimer *c, clock_time_t t, void(*f)(void *), void *ptr)
Set a callback timer.
Callback structure for broadcast.
int broadcast_send(struct broadcast_conn *c)
Send an identified best-effort broadcast packet.
void packetbuf_clear(void)
Clear and reset the packetbuf.
void * packetbuf_dataptr(void)
Get a pointer to the data in the packetbuf.
void broadcast_open(struct broadcast_conn *c, uint16_t channel, const struct broadcast_callbacks *u)
Set up an identified best-effort broadcast connection.
void ctimer_stop(struct ctimer *c)
Stop a pending callback timer.
unsigned short random_rand(void)
Generate the next state and return the upper part of it.