From 6383d151bdd97d5d89cd38ded516e760f5837be9 Mon Sep 17 00:00:00 2001 From: Jaehyun Kim Date: Wed, 3 Jan 2024 18:25:09 +0900 Subject: Send power off before DeviceDetected signal When the wifi module is removed, the removed device detected signal is sent before the power off signal, so there are cases where the power off signal is ignored on the receiving side. To solve this issue, it has been modified to send the power off signal first. Change-Id: I574bf39ac55b3c8f4555eefeb598c8d28d1a8885 Signed-off-by: Jaehyun Kim --- include/technology.h | 2 ++ src/device.c | 4 ++++ src/technology.c | 20 ++++++++++++++++---- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/include/technology.h b/include/technology.h index 127dea95..c7898396 100755 --- a/include/technology.h +++ b/include/technology.h @@ -95,6 +95,8 @@ const char *connman_techonology_get_path(enum connman_service_type type); void __connman_technology_notify_scan_done(const char *ifname, int val); void __connman_technology_append_interfaces(DBusMessageIter *array, enum connman_service_type type, const char *ifname); +void __connman_technology_notify_device_detected_by_device( + struct connman_device *device, const char *ifname, bool val); void __connman_technology_notify_roaming_state(const char *ifname, const char *state, const char *cur_bssid, const char *dst_bssid); #endif diff --git a/src/device.c b/src/device.c index 1e3924b9..9189f688 100755 --- a/src/device.c +++ b/src/device.c @@ -388,6 +388,10 @@ static void remove_device(struct connman_device *device) if (device->driver->remove) device->driver->remove(device); +#if defined TIZEN_EXT + __connman_technology_notify_device_detected_by_device(device, "", false); +#endif + device->driver = NULL; } diff --git a/src/technology.c b/src/technology.c index 4cc540bb..d21d790f 100644 --- a/src/technology.c +++ b/src/technology.c @@ -1715,6 +1715,19 @@ static void __connman_technology_notify_device_detected( DBG("Successfuly sent DeviceDetected signal"); } +void __connman_technology_notify_device_detected_by_device( + struct connman_device *device, const char *ifname, bool val) +{ + struct connman_technology *technology; + enum connman_service_type type; + + type = __connman_device_get_service_type(device); + + technology = technology_find(type); + if (technology) + __connman_technology_notify_device_detected(technology, ifname, val); +} + void __connman_technology_notify_roaming_state(const char *ifname, const char *state, const char *cur_bssid, const char *dst_bssid) { @@ -3002,7 +3015,9 @@ static void technology_put(struct connman_technology *technology) g_slist_delete_link(technology->driver_list, technology->driver_list); } - +#ifdef TIZEN_EXT + __connman_technology_notify_device_detected(technology, "", false); +#endif technology_list = g_slist_remove(technology_list, technology); technology_dbus_unregister(technology); @@ -3422,9 +3437,6 @@ int __connman_technology_remove_device(struct connman_device *device) #if defined TIZEN_EXT technology_save_device(device); - - const char *ifname = connman_device_get_string(device, "Interface"); - __connman_technology_notify_device_detected(technology, ifname, false); #endif if (technology->tethering) -- cgit v1.2.3