Skip to content
This repository was archived by the owner on Sep 7, 2020. It is now read-only.
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion controller/src/beerocks/bml/bml_defs.h
Original file line number Diff line number Diff line change
Expand Up @@ -599,7 +599,7 @@ struct BML_CLIENT_CONFIG {

struct BML_CLIENT {
// Client MAC.
char sta_mac[BML_MAC_ADDR_LEN];
uint8_t sta_mac[BML_MAC_ADDR_LEN];

// Time of last client configuration edit (in Seconds)
uint32_t timestamp_sec;
Expand Down
73 changes: 49 additions & 24 deletions controller/src/beerocks/bml/internal/bml_internal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1141,13 +1141,13 @@ int bml_internal::process_cmdu_header(std::shared_ptr<beerocks_header> beerocks_
->addClass<beerocks_message::cACTION_BML_CLIENT_GET_CLIENT_LIST_RESPONSE>();
if (!response) {
LOG(ERROR) << "addClass cACTION_BML_CLIENT_GET_CLIENT_LIST_RESPONSE failed";
return BML_RET_OP_FAILED;
return (-BML_RET_OP_FAILED);
}

if (!m_client_list || !m_client_list_size) {
LOG(ERROR) << "The pointer to the user data buffer is null!";
m_prmClientListGet->set_value(false);
break;
return (-BML_RET_INVALID_ARGS);
}

if (response->result() != 0) {
Expand Down Expand Up @@ -1195,7 +1195,7 @@ int bml_internal::process_cmdu_header(std::shared_ptr<beerocks_header> beerocks_
->addClass<beerocks_message::cACTION_BML_CLIENT_SET_CLIENT_RESPONSE>();
if (!response) {
LOG(ERROR) << "addClass cACTION_BML_CLIENT_SET_CLIENT_RESPONSE failed";
return BML_RET_OP_FAILED;
return (-BML_RET_OP_FAILED);
}

///Signal any waiting threads
Expand All @@ -1207,6 +1207,13 @@ int bml_internal::process_cmdu_header(std::shared_ptr<beerocks_header> beerocks_
} break;
case beerocks_message::ACTION_BML_CLIENT_GET_CLIENT_RESPONSE: {
LOG(DEBUG) << "ACTION_BML_CLIENT_GET_CLIENT_RESPONSE received";

if (!m_prmClientGet) {
LOG(WARNING) << "Received ACTION_BML_CLIENT_GET_CLIENT_RESPONSE response, "
<< "but no one is waiting...";
break;
}

auto response =
beerocks_header
->addClass<beerocks_message::cACTION_BML_CLIENT_GET_CLIENT_RESPONSE>();
Expand All @@ -1215,25 +1222,28 @@ int bml_internal::process_cmdu_header(std::shared_ptr<beerocks_header> beerocks_
return BML_RET_OP_FAILED;
}

//Signal any waiting threads
if (m_prmClientGet) {
bool promise_result = false;
if (m_client) {
std::copy_n(response->client().sta_mac.oct, BML_MAC_ADDR_LEN,
m_client->sta_mac);
m_client->timestamp_sec = response->client().timestamp_sec;
m_client->stay_on_initial_radio = response->client().stay_on_initial_radio;
m_client->stay_on_selected_device = response->client().stay_on_selected_device;
m_client->selected_bands = response->client().selected_bands;
m_client->time_life_delay_days = response->client().time_life_delay_days;
//Resolve promise to "true"
promise_result = true;
}
m_prmClientGet->set_value(promise_result);
} else {
LOG(WARNING) << "Received ACTION_BML_CLIENT_GET_CLIENT_RESPONSE response, "
<< "but no one is waiting...";
if (response->result() != 0) {
LOG(ERROR) << "CLIENT_GET_CLIENT_REQUEST failed with error: " << response->result();
m_prmClientGet->set_value(false);
break;
}

if (!m_client) {
LOG(ERROR) << "The pointer to the user client data is null!";
m_prmClientGet->set_value(false);
break;
}

std::copy_n(response->client().sta_mac.oct, BML_MAC_ADDR_LEN, m_client->sta_mac);
m_client->timestamp_sec = response->client().timestamp_sec;
m_client->stay_on_initial_radio = response->client().stay_on_initial_radio;
m_client->stay_on_selected_device = response->client().stay_on_selected_device;
m_client->selected_bands = response->client().selected_bands;
m_client->single_band = response->client().single_band;
m_client->time_life_delay_days = response->client().time_life_delay_days;

//Resolve promise to "true"
m_prmClientGet->set_value(true);
} break;
default: {
LOG(WARNING) << "unhandled header BML action type 0x" << std::hex
Expand Down Expand Up @@ -1776,7 +1786,7 @@ int bml_internal::get_dcs_scan_results(const sMacAddr &mac, BML_NEIGHBOR_AP *res

if (!m_prmChannelScanResultsGet->wait_for(iOpTimeout)) {
LOG(WARNING) << "Timeout while waiting for results get response...";
iRet = -BML_RET_TIMEOUT;
iRet = (-BML_RET_TIMEOUT);
}

// Clear the scan results members
Expand Down Expand Up @@ -1931,7 +1941,7 @@ int bml_internal::client_get_client_list(char *client_list, unsigned int *client
LOG(DEBUG) << "Promise resolved, received " << client_mac_list.size() << " clients";
if (!result) {
LOG(ERROR) << "Get client list request failed";
return -BML_RET_OP_FAILED;
return (-BML_RET_OP_FAILED);
}

// Translate sMacAddr list to string
Expand All @@ -1954,6 +1964,13 @@ int bml_internal::client_set_client(const sMacAddr &sta_mac, const BML_CLIENT_CO
{
LOG(DEBUG) << "client_set_client";

if ((client_config.stay_on_initial_radio == BML_PARAMETER_NOT_CONFIGURED) &&
(client_config.stay_on_selected_device == BML_PARAMETER_NOT_CONFIGURED) &&
(client_config.selected_bands == BML_PARAMETER_NOT_CONFIGURED)) {
LOG(WARNING) << "No parameter is requested to be configured, returning";
return (-BML_RET_INVALID_ARGS);
}

auto request =
message_com::create_vs_message<beerocks_message::cACTION_BML_CLIENT_SET_CLIENT_REQUEST>(
cmdu_tx);
Expand Down Expand Up @@ -2033,7 +2050,15 @@ int bml_internal::client_get_client(const sMacAddr &sta_mac, BML_CLIENT *client)
// Clear the promise holder
m_prmClientGet = nullptr;

LOG_IF(iRet != BML_RET_OK, ERROR) << "Get client request returned with error code:" << iRet;
if (iRet != BML_RET_OK) {
LOG(ERROR) << "Get client request returned with error code:" << iRet;
return (iRet);
}

if (!prmClientGet.get_value()) {
LOG(ERROR) << "Get client request failed";
return (-BML_RET_OP_FAILED);
}

return BML_RET_OK;
}
Expand Down
12 changes: 6 additions & 6 deletions controller/src/beerocks/cli/beerocks_cli_bml.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -563,8 +563,8 @@ void cli_bml::setFunctionsMapAndArray()
" selected_bands - Bitwise parameter, 1 for 2.4G, 2 for 5G, 3 for both, 0 for Disabled"
" stay_on_initial_radio - 1 for true, 0 for false or (default) -1 for not configured,"
" stay_on_selected_device - 1 for true, 0 for false or (default) -1 for not configured",
static_cast<pFunction>(&cli_bml::client_set_client_caller), 2, 4, STRING_ARG, INT_ARG,
INT_ARG, INT_ARG);
static_cast<pFunction>(&cli_bml::client_set_client_caller), 2, 4, STRING_ARG, STRING_ARG,
STRING_ARG, STRING_ARG);
insertCommandToMap("bml_client_get_client", "<sta_mac>", "Get client with the given STA MAC.",
static_cast<pFunction>(&cli_bml::client_get_client_caller), 1, 1,
STRING_ARG);
Expand Down Expand Up @@ -2230,9 +2230,9 @@ int cli_bml::client_set_client(const std::string &sta_mac, int8_t selected_bands
{
std::cout << "client_set_client: " << std::endl
<< " sta_mac: " << sta_mac << std::endl
<< " selected_bands: " << selected_bands << std::endl
<< " stay_on_initial_radio: " << stay_on_initial_radio << std::endl
<< " stay_on_selected_device: " << stay_on_selected_device << std::endl;
<< " selected_bands: " << int(selected_bands) << std::endl
<< " stay_on_initial_radio: " << int(stay_on_initial_radio) << std::endl
<< " stay_on_selected_device: " << int(stay_on_selected_device) << std::endl;

BML_CLIENT_CONFIG cfg{
.stay_on_initial_radio = stay_on_initial_radio,
Expand Down Expand Up @@ -2285,7 +2285,7 @@ int cli_bml::client_get_client(const std::string &sta_mac)

return ret;
};
std::cout << "client: " << client.sta_mac << std::endl
std::cout << "client: " << tlvf::mac_to_string(client.sta_mac) << std::endl
<< " timestamp_sec: " << client.timestamp_sec << std::endl
<< " stay_on_initial_radio: " << client_bool_print(client.stay_on_initial_radio)
<< std::endl
Expand Down