diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2006-02-15 17:44:38 +0000 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2006-02-15 17:44:38 +0000 |
commit | 02a10419b26c297a81dcfb2404e65e92a0d359a9 (patch) | |
tree | 894538da31be2aff499826d7ae7a782f1d9aa27d /hcid | |
parent | 5dc0ed851328becdf700a81c2408d15704407048 (diff) |
Add support for discoverable timeout setting
Diffstat (limited to 'hcid')
-rw-r--r-- | hcid/dbus-device.c | 34 | ||||
-rw-r--r-- | hcid/dbus.c | 6 | ||||
-rw-r--r-- | hcid/dbus.h | 10 |
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), |