Beispiel #1
0
/*---------------------------------------------------------------------------*/
void
queuebuf_to_packetbuf(struct queuebuf *b)
{
  if(memb_inmemb(&bufmem, b)) {
    struct queuebuf_data *buframptr = queuebuf_load_to_ram(b);
    packetbuf_copyfrom(buframptr->data, buframptr->len);
    packetbuf_attr_copyfrom(buframptr->attrs, buframptr->addrs);
  }
}
Beispiel #2
0
/*---------------------------------------------------------------------------*/
void packet_sent(uint8_t sessionid, uint8_t status, uint8_t tx)
{
  if(sessionid < MAX_CALLBACKS) {
    struct tx_callback *callback;
    callback = &callbacks[sessionid];
    packetbuf_clear();
    packetbuf_attr_copyfrom(callback->attrs, callback->addrs);
    mac_call_sent_callback(callback->cback, callback->ptr, status, tx);
  } else {
    PRINTF("*** ERROR: too high session id %d\n", sessionid);
  }
}
Beispiel #3
0
/*---------------------------------------------------------------------------*/
static void
packet_timeout(void *ptr)
{
    struct tx_callback *callback = ptr;
    if (callback->isused) {
        callback_count--;
        callback->isused = 0;
        native_rdc_ack_timeout++;
        LOG6LBR_ERROR("br-rdc: send failed, slip ack timeout (%d)\n", callback->sid);
        packetbuf_clear();
        packetbuf_attr_copyfrom(callback->attrs, callback->addrs);
        mac_call_sent_callback(callback->cback, callback->ptr, MAC_TX_NOACK, 1);
    } else {
        LOG6LBR_ERROR("br-rdc: ack timeout for already acked packet (%d)\n", callback->sid);
    }
}
Beispiel #4
0
/*---------------------------------------------------------------------------*/
void
queuebuf_to_packetbuf(struct queuebuf *b)
{
  struct queuebuf_ref *r;
  if(memb_inmemb(&bufmem, b)) {
    struct queuebuf_data *buframptr = queuebuf_load_to_ram(b);
    packetbuf_copyfrom(buframptr->data, buframptr->len);
    packetbuf_attr_copyfrom(buframptr->attrs, buframptr->addrs);
  } else if(memb_inmemb(&refbufmem, b)) {
    r = (struct queuebuf_ref *)b;
    packetbuf_clear();
    packetbuf_copyfrom(r->ref, r->len);
    packetbuf_hdralloc(r->hdrlen);
    memcpy(packetbuf_hdrptr(), r->hdr, r->hdrlen);
  }
}
Beispiel #5
0
/*---------------------------------------------------------------------------*/
void
packet_sent(uint8_t sessionid, uint8_t status, uint8_t tx)
{
    LOG6LBR_PRINTF(PACKET, RADIO_OUT, "sid ack: %d (%d, %d)\n", sessionid, status, tx);
    if(sessionid < MAX_CALLBACKS) {
        struct tx_callback *callback;

        callback = &callbacks[sessionid];
        if (callback->isused) {
            callback_count--;
            callback->isused = 0;
            packetbuf_clear();
            packetbuf_attr_copyfrom(callback->attrs, callback->addrs);
            ctimer_stop(&callback->timeout);
            mac_call_sent_callback(callback->cback, callback->ptr, status, tx);
        } else {
            LOG6LBR_ERROR("br-rdc: ack received for unknown packet (%d)\n", callback->sid);
        }
    } else {
        LOG6LBR_ERROR("*** ERROR: too high session id %d\n", sessionid);
    }
}