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; }
static int _set_state(at86rf2xx_t *dev, netopt_state_t state) { switch (state) { case NETOPT_STATE_SLEEP: at86rf2xx_set_state(dev, AT86RF2XX_STATE_SLEEP); break; case NETOPT_STATE_IDLE: at86rf2xx_set_state(dev, AT86RF2XX_STATE_RX_AACK_ON); break; case NETOPT_STATE_TX: if (dev->netdev.flags & AT86RF2XX_OPT_PRELOADING) { at86rf2xx_tx_exec(dev); } break; case NETOPT_STATE_RESET: at86rf2xx_reset(dev); break; default: return -ENOTSUP; } return sizeof(netopt_state_t); }