From 9059b9a537b165d96b85b19c51d48389a5a5432e Mon Sep 17 00:00:00 2001 From: David Bauer Date: Mon, 23 May 2022 01:12:38 +0200 Subject: [PATCH] ubus: derive RSSI from measurement report Derive the RSSI of a measurement-report based on it's RCPI. Signed-off-by: David Bauer --- measurement.c | 15 +++++++++++++++ ubus.c | 1 + usteer.h | 2 ++ 3 files changed, 18 insertions(+) diff --git a/measurement.c b/measurement.c index 0c7cde2..333a6be 100644 --- a/measurement.c +++ b/measurement.c @@ -20,6 +20,21 @@ LIST_HEAD(measurements); static struct usteer_timeout_queue tq; +int +usteer_measurement_get_rssi(struct usteer_measurement_report *report) +{ + /* Apple devices always set the RSNI to 0, while + * it should be set to 255 in case RSNI is unavailable. + * + * For them, RCPI seems to be calculated as RCPI = 255 + (RSSI) + */ + + if (!report->rsni) + return report->rcpi - 255; + + return (report->rcpi / 2) - 110; +} + void usteer_measurement_report_node_cleanup(struct usteer_node *node) { diff --git a/ubus.c b/ubus.c index d337c45..557656e 100644 --- a/ubus.c +++ b/ubus.c @@ -449,6 +449,7 @@ usteer_ubus_get_connected_clients(struct ubus_context *ctx, struct ubus_object * blobmsg_add_string(&b, "node", usteer_node_name(mr->node)); blobmsg_add_u32(&b, "rcpi", mr->rcpi); blobmsg_add_u32(&b, "rsni", mr->rsni); + blobmsg_add_u32(&b, "rssi", usteer_measurement_get_rssi(mr)); blobmsg_add_u64(&b, "timestamp", mr->timestamp); blobmsg_close_table(&b, t); } diff --git a/usteer.h b/usteer.h index 239159a..01c849e 100644 --- a/usteer.h +++ b/usteer.h @@ -383,6 +383,8 @@ void usteer_run_hook(const char *name, const char *arg); void usteer_dump_node(struct blob_buf *buf, struct usteer_node *node); void usteer_dump_host(struct blob_buf *buf, struct usteer_remote_host *host); +int usteer_measurement_get_rssi(struct usteer_measurement_report *report); + struct usteer_measurement_report * usteer_measurement_report_get(struct sta *sta, struct usteer_node *node, bool create); void usteer_measurement_report_node_cleanup(struct usteer_node *node); void usteer_measurement_report_sta_cleanup(struct sta *sta); -- 2.30.2