diff --git a/src/netdev.c b/src/netdev.c index e483edf8..8b2143fd 100644 --- a/src/netdev.c +++ b/src/netdev.c @@ -450,6 +450,11 @@ const char *netdev_get_path(struct netdev *netdev) return path; } +uint8_t netdev_get_rssi_level_idx(struct netdev *netdev) +{ + return netdev->cur_rssi_level_idx; +} + static void netdev_set_powered_result(int error, uint16_t type, const void *data, uint32_t len, void *user_data) diff --git a/src/netdev.h b/src/netdev.h index 0094d5f9..f093c499 100644 --- a/src/netdev.h +++ b/src/netdev.h @@ -145,6 +145,7 @@ bool netdev_get_4addr(struct netdev *netdev); const char *netdev_get_name(struct netdev *netdev); bool netdev_get_is_up(struct netdev *netdev); const char *netdev_get_path(struct netdev *netdev); +uint8_t netdev_get_rssi_level_idx(struct netdev *netdev); struct handshake_state *netdev_handshake_state_new(struct netdev *netdev); struct handshake_state *netdev_get_handshake(struct netdev *netdev); diff --git a/src/station.c b/src/station.c index 2d85054c..a356339e 100644 --- a/src/station.c +++ b/src/station.c @@ -3716,6 +3716,7 @@ static struct l_dbus_message *station_dbus_signal_agent_register( { struct station *station = user_data; const char *path, *sender; + struct l_dbus_message *reply; struct l_dbus_message_iter level_iter; int8_t levels[16]; int err; @@ -3758,12 +3759,19 @@ static struct l_dbus_message *station_dbus_signal_agent_register( l_debug("agent %s path %s", sender, path); - /* - * TODO: send an initial notification in a oneshot idle callback, - * if state is connected. - */ + reply = l_dbus_message_new_method_return(message); + l_dbus_send(dbus, reply); - return l_dbus_message_new_method_return(message); + if (station->connected_network) { + struct netdev *netdev = station->netdev; + uint8_t level = netdev_get_rssi_level_idx(netdev); + + station_signal_agent_notify(station->signal_agent, + netdev_get_path(netdev), + level); + } + + return NULL; } static struct l_dbus_message *station_dbus_signal_agent_unregister(