Hi Briglia,
On Thu, Aug 19, 2010 at 12:43 PM, Anderson Briglia
<anderson.briglia@xxxxxxxxxxxxx> wrote:
This patch implements two new hciconfig commands: leadv and noleadv.
These new hciconfig flags are responsible to LE_SET_ADVERTISE_ENABLE
command implementation.
---
lib/hci.c | 1 +
lib/hci.h | 1 +
tools/hciconfig.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 48 insertions(+), 0 deletions(-)
diff --git a/lib/hci.c b/lib/hci.c
index 3304daa..64ac5f2 100644
--- a/lib/hci.c
+++ b/lib/hci.c
@@ -188,6 +188,7 @@ static hci_map dev_flags_map[] = {
{ "INQUIRY", HCI_INQUIRY },
{ "AUTH", HCI_AUTH },
{ "ENCRYPT", HCI_ENCRYPT },
+ { "LEADV", HCI_LE_ADV },
{ NULL }
};
diff --git a/lib/hci.h b/lib/hci.h
index 512dab9..8b9d33f 100644
--- a/lib/hci.h
+++ b/lib/hci.h
@@ -73,6 +73,7 @@ enum {
HCI_INQUIRY,
HCI_RAW,
+ HCI_LE_ADV,
};
I prefer this small change in another commit, it needs your previous
kernel patch to work/test properly.
/* HCI ioctl defines */
diff --git a/tools/hciconfig.c b/tools/hciconfig.c
index 87dd127..ba12a8a 100644
--- a/tools/hciconfig.c
+++ b/tools/hciconfig.c
@@ -149,6 +149,50 @@ static void cmd_scan(int ctl, int hdev, char *opt)
}
}
+static void cmd_le_adv(int ctl, int hdev, char *opt)
+{
+
No empty line here!
+ struct hci_request rq;
+ le_set_advertise_enable_cp advertise_cp;
+ uint8_t status;
+ uint8_t enable;
"enable" can be declared in the same line of "status"
+ int dd, ret;
+
+ if (hdev< 0)
+ hdev = hci_get_route(NULL);
+
+ dd = hci_open_dev(hdev);
+ if (dd< 0) {
+ perror("Could not open device");
+ exit(1);
+ }
+
+ enable = 0x01;
+ if (!strcmp(opt, "noleadv"))
+ enable = 0x00;
+
+ memset(&advertise_cp, 0, sizeof(advertise_cp));
+ advertise_cp.enable = enable;
+
+ memset(&rq, 0, sizeof(rq));
+ rq.ogf = OGF_LE_CTL;
+ rq.ocf = OCF_LE_SET_ADVERTISE_ENABLE;
+ rq.cparam =&advertise_cp;
+ rq.clen = LE_SET_ADVERTISE_ENABLE_CP_SIZE;
+ rq.rparam =&status;
+ rq.rlen = 1;
+
+ ret = hci_send_req(dd,&rq, 100);
+
No empty line here.
+ if (status || ret< 0) {
+ errno = EIO;
No need to set errno. hci_send_req sets errno when needed.
Claudio
+ fprintf(stderr, "Can't set advertise mode on hci%d: %s (%d)\n",
+ hdev, strerror(errno), errno);
+ }
+
+ hci_close_dev(dd);
+}
+
static void cmd_iac(int ctl, int hdev, char *opt)
{
int s = hci_open_dev(hdev);
@@ -1728,6 +1772,8 @@ static struct {
{ "revision", cmd_revision, 0, "Display revision information" },
{ "block", cmd_block, "<bdaddr>", "Add a device to the blacklist" },
{ "unblock", cmd_unblock, "<bdaddr>", "Remove a device from the blacklist" },
+ { "leadv", cmd_le_adv, 0, "Enable LE advertising" },
+ { "noleadv", cmd_le_adv, 0, "Disable LE advertising" },
{ NULL, NULL, 0 }
};
--
1.7.0.4
--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html