raster pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=2718516b42b4b14fb16400d9f8357bc78c92a35f

commit 2718516b42b4b14fb16400d9f8357bc78c92a35f
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
Date:   Fri May 7 00:37:04 2021 +0100

    bluez5 - if bz says it's busy when trying to power on, keep trying again
---
 src/modules/bluez5/bz.h     |  1 +
 src/modules/bluez5/bz_obj.c | 35 +++++++++++++++++++++++++++++++++--
 2 files changed, 34 insertions(+), 2 deletions(-)

diff --git a/src/modules/bluez5/bz.h b/src/modules/bluez5/bz.h
index 805f28584..e101d8d6b 100644
--- a/src/modules/bluez5/bz.h
+++ b/src/modules/bluez5/bz.h
@@ -24,6 +24,7 @@ struct _Obj {
    Eina_Bool ping_busy : 1;
    Eina_Bool ping_block : 1;
    Ecore_Timer *ping_timer;
+   Ecore_Timer *power_retry_timer;
    //// public data to read
    const char *path;
    Obj_Type type;
diff --git a/src/modules/bluez5/bz_obj.c b/src/modules/bluez5/bz_obj.c
index d9e1c14a3..41d11c4ed 100644
--- a/src/modules/bluez5/bz_obj.c
+++ b/src/modules/bluez5/bz_obj.c
@@ -412,10 +412,31 @@ bz_obj_find(const char *path)
    return eina_hash_find(obj_table, path);
 }
 
+static Eina_Bool
+_cb_power_again(void *data)
+{
+   Obj *o = data;
+
+   o->power_retry_timer = NULL;
+   printf("Retry power on...");
+   bz_obj_power_on(o);
+   return EINA_FALSE;
+}
+
 static void
-cb_power_on(void *data EINA_UNUSED, const Eldbus_Message *msg EINA_UNUSED, 
Eldbus_Pending *pending EINA_UNUSED)
+cb_power_on(void *data, const Eldbus_Message *msg EINA_UNUSED, Eldbus_Pending 
*pending EINA_UNUSED)
 {
-   ERR_PRINT("Power On");
+   Obj *o = data;
+   const char *name, *text;
+
+   if (eldbus_message_error_get(msg, &name, &text))
+     {
+        printf("Error: %s.\n %s:\n %s\n", "Power On", name, text);
+        if (!strcmp(name, "org.bluez.Error.Busy"))
+          {
+             o->power_retry_timer = ecore_timer_add(0.5, _cb_power_again, o);
+          }
+     }
 }
 
 void
@@ -438,6 +459,11 @@ bz_obj_power_off(Obj *o)
 {
    Eina_Bool val = EINA_FALSE;
    if (!o->proxy) return;
+   if (o->power_retry_timer)
+     {
+        ecore_timer_del(o->power_retry_timer);
+        o->power_retry_timer = NULL;
+     }
    eldbus_proxy_property_set
      (o->proxy, "Powered", "b", (void *)(uintptr_t)val, cb_power_off, o);
 }
@@ -810,6 +836,11 @@ bz_obj_unref(Obj *o)
         ecore_timer_del(o->ping_timer);
         o->ping_timer = NULL;
      }
+   if (o->power_retry_timer)
+     {
+        ecore_timer_del(o->power_retry_timer);
+        o->power_retry_timer = NULL;
+     }
    if (o->proxy)
      {
         eldbus_proxy_unref(o->proxy);

-- 


Reply via email to