net/ieee802154: Expose TX power setting through net mgmt API
This permits to tweak the TX power in dbm. Change-Id: Idadff397941a39010ce3c374d9ca74b777934626 Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
This commit is contained in:
parent
63619b503f
commit
951294f15e
2 changed files with 32 additions and 0 deletions
|
@ -50,6 +50,7 @@ struct ieee802154_context {
|
|||
#ifdef CONFIG_NET_L2_IEEE802154_SECURITY
|
||||
struct ieee802154_security_ctx sec_ctx;
|
||||
#endif
|
||||
int16_t tx_power;
|
||||
uint8_t sequence;
|
||||
uint8_t ack_received : 1;
|
||||
uint8_t ack_requested : 1;
|
||||
|
@ -83,6 +84,8 @@ enum net_request_ieee802154_cmd {
|
|||
NET_REQUEST_IEEE802154_CMD_GET_EXT_ADDR,
|
||||
NET_REQUEST_IEEE802154_CMD_SET_SHORT_ADDR,
|
||||
NET_REQUEST_IEEE802154_CMD_GET_SHORT_ADDR,
|
||||
NET_REQUEST_IEEE802154_CMD_GET_TX_POWER,
|
||||
NET_REQUEST_IEEE802154_CMD_SET_TX_POWER,
|
||||
NET_REQUEST_IEEE802154_CMD_SET_SECURITY_SETTINGS,
|
||||
NET_REQUEST_IEEE802154_CMD_GET_SECURITY_SETTINGS,
|
||||
};
|
||||
|
@ -163,6 +166,18 @@ NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_IEEE802154_SET_SHORT_ADDR);
|
|||
|
||||
NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_IEEE802154_GET_SHORT_ADDR);
|
||||
|
||||
#define NET_REQUEST_IEEE802154_GET_TX_POWER \
|
||||
(_NET_IEEE802154_BASE | \
|
||||
NET_REQUEST_IEEE802154_CMD_GET_TX_POWER)
|
||||
|
||||
NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_IEEE802154_GET_TX_POWER);
|
||||
|
||||
#define NET_REQUEST_IEEE802154_SET_TX_POWER \
|
||||
(_NET_IEEE802154_BASE | \
|
||||
NET_REQUEST_IEEE802154_CMD_SET_TX_POWER)
|
||||
|
||||
NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_IEEE802154_SET_TX_POWER);
|
||||
|
||||
#ifdef CONFIG_NET_L2_IEEE802154_SECURITY
|
||||
|
||||
#define NET_REQUEST_IEEE802154_SET_SECURITY_SETTINGS \
|
||||
|
|
|
@ -419,6 +419,13 @@ static int ieee802154_set_parameters(uint32_t mgmt_request,
|
|||
ctx->short_addr = value;
|
||||
}
|
||||
}
|
||||
} else if (mgmt_request == NET_REQUEST_IEEE802154_SET_TX_POWER) {
|
||||
if (ctx->tx_power != (int16_t)value) {
|
||||
ret = radio->set_txpower(iface->dev, (int16_t)value);
|
||||
if (!ret) {
|
||||
ctx->tx_power = (int16_t)value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
@ -436,6 +443,9 @@ NET_MGMT_REGISTER_REQUEST_HANDLER(NET_REQUEST_IEEE802154_SET_EXT_ADDR,
|
|||
NET_MGMT_REGISTER_REQUEST_HANDLER(NET_REQUEST_IEEE802154_SET_SHORT_ADDR,
|
||||
ieee802154_set_parameters);
|
||||
|
||||
NET_MGMT_REGISTER_REQUEST_HANDLER(NET_REQUEST_IEEE802154_SET_TX_POWER,
|
||||
ieee802154_set_parameters);
|
||||
|
||||
static int ieee802154_get_parameters(uint32_t mgmt_request,
|
||||
struct net_if *iface,
|
||||
void *data, size_t len)
|
||||
|
@ -462,6 +472,10 @@ static int ieee802154_get_parameters(uint32_t mgmt_request,
|
|||
memcpy(data, ctx->ext_addr, IEEE802154_EXT_ADDR_LENGTH);
|
||||
} else if (mgmt_request == NET_REQUEST_IEEE802154_GET_SHORT_ADDR) {
|
||||
*value = ctx->short_addr;
|
||||
} else if (mgmt_request == NET_REQUEST_IEEE802154_GET_TX_POWER) {
|
||||
int16_t *s_value = (int16_t *)data;
|
||||
|
||||
*s_value = ctx->tx_power;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -479,6 +493,9 @@ NET_MGMT_REGISTER_REQUEST_HANDLER(NET_REQUEST_IEEE802154_GET_EXT_ADDR,
|
|||
NET_MGMT_REGISTER_REQUEST_HANDLER(NET_REQUEST_IEEE802154_GET_SHORT_ADDR,
|
||||
ieee802154_get_parameters);
|
||||
|
||||
NET_MGMT_REGISTER_REQUEST_HANDLER(NET_REQUEST_IEEE802154_GET_TX_POWER,
|
||||
ieee802154_get_parameters);
|
||||
|
||||
#ifdef CONFIG_NET_L2_IEEE802154_SECURITY
|
||||
|
||||
static int ieee802154_set_security_settings(uint32_t mgmt_request,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue