summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2005-07-07 19:36:35 +0000
committerMarcel Holtmann <marcel@holtmann.org>2005-07-07 19:36:35 +0000
commitbee20248caf216429bba4e2d1f104f9aab03596d (patch)
treeacb120c6ed4bd61703123f61d3f75ecd021a5863
parent20f65cf4e0ab67ac3e528d84a877a5fe6161904a (diff)
Support class of device and RSSI values in D-Bus message
-rw-r--r--hcid/dbus.c6
-rw-r--r--hcid/hcid.h4
-rw-r--r--hcid/security.c21
3 files changed, 23 insertions, 8 deletions
diff --git a/hcid/dbus.c b/hcid/dbus.c
index 69a3a6cb..d8a07dd9 100644
--- a/hcid/dbus.c
+++ b/hcid/dbus.c
@@ -170,7 +170,7 @@ failed:
OCF_PIN_CODE_NEG_REPLY, 6, &ci->bdaddr);
}
-void hcid_dbus_inquiry_result(const bdaddr_t *local, const bdaddr_t *peer)
+void hcid_dbus_inquiry_result(const bdaddr_t *local, const bdaddr_t *peer, const uint32_t class, const int8_t rssi)
{
DBusMessage *message;
#ifndef HAVE_DBUS_MESSAGE_APPEND_ARGS
@@ -192,12 +192,16 @@ void hcid_dbus_inquiry_result(const bdaddr_t *local, const bdaddr_t *peer)
dbus_message_append_args(message,
DBUS_TYPE_STRING, local_addr,
DBUS_TYPE_STRING, peer_addr,
+ DBUS_TYPE_UINT32, class,
+ DBUS_TYPE_INT32, rssi,
DBUS_TYPE_INVALID);
#else
dbus_message_append_iter_init(message, &iter);
dbus_message_iter_append_string(&iter, local_addr);
dbus_message_iter_append_string(&iter, peer_addr);
+ dbus_message_iter_append_uint32(&iter, class);
+ dbus_message_iter_append_int32(&iter, rssi);
#endif
if (dbus_connection_send(connection, message, NULL) == FALSE) {
diff --git a/hcid/hcid.h b/hcid/hcid.h
index 5e835807..3ba69833 100644
--- a/hcid/hcid.h
+++ b/hcid/hcid.h
@@ -123,10 +123,10 @@ void toggle_pairing(int enable);
#ifdef ENABLE_DBUS
gboolean hcid_dbus_init(void);
void hcid_dbus_request_pin(int dev, struct hci_conn_info *ci);
-void hcid_dbus_inquiry_result(const bdaddr_t *local, const bdaddr_t *peer);
+void hcid_dbus_inquiry_result(const bdaddr_t *local, const bdaddr_t *peer, const uint32_t class, const int8_t rssi);
void hcid_dbus_remote_name(const bdaddr_t *local, const bdaddr_t *peer, const char *name);
#else
-static inline void hcid_dbus_inquiry_result(const bdaddr_t *local, const bdaddr_t *peer)
+static inline void hcid_dbus_inquiry_result(const bdaddr_t *local, const bdaddr_t *peer, uint32_t class, const int8_t rssi)
{
}
static inline void hcid_dbus_remote_name(const bdaddr_t *local, const bdaddr_t *peer, const char *name)
diff --git a/hcid/security.c b/hcid/security.c
index 148c3237..108887ce 100644
--- a/hcid/security.c
+++ b/hcid/security.c
@@ -493,13 +493,16 @@ static void remote_version_information(int dev, bdaddr_t *sba, void *ptr)
static void inquiry_result(int dev, bdaddr_t *sba, int plen, void *ptr)
{
- uint8_t num = *(uint8_t *)ptr++;
+ uint8_t num = *(uint8_t *) ptr++;
int i;
for (i = 0; i < num; i++) {
inquiry_info *info = ptr;
+ uint32_t class = info->dev_class[0]
+ | (info->dev_class[1] << 8)
+ | (info->dev_class[2] << 16);
- hcid_dbus_inquiry_result(sba, &info->bdaddr);
+ hcid_dbus_inquiry_result(sba, &info->bdaddr, class, 0);
ptr += INQUIRY_INFO_SIZE;
}
@@ -507,7 +510,7 @@ static void inquiry_result(int dev, bdaddr_t *sba, int plen, void *ptr)
static void inquiry_result_with_rssi(int dev, bdaddr_t *sba, int plen, void *ptr)
{
- uint8_t num = *(uint8_t *)ptr++;
+ uint8_t num = *(uint8_t *) ptr++;
int i;
if (!num)
@@ -516,16 +519,24 @@ static void inquiry_result_with_rssi(int dev, bdaddr_t *sba, int plen, void *ptr
if ((plen - 1) / num == INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE) {
for (i = 0; i < num; i++) {
inquiry_info_with_rssi_and_pscan_mode *info = ptr;
+ uint32_t class = info->dev_class[0]
+ | (info->dev_class[1] << 8)
+ | (info->dev_class[2] << 16);
- hcid_dbus_inquiry_result(sba, &info->bdaddr);
+ hcid_dbus_inquiry_result(sba, &info->bdaddr,
+ class, info->rssi);
ptr += INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE;
}
} else {
for (i = 0; i < num; i++) {
inquiry_info_with_rssi *info = ptr;
+ uint32_t class = info->dev_class[0]
+ | (info->dev_class[1] << 8)
+ | (info->dev_class[2] << 16);
- hcid_dbus_inquiry_result(sba, &info->bdaddr);
+ hcid_dbus_inquiry_result(sba, &info->bdaddr,
+ class, info->rssi);
ptr += INQUIRY_INFO_WITH_RSSI_SIZE;
}