bluez5 - if bz says it's busy when trying to power on, keep trying again

This commit is contained in:
Carsten Haitzler 2021-05-07 00:37:04 +01:00
parent 56e3d705ed
commit 2718516b42
2 changed files with 35 additions and 3 deletions

View File

@ -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;

View File

@ -412,10 +412,31 @@ bz_obj_find(const char *path)
return eina_hash_find(obj_table, path);
}
static void
cb_power_on(void *data EINA_UNUSED, const Eldbus_Message *msg EINA_UNUSED, Eldbus_Pending *pending EINA_UNUSED)
static Eina_Bool
_cb_power_again(void *data)
{
ERR_PRINT("Power On");
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, const Eldbus_Message *msg EINA_UNUSED, Eldbus_Pending *pending EINA_UNUSED)
{
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);