From 271c6d901cc54617a4ce4d8ad1d69da980665a8d Mon Sep 17 00:00:00 2001 From: Jukka Rissanen Date: Mon, 15 Jul 2013 17:25:46 +0300 Subject: Upstream/technology: Follow external rfkill events and act accordingly Fix bug: CM-645 Fix bug: TIVI-1044 Upstream commit id: 48dbff35d34257dc7055a35aae2a19ed0a06825b --- src/technology.c | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/src/technology.c b/src/technology.c index d8f23c10..3b8f6a82 100644 --- a/src/technology.c +++ b/src/technology.c @@ -1726,14 +1726,35 @@ int __connman_technology_update_rfkill(unsigned int index, return 0; /* - * Depending on softblocked state we unblock/block according to - * persistent state. + * State diagram how to set the block status from individual + * technology status fields: + * + * enabled | softblocked | offline | is + * | | | blocked + * -----------+---------------+-----------+---------- + * no | no | no | yes + * yes | no | no | no + * no | yes | no | yes + * yes | yes | no | yes + * no | no | yes | yes + * yes | no | yes | no + * no | yes | yes | yes + * yes | yes | yes | yes + * + * The enabled is controlled by dbus API (typically + * from UI). softblocked is set either by dbus API or by + * external event. Offline (flight mode) is set via dbus + * API. */ - if (technology->softblocked == TRUE && - technology->enable_persistent == TRUE) + + DBG("type %d enabled %d soft %d hard %d blocked %d", + type, technology->enabled, + technology->softblocked, technology->hardblocked, + !(technology->enabled && !technology->softblocked)); + + if (technology->enabled && !technology->softblocked) return __connman_rfkill_block(type, FALSE); - else if (technology->softblocked == FALSE && - technology->enable_persistent == FALSE) + else return __connman_rfkill_block(type, TRUE); return 0; -- cgit v1.2.3