* [PATCH_v2] android-tester: Add HIDHost initial interface setup test
From: Ravi kumar Veeramally @ 2014-01-08 11:02 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Ravi kumar Veeramally
---
android/android-tester.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 53 insertions(+)
diff --git a/android/android-tester.c b/android/android-tester.c
index 9a161ad..cbb827d 100644
--- a/android/android-tester.c
+++ b/android/android-tester.c
@@ -39,6 +39,7 @@
#include <hardware/hardware.h>
#include <hardware/bluetooth.h>
#include <hardware/bt_sock.h>
+#include <hardware/bt_hh.h>
#include "utils.h"
@@ -79,6 +80,7 @@ struct test_data {
struct hw_device_t *device;
const bt_interface_t *if_bluetooth;
const btsock_interface_t *if_sock;
+ const bthh_interface_t *if_hid;
bool mgmt_settings_set;
bool cb_count_checked;
@@ -958,6 +960,16 @@ static bt_callbacks_t bt_callbacks = {
.le_test_mode_cb = NULL
};
+static bthh_callbacks_t bthh_callbacks = {
+ .size = sizeof(bthh_callbacks),
+ .connection_state_cb = NULL,
+ .hid_info_cb = NULL,
+ .protocol_mode_cb = NULL,
+ .idle_time_cb = NULL,
+ .get_report_cb = NULL,
+ .virtual_unplug_cb = NULL
+};
+
static void setup(struct test_data *data)
{
const hw_module_t *module;
@@ -1069,6 +1081,11 @@ static void teardown(const void *test_data)
data->if_bluetooth = NULL;
}
+ if (data->if_hid) {
+ data->if_hid->cleanup();
+ data->if_hid = NULL;
+ }
+
data->device->close(data->device);
if (data->bluetoothd_pid)
@@ -1860,6 +1877,39 @@ clean:
close(sock_fd);
}
+static void setup_hidhost_interface(const void *test_data)
+{
+ struct test_data *data = tester_get_data();
+ bt_status_t status;
+ const void *hid;
+
+ setup(data);
+
+ status = data->if_bluetooth->init(&bt_callbacks);
+ if (status != BT_STATUS_SUCCESS) {
+ data->if_bluetooth = NULL;
+ tester_setup_failed();
+ return;
+ }
+
+ hid = data->if_bluetooth->get_profile_interface(BT_PROFILE_HIDHOST_ID);
+ if (!hid) {
+ tester_setup_failed();
+ return;
+ }
+
+ data->if_hid = hid;
+
+ status = data->if_hid->init(&bthh_callbacks);
+ if (status != BT_STATUS_SUCCESS) {
+ data->if_hid = NULL;
+ tester_setup_failed();
+ return;
+ }
+
+ tester_setup_complete();
+}
+
#define test_bredrle(name, data, test_setup, test, test_teardown) \
do { \
struct test_data *user; \
@@ -2071,5 +2121,8 @@ int main(int argc, char *argv[])
setup_socket_interface_enabled,
test_socket_real_connect, teardown);
+ test_bredrle("HIDHost Init", NULL, setup_hidhost_interface,
+ test_dummy, teardown);
+
return tester_run();
}
--
1.8.3.2
^ permalink raw reply related
* Re: [PATCH] android: Cleanup Android.mk
From: Szymon Janc @ 2014-01-08 10:19 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1389108453-19758-1-git-send-email-szymon.janc@tieto.com>
On Tuesday 07 of January 2014 16:27:33 Szymon Janc wrote:
> Remove not needed headers file in source list (Android build handles
> this), explicitly mark packages as optional and fix bluetooth.default
> dependencies (it should not depend on haltest as it is optional debug
> package and should not be installed in user build).
> ---
> android/Android.mk | 30 +++++++-----------------------
> 1 file changed, 7 insertions(+), 23 deletions(-)
>
> diff --git a/android/Android.mk b/android/Android.mk
> index 27631cc..16339b1 100644
> --- a/android/Android.mk
> +++ b/android/Android.mk
> @@ -25,8 +25,8 @@ LOCAL_SRC_FILES := \
> bluetooth.c \
> hidhost.c \
> socket.c \
> - ipc.c ipc.h \
> - audio-ipc.c audio-ipc.h \
> + ipc.c \
> + audio-ipc.c \
> avdtp.c \
> a2dp.c \
> pan.c \
> @@ -75,6 +75,8 @@ $(shell mkdir -p $(LOCAL_PATH)/../lib/bluetooth)
>
> $(foreach file,$(lib_headers), $(shell ln -sf ../$(file) $(LOCAL_PATH)/../lib/bluetooth/$(file)))
>
> +LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
> +LOCAL_MODULE_TAGS := optional
> LOCAL_MODULE := bluetoothd
>
> include $(BUILD_EXECUTABLE)
> @@ -107,7 +109,7 @@ LOCAL_MODULE := bluetooth.default
> LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw
> LOCAL_MODULE_TAGS := optional
> LOCAL_MODULE_CLASS := SHARED_LIBRARIES
> -LOCAL_REQUIRED_MODULES := haltest bluetoothd
> +LOCAL_REQUIRED_MODULES := bluetoothd bluetoothd-snoop
>
> include $(BUILD_SHARED_LIBRARY)
>
> @@ -146,7 +148,8 @@ LOCAL_CFLAGS := $(BLUEZ_COMMON_CFLAGS)
>
> LOCAL_SHARED_LIBRARIES := libhardware
>
> -LOCAL_MODULE_TAGS := optional
> +LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
> +LOCAL_MODULE_TAGS := debug
> LOCAL_MODULE := haltest
>
> include $(BUILD_EXECUTABLE)
> @@ -159,42 +162,23 @@ include $(CLEAR_VARS)
>
> LOCAL_SRC_FILES := \
> ../monitor/main.c \
> - ../monitor/bt.h \
> - ../monitor/mainloop.h \
> ../monitor/mainloop.c \
> - ../monitor/display.h \
> ../monitor/display.c \
> - ../monitor/hcidump.h \
> ../monitor/hcidump.c \
> - ../monitor/btsnoop.h \
> ../monitor/btsnoop.c \
> - ../monitor/control.h \
> ../monitor/control.c \
> - ../monitor/packet.h \
> ../monitor/packet.c \
> - ../monitor/l2cap.h \
> ../monitor/l2cap.c \
> - ../monitor/uuid.h \
> ../monitor/uuid.c \
> - ../monitor/sdp.h \
> ../monitor/sdp.c \
> - ../monitor/vendor.h \
> ../monitor/vendor.c \
> - ../monitor/lmp.h \
> ../monitor/lmp.c \
> - ../monitor/crc.h \
> ../monitor/crc.c \
> - ../monitor/ll.h \
> ../monitor/ll.c \
> - ../monitor/hwdb.h \
> ../monitor/hwdb.c \
> - ../monitor/ellisys.h \
> ../monitor/ellisys.c \
> - ../monitor/analyze.h \
> ../monitor/analyze.c \
> - ../src/shared/util.h \
> ../src/shared/util.c \
> - ../src/shared/queue.h \
> ../src/shared/queue.c \
> ../lib/hci.c \
> ../lib/bluetooth.c \
>
Pushed upstream.
--
BR
Szymon Janc
^ permalink raw reply
* [PATCH] android/pics: Update PICS to PTS 5.0 for DID
From: Sebastian Chlad @ 2014-01-08 10:01 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Sebastian Chlad
Remove PICS settings which are not applicable in PTS
---
android/pics-did.txt | 12 ++----------
1 file changed, 2 insertions(+), 10 deletions(-)
diff --git a/android/pics-did.txt b/android/pics-did.txt
index 8f92bc1..58cee41 100644
--- a/android/pics-did.txt
+++ b/android/pics-did.txt
@@ -1,21 +1,13 @@
DID PICS for the PTS tool.
+PTS version: 5.0
+
* - different than PTS defaults
# - not yet implemented/supported
M - mandatory
O - optional
- Version
--------------------------------------------------------------------------------
-Parameter Name Selected Description
--------------------------------------------------------------------------------
-TSPC_DID_0_1 False Device ID 1.2 (C.1)
-TSPC_DID_0_2 True Device ID 1.3 (C.1)
--------------------------------------------------------------------------------
-C.1: It is mandatory to support one of the profile versions.
--------------------------------------------------------------------------------
-
SDP Requirements
-------------------------------------------------------------------------------
--
1.8.3.2
^ permalink raw reply related
* [PATCH] android/pics: Update PICS to PTS 5.0 for GAP
From: Sebastian Chlad @ 2014-01-08 9:46 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Sebastian Chlad
Add new PICS settings for the GAP profile in accordance with PTS 5.0
---
android/pics-gap.txt | 44 +++++++++++++++++++++++++++++++++++++-------
1 file changed, 37 insertions(+), 7 deletions(-)
diff --git a/android/pics-gap.txt b/android/pics-gap.txt
index e8ab2ab..56a33d5 100644
--- a/android/pics-gap.txt
+++ b/android/pics-gap.txt
@@ -1,5 +1,7 @@
GAP PICS for the PTS tool.
+PTS version: 5.0
+
* - different than PTS defaults
# - not yet implemented/supported
@@ -668,19 +670,33 @@ TSPC_GAP_41_1 True (#) Central BR/EDR/LE: Security Aspects (M)
-------------------------------------------------------------------------------
+ Central Simultaneous BR/EDR and LE Transports
+-------------------------------------------------------------------------------
+Parameter Name Selected Description
+-------------------------------------------------------------------------------
+TSPC_GAP_42_1 False Simultaneous BR/EDR and LE Transports – BR/EDR
+ Slave to the same device (C.1)
+TSPC_GAP_42_2 False Simultaneous BR/EDR and LE Transports – BR/EDR
+ Master to the same device (C.1)
+-------------------------------------------------------------------------------
+C.1: Optional if ((SUM ICS 31/14 (Core Spec Version 4.1) or SUM ICS 31/15
+ (Core Spec Version 4.1+HS)) is supported, otherwise Excluded.
+-------------------------------------------------------------------------------
+
+
Peripheral BR/EDR/LE Modes
-------------------------------------------------------------------------------
Parameter Name Selected Description
-------------------------------------------------------------------------------
-TSPC_GAP_42_1 False Peripheral BR/EDR/LE: Non-Discoverable Mode
+TSPC_GAP_43_1 False Peripheral BR/EDR/LE: Non-Discoverable Mode
(C.1)
-TSPC_GAP_42_2 False Peripheral BR/EDR/LE: Discoverable Mode
+TSPC_GAP_43_2 False Peripheral BR/EDR/LE: Discoverable Mode
(C.2)
-TSPC_GAP_42_3 False Peripheral BR/EDR/LE: Non-Connectable Mode
+TSPC_GAP_43_3 False Peripheral BR/EDR/LE: Non-Connectable Mode
(C.3)
-TSPC_GAP_42_4 False (*) Peripheral BR/EDR/LE: Connectable Mode (M)
-TSPC_GAP_42_5 False Peripheral BR/EDR/LE: Non-Bondable Mode (C.4)
-TSPC_GAP_42_6 False Peripheral BR/EDR/LE: Bondable Mode (C.5)
+TSPC_GAP_43_4 False (*) Peripheral BR/EDR/LE: Connectable Mode (M)
+TSPC_GAP_43_5 False Peripheral BR/EDR/LE: Non-Bondable Mode (C.4)
+TSPC_GAP_43_6 False Peripheral BR/EDR/LE: Bondable Mode (C.5)
-------------------------------------------------------------------------------
C.1: Mandatory if TSPC_GAP_1_1 is supported over BR/EDR, otherwise Excluded.
C.2: Mandatory if (TSPC_GAP_1_2 or TSPC_GAP_1_3) is supported over BR/EDR,
@@ -695,7 +711,21 @@ C.5: Mandatory if TSPC_GAP_1_7 is supported over BR/EDR, otherwise Excluded.
-------------------------------------------------------------------------------
Parameter Name Selected Description
-------------------------------------------------------------------------------
-TSPC_GAP_43_1 False (*) Peripheral BR/EDR/LE: Security Aspects (M)
+TSPC_GAP_44_1 False (*) Peripheral BR/EDR/LE: Security Aspects (M)
+-------------------------------------------------------------------------------
+
+
+ Peripheral Simultaneous BR/EDR and LE Transports
+-------------------------------------------------------------------------------
+Parameter Name Selected Description
+-------------------------------------------------------------------------------
+TSPC_GAP_45_1 False Simultaneous BR/EDR and LE Transports – BR/EDR
+ Slave to the same device (C.1)
+TSPC_GAP_45_2 False Simultaneous BR/EDR and LE Transports – BR/EDR
+ Master to the same device (C.1)
+-------------------------------------------------------------------------------
+C.1: Optional if ((SUM ICS 31/14 (Core Spec Version 4.1) or SUM ICS 31/15
+(Core Spec Version 4.1+HS)) is supported, otherwise Excluded.
-------------------------------------------------------------------------------
--
1.8.3.2
^ permalink raw reply related
* Re: [PATCH_v3 2/4] android/pan: Listen for incoming connections and accept in NAP role
From: Ravi kumar Veeramally @ 2014-01-08 9:34 UTC (permalink / raw)
To: Luiz Augusto von Dentz; +Cc: linux-bluetooth@vger.kernel.org
In-Reply-To: <CABBYNZJHnUd9z6SRt84=OCXueBru9f5ae_m2SR06ujJzjQidBQ@mail.gmail.com>
Hi Luiz,
On 01/08/2014 11:07 AM, Luiz Augusto von Dentz wrote:
> Hi Ravi,
>
> On Tue, Jan 7, 2014 at 2:31 PM, Ravi kumar Veeramally
> <ravikumar.veeramally@linux.intel.com> wrote:
>> Listen for incoming connections and accept it. Create bnep interface
>> add it to bridge and notify control and connection state information
>> through HAL. Remove the device on disconnect request. If android
>> settings UI does not have bluetooth tethering enabled it immediately
>> sends disconnect signal.
>> ---
>> android/pan.c | 192 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
>> 1 file changed, 190 insertions(+), 2 deletions(-)
>>
>> diff --git a/android/pan.c b/android/pan.c
>> index 93078ba..0eef284 100644
>> --- a/android/pan.c
>> +++ b/android/pan.c
>> @@ -63,12 +63,17 @@ struct pan_device {
>> uint8_t role;
>> GIOChannel *io;
>> struct bnep *session;
>> + guint watch;
>> };
>>
>> static struct {
>> uint32_t record_id;
>> + guint watch;
>> + GIOChannel *io;
>> } nap_dev = {
>> .record_id = 0,
>> + .watch = 0,
>> + .io = NULL,
>> };
>>
>> static int device_cmp(gconstpointer s, gconstpointer user_data)
>> @@ -81,13 +86,21 @@ static int device_cmp(gconstpointer s, gconstpointer user_data)
>>
>> static void pan_device_free(struct pan_device *dev)
>> {
>> + if (dev->watch > 0) {
>> + bnep_server_delete(BNEP_BRIDGE, dev->iface, &dev->dst);
>> + g_source_remove(dev->watch);
>> + dev->watch = 0;
> Usually it is not necessary to assign anything to struct members when
> you are freeing the whole struct since its memory gonna be freed
> anyway.
Yes you are right. Profiles/network/connection.c keeps device data
after disconnecting,
it will remove only on device remove call. Assigning zero or NULL
make sense there.
But in bluez-android device struct t is removed from list on
disconnected state.
Here it won't make much sense. I will remove it in my next version.
Thanks,
Ravi.
^ permalink raw reply
* Re: [PATCH_v3 3/4] android/pan: Implement PAN enable HAL api at daemon side
From: Ravi kumar Veeramally @ 2014-01-08 9:29 UTC (permalink / raw)
To: Szymon Janc; +Cc: linux-bluetooth
In-Reply-To: <7986762.b1HJLuCvE7@uw000953>
Hi Szymon,
On 01/08/2014 11:24 AM, Szymon Janc wrote:
> Hi Ravi,
>
>> ---
>> android/pan.c | 32 ++++++++++++++++++++++++++------
>> 1 file changed, 26 insertions(+), 6 deletions(-)
>>
>> diff --git a/android/pan.c b/android/pan.c
>> index 0eef284..0e12245 100644
>> --- a/android/pan.c
>> +++ b/android/pan.c
>> @@ -585,18 +585,38 @@ static void bt_pan_enable(const void *buf, uint16_t len)
>> {
>> const struct hal_cmd_pan_enable *cmd = buf;
>> uint8_t status;
>> + int err;
>> +
>> + DBG("");
>> +
>> + if (local_role == cmd->local_role) {
>> + status = HAL_STATUS_SUCCESS;
>> + goto reply;
>> + }
>> +
>> + /* destroy existing server */
>> + destroy_nap_device();
>>
>> switch (cmd->local_role) {
>> case HAL_PAN_ROLE_PANU:
>> - case HAL_PAN_ROLE_NAP:
>> - DBG("Not Implemented");
>> - status = HAL_STATUS_FAILED;
>> - break;
>> - default:
>> status = HAL_STATUS_UNSUPPORTED;
>> - break;
>> + goto reply;
>> + case HAL_PAN_ROLE_NONE:
>> + status = HAL_STATUS_SUCCESS;
>> + goto reply;
>> + }
> Why do you remove default here? Daemon should verify parameter correctness.
Yes, default should be there, I think I was still in the impression of
HAL side parameter validation. I will correct it in next version.
Thanks,
Ravi.
>
>> +
>> + local_role = cmd->local_role;
>> + err = register_nap_server();
>> + if (err < 0) {
>> + status = HAL_STATUS_FAILED;
>> + destroy_nap_device();
>> + goto reply;
>> }
>>
>> + status = HAL_STATUS_SUCCESS;
>> +
>> +reply:
>> ipc_send_rsp(HAL_SERVICE_ID_PAN, HAL_OP_PAN_ENABLE, status);
>> }
>>
>>
^ permalink raw reply
* Re: [PATCH_v3 1/4] android/pan: Register Network Access Point
From: Ravi kumar Veeramally @ 2014-01-08 9:27 UTC (permalink / raw)
To: Szymon Janc; +Cc: linux-bluetooth
In-Reply-To: <1697122.rgbbQeg154@uw000953>
Hi Szymon,
On 01/08/2014 11:18 AM, Szymon Janc wrote:
> Hi Ravi,
>
>> +
>> + nap_dev.record_id = rec->handle;
>> ipc_register(HAL_SERVICE_ID_PAN, cmd_handlers,
>> G_N_ELEMENTS(cmd_handlers));
>>
>> @@ -455,6 +559,6 @@ void bt_pan_unregister(void)
>> bnep_cleanup();
>>
>> ipc_unregister(HAL_SERVICE_ID_PAN);
>> - bt_adapter_remove_record(record_id);
>> - record_id = 0;
>> + bt_adapter_remove_record(nap_dev.record_id);
>> + destroy_nap_device();
> I would either zero nap_dev.record_id right after removing record or move
> removing record to destroy_nap_device().
OK, I will zero it right after removing record.
Thanks,
Ravi.
^ permalink raw reply
* Re: [PATCH_v3 3/4] android/pan: Implement PAN enable HAL api at daemon side
From: Szymon Janc @ 2014-01-08 9:24 UTC (permalink / raw)
To: Ravi kumar Veeramally; +Cc: linux-bluetooth
In-Reply-To: <1389097880-14783-4-git-send-email-ravikumar.veeramally@linux.intel.com>
Hi Ravi,
> ---
> android/pan.c | 32 ++++++++++++++++++++++++++------
> 1 file changed, 26 insertions(+), 6 deletions(-)
>
> diff --git a/android/pan.c b/android/pan.c
> index 0eef284..0e12245 100644
> --- a/android/pan.c
> +++ b/android/pan.c
> @@ -585,18 +585,38 @@ static void bt_pan_enable(const void *buf, uint16_t len)
> {
> const struct hal_cmd_pan_enable *cmd = buf;
> uint8_t status;
> + int err;
> +
> + DBG("");
> +
> + if (local_role == cmd->local_role) {
> + status = HAL_STATUS_SUCCESS;
> + goto reply;
> + }
> +
> + /* destroy existing server */
> + destroy_nap_device();
>
> switch (cmd->local_role) {
> case HAL_PAN_ROLE_PANU:
> - case HAL_PAN_ROLE_NAP:
> - DBG("Not Implemented");
> - status = HAL_STATUS_FAILED;
> - break;
> - default:
> status = HAL_STATUS_UNSUPPORTED;
> - break;
> + goto reply;
> + case HAL_PAN_ROLE_NONE:
> + status = HAL_STATUS_SUCCESS;
> + goto reply;
> + }
Why do you remove default here? Daemon should verify parameter correctness.
> +
> + local_role = cmd->local_role;
> + err = register_nap_server();
> + if (err < 0) {
> + status = HAL_STATUS_FAILED;
> + destroy_nap_device();
> + goto reply;
> }
>
> + status = HAL_STATUS_SUCCESS;
> +
> +reply:
> ipc_send_rsp(HAL_SERVICE_ID_PAN, HAL_OP_PAN_ENABLE, status);
> }
>
>
--
BR
Szymon Janc
^ permalink raw reply
* [PATCHv3 5/5] emulator/bthost: Add method to create rfcomm server
From: Marcin Kraglak @ 2014-01-08 9:23 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1389173030-27970-1-git-send-email-marcin.kraglak@tieto.com>
It allows user to create rfcomm server on bthost.
---
emulator/bthost.c | 32 ++++++++++++++++++++++++++++++++
emulator/bthost.h | 6 ++++++
2 files changed, 38 insertions(+)
diff --git a/emulator/bthost.c b/emulator/bthost.c
index 5e13745..8d53923 100644
--- a/emulator/bthost.c
+++ b/emulator/bthost.c
@@ -99,6 +99,13 @@ struct l2cap_conn_cb_data {
struct l2cap_conn_cb_data *next;
};
+struct rfcomm_conn_cb_data {
+ uint8_t channel;
+ bthost_rfcomm_connect_cb func;
+ void *user_data;
+ struct rfcomm_conn_cb_data *next;
+};
+
struct bthost {
uint8_t bdaddr[6];
bthost_send_func send_handler;
@@ -111,6 +118,7 @@ struct bthost {
bthost_new_conn_cb new_conn_cb;
void *new_conn_data;
struct l2cap_conn_cb_data *new_l2cap_conn_data;
+ struct rfcomm_conn_cb_data *new_rfcomm_conn_data;
struct l2cap_pending_req *l2reqs;
};
@@ -246,6 +254,13 @@ void bthost_destroy(struct bthost *bthost)
free(cb);
}
+ while (bthost->new_rfcomm_conn_data) {
+ struct rfcomm_conn_cb_data *cb = bthost->new_rfcomm_conn_data;
+
+ bthost->new_rfcomm_conn_data = cb->next;
+ free(cb);
+ }
+
free(bthost);
}
@@ -1392,6 +1407,23 @@ void bthost_add_l2cap_server(struct bthost *bthost, uint16_t psm,
bthost->new_l2cap_conn_data = data;
}
+void bthost_add_rfcomm_server(struct bthost *bthost, uint8_t channel,
+ bthost_rfcomm_connect_cb func, void *user_data)
+{
+ struct rfcomm_conn_cb_data *data;
+
+ data = malloc(sizeof(struct rfcomm_conn_cb_data));
+ if (!data)
+ return;
+
+ data->channel = channel;
+ data->user_data = user_data;
+ data->func = func;
+ data->next = bthost->new_rfcomm_conn_data;
+
+ bthost->new_rfcomm_conn_data = data;
+}
+
void bthost_start(struct bthost *bthost)
{
if (!bthost)
diff --git a/emulator/bthost.h b/emulator/bthost.h
index 97f011b..7186aa0 100644
--- a/emulator/bthost.h
+++ b/emulator/bthost.h
@@ -80,5 +80,11 @@ typedef void (*bthost_l2cap_connect_cb) (uint16_t handle, uint16_t cid,
void bthost_add_l2cap_server(struct bthost *bthost, uint16_t psm,
bthost_l2cap_connect_cb func, void *user_data);
+typedef void (*bthost_rfcomm_connect_cb) (uint16_t handle, uint16_t cid,
+ uint8_t channel, void *user_data);
+
+void bthost_add_rfcomm_server(struct bthost *bthost, uint8_t channel,
+ bthost_rfcomm_connect_cb func, void *user_data);
+
void bthost_start(struct bthost *bthost);
void bthost_stop(struct bthost *bthost);
--
1.8.3.1
^ permalink raw reply related
* [PATCHv3 4/5] emulator/bthost: Add initial rfcomm handling
From: Marcin Kraglak @ 2014-01-08 9:23 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1389173030-27970-1-git-send-email-marcin.kraglak@tieto.com>
This is initial rfcomm handling in bthost.
---
emulator/bthost.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 66 insertions(+), 1 deletion(-)
diff --git a/emulator/bthost.c b/emulator/bthost.c
index 83bfdee..5e13745 100644
--- a/emulator/bthost.c
+++ b/emulator/bthost.c
@@ -36,6 +36,7 @@
#include "bluetooth/bluetooth.h"
#include "monitor/bt.h"
+#include "monitor/rfcomm.h"
#include "bthost.h"
/* ACL handle and flags pack/unpack */
@@ -1173,6 +1174,64 @@ static struct cid_hook *find_cid_hook(struct btconn *conn, uint16_t cid)
return NULL;
}
+static void rfcomm_sabm_recv(struct bthost *bthost, struct btconn *conn,
+ struct l2conn *l2conn, const void *data,
+ uint16_t len)
+{
+}
+
+static void rfcomm_disc_recv(struct bthost *bthost, struct btconn *conn,
+ struct l2conn *l2conn, const void *data,
+ uint16_t len)
+{
+}
+
+static void rfcomm_ua_recv(struct bthost *bthost, struct btconn *conn,
+ struct l2conn *l2conn, const void *data,
+ uint16_t len)
+{
+}
+
+static void rfcomm_dm_recv(struct bthost *bthost, struct btconn *conn,
+ struct l2conn *l2conn, const void *data,
+ uint16_t len)
+{
+}
+
+static void rfcomm_uih_recv(struct bthost *bthost, struct btconn *conn,
+ struct l2conn *l2conn, const void *data,
+ uint16_t len)
+{
+}
+
+static void process_rfcomm(struct bthost *bthost, struct btconn *conn,
+ struct l2conn *l2conn, const void *data,
+ uint16_t len)
+{
+ const struct rfcomm_hdr *hdr = data;
+
+ switch (RFCOMM_GET_TYPE(hdr->control)) {
+ case RFCOMM_SABM:
+ rfcomm_sabm_recv(bthost, conn, l2conn, data, len);
+ break;
+ case RFCOMM_DISC:
+ rfcomm_disc_recv(bthost, conn, l2conn, data, len);
+ break;
+ case RFCOMM_UA:
+ rfcomm_ua_recv(bthost, conn, l2conn, data, len);
+ break;
+ case RFCOMM_DM:
+ rfcomm_dm_recv(bthost, conn, l2conn, data, len);
+ break;
+ case RFCOMM_UIH:
+ rfcomm_uih_recv(bthost, conn, l2conn, data, len);
+ break;
+ default:
+ printf("Unknown frame type\n");
+ break;
+ }
+}
+
static void process_acl(struct bthost *bthost, const void *data, uint16_t len)
{
const struct bt_hci_acl_hdr *acl_hdr = data;
@@ -1180,6 +1239,7 @@ static void process_acl(struct bthost *bthost, const void *data, uint16_t len)
uint16_t handle, cid, acl_len, l2_len;
struct cid_hook *hook;
struct btconn *conn;
+ struct l2conn *l2conn;
const void *l2_data;
if (len < sizeof(*acl_hdr) + sizeof(*l2_hdr))
@@ -1218,7 +1278,12 @@ static void process_acl(struct bthost *bthost, const void *data, uint16_t len)
l2cap_le_sig(bthost, conn, l2_data, l2_len);
break;
default:
- printf("Packet for unknown CID 0x%04x (%u)\n", cid, cid);
+ l2conn = btconn_find_l2cap_conn_by_scid(conn, cid);
+ if (l2conn && l2conn->psm == 0x0003)
+ process_rfcomm(bthost, conn, l2conn, l2_data, l2_len);
+ else
+ printf("Packet for unknown CID 0x%04x (%u)\n", cid,
+ cid);
break;
}
}
--
1.8.3.1
^ permalink raw reply related
* [PATCHv3 3/5] monitor: Add rfcomm.h to tree
From: Marcin Kraglak @ 2014-01-08 9:23 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1389173030-27970-1-git-send-email-marcin.kraglak@tieto.com>
Add initial rfcomm structs and defines to rfcomm.h.
---
monitor/rfcomm.h | 47 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 47 insertions(+)
create mode 100644 monitor/rfcomm.h
diff --git a/monitor/rfcomm.h b/monitor/rfcomm.h
new file mode 100644
index 0000000..8dcb9c1
--- /dev/null
+++ b/monitor/rfcomm.h
@@ -0,0 +1,47 @@
+/*
+ *
+ * BlueZ - Bluetooth protocol stack for Linux
+ *
+ * Copyright (C) 2014 Intel Corporation
+ *
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+#define RFCOMM_SABM 0x2f
+#define RFCOMM_DISC 0x43
+#define RFCOMM_UA 0x63
+#define RFCOMM_DM 0x0f
+#define RFCOMM_UIH 0xef
+
+#define RFCOMM_GET_TYPE(control) ((control) & 0xef)
+#define RFCOMM_GET_DLCI(address) ((address & 0xfc) >> 2)
+#define RFCOMM_GET_CHANNEL(address) ((address & 0xf8) >> 3)
+#define RFCOMM_GET_DIR(address) ((address & 0x04) >> 2)
+#define RFCOMM_TEST_EA(length) ((length & 0x01))
+
+struct rfcomm_hdr {
+ uint8_t address;
+ uint8_t control;
+ uint8_t length;
+} __attribute__((packed));
+
+struct rfcomm_cmd {
+ uint8_t address;
+ uint8_t control;
+ uint8_t length;
+ uint8_t fcs;
+} __attribute__((packed));
--
1.8.3.1
^ permalink raw reply related
* [PATCHv3 2/5] tools/rfcomm-tester: Add basic rfcomm test case
From: Marcin Kraglak @ 2014-01-08 9:23 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1389173030-27970-1-git-send-email-marcin.kraglak@tieto.com>
This test case verifies creating rfcomm socket.
---
Makefile.tools | 9 +-
tools/rfcomm-tester.c | 249 ++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 256 insertions(+), 2 deletions(-)
diff --git a/Makefile.tools b/Makefile.tools
index ef17305..6f716fd 100644
--- a/Makefile.tools
+++ b/Makefile.tools
@@ -76,8 +76,13 @@ tools_l2cap_tester_SOURCES = tools/l2cap-tester.c monitor/bt.h \
src/shared/tester.h src/shared/tester.c
tools_l2cap_tester_LDADD = lib/libbluetooth-internal.la @GLIB_LIBS@
-tools_rfcomm_tester_SOURCES = tools/rfcomm-tester.c src/shared/tester.h \
- src/shared/tester.c
+tools_rfcomm_tester_SOURCES = tools/rfcomm-tester.c monitor/bt.h \
+ emulator/btdev.h emulator/btdev.c \
+ emulator/bthost.h emulator/bthost.c \
+ src/shared/util.h src/shared/util.c \
+ src/shared/mgmt.h src/shared/mgmt.c \
+ src/shared/hciemu.h src/shared/hciemu.c \
+ src/shared/tester.h src/shared/tester.c
tools_rfcomm_tester_LDADD = lib/libbluetooth-internal.la @GLIB_LIBS@
tools_smp_tester_SOURCES = tools/smp-tester.c monitor/bt.h \
diff --git a/tools/rfcomm-tester.c b/tools/rfcomm-tester.c
index 200d953..a4f1c8e 100644
--- a/tools/rfcomm-tester.c
+++ b/tools/rfcomm-tester.c
@@ -25,12 +25,261 @@
#include <config.h>
#endif
+#include <stdlib.h>
+#include <stdint.h>
+#include <unistd.h>
+#include <errno.h>
+#include <stdbool.h>
+
#include <glib.h>
+
+#include "lib/bluetooth.h"
+#include "lib/mgmt.h"
+
+#include "monitor/bt.h"
+#include "emulator/bthost.h"
+
#include "src/shared/tester.h"
+#include "src/shared/mgmt.h"
+#include "src/shared/hciemu.h"
+
+struct test_data {
+ struct mgmt *mgmt;
+ uint16_t mgmt_index;
+ struct hciemu *hciemu;
+ enum hciemu_type hciemu_type;
+ const void *test_data;
+};
+
+static void mgmt_debug(const char *str, void *user_data)
+{
+ const char *prefix = user_data;
+
+ tester_print("%s%s", prefix, str);
+}
+
+static void read_info_callback(uint8_t status, uint16_t length,
+ const void *param, void *user_data)
+{
+ struct test_data *data = tester_get_data();
+ const struct mgmt_rp_read_info *rp = param;
+ char addr[18];
+ uint16_t manufacturer;
+ uint32_t supported_settings, current_settings;
+
+ tester_print("Read Info callback");
+ tester_print(" Status: 0x%02x", status);
+
+ if (status || !param) {
+ tester_pre_setup_failed();
+ return;
+ }
+
+ ba2str(&rp->bdaddr, addr);
+ manufacturer = btohs(rp->manufacturer);
+ supported_settings = btohl(rp->supported_settings);
+ current_settings = btohl(rp->current_settings);
+
+ tester_print(" Address: %s", addr);
+ tester_print(" Version: 0x%02x", rp->version);
+ tester_print(" Manufacturer: 0x%04x", manufacturer);
+ tester_print(" Supported settings: 0x%08x", supported_settings);
+ tester_print(" Current settings: 0x%08x", current_settings);
+ tester_print(" Class: 0x%02x%02x%02x",
+ rp->dev_class[2], rp->dev_class[1], rp->dev_class[0]);
+ tester_print(" Name: %s", rp->name);
+ tester_print(" Short name: %s", rp->short_name);
+
+ if (strcmp(hciemu_get_address(data->hciemu), addr)) {
+ tester_pre_setup_failed();
+ return;
+ }
+
+ tester_pre_setup_complete();
+}
+
+static void index_added_callback(uint16_t index, uint16_t length,
+ const void *param, void *user_data)
+{
+ struct test_data *data = tester_get_data();
+
+ tester_print("Index Added callback");
+ tester_print(" Index: 0x%04x", index);
+
+ data->mgmt_index = index;
+
+ mgmt_send(data->mgmt, MGMT_OP_READ_INFO, data->mgmt_index, 0, NULL,
+ read_info_callback, NULL, NULL);
+}
+
+static void index_removed_callback(uint16_t index, uint16_t length,
+ const void *param, void *user_data)
+{
+ struct test_data *data = tester_get_data();
+
+ tester_print("Index Removed callback");
+ tester_print(" Index: 0x%04x", index);
+
+ if (index != data->mgmt_index)
+ return;
+
+ mgmt_unregister_index(data->mgmt, data->mgmt_index);
+
+ mgmt_unref(data->mgmt);
+ data->mgmt = NULL;
+
+ tester_post_teardown_complete();
+}
+
+static void read_index_list_callback(uint8_t status, uint16_t length,
+ const void *param, void *user_data)
+{
+ struct test_data *data = tester_get_data();
+
+ tester_print("Read Index List callback");
+ tester_print(" Status: 0x%02x", status);
+
+ if (status || !param) {
+ tester_pre_setup_failed();
+ return;
+ }
+
+ mgmt_register(data->mgmt, MGMT_EV_INDEX_ADDED, MGMT_INDEX_NONE,
+ index_added_callback, NULL, NULL);
+
+ mgmt_register(data->mgmt, MGMT_EV_INDEX_REMOVED, MGMT_INDEX_NONE,
+ index_removed_callback, NULL, NULL);
+
+ data->hciemu = hciemu_new(data->hciemu_type);
+ if (!data->hciemu) {
+ tester_warn("Failed to setup HCI emulation");
+ tester_pre_setup_failed();
+ }
+
+ tester_print("New hciemu instance created");
+}
+
+static void test_pre_setup(const void *test_data)
+{
+ struct test_data *data = tester_get_data();
+
+ data->mgmt = mgmt_new_default();
+ if (!data->mgmt) {
+ tester_warn("Failed to setup management interface");
+ tester_pre_setup_failed();
+ return;
+ }
+
+ if (tester_use_debug())
+ mgmt_set_debug(data->mgmt, mgmt_debug, "mgmt: ", NULL);
+
+ mgmt_send(data->mgmt, MGMT_OP_READ_INDEX_LIST, MGMT_INDEX_NONE, 0, NULL,
+ read_index_list_callback, NULL, NULL);
+}
+
+static void test_post_teardown(const void *test_data)
+{
+ struct test_data *data = tester_get_data();
+
+ hciemu_unref(data->hciemu);
+ data->hciemu = NULL;
+}
+
+static void test_data_free(void *test_data)
+{
+ struct test_data *data = test_data;
+
+ free(data);
+}
+
+static void client_connectable_complete(uint16_t opcode, uint8_t status,
+ const void *param, uint8_t len,
+ void *user_data)
+{
+ switch (opcode) {
+ case BT_HCI_CMD_WRITE_SCAN_ENABLE:
+ break;
+ default:
+ return;
+ }
+
+ tester_print("Client set connectable status 0x%02x", status);
+
+ if (status)
+ tester_setup_failed();
+ else
+ tester_setup_complete();
+}
+
+static void setup_powered_client_callback(uint8_t status, uint16_t length,
+ const void *param, void *user_data)
+{
+ struct test_data *data = tester_get_data();
+ struct bthost *bthost;
+
+ if (status != MGMT_STATUS_SUCCESS) {
+ tester_setup_failed();
+ return;
+ }
+
+ tester_print("Controller powered on");
+
+ bthost = hciemu_client_get_host(data->hciemu);
+ bthost_set_cmd_complete_cb(bthost, client_connectable_complete, data);
+ bthost_write_scan_enable(bthost, 0x03);
+}
+
+static void setup_powered_client(const void *test_data)
+{
+ struct test_data *data = tester_get_data();
+ unsigned char param[] = { 0x01 };
+
+ tester_print("Powering on controller");
+
+ mgmt_send(data->mgmt, MGMT_OP_SET_SSP, data->mgmt_index,
+ sizeof(param), param, NULL, NULL, NULL);
+
+ mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
+ sizeof(param), param, setup_powered_client_callback,
+ NULL, NULL);
+}
+
+static void test_basic(const void *test_data)
+{
+ int sk;
+
+ sk = socket(PF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);
+ if (sk < 0) {
+ tester_warn("Can't create socket: %s (%d)", strerror(errno),
+ errno);
+ tester_test_failed();
+ return;
+ }
+
+ close(sk);
+
+ tester_test_passed();
+}
+
+#define test_rfcomm(name, data, setup, func) \
+ do { \
+ struct test_data *user; \
+ user = malloc(sizeof(struct test_data)); \
+ if (!user) \
+ break; \
+ user->hciemu_type = HCIEMU_TYPE_BREDR; \
+ user->test_data = data; \
+ tester_add_full(name, data, \
+ test_pre_setup, setup, func, NULL, \
+ test_post_teardown, 2, user, test_data_free); \
+ } while (0)
int main(int argc, char *argv[])
{
tester_init(&argc, &argv);
+ test_rfcomm("Basic RFCOMM Socket - Success", NULL,
+ setup_powered_client, test_basic);
+
return tester_run();
}
--
1.8.3.1
^ permalink raw reply related
* [PATCHv3 1/5] tools/rfcomm-tester: Initial version of rfcomm-tester
From: Marcin Kraglak @ 2014-01-08 9:23 UTC (permalink / raw)
To: linux-bluetooth
Add rfcomm-tester to tree.
---
.gitignore | 1 +
Makefile.tools | 6 +++++-
tools/rfcomm-tester.c | 36 ++++++++++++++++++++++++++++++++++++
3 files changed, 42 insertions(+), 1 deletion(-)
create mode 100644 tools/rfcomm-tester.c
diff --git a/.gitignore b/.gitignore
index 3e0641d..4ac216d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -81,6 +81,7 @@ unit/test-mgmt
tools/mgmt-tester
tools/smp-tester
tools/gap-tester
+tools/rfcomm-tester
tools/btattach
tools/btmgmt
tools/btsnoop
diff --git a/Makefile.tools b/Makefile.tools
index c78cc50..ef17305 100644
--- a/Makefile.tools
+++ b/Makefile.tools
@@ -39,7 +39,7 @@ if EXPERIMENTAL
noinst_PROGRAMS += emulator/btvirt emulator/b1ee tools/3dsp \
tools/mgmt-tester tools/gap-tester \
tools/l2cap-tester tools/sco-tester \
- tools/smp-tester
+ tools/smp-tester tools/rfcomm-tester
emulator_btvirt_SOURCES = emulator/main.c monitor/bt.h \
monitor/mainloop.h monitor/mainloop.c \
@@ -76,6 +76,10 @@ tools_l2cap_tester_SOURCES = tools/l2cap-tester.c monitor/bt.h \
src/shared/tester.h src/shared/tester.c
tools_l2cap_tester_LDADD = lib/libbluetooth-internal.la @GLIB_LIBS@
+tools_rfcomm_tester_SOURCES = tools/rfcomm-tester.c src/shared/tester.h \
+ src/shared/tester.c
+tools_rfcomm_tester_LDADD = lib/libbluetooth-internal.la @GLIB_LIBS@
+
tools_smp_tester_SOURCES = tools/smp-tester.c monitor/bt.h \
emulator/btdev.h emulator/btdev.c \
emulator/bthost.h emulator/bthost.c \
diff --git a/tools/rfcomm-tester.c b/tools/rfcomm-tester.c
new file mode 100644
index 0000000..200d953
--- /dev/null
+++ b/tools/rfcomm-tester.c
@@ -0,0 +1,36 @@
+/*
+ *
+ * BlueZ - Bluetooth protocol stack for Linux
+ *
+ * Copyright (C) 2014 Intel Corporation. All rights reserved.
+ *
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <glib.h>
+#include "src/shared/tester.h"
+
+int main(int argc, char *argv[])
+{
+ tester_init(&argc, &argv);
+
+ return tester_run();
+}
--
1.8.3.1
^ permalink raw reply related
* Re: [PATCH_v3 1/4] android/pan: Register Network Access Point
From: Szymon Janc @ 2014-01-08 9:18 UTC (permalink / raw)
To: Ravi kumar Veeramally; +Cc: linux-bluetooth
In-Reply-To: <1389097880-14783-2-git-send-email-ravikumar.veeramally@linux.intel.com>
Hi Ravi,
> Register NAP server and adds bnep bridge. Removes bridge
> on destroy call. Bridge mechanism is needed when device acting
> as a server and listen for incoming connections.
> ---
> android/pan.c | 112 +++++++++++++++++++++++++++++++++++++++++++++++++++++++---
> 1 file changed, 108 insertions(+), 4 deletions(-)
>
> diff --git a/android/pan.c b/android/pan.c
> index 38e353d..93078ba 100644
> --- a/android/pan.c
> +++ b/android/pan.c
> @@ -28,6 +28,11 @@
> #include <unistd.h>
> #include <fcntl.h>
> #include <glib.h>
> +#include <sys/ioctl.h>
> +#include <sys/socket.h>
> +#include <sys/wait.h>
> +#include <net/if.h>
> +#include <linux/sockios.h>
>
> #include "btio/btio.h"
> #include "lib/bluetooth.h"
> @@ -45,11 +50,11 @@
> #include "bluetooth.h"
>
> #define SVC_HINT_NETWORKING 0x02
> +#define BNEP_BRIDGE "bnep"
>
> static bdaddr_t adapter_addr;
> GSList *devices = NULL;
> uint8_t local_role = HAL_PAN_ROLE_NONE;
> -static uint32_t record_id = 0;
>
> struct pan_device {
> char iface[16];
> @@ -60,6 +65,12 @@ struct pan_device {
> struct bnep *session;
> };
>
> +static struct {
> + uint32_t record_id;
> +} nap_dev = {
> + .record_id = 0,
> +};
> +
> static int device_cmp(gconstpointer s, gconstpointer user_data)
> {
> const struct pan_device *dev = s;
> @@ -297,6 +308,91 @@ failed:
> ipc_send_rsp(HAL_SERVICE_ID_PAN, HAL_OP_PAN_DISCONNECT, status);
> }
>
> +static int set_forward_delay(void)
> +{
> + int fd, ret;
> + char path[41];
> +
> + sprintf(path, "/sys/class/net/%s/bridge/forward_delay", BNEP_BRIDGE);
> +
> + fd = open(path, O_RDWR);
> + if (fd < 0)
> + return -errno;
> +
> + ret = write(fd, "0", sizeof("0"));
> + close(fd);
> +
> + return ret;
> +}
> +
> +static int nap_create_bridge(void)
> +{
> + int sk, err;
> +
> + DBG("%s", BNEP_BRIDGE);
> +
> + sk = socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, 0);
> + if (sk < 0)
> + return -EOPNOTSUPP;
> +
> + if (ioctl(sk, SIOCBRADDBR, BNEP_BRIDGE) < 0) {
> + err = -errno;
> + if (err != -EEXIST) {
> + close(sk);
> + return -EOPNOTSUPP;
> + }
> + }
> +
> + err = set_forward_delay();
> + if (err < 0)
> + ioctl(sk, SIOCBRDELBR, BNEP_BRIDGE);
> +
> + close(sk);
> +
> + return err;
> +}
> +
> +static int nap_remove_bridge(void)
> +{
> + int sk, err;
> +
> + DBG("%s", BNEP_BRIDGE);
> +
> + sk = socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, 0);
> + if (sk < 0)
> + return -EOPNOTSUPP;
> +
> + err = ioctl(sk, SIOCBRDELBR, BNEP_BRIDGE);
> + close(sk);
> +
> + if (err < 0)
> + return -EOPNOTSUPP;
> +
> + return 0;
> +}
> +
> +static void destroy_nap_device(void)
> +{
> + DBG("");
> +
> + nap_remove_bridge();
> +
> + nap_dev.record_id = 0;
> +}
> +
> +static int register_nap_server(void)
> +{
> + int err;
> +
> + DBG("");
> +
> + err = nap_create_bridge();
> + if (err < 0)
> + return err;
> +
> + return 0;
> +}
> +
> static void bt_pan_enable(const void *buf, uint16_t len)
> {
> const struct hal_cmd_pan_enable *cmd = buf;
> @@ -441,7 +537,15 @@ bool bt_pan_register(const bdaddr_t *addr)
> return false;
> }
>
> - record_id = rec->handle;
> + err = register_nap_server();
> + if (err < 0) {
> + bt_adapter_remove_record(rec->handle);
> + sdp_record_free(rec);
> + bnep_cleanup();
> + return false;
> + }
> +
> + nap_dev.record_id = rec->handle;
> ipc_register(HAL_SERVICE_ID_PAN, cmd_handlers,
> G_N_ELEMENTS(cmd_handlers));
>
> @@ -455,6 +559,6 @@ void bt_pan_unregister(void)
> bnep_cleanup();
>
> ipc_unregister(HAL_SERVICE_ID_PAN);
> - bt_adapter_remove_record(record_id);
> - record_id = 0;
> + bt_adapter_remove_record(nap_dev.record_id);
> + destroy_nap_device();
I would either zero nap_dev.record_id right after removing record or move
removing record to destroy_nap_device().
--
BR
Szymon Janc
^ permalink raw reply
* Re: [PATCH_v3 2/4] android/pan: Listen for incoming connections and accept in NAP role
From: Luiz Augusto von Dentz @ 2014-01-08 9:07 UTC (permalink / raw)
To: Ravi kumar Veeramally; +Cc: linux-bluetooth@vger.kernel.org
In-Reply-To: <1389097880-14783-3-git-send-email-ravikumar.veeramally@linux.intel.com>
Hi Ravi,
On Tue, Jan 7, 2014 at 2:31 PM, Ravi kumar Veeramally
<ravikumar.veeramally@linux.intel.com> wrote:
> Listen for incoming connections and accept it. Create bnep interface
> add it to bridge and notify control and connection state information
> through HAL. Remove the device on disconnect request. If android
> settings UI does not have bluetooth tethering enabled it immediately
> sends disconnect signal.
> ---
> android/pan.c | 192 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 190 insertions(+), 2 deletions(-)
>
> diff --git a/android/pan.c b/android/pan.c
> index 93078ba..0eef284 100644
> --- a/android/pan.c
> +++ b/android/pan.c
> @@ -63,12 +63,17 @@ struct pan_device {
> uint8_t role;
> GIOChannel *io;
> struct bnep *session;
> + guint watch;
> };
>
> static struct {
> uint32_t record_id;
> + guint watch;
> + GIOChannel *io;
> } nap_dev = {
> .record_id = 0,
> + .watch = 0,
> + .io = NULL,
> };
>
> static int device_cmp(gconstpointer s, gconstpointer user_data)
> @@ -81,13 +86,21 @@ static int device_cmp(gconstpointer s, gconstpointer user_data)
>
> static void pan_device_free(struct pan_device *dev)
> {
> + if (dev->watch > 0) {
> + bnep_server_delete(BNEP_BRIDGE, dev->iface, &dev->dst);
> + g_source_remove(dev->watch);
> + dev->watch = 0;
Usually it is not necessary to assign anything to struct members when
you are freeing the whole struct since its memory gonna be freed
anyway.
^ permalink raw reply
* bluez Low Energy to RFCOMM data streaming and RFCOMM Server Just Works Pairing
From: code jug @ 2014-01-08 8:54 UTC (permalink / raw)
To: linux-bluetooth
Hi Everyone,
I have a requirement where I have to
1.get data from bluetooth low energy peripheral.
2.send data to bluetooth classic Device. ( by setting up rfcomm server )
3.Use a single dongle to do both ( if possible ) I have IOgear GBU521
The whole setup needs to run on a raspberry pi "without any user
intervention" for pairing etc.
I have the means to get data from the peripheral..
I want to set a default password (like "1234") so that any device can just
connect to it and receive the data via rfcomm.
Pairing always generates a key on my phone, and there is a prompt on the
linux system. I want it to happen with a default password and not by
prompting. something like pairing to a JYMCU from a phone.
please help.
Regards,
cj
^ permalink raw reply
* [PATCH] android/pts: Update PTS results for MAP
From: Jakub Tyszkowski @ 2014-01-08 8:52 UTC (permalink / raw)
To: linux-bluetooth
Update MAP PTS results for BlueZ stack on Nexus4 (Android 4.4.2).
---
android/pts-map.txt | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/android/pts-map.txt b/android/pts-map.txt
index 26702af..9850fd4 100644
--- a/android/pts-map.txt
+++ b/android/pts-map.txt
@@ -1,7 +1,7 @@
PTS test results for MAP
PTS version: 5.0
-Tested: 17.12.2013
+Tested: 07.01.2014
Results:
PASS test passed
@@ -70,7 +70,7 @@ TC_MSE_MMB_BV_14_I PASS
TC_MSE_MMB_BV_15_I PASS
TC_MSE_MMB_BV_16_I INC Mailbox MAS instance not available on IUT.
TC_MSE_MMD_BV_02_I PASS
-TC_MSE_MMU_BV_02_I PASS
+TC_MSE_MMU_BV_02_I INC Passing randomly. (Reported PTS Issue ID: 11689)
TC_MSE_MMU_BV_03_I PASS
TC_MSE_MMN_BV_02_I PASS
TC_MSE_MMN_BV_04_I N/A
--
1.8.5
^ permalink raw reply related
* Re: [PATCH] android-tester: Add HIDHost initial interface setup test
From: Ravi kumar Veeramally @ 2014-01-08 8:43 UTC (permalink / raw)
To: Szymon Janc; +Cc: linux-bluetooth
In-Reply-To: <3983437.QCzj2PTKjz@uw000953>
Hi
On 01/08/2014 10:26 AM, Szymon Janc wrote:
> Hi Ravi,
>
>> Hi Szymon,
>>
>> On 01/08/2014 10:09 AM, Szymon Janc wrote:
>>> Hi Ravi,
>>>
>>>> ---
>>>> android/android-tester.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
>>>> 1 file changed, 46 insertions(+)
>>> This patch makes android-tester segfaults when running "HIDHost Init" test.
>> When I run output is:
>> HIDHost Init - init
>> Read Index List callback
>> Status: 0x00
>> New hciemu instance created
>> Index Added callback
>> Index: 0x0001
>> Read Info callback
>> Status: 0x00
>> Address: 00:AA:01:00:00:00
>> Version: 0x06
>> Manufacturer: 0x003f
>> Supported settings: 0x000002ff
>> Current settings: 0x00000080
>> Class: 0x000000
>> Name:
>> Short name:
>> HIDHost Init - setup
>>
>> Nothing happened. Let me know what commands and in which sequence it
>> occurred ?
> This is due to running tester via sudo. Run it from root shell or gdb/valgrind.
Yes, got it. I'll send v2.
Thanks,
Ravi.
>
>> Regards,
>> Ravi.
>>>> diff --git a/android/android-tester.c b/android/android-tester.c
>>>> index 9a161ad..e4837c6 100644
>>>> --- a/android/android-tester.c
>>>> +++ b/android/android-tester.c
>>>> @@ -39,6 +39,7 @@
>>>> #include <hardware/hardware.h>
>>>> #include <hardware/bluetooth.h>
>>>> #include <hardware/bt_sock.h>
>>>> +#include <hardware/bt_hh.h>
>>>>
>>>> #include "utils.h"
>>>>
>>>> @@ -79,6 +80,7 @@ struct test_data {
>>>> struct hw_device_t *device;
>>>> const bt_interface_t *if_bluetooth;
>>>> const btsock_interface_t *if_sock;
>>>> + const bthh_interface_t *if_hid;
>>>>
>>>> bool mgmt_settings_set;
>>>> bool cb_count_checked;
>>>> @@ -958,6 +960,16 @@ static bt_callbacks_t bt_callbacks = {
>>>> .le_test_mode_cb = NULL
>>>> };
>>>>
>>>> +static bthh_callbacks_t bthh_callbacks = {
>>>> + .size = sizeof(bthh_callbacks),
>>>> + .connection_state_cb = NULL,
>>>> + .hid_info_cb = NULL,
>>>> + .protocol_mode_cb = NULL,
>>>> + .idle_time_cb = NULL,
>>>> + .get_report_cb = NULL,
>>>> + .virtual_unplug_cb = NULL
>>>> +};
>>>> +
>>>> static void setup(struct test_data *data)
>>>> {
>>>> const hw_module_t *module;
>>>> @@ -1069,6 +1081,11 @@ static void teardown(const void *test_data)
>>>> data->if_bluetooth = NULL;
>>>> }
>>>>
>>>> + if (data->if_hid) {
>>>> + data->if_hid->cleanup();
>>>> + data->if_hid = NULL;
>>>> + }
>>>> +
>>>> data->device->close(data->device);
>>>>
>>>> if (data->bluetoothd_pid)
>>>> @@ -1860,6 +1877,32 @@ clean:
>>>> close(sock_fd);
>>>> }
>>>>
>>>> +static void setup_hidhost_interface(const void *test_data)
>>>> +{
>>>> + struct test_data *data = tester_get_data();
>>>> + bt_status_t status;
>>>> + const void *hid;
>>>> +
>>>> + setup(data);
>>>> +
>>>> + status = data->if_hid->init(&bthh_callbacks);
>>>> + if (status != BT_STATUS_SUCCESS) {
>>>> + data->if_hid = NULL;
>>>> + tester_setup_failed();
>>>> + return;
>>>> + }
>>>> +
>>>> + hid = data->if_bluetooth->get_profile_interface(BT_PROFILE_HIDHOST_ID);
>>>> + if (!hid) {
>>>> + tester_setup_failed();
>>>> + return;
>>>> + }
>>>> +
>>>> + data->if_hid = hid;
>>>> +
>>>> + tester_setup_complete();
>>>> +}
>>>> +
>>>> #define test_bredrle(name, data, test_setup, test, test_teardown) \
>>>> do { \
>>>> struct test_data *user; \
>>>> @@ -2071,5 +2114,8 @@ int main(int argc, char *argv[])
>>>> setup_socket_interface_enabled,
>>>> test_socket_real_connect, teardown);
>>>>
>>>> + test_bredrle("HIDHost Init", NULL, setup_hidhost_interface,
>>>> + test_dummy, teardown);
>>>> +
>>>> return tester_run();
>>>> }
>>>>
^ permalink raw reply
* Re: [PATCH] android-tester: Add HIDHost initial interface setup test
From: Szymon Janc @ 2014-01-08 8:26 UTC (permalink / raw)
To: Ravi kumar Veeramally; +Cc: linux-bluetooth
In-Reply-To: <52CD098D.2090308@linux.intel.com>
Hi Ravi,
> Hi Szymon,
>
> On 01/08/2014 10:09 AM, Szymon Janc wrote:
> > Hi Ravi,
> >
> >> ---
> >> android/android-tester.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
> >> 1 file changed, 46 insertions(+)
> > This patch makes android-tester segfaults when running "HIDHost Init" test.
> When I run output is:
> HIDHost Init - init
> Read Index List callback
> Status: 0x00
> New hciemu instance created
> Index Added callback
> Index: 0x0001
> Read Info callback
> Status: 0x00
> Address: 00:AA:01:00:00:00
> Version: 0x06
> Manufacturer: 0x003f
> Supported settings: 0x000002ff
> Current settings: 0x00000080
> Class: 0x000000
> Name:
> Short name:
> HIDHost Init - setup
>
> Nothing happened. Let me know what commands and in which sequence it
> occurred ?
This is due to running tester via sudo. Run it from root shell or gdb/valgrind.
>
> Regards,
> Ravi.
> >
> >> diff --git a/android/android-tester.c b/android/android-tester.c
> >> index 9a161ad..e4837c6 100644
> >> --- a/android/android-tester.c
> >> +++ b/android/android-tester.c
> >> @@ -39,6 +39,7 @@
> >> #include <hardware/hardware.h>
> >> #include <hardware/bluetooth.h>
> >> #include <hardware/bt_sock.h>
> >> +#include <hardware/bt_hh.h>
> >>
> >> #include "utils.h"
> >>
> >> @@ -79,6 +80,7 @@ struct test_data {
> >> struct hw_device_t *device;
> >> const bt_interface_t *if_bluetooth;
> >> const btsock_interface_t *if_sock;
> >> + const bthh_interface_t *if_hid;
> >>
> >> bool mgmt_settings_set;
> >> bool cb_count_checked;
> >> @@ -958,6 +960,16 @@ static bt_callbacks_t bt_callbacks = {
> >> .le_test_mode_cb = NULL
> >> };
> >>
> >> +static bthh_callbacks_t bthh_callbacks = {
> >> + .size = sizeof(bthh_callbacks),
> >> + .connection_state_cb = NULL,
> >> + .hid_info_cb = NULL,
> >> + .protocol_mode_cb = NULL,
> >> + .idle_time_cb = NULL,
> >> + .get_report_cb = NULL,
> >> + .virtual_unplug_cb = NULL
> >> +};
> >> +
> >> static void setup(struct test_data *data)
> >> {
> >> const hw_module_t *module;
> >> @@ -1069,6 +1081,11 @@ static void teardown(const void *test_data)
> >> data->if_bluetooth = NULL;
> >> }
> >>
> >> + if (data->if_hid) {
> >> + data->if_hid->cleanup();
> >> + data->if_hid = NULL;
> >> + }
> >> +
> >> data->device->close(data->device);
> >>
> >> if (data->bluetoothd_pid)
> >> @@ -1860,6 +1877,32 @@ clean:
> >> close(sock_fd);
> >> }
> >>
> >> +static void setup_hidhost_interface(const void *test_data)
> >> +{
> >> + struct test_data *data = tester_get_data();
> >> + bt_status_t status;
> >> + const void *hid;
> >> +
> >> + setup(data);
> >> +
> >> + status = data->if_hid->init(&bthh_callbacks);
> >> + if (status != BT_STATUS_SUCCESS) {
> >> + data->if_hid = NULL;
> >> + tester_setup_failed();
> >> + return;
> >> + }
> >> +
> >> + hid = data->if_bluetooth->get_profile_interface(BT_PROFILE_HIDHOST_ID);
> >> + if (!hid) {
> >> + tester_setup_failed();
> >> + return;
> >> + }
> >> +
> >> + data->if_hid = hid;
> >> +
> >> + tester_setup_complete();
> >> +}
> >> +
> >> #define test_bredrle(name, data, test_setup, test, test_teardown) \
> >> do { \
> >> struct test_data *user; \
> >> @@ -2071,5 +2114,8 @@ int main(int argc, char *argv[])
> >> setup_socket_interface_enabled,
> >> test_socket_real_connect, teardown);
> >>
> >> + test_bredrle("HIDHost Init", NULL, setup_hidhost_interface,
> >> + test_dummy, teardown);
> >> +
> >> return tester_run();
> >> }
> >>
>
--
BR
Szymon Janc
^ permalink raw reply
* Re: [PATCH] android-tester: Add HIDHost initial interface setup test
From: Ravi kumar Veeramally @ 2014-01-08 8:17 UTC (permalink / raw)
To: Szymon Janc; +Cc: linux-bluetooth
In-Reply-To: <1816544.qZJOrILi6u@uw000953>
Hi Szymon,
On 01/08/2014 10:09 AM, Szymon Janc wrote:
> Hi Ravi,
>
>> ---
>> android/android-tester.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
>> 1 file changed, 46 insertions(+)
> This patch makes android-tester segfaults when running "HIDHost Init" test.
When I run output is:
HIDHost Init - init
Read Index List callback
Status: 0x00
New hciemu instance created
Index Added callback
Index: 0x0001
Read Info callback
Status: 0x00
Address: 00:AA:01:00:00:00
Version: 0x06
Manufacturer: 0x003f
Supported settings: 0x000002ff
Current settings: 0x00000080
Class: 0x000000
Name:
Short name:
HIDHost Init - setup
Nothing happened. Let me know what commands and in which sequence it
occurred ?
Regards,
Ravi.
>
>> diff --git a/android/android-tester.c b/android/android-tester.c
>> index 9a161ad..e4837c6 100644
>> --- a/android/android-tester.c
>> +++ b/android/android-tester.c
>> @@ -39,6 +39,7 @@
>> #include <hardware/hardware.h>
>> #include <hardware/bluetooth.h>
>> #include <hardware/bt_sock.h>
>> +#include <hardware/bt_hh.h>
>>
>> #include "utils.h"
>>
>> @@ -79,6 +80,7 @@ struct test_data {
>> struct hw_device_t *device;
>> const bt_interface_t *if_bluetooth;
>> const btsock_interface_t *if_sock;
>> + const bthh_interface_t *if_hid;
>>
>> bool mgmt_settings_set;
>> bool cb_count_checked;
>> @@ -958,6 +960,16 @@ static bt_callbacks_t bt_callbacks = {
>> .le_test_mode_cb = NULL
>> };
>>
>> +static bthh_callbacks_t bthh_callbacks = {
>> + .size = sizeof(bthh_callbacks),
>> + .connection_state_cb = NULL,
>> + .hid_info_cb = NULL,
>> + .protocol_mode_cb = NULL,
>> + .idle_time_cb = NULL,
>> + .get_report_cb = NULL,
>> + .virtual_unplug_cb = NULL
>> +};
>> +
>> static void setup(struct test_data *data)
>> {
>> const hw_module_t *module;
>> @@ -1069,6 +1081,11 @@ static void teardown(const void *test_data)
>> data->if_bluetooth = NULL;
>> }
>>
>> + if (data->if_hid) {
>> + data->if_hid->cleanup();
>> + data->if_hid = NULL;
>> + }
>> +
>> data->device->close(data->device);
>>
>> if (data->bluetoothd_pid)
>> @@ -1860,6 +1877,32 @@ clean:
>> close(sock_fd);
>> }
>>
>> +static void setup_hidhost_interface(const void *test_data)
>> +{
>> + struct test_data *data = tester_get_data();
>> + bt_status_t status;
>> + const void *hid;
>> +
>> + setup(data);
>> +
>> + status = data->if_hid->init(&bthh_callbacks);
>> + if (status != BT_STATUS_SUCCESS) {
>> + data->if_hid = NULL;
>> + tester_setup_failed();
>> + return;
>> + }
>> +
>> + hid = data->if_bluetooth->get_profile_interface(BT_PROFILE_HIDHOST_ID);
>> + if (!hid) {
>> + tester_setup_failed();
>> + return;
>> + }
>> +
>> + data->if_hid = hid;
>> +
>> + tester_setup_complete();
>> +}
>> +
>> #define test_bredrle(name, data, test_setup, test, test_teardown) \
>> do { \
>> struct test_data *user; \
>> @@ -2071,5 +2114,8 @@ int main(int argc, char *argv[])
>> setup_socket_interface_enabled,
>> test_socket_real_connect, teardown);
>>
>> + test_bredrle("HIDHost Init", NULL, setup_hidhost_interface,
>> + test_dummy, teardown);
>> +
>> return tester_run();
>> }
>>
^ permalink raw reply
* Re: [PATCH] android-tester: Add HIDHost initial interface setup test
From: Szymon Janc @ 2014-01-08 8:09 UTC (permalink / raw)
To: Ravi kumar Veeramally; +Cc: linux-bluetooth
In-Reply-To: <1389104291-27210-1-git-send-email-ravikumar.veeramally@linux.intel.com>
Hi Ravi,
> ---
> android/android-tester.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 46 insertions(+)
This patch makes android-tester segfaults when running "HIDHost Init" test.
>
> diff --git a/android/android-tester.c b/android/android-tester.c
> index 9a161ad..e4837c6 100644
> --- a/android/android-tester.c
> +++ b/android/android-tester.c
> @@ -39,6 +39,7 @@
> #include <hardware/hardware.h>
> #include <hardware/bluetooth.h>
> #include <hardware/bt_sock.h>
> +#include <hardware/bt_hh.h>
>
> #include "utils.h"
>
> @@ -79,6 +80,7 @@ struct test_data {
> struct hw_device_t *device;
> const bt_interface_t *if_bluetooth;
> const btsock_interface_t *if_sock;
> + const bthh_interface_t *if_hid;
>
> bool mgmt_settings_set;
> bool cb_count_checked;
> @@ -958,6 +960,16 @@ static bt_callbacks_t bt_callbacks = {
> .le_test_mode_cb = NULL
> };
>
> +static bthh_callbacks_t bthh_callbacks = {
> + .size = sizeof(bthh_callbacks),
> + .connection_state_cb = NULL,
> + .hid_info_cb = NULL,
> + .protocol_mode_cb = NULL,
> + .idle_time_cb = NULL,
> + .get_report_cb = NULL,
> + .virtual_unplug_cb = NULL
> +};
> +
> static void setup(struct test_data *data)
> {
> const hw_module_t *module;
> @@ -1069,6 +1081,11 @@ static void teardown(const void *test_data)
> data->if_bluetooth = NULL;
> }
>
> + if (data->if_hid) {
> + data->if_hid->cleanup();
> + data->if_hid = NULL;
> + }
> +
> data->device->close(data->device);
>
> if (data->bluetoothd_pid)
> @@ -1860,6 +1877,32 @@ clean:
> close(sock_fd);
> }
>
> +static void setup_hidhost_interface(const void *test_data)
> +{
> + struct test_data *data = tester_get_data();
> + bt_status_t status;
> + const void *hid;
> +
> + setup(data);
> +
> + status = data->if_hid->init(&bthh_callbacks);
> + if (status != BT_STATUS_SUCCESS) {
> + data->if_hid = NULL;
> + tester_setup_failed();
> + return;
> + }
> +
> + hid = data->if_bluetooth->get_profile_interface(BT_PROFILE_HIDHOST_ID);
> + if (!hid) {
> + tester_setup_failed();
> + return;
> + }
> +
> + data->if_hid = hid;
> +
> + tester_setup_complete();
> +}
> +
> #define test_bredrle(name, data, test_setup, test, test_teardown) \
> do { \
> struct test_data *user; \
> @@ -2071,5 +2114,8 @@ int main(int argc, char *argv[])
> setup_socket_interface_enabled,
> test_socket_real_connect, teardown);
>
> + test_bredrle("HIDHost Init", NULL, setup_hidhost_interface,
> + test_dummy, teardown);
> +
> return tester_run();
> }
>
--
BR
Szymon Janc
^ permalink raw reply
* RFCOMM help
From: code jug @ 2014-01-08 7:43 UTC (permalink / raw)
To: linux-bluetooth
Hi Everyone,
I have a requirement where I have to
1.get data from bluetooth low energy peripheral.
2.send data to bluetooth classic Device. ( by setting up rfcomm server )
3.Use a single dongle to do both ( if possible ) I have IOgear GBU521
The whole setup needs to run on a raspberry pi "without any user
intervention" for pairing etc.
I have the means to get data from the peripheral..
I want to set a default password (like "1234") so that any device can just
connect to it and receive the data via rfcomm.
Pairing always generates a key on my phone, and there is a prompt on the
linux system. I want it to happen with a default password and not by
prompting. something like pairing to a JYMCU from a phone.
please help.
Regards,
cj
^ permalink raw reply
* [PATCH 7/7] client: Add unblock command
From: Szymon Janc @ 2014-01-08 0:02 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Bastien Nocera, Szymon Janc
In-Reply-To: <1389139348-3552-1-git-send-email-szymon.janc@gmail.com>
---
client/main.c | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/client/main.c b/client/main.c
index 9f9231a..5791e95 100644
--- a/client/main.c
+++ b/client/main.c
@@ -909,6 +909,35 @@ static void cmd_block(const char *arg)
g_free(str);
}
+static void cmd_unblock(const char *arg)
+{
+ GDBusProxy *proxy;
+ dbus_bool_t blocked;
+ char *str;
+
+ if (!arg || !strlen(arg)) {
+ rl_printf("Missing device address argument\n");
+ return;
+ }
+
+ proxy = find_proxy_by_address(dev_list, arg);
+ if (!proxy) {
+ rl_printf("Device %s not available\n", arg);
+ return;
+ }
+
+ blocked = FALSE;
+
+ str = g_strdup_printf("%s unblock", arg);
+
+ if (g_dbus_proxy_set_property_basic(proxy, "Blocked",
+ DBUS_TYPE_BOOLEAN, &blocked,
+ generic_callback, str, g_free) == TRUE)
+ return;
+
+ g_free(str);
+}
+
static void remove_device_reply(DBusMessage *message, void *user_data)
{
DBusError error;
@@ -1150,6 +1179,8 @@ static const struct {
dev_generator },
{ "block", "<dev>", cmd_block, "Block device",
dev_generator },
+ { "unblock", "<dev>", cmd_unblock, "Unblock device",
+ dev_generator },
{ "remove", "<dev>", cmd_remove, "Remove device",
dev_generator },
{ "connect", "<dev>", cmd_connect, "Connect device",
--
1.8.5.2
^ permalink raw reply related
* [PATCH 6/7] client: Add block command
From: Szymon Janc @ 2014-01-08 0:02 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Bastien Nocera, Szymon Janc
In-Reply-To: <1389139348-3552-1-git-send-email-szymon.janc@gmail.com>
---
client/main.c | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/client/main.c b/client/main.c
index a6e7906..9f9231a 100644
--- a/client/main.c
+++ b/client/main.c
@@ -880,6 +880,35 @@ static void cmd_untrust(const char *arg)
g_free(str);
}
+static void cmd_block(const char *arg)
+{
+ GDBusProxy *proxy;
+ dbus_bool_t blocked;
+ char *str;
+
+ if (!arg || !strlen(arg)) {
+ rl_printf("Missing device address argument\n");
+ return;
+ }
+
+ proxy = find_proxy_by_address(dev_list, arg);
+ if (!proxy) {
+ rl_printf("Device %s not available\n", arg);
+ return;
+ }
+
+ blocked = TRUE;
+
+ str = g_strdup_printf("%s block", arg);
+
+ if (g_dbus_proxy_set_property_basic(proxy, "Blocked",
+ DBUS_TYPE_BOOLEAN, &blocked,
+ generic_callback, str, g_free) == TRUE)
+ return;
+
+ g_free(str);
+}
+
static void remove_device_reply(DBusMessage *message, void *user_data)
{
DBusError error;
@@ -1119,6 +1148,8 @@ static const struct {
dev_generator },
{ "untrust", "<dev>", cmd_untrust, "Untrust device",
dev_generator },
+ { "block", "<dev>", cmd_block, "Block device",
+ dev_generator },
{ "remove", "<dev>", cmd_remove, "Remove device",
dev_generator },
{ "connect", "<dev>", cmd_connect, "Connect device",
--
1.8.5.2
^ permalink raw reply related
* [PATCH 5/7] client: Add untrust command
From: Szymon Janc @ 2014-01-08 0:02 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Bastien Nocera, Szymon Janc
In-Reply-To: <1389139348-3552-1-git-send-email-szymon.janc@gmail.com>
---
client/main.c | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/client/main.c b/client/main.c
index ebc85c6..a6e7906 100644
--- a/client/main.c
+++ b/client/main.c
@@ -851,6 +851,35 @@ static void cmd_trust(const char *arg)
g_free(str);
}
+static void cmd_untrust(const char *arg)
+{
+ GDBusProxy *proxy;
+ dbus_bool_t trusted;
+ char *str;
+
+ if (!arg || !strlen(arg)) {
+ rl_printf("Missing device address argument\n");
+ return;
+ }
+
+ proxy = find_proxy_by_address(dev_list, arg);
+ if (!proxy) {
+ rl_printf("Device %s not available\n", arg);
+ return;
+ }
+
+ trusted = FALSE;
+
+ str = g_strdup_printf("%s untrust", arg);
+
+ if (g_dbus_proxy_set_property_basic(proxy, "Trusted",
+ DBUS_TYPE_BOOLEAN, &trusted,
+ generic_callback, str, g_free) == TRUE)
+ return;
+
+ g_free(str);
+}
+
static void remove_device_reply(DBusMessage *message, void *user_data)
{
DBusError error;
@@ -1088,6 +1117,8 @@ static const struct {
dev_generator },
{ "trust", "<dev>", cmd_trust, "Trust device",
dev_generator },
+ { "untrust", "<dev>", cmd_untrust, "Untrust device",
+ dev_generator },
{ "remove", "<dev>", cmd_remove, "Remove device",
dev_generator },
{ "connect", "<dev>", cmd_connect, "Connect device",
--
1.8.5.2
^ permalink raw reply related
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox