diff options
author | seungku kim <seungku.kim@samsung.com> | 2014-03-28 15:17:11 +0900 |
---|---|---|
committer | seungku kim <seungku.kim@samsung.com> | 2014-04-02 09:39:46 +0900 |
commit | c1792d617779535fda224d3d2346fd024514a226 (patch) | |
tree | 1c28eb357ca6c978722c29d516e3d53c3e59db29 | |
parent | 4c6a68e2541010817b12e42437f4831bdbf9ae5b (diff) | |
download | bluez-tizen_ivi_panda.tar.gz bluez-tizen_ivi_panda.tar.bz2 bluez-tizen_ivi_panda.zip |
[Bluez] enable bluez for mobile environmentsubmit/tizen_ivi_panda/20140403.011931submit/tizen/20140403.051516accepted/tizen/ivi/panda/20140403.193307accepted/tizen/ivi/panda/20140403.014612accepted/tizen/ivi/20140410.192024accepted/tizen/generic/20140403.102207tizen_ivi_pandaaccepted/tizen_ivi_pandaaccepted/tizen_generic
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.manifest | 13 | ||||
-rw-r--r-- | packaging/bluez.spec | 3 | ||||
-rw-r--r-- | tools/hciattach.c | 142 | ||||
-rw-r--r-- | tools/hciconfig.c | 26 | ||||
-rw-r--r-- | tools/hcidump.c | 47 | ||||
-rw-r--r-- | tools/hcitool.c | 30 |
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); |