Removed ContikiMAC burst dependency to phase optimization
This commit is contained in:
parent
e0ae036a69
commit
a2073db715
@ -548,7 +548,7 @@ send_packet(mac_callback_t mac_callback, void *mac_callback_ptr, struct rdc_buf_
|
|||||||
#if WITH_PHASE_OPTIMIZATION
|
#if WITH_PHASE_OPTIMIZATION
|
||||||
ret = phase_wait(&phase_list, packetbuf_addr(PACKETBUF_ADDR_RECEIVER),
|
ret = phase_wait(&phase_list, packetbuf_addr(PACKETBUF_ADDR_RECEIVER),
|
||||||
CYCLE_TIME, GUARD_TIME,
|
CYCLE_TIME, GUARD_TIME,
|
||||||
mac_callback, mac_callback_ptr, buf_list, 0);
|
mac_callback, mac_callback_ptr, buf_list);
|
||||||
if(ret == PHASE_DEFERRED) {
|
if(ret == PHASE_DEFERRED) {
|
||||||
return MAC_TX_DEFERRED;
|
return MAC_TX_DEFERRED;
|
||||||
}
|
}
|
||||||
@ -748,14 +748,8 @@ qsend_list(mac_callback_t sent, void *ptr, struct rdc_buf_list *buf_list)
|
|||||||
}
|
}
|
||||||
/* Do not send during reception of a burst */
|
/* Do not send during reception of a burst */
|
||||||
if(we_are_receiving_burst) {
|
if(we_are_receiving_burst) {
|
||||||
queuebuf_to_packetbuf(curr->buf);
|
/* Return COLLISION so the MAC may try again later */
|
||||||
/* We try to defer, and return an error this wasn't possible */
|
mac_call_sent_callback(sent, ptr, MAC_TX_COLLISION, 1);
|
||||||
int ret = phase_wait(&phase_list, packetbuf_addr(PACKETBUF_ADDR_RECEIVER),
|
|
||||||
CYCLE_TIME, GUARD_TIME,
|
|
||||||
sent, ptr, curr, 2);
|
|
||||||
if(ret != PHASE_DEFERRED) {
|
|
||||||
mac_call_sent_callback(sent, ptr, MAC_TX_ERR, 1);
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
/* The receiver needs to be awoken before we send */
|
/* The receiver needs to be awoken before we send */
|
||||||
|
@ -167,7 +167,7 @@ phase_wait(struct phase_list *list,
|
|||||||
const rimeaddr_t *neighbor, rtimer_clock_t cycle_time,
|
const rimeaddr_t *neighbor, rtimer_clock_t cycle_time,
|
||||||
rtimer_clock_t guard_time,
|
rtimer_clock_t guard_time,
|
||||||
mac_callback_t mac_callback, void *mac_callback_ptr,
|
mac_callback_t mac_callback, void *mac_callback_ptr,
|
||||||
struct rdc_buf_list *buf_list, int extra_deferment)
|
struct rdc_buf_list *buf_list)
|
||||||
{
|
{
|
||||||
struct phase *e;
|
struct phase *e;
|
||||||
// const rimeaddr_t *neighbor = packetbuf_addr(PACKETBUF_ADDR_RECEIVER);
|
// const rimeaddr_t *neighbor = packetbuf_addr(PACKETBUF_ADDR_RECEIVER);
|
||||||
@ -176,7 +176,7 @@ phase_wait(struct phase_list *list,
|
|||||||
time for the next expected phase and setup a ctimer to switch on
|
time for the next expected phase and setup a ctimer to switch on
|
||||||
the radio just before the phase. */
|
the radio just before the phase. */
|
||||||
e = find_neighbor(list, neighbor);
|
e = find_neighbor(list, neighbor);
|
||||||
if((e != NULL) | extra_deferment) {
|
if(e != NULL) {
|
||||||
rtimer_clock_t wait, now, expected, sync;
|
rtimer_clock_t wait, now, expected, sync;
|
||||||
clock_time_t ctimewait;
|
clock_time_t ctimewait;
|
||||||
|
|
||||||
@ -202,14 +202,10 @@ phase_wait(struct phase_list *list,
|
|||||||
if(wait < guard_time) {
|
if(wait < guard_time) {
|
||||||
wait += cycle_time;
|
wait += cycle_time;
|
||||||
}
|
}
|
||||||
if(extra_deferment) {
|
|
||||||
wait += extra_deferment * cycle_time;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
ctimewait = (CLOCK_SECOND * (wait - guard_time)) / RTIMER_ARCH_SECOND;
|
ctimewait = (CLOCK_SECOND * (wait - guard_time)) / RTIMER_ARCH_SECOND;
|
||||||
|
|
||||||
if((ctimewait > PHASE_DEFER_THRESHOLD) | extra_deferment) {
|
if(ctimewait > PHASE_DEFER_THRESHOLD) {
|
||||||
struct phase_queueitem *p;
|
struct phase_queueitem *p;
|
||||||
|
|
||||||
p = memb_alloc(&queued_packets_memb);
|
p = memb_alloc(&queued_packets_memb);
|
||||||
|
@ -76,7 +76,7 @@ void phase_init(struct phase_list *list);
|
|||||||
phase_status_t phase_wait(struct phase_list *list, const rimeaddr_t *neighbor,
|
phase_status_t phase_wait(struct phase_list *list, const rimeaddr_t *neighbor,
|
||||||
rtimer_clock_t cycle_time, rtimer_clock_t wait_before,
|
rtimer_clock_t cycle_time, rtimer_clock_t wait_before,
|
||||||
mac_callback_t mac_callback, void *mac_callback_ptr,
|
mac_callback_t mac_callback, void *mac_callback_ptr,
|
||||||
struct rdc_buf_list *buf_list, int extra_deferment);
|
struct rdc_buf_list *buf_list);
|
||||||
void phase_update(const struct phase_list *list, const rimeaddr_t *neighbor,
|
void phase_update(const struct phase_list *list, const rimeaddr_t *neighbor,
|
||||||
rtimer_clock_t time, int mac_status);
|
rtimer_clock_t time, int mac_status);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user