diff options
author | Seungjae Yoo <seungjaeyoo@google.com> | 2023-04-27 12:07:09 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2023-04-27 12:07:09 +0000 |
commit | 6d53aa2db06336222a201264dc7561732dae12b0 (patch) | |
tree | 301563f5cbe9b4a1997b29716586a2255155b9ac | |
parent | 7f05c09a3e49e1d582b6e2ce963df56b4483930d (diff) | |
parent | dd4d11d622c0e5486d618360d2d637ce2f9a123d (diff) | |
download | wmediumd-6d53aa2db06336222a201264dc7561732dae12b0.tar.gz |
Support SetTxpower into wmediumdservice am: 6e19702a29 am: e38ee7b8b8 am: 2b4aba113f am: fdacb0c62e am: dd4d11d622
Original change: https://android-review.googlesource.com/c/platform/external/wmediumd/+/2567131
Change-Id: Ib1212d78ac7363db2a0f52c014ce35433e78ebed
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r-- | wmediumd/api.h | 7 | ||||
-rw-r--r-- | wmediumd/grpc.h | 1 | ||||
-rw-r--r-- | wmediumd/wmediumd.c | 22 | ||||
-rw-r--r-- | wmediumd_server/wmediumd.proto | 6 | ||||
-rw-r--r-- | wmediumd_server/wmediumd_server.cc | 25 |
5 files changed, 61 insertions, 0 deletions
diff --git a/wmediumd/api.h b/wmediumd/api.h index 05b363b..60323e8 100644 --- a/wmediumd/api.h +++ b/wmediumd/api.h @@ -176,6 +176,13 @@ struct wmediumd_set_position { double y; }; +struct wmediumd_set_tx_power { + /* MAC address */ + uint8_t mac[6]; + /* TX power of station */ + int tx_power; +}; + struct wmediumd_set_lci { /* MAC address */ uint8_t mac[6]; diff --git a/wmediumd/grpc.h b/wmediumd/grpc.h index 644766a..8bf66e9 100644 --- a/wmediumd/grpc.h +++ b/wmediumd/grpc.h @@ -32,6 +32,7 @@ enum wmediumd_grpc_request_data_type { REQUEST_SET_LCI, REQUEST_SET_POSITION, REQUEST_SET_SNR, + REQUEST_SET_TX_POWER, REQUEST_START_PCAP, REQUEST_STOP_PCAP, }; diff --git a/wmediumd/wmediumd.c b/wmediumd/wmediumd.c index 0edc76c..53f22c6 100644 --- a/wmediumd/wmediumd.c +++ b/wmediumd/wmediumd.c @@ -1463,6 +1463,20 @@ static int process_set_position_message(struct wmediumd *ctx, struct wmediumd_se return 0; } +static int process_set_tx_power_message(struct wmediumd *ctx, struct wmediumd_set_tx_power *set_tx_power) { + struct station *node = get_station_by_addr(ctx, set_tx_power->mac); + + if (node == NULL) { + return -1; + } + + node->tx_power = set_tx_power->tx_power; + + calc_path_loss(ctx); + + return 0; +} + static int process_set_lci_message(struct wmediumd *ctx, struct wmediumd_set_lci *set_lci, size_t data_len) { struct station *node = get_station_by_addr(ctx, set_lci->mac); @@ -1604,6 +1618,14 @@ static void wmediumd_grpc_service_handler(struct usfstl_loop_entry *entry) { } wmediumd_send_grpc_response(ctx->msq_id, request_message.msg_type_response, RESPONSE_ACK, 0, NULL); break; + case REQUEST_SET_TX_POWER: + if (process_set_tx_power_message(ctx, (struct wmediumd_set_tx_power *)(request_message.data_payload)) < 0) { + w_logf(ctx, LOG_ERR, "%s: failed to execute set_tx_power\n", __func__); + wmediumd_send_grpc_response(ctx->msq_id, request_message.msg_type_response, RESPONSE_INVALID, 0, NULL); + break; + } + wmediumd_send_grpc_response(ctx->msq_id, request_message.msg_type_response, RESPONSE_ACK, 0, NULL); + break; case REQUEST_START_PCAP: init_pcapng(ctx, ((struct wmediumd_start_pcap *)(request_message.data_payload))->pcap_path); wmediumd_send_grpc_response(ctx->msq_id, request_message.msg_type_response, RESPONSE_ACK, 0, NULL); diff --git a/wmediumd_server/wmediumd.proto b/wmediumd_server/wmediumd.proto index b4adf2f..4404931 100644 --- a/wmediumd_server/wmediumd.proto +++ b/wmediumd_server/wmediumd.proto @@ -26,6 +26,7 @@ service WmediumdService { rpc SetLci(SetLciRequest) returns (google.protobuf.Empty) {} rpc SetPosition(SetPositionRequest) returns (google.protobuf.Empty) {} rpc SetSnr(SetSnrRequest) returns (google.protobuf.Empty) {} + rpc SetTxpower(SetTxpowerRequest) returns (google.protobuf.Empty) {} rpc StartPcap(StartPcapRequest) returns (google.protobuf.Empty) {} rpc StopPcap(google.protobuf.Empty) returns (google.protobuf.Empty) {} } @@ -70,6 +71,11 @@ message SetSnrRequest { int32 snr = 3; } +message SetTxpowerRequest { + string mac_address = 1; + int32 tx_power = 2; +} + message StartPcapRequest { string path = 1; } diff --git a/wmediumd_server/wmediumd_server.cc b/wmediumd_server/wmediumd_server.cc index bf3de03..6a22e90 100644 --- a/wmediumd_server/wmediumd_server.cc +++ b/wmediumd_server/wmediumd_server.cc @@ -50,6 +50,7 @@ using wmediumdserver::SetCiviclocRequest; using wmediumdserver::SetLciRequest; using wmediumdserver::SetPositionRequest; using wmediumdserver::SetSnrRequest; +using wmediumdserver::SetTxpowerRequest; using wmediumdserver::StartPcapRequest; using wmediumdserver::WmediumdService; @@ -279,6 +280,30 @@ class WmediumdServiceImpl final : public WmediumdService::Service { return Status::OK; } + Status SetTxpower(ServerContext* context, const SetTxpowerRequest* request, + Empty* reply) override { + // Validate parameters + if (!IsValidMacAddr(request->mac_address())) { + return Status(StatusCode::INVALID_ARGUMENT, "Got invalid mac address"); + } + auto mac = ParseMacAddress(request->mac_address()); + + // Construct request payload + struct wmediumd_set_tx_power request_data_payload; + memcpy(request_data_payload.mac, &mac, sizeof(mac)); + request_data_payload.tx_power = request->tx_power(); + + struct wmediumd_grpc_response_message response_message; + SendAndReceiveGrpcMessage(REQUEST_SET_TX_POWER, + sizeof(request_data_payload), + &request_data_payload, &response_message); + if (response_message.data_type != RESPONSE_ACK) { + return Status(StatusCode::FAILED_PRECONDITION, + "Failed to execute SetTxpower"); + } + return Status::OK; + } + Status StartPcap(ServerContext* context, const StartPcapRequest* request, Empty* reply) override { // Construct request payload |