summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorseungku kim <seungku.kim@samsung.com>2014-03-28 15:17:11 +0900
committerseungku kim <seungku.kim@samsung.com>2014-04-02 09:39:46 +0900
commitc1792d617779535fda224d3d2346fd024514a226 (patch)
tree1c28eb357ca6c978722c29d516e3d53c3e59db29
parent4c6a68e2541010817b12e42437f4831bdbf9ae5b (diff)
downloadbluez-accepted/tizen_ivi_panda.tar.gz
bluez-accepted/tizen_ivi_panda.tar.bz2
bluez-accepted/tizen_ivi_panda.zip
1. BROADCOM patchs are applied. 2. hciconfig, hciattach, hcitool, hcidump are changed. Change-Id: Ia8944ec576830308212b6d7a637152042a9be931 Signed-off-by: seungku kim <seungku.kim@samsung.com>
-rw-r--r--packaging/bluez.manifest13
-rw-r--r--packaging/bluez.spec3
-rw-r--r--tools/hciattach.c142
-rw-r--r--tools/hciconfig.c26
-rw-r--r--tools/hcidump.c47
-rw-r--r--tools/hcitool.c30
6 files changed, 213 insertions, 48 deletions
diff --git a/packaging/bluez.manifest b/packaging/bluez.manifest
index a07fbe8f..6c507893 100644
--- a/packaging/bluez.manifest
+++ b/packaging/bluez.manifest
@@ -1,8 +1,9 @@
<manifest>
- <request>
- <domain name="_"/>
- </request>
- <assign>
- <filesystem path="/var/lib/bluetooth" label="User" />
- </assign>
+ <request>
+ <domain name="_"/>
+ </request>
+ <assign>
+ <filesystem path="/var/lib/bluetooth" label="User" />
+ </assign>
</manifest>
+
diff --git a/packaging/bluez.spec b/packaging/bluez.spec
index f0f7d888..bf1e17fc 100644
--- a/packaging/bluez.spec
+++ b/packaging/bluez.spec
@@ -19,6 +19,7 @@ BuildRequires: readline-devel
BuildRequires: udev
BuildRequires: pkgconfig(libnl-1)
BuildRequires: libical-devel
+BuildRequires: pkgconfig(libtzplatform-config)
Url: http://www.bluez.org
Version: 5.12
Release: 0
@@ -95,7 +96,7 @@ cp %{SOURCE1001} .
%build
autoreconf -fiv
-export CFLAGS="${CFLAGS} -D__TIZEN_PATCH__"
+export CFLAGS="${CFLAGS} -D__TIZEN_PATCH__ -D__BROADCOM_PATCH__"
%configure --with-pic \
--libexecdir=/lib \
--disable-usb \
diff --git a/tools/hciattach.c b/tools/hciattach.c
index db01b85b..37d0a0a4 100644
--- a/tools/hciattach.c
+++ b/tools/hciattach.c
@@ -60,8 +60,24 @@ struct uart_t {
char *bdaddr;
int (*init) (int fd, struct uart_t *u, struct termios *ti);
int (*post) (int fd, struct uart_t *u, struct termios *ti);
+
+/* __TIZEN_PATCH__ */
+#ifdef __TI_PATCH__
+ uint16_t device_param;
+#endif
};
+#ifdef __TI_PATCH__
+ int firmware_path = 0;
+#endif
+
+#if defined(__TI_PATCH__) || defined(__BROADCOM_PATCH__)
+#define TIOSETBRFPOWER 0x6000
+#define BRF_DEEP_SLEEP_OPCODE_BYTE_1 0x0c
+#define BRF_DEEP_SLEEP_OPCODE_BYTE_2 0xfd
+#define BRF_DEEP_SLEEP_OPCODE \
+ (BRF_DEEP_SLEEP_OPCODE_BYTE_1 | (BRF_DEEP_SLEEP_OPCODE_BYTE_2 << 8))
+#endif
#define FLOW_CTL 0x0001
#define AMP_DEV 0x0002
#define ENABLE_PM 1
@@ -995,6 +1011,9 @@ static int bcm2035(int fd, struct uart_t *u, struct termios *ti)
/* Set the baud rate */
memset(cmd, 0, sizeof(cmd));
memset(resp, 0, sizeof(resp));
+
+/* __TIZEN_PATCH__ */
+#ifndef __BROADCOM_PATCH__
cmd[0] = HCI_COMMAND_PKT;
cmd[1] = 0x18;
cmd[2] = 0xfc;
@@ -1030,6 +1049,39 @@ static int bcm2035(int fd, struct uart_t *u, struct termios *ti)
fprintf(stderr, "Failed to write \"set baud rate\" command\n");
return -1;
}
+#else
+ cmd[0] = HCI_COMMAND_PKT;
+ cmd[1] = 0x18;
+ cmd[2] = 0xfc;
+
+ switch (u->speed) {
+ case 57600:
+ case 230400:
+ case 460800:
+ case 921600:
+ case 3000000:
+ break;
+ default:
+ break;
+ }
+
+ cmd[3] = 0x06;
+ cmd[4] = 0x00;
+ cmd[5] = 0x00;
+ cmd[6] = u->speed & 0xFF;
+ cmd[7] = (u->speed >> 8) & 0xFF;
+ cmd[8] = (u->speed >> 16) & 0xFF;
+ cmd[9] = (u->speed >> 24) & 0xFF;
+
+ fprintf(stderr, "Set the baud rate %d : 0x%02x,0x%02x,0x%02x,0x%02x\n",u->speed,cmd[6],cmd[7],cmd[8],cmd[9] );
+
+ /* Send command */
+ if (write(fd, cmd, 10) != 10) {
+ fprintf(stderr, "Failed to write \"set baud rate\" command\n");
+ return -1;
+ }
+
+#endif
if ((n = read_hci_event(fd, resp, 6)) < 0) {
fprintf(stderr, "Failed to set baud rate\n");
@@ -1068,12 +1120,18 @@ struct uart_t uart[] = {
{ "swave", 0x0000, 0x0000, HCI_UART_H4, 115200, 115200,
FLOW_CTL, DISABLE_PM, NULL, swave },
+/* __TIZEN_PATCH__ */
+#ifdef __TI_PATCH__
+ /* Texas Instruments BRF63xx modules */
+ { "texas", 0x0000, 0x0000, HCI_UART_LL, 115200,3000000, FLOW_CTL, NULL, texas, NULL/*texas_continue_script*/, BRF_DEEP_SLEEP_OPCODE},
+#else
/* Texas Instruments Bluelink (BRF) modules */
{ "texas", 0x0000, 0x0000, HCI_UART_LL, 115200, 115200,
FLOW_CTL, DISABLE_PM, NULL, texas, texas2 },
{ "texasalt", 0x0000, 0x0000, HCI_UART_LL, 115200, 115200,
FLOW_CTL, DISABLE_PM, NULL, texasalt, NULL },
+#endif
/* ST Microelectronics minikits based on STLC2410/STLC2415 */
{ "st", 0x0000, 0x0000, HCI_UART_H4, 57600, 115200,
@@ -1184,6 +1242,11 @@ static int init_uart(char *dev, struct uart_t *u, int send_break, int raw)
int fd, i;
unsigned long flags = 0;
+/* __TIZEN_PATCH__ */
+#if defined(__TI_PATCH__) || defined(__BROADCOM_PATCH__)
+ int power;
+#endif
+
if (raw)
flags |= 1 << HCI_UART_RAW_DEVICE;
@@ -1205,11 +1268,14 @@ static int init_uart(char *dev, struct uart_t *u, int send_break, int raw)
cfmakeraw(&ti);
+/* __TIZEN_PATCH__ */
+#ifndef __BROADCOM_PATCH__
ti.c_cflag |= CLOCAL;
if (u->flags & FLOW_CTL)
ti.c_cflag |= CRTSCTS;
else
ti.c_cflag &= ~CRTSCTS;
+#endif
if (tcsetattr(fd, TCSANOW, &ti) < 0) {
perror("Can't set port settings");
@@ -1229,6 +1295,16 @@ static int init_uart(char *dev, struct uart_t *u, int send_break, int raw)
usleep(500000);
}
+/* __TIZEN_PATCH__ */
+#if defined(__TI_PATCH__) || defined(__BROADCOM_PATCH__)
+ /* Power up the BRF chip */
+ power = 1;
+ ioctl(fd, TIOSETBRFPOWER, &power);
+#endif
+#ifdef __TI_PATCH__
+ usleep(500000);
+#endif
+
if (u->init && u->init(fd, u, &ti) < 0)
return -1;
@@ -1267,7 +1343,13 @@ static void usage(void)
{
printf("hciattach - HCI UART driver initialization utility\n");
printf("Usage:\n");
+
+/* __TIZEN_PATCH__ */
+#ifdef __TI_PATCH__
+ printf("\thciattach [-n] [-p] [-b] [-g device_param] [-r] [-f] [-t timeout] [-s initial_speed] <tty> <type | id> [speed] [flow|noflow] [bdaddr]\n");
+#else
printf("\thciattach [-n] [-p] [-b] [-r] [-t timeout] [-s initial_speed] <tty> <type | id> [speed] [flow|noflow] [bdaddr]\n");
+#endif
printf("\thciattach -l\n");
}
@@ -1284,11 +1366,23 @@ int main(int argc, char *argv[])
sigset_t sigs;
char dev[PATH_MAX];
+/* __TIZEN_PATCH__ */
+#if defined(__TI_PATCH__) || defined(__BROADCOM_PATCH__)
+ int power;
+#endif
+#ifdef __TI_PATCH__
+ uint16_t device_param = 0;
+ int reset_device = 0;
+ int bt_fd;
+#endif
detach = 1;
printpid = 0;
raw = 0;
-
+#ifdef __TI_PATCH__
+ while ((opt=getopt(argc, argv, "bnprft:g:s:l")) != EOF) {
+#else
while ((opt=getopt(argc, argv, "bnpt:s:lr")) != EOF) {
+#endif
switch(opt) {
case 'b':
send_break = 1;
@@ -1306,6 +1400,20 @@ int main(int argc, char *argv[])
to = atoi(optarg);
break;
+/* __TIZEN_PATCH__ */
+#ifdef __TI_PATCH__
+ case 'g':
+ device_param = (uint16_t)strtol(optarg, NULL, 16);
+ break;
+
+ case 'r':
+ reset_device = 1;
+ break;
+
+ case 'f':
+ firmware_path = 1;
+ break;
+#endif
case 's':
init_speed = atoi(optarg);
break;
@@ -1328,6 +1436,10 @@ int main(int argc, char *argv[])
}
n = argc - optind;
+/* __TIZEN_PATCH__ */
+#ifdef __TI_PATCH__
+ if (!reset_device || (reset_device && n < 1))
+#endif
if (n < 2) {
usage();
exit(1);
@@ -1385,6 +1497,22 @@ int main(int argc, char *argv[])
break;
}
}
+/* __TIZEN_PATCH__ */
+#ifdef __TI_PATCH__
+ if (reset_device)
+ {
+ // Reset row device
+ bt_fd = open(dev, O_RDWR | O_NOCTTY);
+ if (bt_fd< 0) {
+ perror("Can't open serial port");
+ return -1;
+ }
+ /* Power up the BRF chip */
+ power = 0;
+ ioctl(bt_fd, TIOSETBRFPOWER, &power);
+ return 0;
+ }
+#endif
if (!u) {
fprintf(stderr, "Unknown device type or id\n");
@@ -1395,6 +1523,12 @@ int main(int argc, char *argv[])
the hardware's default */
if (init_speed)
u->init_speed = init_speed;
+#ifdef __TI_PATCH__
+ /* If user specified a device parameter, use that instead of
+ the hardware's default */
+ if (device_param)
+ u->device_param = device_param;
+#endif
memset(&sa, 0, sizeof(sa));
sa.sa_flags = SA_NOCLDSTOP;
@@ -1466,5 +1600,11 @@ int main(int argc, char *argv[])
exit(1);
}
+/* __TIZEN_PATCH__ */
+#if defined(__TI_PATCH__) || defined(__BROADCOM_PATCH__)
+ /* Power down the BRF or BCMchip */
+ power = 0;
+ ioctl(n, TIOSETBRFPOWER, &power);
+#endif
return 0;
}
diff --git a/tools/hciconfig.c b/tools/hciconfig.c
index fe451677..548e5721 100644
--- a/tools/hciconfig.c
+++ b/tools/hciconfig.c
@@ -37,13 +37,14 @@
#include <sys/param.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
+#include <sys/stat.h>
#include <bluetooth/bluetooth.h>
#include <bluetooth/hci.h>
#include <bluetooth/hci_lib.h>
-#include "textfile.h"
-#include "csr.h"
+#include "src/textfile.h"
+#include "tools/csr.h"
static struct hci_dev_info di;
static int all;
@@ -824,25 +825,32 @@ static char *get_minor_device_name(int major, int minor)
case 0:
break;
case 1:
- strncat(cls_str, "Joystick", sizeof(cls_str) - strlen(cls_str));
+ strncat(cls_str, "Joystick",
+ sizeof(cls_str) - strlen(cls_str) - 1);
break;
case 2:
- strncat(cls_str, "Gamepad", sizeof(cls_str) - strlen(cls_str));
+ strncat(cls_str, "Gamepad",
+ sizeof(cls_str) - strlen(cls_str) - 1);
break;
case 3:
- strncat(cls_str, "Remote control", sizeof(cls_str) - strlen(cls_str));
+ strncat(cls_str, "Remote control",
+ sizeof(cls_str) - strlen(cls_str) - 1);
break;
case 4:
- strncat(cls_str, "Sensing device", sizeof(cls_str) - strlen(cls_str));
+ strncat(cls_str, "Sensing device",
+ sizeof(cls_str) - strlen(cls_str) - 1);
break;
case 5:
- strncat(cls_str, "Digitizer tablet", sizeof(cls_str) - strlen(cls_str));
+ strncat(cls_str, "Digitizer tablet",
+ sizeof(cls_str) - strlen(cls_str) - 1);
break;
case 6:
- strncat(cls_str, "Card reader", sizeof(cls_str) - strlen(cls_str));
+ strncat(cls_str, "Card reader",
+ sizeof(cls_str) - strlen(cls_str) - 1);
break;
default:
- strncat(cls_str, "(reserved)", sizeof(cls_str) - strlen(cls_str));
+ strncat(cls_str, "(reserved)",
+ sizeof(cls_str) - strlen(cls_str) - 1);
break;
}
if (strlen(cls_str) > 0)
diff --git a/tools/hcidump.c b/tools/hcidump.c
index 055c8fa0..2bbc207e 100644
--- a/tools/hcidump.c
+++ b/tools/hcidump.c
@@ -252,15 +252,15 @@ static int process_frames(int dev, int sock, int fd, unsigned long flags)
if (flags & DUMP_BTSNOOP) {
uint64_t ts;
uint8_t pkt_type = ((uint8_t *) frm.data)[0];
- dp->size = htonl(frm.data_len);
+ dp->size = htobe32(frm.data_len);
dp->len = dp->size;
- dp->flags = ntohl(frm.in & 0x01);
+ dp->flags = be32toh(frm.in & 0x01);
dp->drops = 0;
ts = (frm.ts.tv_sec - 946684800ll) * 1000000ll + frm.ts.tv_usec;
- dp->ts = hton64(ts + 0x00E03AB44A676000ll);
+ dp->ts = htobe64(ts + 0x00E03AB44A676000ll);
if (pkt_type == HCI_COMMAND_PKT ||
pkt_type == HCI_EVENT_PKT)
- dp->flags |= ntohl(0x02);
+ dp->flags |= be32toh(0x02);
} else {
dh->len = htobs(frm.data_len);
dh->in = frm.in;
@@ -309,7 +309,7 @@ static void read_dump(int fd)
if (err < 0)
goto failed;
if (!err)
- return;
+ goto done;
if (parser.flags & DUMP_PKTLOG) {
switch (ph.type) {
@@ -330,11 +330,11 @@ static void read_dump(int fd)
frm.in = 1;
break;
default:
- lseek(fd, ntohl(ph.len) - 9, SEEK_CUR);
+ lseek(fd, be32toh(ph.len) - 9, SEEK_CUR);
continue;
}
- frm.data_len = ntohl(ph.len) - 8;
+ frm.data_len = be32toh(ph.len) - 8;
err = read_n(fd, frm.data + 1, frm.data_len - 1);
} else if (parser.flags & DUMP_BTSNOOP) {
uint32_t opcode;
@@ -342,8 +342,8 @@ static void read_dump(int fd)
switch (btsnoop_type) {
case 1001:
- if (ntohl(dp.flags) & 0x02) {
- if (ntohl(dp.flags) & 0x01)
+ if (be32toh(dp.flags) & 0x02) {
+ if (be32toh(dp.flags) & 0x01)
pkt_type = HCI_EVENT_PKT;
else
pkt_type = HCI_COMMAND_PKT;
@@ -352,17 +352,17 @@ static void read_dump(int fd)
((uint8_t *) frm.data)[0] = pkt_type;
- frm.data_len = ntohl(dp.len) + 1;
+ frm.data_len = be32toh(dp.len) + 1;
err = read_n(fd, frm.data + 1, frm.data_len - 1);
break;
case 1002:
- frm.data_len = ntohl(dp.len);
+ frm.data_len = be32toh(dp.len);
err = read_n(fd, frm.data, frm.data_len);
break;
case 2001:
- opcode = ntohl(dp.flags) & 0xffff;
+ opcode = be32toh(dp.flags) & 0xffff;
switch (opcode) {
case 2:
@@ -396,7 +396,7 @@ static void read_dump(int fd)
((uint8_t *) frm.data)[0] = pkt_type;
- frm.data_len = ntohl(dp.len) + 1;
+ frm.data_len = be32toh(dp.len) + 1;
err = read_n(fd, frm.data + 1, frm.data_len - 1);
}
} else {
@@ -407,20 +407,20 @@ static void read_dump(int fd)
if (err < 0)
goto failed;
if (!err)
- return;
+ goto done;
frm.ptr = frm.data;
frm.len = frm.data_len;
if (parser.flags & DUMP_PKTLOG) {
uint64_t ts;
- ts = ntoh64(ph.ts);
+ ts = be64toh(ph.ts);
frm.ts.tv_sec = ts >> 32;
frm.ts.tv_usec = ts & 0xffffffff;
} else if (parser.flags & DUMP_BTSNOOP) {
uint64_t ts;
- frm.in = ntohl(dp.flags) & 0x01;
- ts = ntoh64(dp.ts) - 0x00E03AB44A676000ll;
+ frm.in = be32toh(dp.flags) & 0x01;
+ ts = be64toh(dp.ts) - 0x00E03AB44A676000ll;
frm.ts.tv_sec = (ts / 1000000ll) + 946684800ll;
frm.ts.tv_usec = ts % 1000000ll;
} else {
@@ -432,8 +432,13 @@ static void read_dump(int fd)
parse(&frm);
}
+done:
+ free(frm.data);
+ return;
+
failed:
perror("Read failed");
+ free(frm.data);
exit(1);
}
@@ -464,8 +469,8 @@ static int open_file(char *file, int mode, unsigned long flags)
if (!memcmp(hdr->id, btsnoop_id, sizeof(btsnoop_id))) {
parser.flags |= DUMP_BTSNOOP;
- btsnoop_version = ntohl(hdr->version);
- btsnoop_type = ntohl(hdr->type);
+ btsnoop_version = be32toh(hdr->version);
+ btsnoop_type = be32toh(hdr->type);
printf("btsnoop version: %d datalink type: %d\n",
btsnoop_version, btsnoop_type);
@@ -496,8 +501,8 @@ static int open_file(char *file, int mode, unsigned long flags)
btsnoop_type = 1002;
memcpy(hdr->id, btsnoop_id, sizeof(btsnoop_id));
- hdr->version = htonl(btsnoop_version);
- hdr->type = htonl(btsnoop_type);
+ hdr->version = htobe32(btsnoop_version);
+ hdr->type = htobe32(btsnoop_type);
printf("btsnoop version: %d datalink type: %d\n",
btsnoop_version, btsnoop_type);
diff --git a/tools/hcitool.c b/tools/hcitool.c
index f2e4fa4a..c2df8e3f 100644
--- a/tools/hcitool.c
+++ b/tools/hcitool.c
@@ -46,8 +46,8 @@
#include <bluetooth/hci.h>
#include <bluetooth/hci_lib.h>
-#include "textfile.h"
-#include "oui.h"
+#include "src/textfile.h"
+#include "src/oui.h"
/* Unofficial value, might still change */
#define LE_LINK 0x03
@@ -336,25 +336,32 @@ static char *get_minor_device_name(int major, int minor)
case 0:
break;
case 1:
- strncat(cls_str, "Joystick", sizeof(cls_str) - strlen(cls_str));
+ strncat(cls_str, "Joystick",
+ sizeof(cls_str) - strlen(cls_str) - 1);
break;
case 2:
- strncat(cls_str, "Gamepad", sizeof(cls_str) - strlen(cls_str));
+ strncat(cls_str, "Gamepad",
+ sizeof(cls_str) - strlen(cls_str) - 1);
break;
case 3:
- strncat(cls_str, "Remote control", sizeof(cls_str) - strlen(cls_str));
+ strncat(cls_str, "Remote control",
+ sizeof(cls_str) - strlen(cls_str) - 1);
break;
case 4:
- strncat(cls_str, "Sensing device", sizeof(cls_str) - strlen(cls_str));
+ strncat(cls_str, "Sensing device",
+ sizeof(cls_str) - strlen(cls_str) - 1);
break;
case 5:
- strncat(cls_str, "Digitizer tablet", sizeof(cls_str) - strlen(cls_str));
- break;
+ strncat(cls_str, "Digitizer tablet",
+ sizeof(cls_str) - strlen(cls_str) - 1);
+ break;
case 6:
- strncat(cls_str, "Card reader", sizeof(cls_str) - strlen(cls_str));
+ strncat(cls_str, "Card reader",
+ sizeof(cls_str) - strlen(cls_str) - 1);
break;
default:
- strncat(cls_str, "(reserved)", sizeof(cls_str) - strlen(cls_str));
+ strncat(cls_str, "(reserved)",
+ sizeof(cls_str) - strlen(cls_str) - 1);
break;
}
if (strlen(cls_str) > 0)
@@ -954,6 +961,7 @@ static void cmd_info(int dev_id, int argc, char **argv)
htobs(di.pkt_type & ACL_PTYPE_MASK),
0, 0x01, &handle, 25000) < 0) {
perror("Can't create connection");
+ free(cr);
close(dd);
exit(1);
}
@@ -962,6 +970,8 @@ static void cmd_info(int dev_id, int argc, char **argv)
} else
handle = htobs(cr->conn_info->handle);
+ free(cr);
+
printf("\tBD Address: %s\n", argv[0]);
comp = batocomp(&bdaddr);