static int xbee_get(netdev2_t *ndev, netopt_t opt, void *value, size_t max_len) { xbee_t *dev = (xbee_t *)ndev; assert(dev); switch (opt) { case NETOPT_ADDRESS: assert(max_len >= IEEE802154_SHORT_ADDRESS_LEN); memcpy(value, dev->addr_short, IEEE802154_SHORT_ADDRESS_LEN); return IEEE802154_SHORT_ADDRESS_LEN; case NETOPT_ADDRESS_LONG: assert(max_len >= IEEE802154_LONG_ADDRESS_LEN); memcpy(value, dev->addr_long.uint8, IEEE802154_LONG_ADDRESS_LEN); return IEEE802154_LONG_ADDRESS_LEN; case NETOPT_ADDR_LEN: case NETOPT_SRC_LEN: if (max_len < sizeof(uint16_t)) { return -EOVERFLOW; } if (dev->addr_flags & XBEE_ADDR_FLAGS_LONG) { *((uint16_t *)value) = IEEE802154_LONG_ADDRESS_LEN; } else { *((uint16_t *)value) = IEEE802154_SHORT_ADDRESS_LEN; } return sizeof(uint16_t); case NETOPT_IPV6_IID: if (max_len < sizeof(eui64_t)) { return -EOVERFLOW; } if (dev->addr_flags & XBEE_ADDR_FLAGS_LONG) { ieee802154_get_iid(value, dev->addr_long.uint8, IEEE802154_LONG_ADDRESS_LEN); } else { ieee802154_get_iid(value, dev->addr_short, IEEE802154_SHORT_ADDRESS_LEN); } return sizeof(eui64_t); case NETOPT_CHANNEL: return _get_channel(dev, (uint8_t *)value, max_len); case NETOPT_MAX_PACKET_SIZE: if (max_len < sizeof(uint16_t)) { return -EOVERFLOW; } *((uint16_t *)value) = XBEE_MAX_PAYLOAD_LENGTH; return sizeof(uint16_t); case NETOPT_NID: return _get_panid(dev, (uint8_t *)value, max_len); default: return -ENOTSUP; } }
int _get(ng_netdev_t *dev, netopt_t opt, void *value, size_t max_len) { (void)dev; switch (opt) { case NETOPT_ADDRESS: return _get_address(value, max_len); case NETOPT_CHANNEL: return _get_channel(value, max_len); case NETOPT_NID: return _get_pan(value, max_len); case NETOPT_TX_POWER: return _get_txpower(value, max_len); case NETOPT_STATE: return _get_state(value, max_len); default: return -ENOTSUP; } }