Merge pull request #14629 from artokin/phy_mode_and_channel_plan_master

Mesh api: Added PHY mode, channel plan IDs and configuration functions
pull/14702/head
Anna Bridge 2021-05-25 14:04:32 +01:00 committed by GitHub
commit ef0b31ab53
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 90 additions and 0 deletions

View File

@ -188,6 +188,48 @@ public:
* */
mesh_error_t validate_network_regulatory_domain(uint8_t regulatory_domain, uint8_t operating_class, uint8_t operating_mode);
/**
* \brief Set Wi-SUN network regulatory domain, PHY mode ID and channel plan ID.
*
* Function stores new parameters to mbed-mesh-api and uses them when connect() is called next time.
* If device is already connected to the Wi-SUN network then device will restart network discovery after
* changing the regulatory_domain, phy_mode_id or channel_plan_id.
*
* \param regulatory_domain Values defined in Wi-SUN PHY-specification. Use 0 to leave parameter unchanged or 0xff to use default value.
* \param phy_mode_id Values defined in Wi-SUN PHY-specification. Use 0 to leave parameter unchanged or 0xff to use default value.
* \param channel_plan_id Values defined in Wi-SUN PHY-specification. Use 0 to leave parameter unchanged or 0xff to use default value.
* \return MESH_ERROR_NONE on success.
* \return MESH_ERROR_UNKNOWN in case of failure.
* */
mesh_error_t set_network_domain_configuration(uint8_t regulatory_domain, uint8_t phy_mode_id, uint8_t channel_plan_id);
/**
* \brief Get Wi-SUN network regulatory domain, PHY mode ID and channel plan ID.
*
* Function reads regulatory_domain, phy_mode_id and channel_plan_id from mbed-mesh-api.
*
* \param regulatory_domain Values defined in Wi-SUN PHY-specification.
* \param phy_mode_id Values defined in Wi-SUN PHY-specification.
* \param channel_plan_id Values defined in Wi-SUN PHY-specification.
* \return MESH_ERROR_NONE on success.
* \return MESH_ERROR_UNKNOWN in case of failure.
* */
mesh_error_t get_network_domain_configuration(uint8_t *regulatory_domain, uint8_t *phy_mode_id, uint8_t *channel_plan_id);
/**
* \brief Validate Wi-SUN network regulatory domain, PHY mode ID and channel plan ID.
*
* Function validates regulatory_domain, phy_mode_id and channel_plan_id. Function can be used to test that values that will
* be used on set function are valid.
*
* \param regulatory_domain Values defined in Wi-SUN PHY-specification.
* \param phy_mode_id Values defined in Wi-SUN PHY-specification.
* \param channel_plan_id Values defined in Wi-SUN PHY-specification.
* \return MESH_ERROR_NONE on success.
* \return MESH_ERROR_UNKNOWN in case of failure.
* */
mesh_error_t validate_network_domain_configuration(uint8_t regulatory_domain, uint8_t phy_mode_id, uint8_t channel_plan_id);
/**
* \brief Set Wi-SUN network size.
*

View File

@ -136,6 +136,14 @@
"help": "Operating mode as specified in the Wi-SUN PHY Specification. Wi-SUN stack uses operating-mode suitable for EU-region if value 255 is used.",
"value": "255"
},
"wisun-phy-mode-id": {
"help": "PHY mode ID as specified in the Wi-SUN PHY Specification. With default value 255, parameter is not used.",
"value": "255"
},
"wisun-channel-plan-id": {
"help": "Channel plan ID as specified in the Wi-SUN PHY Specification. With default value 255, parameter is not used.",
"value": "255"
},
"wisun-uc-channel-function": {
"help": "Unicast channel function as specified in the Wi-SUN FAN specification. Wi-SUN stack will select channel function if value 255 is used.",
"value": 255

View File

@ -98,6 +98,16 @@ nsapi_error_t WisunInterface::configure()
}
#endif
#if (MBED_CONF_MBED_MESH_API_WISUN_PHY_MODE_ID != 255) || (MBED_CONF_MBED_MESH_API_WISUN_CHANNEL_PLAN_ID != 255)
status = set_network_domain_configuration(MBED_CONF_MBED_MESH_API_WISUN_REGULATORY_DOMAIN,
MBED_CONF_MBED_MESH_API_WISUN_PHY_MODE_ID,
MBED_CONF_MBED_MESH_API_WISUN_CHANNEL_PLAN_ID);
if (status != MESH_ERROR_NONE) {
tr_error("Failed to set domain configuration!");
return NSAPI_ERROR_PARAMETER;
}
#endif
#if (MBED_CONF_MBED_MESH_API_WISUN_UC_CHANNEL_FUNCTION != 255)
status = set_unicast_channel_function(static_cast<mesh_channel_function_t>(MBED_CONF_MBED_MESH_API_WISUN_UC_CHANNEL_FUNCTION),
MBED_CONF_MBED_MESH_API_WISUN_UC_FIXED_CHANNEL,
@ -308,6 +318,36 @@ mesh_error_t WisunInterface::validate_network_regulatory_domain(uint8_t regulato
return MESH_ERROR_NONE;
}
mesh_error_t WisunInterface::set_network_domain_configuration(uint8_t regulatory_domain, uint8_t phy_mode_id, uint8_t channel_plan_id)
{
int status = ws_management_domain_configuration_set(get_interface_id(), regulatory_domain, phy_mode_id, channel_plan_id);
if (status != 0) {
return MESH_ERROR_UNKNOWN;
}
return MESH_ERROR_NONE;
}
mesh_error_t WisunInterface::get_network_domain_configuration(uint8_t *regulatory_domain, uint8_t *phy_mode_id, uint8_t *channel_plan_id)
{
int status = ws_management_domain_configuration_get(get_interface_id(), regulatory_domain, phy_mode_id, channel_plan_id);
if (status != 0) {
return MESH_ERROR_UNKNOWN;
}
return MESH_ERROR_NONE;
}
mesh_error_t WisunInterface::validate_network_domain_configuration(uint8_t regulatory_domain, uint8_t phy_mode_id, uint8_t channel_plan_id)
{
int status = ws_management_domain_configuration_validate(get_interface_id(), regulatory_domain, phy_mode_id, channel_plan_id);
if (status != 0) {
return MESH_ERROR_UNKNOWN;
}
return MESH_ERROR_NONE;
}
mesh_error_t WisunInterface::set_network_size(uint8_t network_size)
{
if (network_size == 0xff) {