From: "Frédéric Danis" <frederic.danis@linux.intel.com>
To: linux-bluetooth@vger.kernel.org
Subject: [PATCH v2 6/7] adapter: Read mode in storage at init
Date: Wed, 10 Oct 2012 10:58:39 +0200 [thread overview]
Message-ID: <1349859520-8824-7-git-send-email-frederic.danis@linux.intel.com> (raw)
In-Reply-To: <1349859520-8824-1-git-send-email-frederic.danis@linux.intel.com>
---
src/adapter.c | 61 ++++++++++++++++++++++++++++++++-------------------------
1 file changed, 34 insertions(+), 27 deletions(-)
diff --git a/src/adapter.c b/src/adapter.c
index 40df4a1..85c5da9 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -118,6 +118,8 @@ struct service_auth {
struct btd_adapter_config {
char *name;
uint8_t class[3];
+ uint8_t mode;
+ uint8_t on_mode;
};
struct btd_adapter {
@@ -210,7 +212,7 @@ static const char *mode2str(uint8_t mode)
}
}
-static uint8_t get_mode(const bdaddr_t *bdaddr, const char *mode)
+static uint8_t get_mode(const char *mode)
{
if (strcasecmp("off", mode) == 0)
return MODE_OFF;
@@ -218,15 +220,7 @@ static uint8_t get_mode(const bdaddr_t *bdaddr, const char *mode)
return MODE_CONNECTABLE;
else if (strcasecmp("discoverable", mode) == 0)
return MODE_DISCOVERABLE;
- else if (strcasecmp("on", mode) == 0) {
- char onmode[14], srcaddr[18];
-
- ba2str(bdaddr, srcaddr);
- if (read_on_mode(srcaddr, onmode, sizeof(onmode)) < 0)
- return MODE_CONNECTABLE;
-
- return get_mode(bdaddr, onmode);
- } else
+ else
return MODE_UNKNOWN;
}
@@ -331,6 +325,10 @@ static int set_mode(struct btd_adapter *adapter, uint8_t new_mode)
return err;
done:
+ adapter->config.mode = new_mode;
+ if (new_mode != MODE_OFF)
+ adapter->config.on_mode = new_mode;
+
modestr = mode2str(new_mode);
write_device_mode(&adapter->bdaddr, modestr);
@@ -390,7 +388,7 @@ static void set_powered(struct btd_adapter *adapter, gboolean powered,
int err;
if (powered) {
- mode = get_mode(&adapter->bdaddr, "on");
+ mode = adapter->config.on_mode;
return set_discoverable(adapter, mode == MODE_DISCOVERABLE,
id);
}
@@ -1403,7 +1401,7 @@ static DBusMessage *request_session(DBusConnection *conn,
if (!adapter->mode_sessions)
adapter->global_mode = adapter->mode;
- new_mode = get_mode(&adapter->bdaddr, "on");
+ new_mode = adapter->config.on_mode;
req = find_session(adapter->mode_sessions, sender);
if (req) {
@@ -2312,21 +2310,15 @@ void btd_adapter_get_mode(struct btd_adapter *adapter, uint8_t *mode,
uint16_t *discoverable_timeout,
gboolean *pairable)
{
- char str[14], address[18];
+ char address[18];
ba2str(&adapter->bdaddr, address);
- if (mode) {
- if (main_opts.remember_powered == FALSE)
- *mode = main_opts.mode;
- else if (read_device_mode(address, str, sizeof(str)) == 0)
- *mode = get_mode(&adapter->bdaddr, str);
- else
- *mode = main_opts.mode;
- }
+ if (mode)
+ *mode = adapter->config.mode;
if (on_mode)
- *on_mode = get_mode(&adapter->bdaddr, "on");
+ *on_mode = adapter->config.on_mode;
if (discoverable_timeout)
*discoverable_timeout = adapter->discov_timeout;
@@ -2490,6 +2482,10 @@ static void set_mode_complete(struct btd_adapter *adapter)
const char *modestr;
int err;
+ adapter->config.mode = adapter->mode;
+ if (adapter->mode != MODE_OFF)
+ adapter->config.on_mode = adapter->mode;
+
modestr = mode2str(adapter->mode);
write_device_mode(&adapter->bdaddr, modestr);
@@ -2664,6 +2660,7 @@ static void load_config(struct btd_adapter *adapter)
{
char name[MAX_NAME_LENGTH + 1];
char address[18];
+ char mode[14];
int timeout;
ba2str(&adapter->bdaddr, address);
@@ -2695,6 +2692,20 @@ static void load_config(struct btd_adapter *adapter)
adapter->discov_timeout = main_opts.discovto;
else
adapter->discov_timeout = timeout;
+
+ /* Get mode */
+ if (main_opts.remember_powered == FALSE)
+ adapter->config.mode = main_opts.mode;
+ else if (read_device_mode(address, mode, sizeof(mode)) == 0)
+ adapter->config.mode = get_mode(mode);
+ else
+ adapter->config.mode = main_opts.mode;
+
+ /* Get on mode */
+ if (read_on_mode(address, mode, sizeof(mode)) == 0)
+ adapter->config.on_mode = get_mode(mode);
+ else
+ adapter->config.on_mode = MODE_CONNECTABLE;
}
gboolean adapter_init(struct btd_adapter *adapter, gboolean up)
@@ -3601,17 +3612,13 @@ gboolean adapter_powering_down(struct btd_adapter *adapter)
int btd_adapter_restore_powered(struct btd_adapter *adapter)
{
- char mode[14], address[18];
-
if (!main_opts.remember_powered)
return -EINVAL;
if (adapter->up)
return 0;
- ba2str(&adapter->bdaddr, address);
- if (read_device_mode(address, mode, sizeof(mode)) == 0 &&
- g_str_equal(mode, "off"))
+ if (adapter->config.mode == MODE_OFF)
return 0;
return mgmt_set_powered(adapter->dev_id, TRUE);
--
1.7.9.5
next prev parent reply other threads:[~2012-10-10 8:58 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-10 8:58 [PATCH v2 0/7] Move adapter config file to ini-file format Frédéric Danis
2012-10-10 8:58 ` [PATCH v2 1/7] adapter: Read name in storage at init Frédéric Danis
2012-10-10 9:57 ` Marcel Holtmann
2012-10-10 8:58 ` [PATCH v2 2/7] adapter: Read device class " Frédéric Danis
2012-10-10 8:58 ` [PATCH v2 3/7] adapter: Move pairable read to load_config() Frédéric Danis
2012-10-10 8:58 ` [PATCH v2 4/7] adapter: Read pairable timeout in storage at init Frédéric Danis
2012-10-10 8:58 ` [PATCH v2 5/7] adapter: Read discoverable " Frédéric Danis
2012-10-10 8:58 ` Frédéric Danis [this message]
2012-10-10 8:58 ` [PATCH v2 7/7] adapter: Move saved config to ini-file format Frédéric Danis
2012-10-10 10:00 ` Marcel Holtmann
2012-10-10 10:03 ` [PATCH v2 0/7] Move adapter config file " Marcel Holtmann
2012-10-10 10:37 ` Anderson Lizardo
2012-10-10 13:01 ` Szymon Janc
2012-10-10 13:33 ` Johan Hedberg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1349859520-8824-7-git-send-email-frederic.danis@linux.intel.com \
--to=frederic.danis@linux.intel.com \
--cc=linux-bluetooth@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.