static int _send(netdev2_t *netdev, const struct iovec *vector, int count) { at86rf2xx_t *dev = (at86rf2xx_t *)netdev; const struct iovec *ptr = vector; size_t len = 0; at86rf2xx_tx_prepare(dev); /* load packet data into FIFO */ for (int i = 0; i < count; i++, ptr++) { /* current packet data + FCS too long */ if ((len + ptr->iov_len + 2) > AT86RF2XX_MAX_PKT_LENGTH) { DEBUG("[at86rf2xx] error: packet too large (%u byte) to be send\n", (unsigned)len + 2); return -EOVERFLOW; } #ifdef MODULE_NETSTATS_L2 netdev->stats.tx_bytes += len; #endif len = at86rf2xx_tx_load(dev, ptr->iov_base, ptr->iov_len, len); } /* send data out directly if pre-loading id disabled */ if (!(dev->netdev.flags & AT86RF2XX_OPT_PRELOADING)) { at86rf2xx_tx_exec(dev); } /* return the number of bytes that were actually send out */ return (int)len; }
size_t at86rf2xx_send(at86rf2xx_t *dev, uint8_t *data, size_t len) { /* check data length */ if (len > AT86RF2XX_MAX_PKT_LENGTH) { DEBUG("[at86rf2xx] Error: data to send exceeds max packet size\n"); return 0; } at86rf2xx_tx_prepare(dev); at86rf2xx_tx_load(dev, data, len, 0); at86rf2xx_tx_exec(dev); return len; }