summaryrefslogtreecommitdiffstats
path: root/hcid
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2006-02-15 17:44:38 +0000
committerMarcel Holtmann <marcel@holtmann.org>2006-02-15 17:44:38 +0000
commit02a10419b26c297a81dcfb2404e65e92a0d359a9 (patch)
tree894538da31be2aff499826d7ae7a782f1d9aa27d /hcid
parent5dc0ed851328becdf700a81c2408d15704407048 (diff)
Add support for discoverable timeout setting
Diffstat (limited to 'hcid')
-rw-r--r--hcid/dbus-device.c34
-rw-r--r--hcid/dbus.c6
-rw-r--r--hcid/dbus.h10
3 files changed, 37 insertions, 13 deletions
diff --git a/hcid/dbus-device.c b/hcid/dbus-device.c
index 94bb8091..9c3ae207 100644
--- a/hcid/dbus-device.c
+++ b/hcid/dbus-device.c
@@ -248,15 +248,22 @@ static DBusMessage* handle_dev_set_alias_req(DBusMessage *msg, void *data)
static DBusMessage* handle_dev_get_discoverable_to_req(DBusMessage *msg, void *data)
{
- /*FIXME: */
- return bluez_new_failure_msg(msg, BLUEZ_EDBUS_NOT_IMPLEMENTED);
+ const struct hci_dbus_data *dbus_data = data;
+ DBusMessage *reply = NULL;
+
+ reply = dbus_message_new_method_return(msg);
+
+ dbus_message_append_args(reply, DBUS_TYPE_UINT32, &dbus_data->discoverable_timeout,
+ DBUS_TYPE_INVALID);
+
+ return reply;
}
static DBusMessage* handle_dev_get_mode_req(DBusMessage *msg, void *data)
{
const struct hci_dbus_data *dbus_data = data;
DBusMessage *reply = NULL;
- const uint8_t hci_mode = dbus_data->path_data;
+ const uint8_t hci_mode = dbus_data->mode;
const char *scan_mode;
switch (hci_mode) {
@@ -288,7 +295,7 @@ static DBusMessage* handle_dev_is_connectable_req(DBusMessage *msg, void *data)
{
const struct hci_dbus_data *dbus_data = data;
DBusMessage *reply = NULL;
- const uint8_t hci_mode = dbus_data->path_data;
+ const uint8_t hci_mode = dbus_data->mode;
dbus_bool_t connectable = FALSE;
if (hci_mode & SCAN_PAGE)
@@ -306,7 +313,7 @@ static DBusMessage* handle_dev_is_discoverable_req(DBusMessage *msg, void *data)
{
const struct hci_dbus_data *dbus_data = data;
DBusMessage *reply = NULL;
- const uint8_t hci_mode = dbus_data->path_data;
+ const uint8_t hci_mode = dbus_data->mode;
dbus_bool_t discoverable = FALSE;
if (hci_mode & SCAN_INQUIRY)
@@ -328,8 +335,19 @@ static DBusMessage* handle_dev_set_class_req(DBusMessage *msg, void *data)
static DBusMessage* handle_dev_set_discoverable_to_req(DBusMessage *msg, void *data)
{
- /*FIXME: */
- return bluez_new_failure_msg(msg, BLUEZ_EDBUS_NOT_IMPLEMENTED);
+ struct hci_dbus_data *dbus_data = data;
+ DBusMessage *reply = NULL;
+ DBusMessageIter iter;
+ uint32_t timeout;
+
+ dbus_message_iter_init(msg, &iter);
+ dbus_message_iter_get_basic(&iter, &timeout);
+
+ dbus_data->discoverable_timeout = timeout;
+
+ reply = dbus_message_new_method_return(msg);
+
+ return reply;
}
static DBusMessage* handle_dev_set_mode_req(DBusMessage *msg, void *data)
@@ -341,7 +359,7 @@ static DBusMessage* handle_dev_set_mode_req(DBusMessage *msg, void *data)
const char* scan_mode;
uint8_t hci_mode;
uint8_t status = 0;
- const uint8_t current_mode = dbus_data->path_data;
+ const uint8_t current_mode = dbus_data->mode;
dbus_message_get_args(msg, NULL,
DBUS_TYPE_STRING, &scan_mode,
diff --git a/hcid/dbus.c b/hcid/dbus.c
index ad5b549d..5bc4b736 100644
--- a/hcid/dbus.c
+++ b/hcid/dbus.c
@@ -224,6 +224,8 @@ static gboolean register_dbus_path(const char *path, uint16_t path_id, uint16_t
data->path_id = path_id;
data->dev_id = dev_id;
+ data->mode = 0x00;
+ data->discoverable_timeout = DFT_DISCOVERABLE_TIMEOUT;
if (fallback) {
if (!dbus_connection_register_fallback(connection, path, pvtable, data)) {
@@ -309,7 +311,7 @@ gboolean hcid_dbus_register_device(uint16_t id)
if (!dbus_connection_get_object_path_data(connection, path, (void*) &pdata))
syslog(LOG_ERR, "Getting path data failed!");
else
- pdata->path_data = rp.enable; /* Keep the current scan status */
+ pdata->mode = rp.enable; /* Keep the current scan status */
message = dbus_message_new_signal(MANAGER_PATH, MANAGER_INTERFACE,
BLUEZ_MGR_DEV_ADDED);
@@ -1096,7 +1098,7 @@ void hcid_dbus_setscan_enable_complete(bdaddr_t *local)
}
/* update the current scan mode value */
- pdata->path_data = rp.enable;
+ pdata->mode = rp.enable;
switch (rp.enable) {
case SCAN_DISABLED:
diff --git a/hcid/dbus.h b/hcid/dbus.h
index bbbb3d0a..b406b7c6 100644
--- a/hcid/dbus.h
+++ b/hcid/dbus.h
@@ -65,7 +65,8 @@ struct service_data {
struct hci_dbus_data {
uint16_t dev_id;
uint16_t path_id;
- uint32_t path_data;
+ uint32_t discoverable_timeout;
+ uint8_t mode;
};
typedef int register_function_t(DBusConnection *conn, uint16_t id);
@@ -106,7 +107,7 @@ int get_default_dev_id(void);
#define DEV_GET_ADDRESS "GetAddress"
#define DEV_GET_ALIAS "GetAlias"
#define DEV_GET_COMPANY "GetCompany"
-#define DEV_GET_DISCOVERABLE_TO "GetDiscoverableTimeOut"
+#define DEV_GET_DISCOVERABLE_TO "GetDiscoverableTimeout"
#define DEV_GET_FEATURES "GetFeatures"
#define DEV_GET_MANUFACTURER "GetManufacturer"
#define DEV_GET_MODE "GetMode"
@@ -117,7 +118,7 @@ int get_default_dev_id(void);
#define DEV_IS_DISCOVERABLE "IsDiscoverable"
#define DEV_SET_ALIAS "SetAlias"
#define DEV_SET_CLASS "SetClass"
-#define DEV_SET_DISCOVERABLE_TO "SetDiscoverableTimeOut"
+#define DEV_SET_DISCOVERABLE_TO "SetDiscoverableTimeout"
#define DEV_SET_MODE "SetMode"
#define DEV_SET_NAME "SetName"
#define DEV_DISCOVER "Discover"
@@ -219,6 +220,9 @@ int get_default_dev_id(void);
#define MODE_DISCOVERABLE "discoverable"
#define MODE_UNKNOWN "unknown"
+#define DFT_DISCOVERABLE_TIMEOUT 180 /* 3 seconds */
+#define DISCOVERABLE_TIMEOUT_OFF 0
+
/* BLUEZ_DBUS_ERROR
* EFailed error messages signature is : su
* Where the first argument is a string(error message description),