diff options
Diffstat (limited to 'packages/bluez/bluez-utils-3.9/hciattach-ti-bts.patch')
-rw-r--r-- | packages/bluez/bluez-utils-3.9/hciattach-ti-bts.patch | 498 |
1 files changed, 0 insertions, 498 deletions
diff --git a/packages/bluez/bluez-utils-3.9/hciattach-ti-bts.patch b/packages/bluez/bluez-utils-3.9/hciattach-ti-bts.patch deleted file mode 100644 index 87bd19f13b..0000000000 --- a/packages/bluez/bluez-utils-3.9/hciattach-ti-bts.patch +++ /dev/null @@ -1,498 +0,0 @@ -Index: bluez-utils-3.9/tools/hciattach.c -=================================================================== ---- bluez-utils-3.9.orig/tools/hciattach.c 2007-01-28 21:16:48.000000000 +0100 -+++ bluez-utils-3.9/tools/hciattach.c 2007-01-29 22:51:30.000000000 +0100 -@@ -59,6 +59,8 @@ - #define HCI_UART_3WIRE 2 - #define HCI_UART_H4DS 3 - -+#include "ti_bts.h" -+ - struct uart_t { - char *type; - int m_id; -@@ -68,6 +70,7 @@ - int speed; - int flags; - int (*init) (int fd, struct uart_t *u, struct termios *ti); -+ char *bts; /* bluetooth script */ - }; - - #define FLOW_CTL 0x0001 -@@ -257,6 +260,114 @@ - return 0; - } - -+static int brf6150(int fd, struct uart_t *u, struct termios *ti) -+{ -+ bts_t *bfp; -+ int i; -+ unsigned long vers; -+ unsigned char actionbuf[256]; -+ unsigned char resp[128]; /* Response */ -+ unsigned long count; -+ unsigned short atype; -+ -+ if (u->bts == NULL) /* no script, ignore */ -+ return 0; -+ -+ bfp = bts_load_script( u->bts, &vers ); -+ if (bfp == NULL) -+ return -1; -+ -+ fprintf( stderr, "Loading BTS script version %lu\n", vers ); -+ -+ while ((count = bts_next_action( bfp, actionbuf, -+ sizeof actionbuf - 1, &atype )) != 0) { -+ if (atype == ACTION_REMARKS) { -+ if (actionbuf[0] != 0) -+ fprintf( stderr, "%s\n", actionbuf ); -+ } -+ else if (atype == ACTION_SEND_COMMAND) { -+#if 0 -+ fprintf( stderr, "ACTION_SEND_COMMAND: ", (int)atype ); -+ for (i=0; i<count; i++) { -+ fprintf( stderr, "0x%02x ", actionbuf[i] ); -+ } -+ fprintf( stderr, "\n" ); -+#endif -+ int n; -+ n = write(fd, actionbuf, count); -+ if (n < 0 || n < count) { -+ perror("Failed to write TI action command"); -+ return -1; -+ } -+ } -+ else if (atype == ACTION_WAIT_EVENT) { -+ action_wait_t *wait = (action_wait_t *)actionbuf; -+#if 0 -+ fprintf( stderr, "ACTION_WAIT_EVENT: %u msec, %u size, data = ", wait->msec, wait->size ); -+ for (i=0; i<wait->size; i++) { -+ fprintf( stderr, "0x%02x ", wait->data[i] ); -+ } -+ fprintf( stderr, "\n" ); -+#endif -+ usleep(wait->msec); /* seems they give usec, not msec */ -+ /* Read reply. */ -+ if ((count = read_hci_event(fd, resp, sizeof resp)) < 0) { -+ perror("Failed to read TI command response"); -+ return -1; -+ } -+ if (count < wait->size) { -+ fprintf( stderr, "TI command response is short."); -+ } -+ for (i=0; i<wait->size; i++) { -+ if (i == 3) continue; /* ignore */ -+ if (resp[i] != wait->data[i]) { -+ fprintf( stderr, "TI command response does not match expected result.\n" ); -+ } -+ } -+ } -+ else if (atype == ACTION_SERIAL_PORT_PARAMETERS) { -+ action_serial_t *sercmd = (action_serial_t *)actionbuf; -+ -+ /* Set actual baudrate */ -+ fprintf( stderr, -+ "BTS changing baud rate to %u, flow control to %u\n", -+ sercmd->baud, sercmd->flow_control ); -+ -+ tcflush(fd, TCIOFLUSH); -+ -+ if (sercmd->flow_control) -+ ti->c_cflag |= CRTSCTS; -+ else -+ ti->c_cflag &= ~CRTSCTS; -+ if (tcsetattr(fd, TCSANOW, ti) < 0) { -+ perror("Can't set port settings"); -+ return -1; -+ } -+ -+ u->speed = sercmd->baud; -+ -+ tcflush(fd, TCIOFLUSH); -+ if (set_speed(fd, ti, sercmd->baud) < 0) { -+ perror("Can't set baud rate"); -+ return -1; -+ } -+ } -+ else if (atype == ACTION_DELAY) { -+ action_delay_t *delay = (action_delay_t *)actionbuf; -+ usleep(delay->msec); /* seems they give usec, not msec */ -+ } -+ else { -+ fprintf( stderr, "BTS action type = %d: ", (int)atype ); -+ for (i=0; i<count; i++) { -+ fprintf( stderr, "0x%02x ", actionbuf[i] ); -+ } -+ fprintf( stderr, "\n" ); -+ } -+ } -+ bts_unload_script( bfp ); -+ return 0; -+} -+ - static int texas(int fd, struct uart_t *u, struct termios *ti) - { - struct timespec tm = {0, 50000}; -@@ -297,15 +408,26 @@ - } while (resp[4] != cmd[1] && resp[5] != cmd[2]); - - /* Verify manufacturer */ -- if ((resp[11] & 0xFF) != 0x0d) -+ if (resp[11] != 0x0d) - fprintf(stderr,"WARNING : module's manufacturer is not Texas Instrument\n"); - - /* Print LMP version */ -- fprintf(stderr, "Texas module LMP version : 0x%02x\n", resp[10] & 0xFF); -+ fprintf(stderr, "TI module LMP version : 0x%02x\n", resp[10]); - - /* Print LMP subversion */ -- fprintf(stderr, "Texas module LMP sub-version : 0x%02x%02x\n", resp[14] & 0xFF, resp[13] & 0xFF); -- -+ fprintf(stderr, "TI module LMP sub-version : 0x%02x%02x\n", resp[14], resp[13]); -+ if ((resp[14] >> 2) == 3) { -+ int err; -+ nanosleep(&tm, NULL); -+ -+ /* BRF6150 */ -+ if ((err=brf6150( fd, u, ti )) != 0) { -+ fprintf( stderr, "TI script failed (err=%d)\n", -+ err ); -+ return -1; -+ } -+ } -+ - nanosleep(&tm, NULL); - return 0; - } -@@ -1128,7 +1250,7 @@ - { - printf("hciattach - HCI UART driver initialization utility\n"); - printf("Usage:\n"); -- printf("\thciattach [-n] [-p] [-b] [-t timeout] [-s initial_speed] <tty> <type | id> [speed] [flow|noflow]\n"); -+ printf("\thciattach [-n] [-p] [-b] [-t timeout] [-s initial_speed] [-S bts-script] <tty> <type | id> [speed] [flow|noflow]\n"); - printf("\thciattach -l\n"); - } - -@@ -1143,11 +1265,12 @@ - struct sigaction sa; - struct pollfd p; - char dev[PATH_MAX]; -+ char *bts = NULL; - - detach = 1; - printpid = 0; - -- while ((opt=getopt(argc, argv, "bnpt:s:l")) != EOF) { -+ while ((opt=getopt(argc, argv, "bnpt:s:S:l")) != EOF) { - switch(opt) { - case 'b': - send_break = 1; -@@ -1169,6 +1292,10 @@ - init_speed = atoi(optarg); - break; - -+ case 'S': -+ bts = optarg; -+ break; -+ - case 'l': - for (i = 0; uart[i].type; i++) { - printf("%-10s0x%04x,0x%04x\n", uart[i].type, -@@ -1240,6 +1367,8 @@ - if (init_speed) - u->init_speed = init_speed; - -+ u->bts = bts; -+ - memset(&sa, 0, sizeof(sa)); - sa.sa_flags = SA_NOCLDSTOP; - sa.sa_handler = sig_alarm; -Index: bluez-utils-3.9/tools/Makefile.am -=================================================================== ---- bluez-utils-3.9.orig/tools/Makefile.am 2007-01-28 21:16:48.000000000 +0100 -+++ bluez-utils-3.9/tools/Makefile.am 2007-01-29 22:54:22.000000000 +0100 -@@ -37,7 +37,7 @@ - - noinst_PROGRAMS = hcisecfilter ppporc - --hciattach_SOURCES = hciattach.c hciattach_st.c -+hciattach_SOURCES = hciattach.c hciattach_st.c ti_bts.h ti_bts.c - hciattach_LDADD = @BLUEZ_LIBS@ - - hciconfig_SOURCES = hciconfig.c csr.h csr.c -Index: bluez-utils-3.9/tools/ti_bts.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ bluez-utils-3.9/tools/ti_bts.h 2007-01-29 22:51:30.000000000 +0100 -@@ -0,0 +1,116 @@ -+/* -+ * Copyright (c) 2005 Texas Instruments, Inc. -+ * Ported by SDG Systems, LLC -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation; -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. -+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY -+ * CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES -+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -+ * -+ * ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, -+ * COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS -+ * SOFTWARE IS DISCLAIMED. -+ * -+ */ -+ -+#ifndef BT_SCRIPT_H -+#define BT_SCRIPT_H -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/* -+ * Define the interface of Bluetooth Script -+ */ -+ -+typedef void bts_t; -+ -+ -+#define ACTION_SEND_COMMAND 1 /* Send out raw data (as is) */ -+#define ACTION_WAIT_EVENT 2 /* Wait for data */ -+#define ACTION_SERIAL_PORT_PARAMETERS 3 -+#define ACTION_DELAY 4 -+#define ACTION_RUN_SCRIPT 5 -+#define ACTION_REMARKS 6 -+ -+/* -+ * Structure for ACTION_SEND_COMMAND -+ */ -+typedef struct tagCActionCommand -+{ -+ unsigned char data[1]; /* Data to send */ -+} action_command_t; -+ -+/* -+ * Structure for ACTION_WAIT_EVENT -+ */ -+typedef struct tagCActionWaitEvent -+{ -+ unsigned long msec; /* in milliseconds */ -+ unsigned long size; -+ unsigned char data[1]; /* Data to wait for */ -+} action_wait_t; -+ -+ -+/* -+ * Structure for ACTION_SERIAL_PORT_PARAMETERS -+ */ -+typedef struct tagCActionSerialPortParameters -+{ -+ unsigned long baud; -+ unsigned long flow_control; -+} action_serial_t; -+ -+/* Flow Control Type */ -+#define FCT_NONE 0 -+#define FCT_HARDWARE 1 -+ -+#define DONT_CHANGE 0xFFFFFFFF /* For both baud rate and flow control */ -+ -+ -+/* -+ * Structure for ACTION_DELAY -+ */ -+typedef struct tagCActionDelay -+{ -+ unsigned long msec; /* in milliseconds */ -+} action_delay_t; -+ -+/* -+ * Structure for ACTION_RUN_SCRIPT -+ */ -+typedef struct tagCActionRunScript -+{ -+ char filename[1]; -+} action_run_t; -+ -+/* -+ * Structure for ACTION_REMARKS -+ */ -+typedef struct tagCActionRemarks -+{ -+ char m_szRemarks[1]; -+} action_remarks_t; -+ -+ -+const char *cis_create_filename(const unsigned char* cmdparms); -+bts_t * bts_load_script(const char* fname, unsigned long* version); -+unsigned long bts_next_action(const bts_t* bts_fp, unsigned char* action_buf, -+ unsigned long nMaxSize, unsigned short* ptype); -+void bts_unload_script(bts_t* bts_fp); -+ -+#ifdef __cplusplus -+}; -+#endif -+ -+#endif /* BT_SCRIPT_H */ -+ -Index: bluez-utils-3.9/tools/ti_bts.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ bluez-utils-3.9/tools/ti_bts.c 2007-01-29 22:51:30.000000000 +0100 -@@ -0,0 +1,149 @@ -+/* -+ * Copyright (c) 2005 Texas Instruments, Inc. -+ * Ported by SDG Systems, LLC -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation; -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. -+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY -+ * CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES -+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -+ * -+ * ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, -+ * COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS -+ * SOFTWARE IS DISCLAIMED. -+ * -+ */ -+ -+ -+#include <stdio.h> -+#include <stdlib.h> -+#include "ti_bts.h" -+ -+#ifndef MAKEWORD -+#define MAKEWORD(a, b) ((unsigned short)(((unsigned char)(a)) | ((unsigned short)((unsigned char)(b))) << 8)) -+#endif -+ -+#define TI_MANUFACTURER_ID 13 -+ -+/* -+ * Common Init Script specific -+ */ -+const char * -+cis_create_filename(const unsigned char* cmdparms) -+{ -+ static char bts_file[50]; -+ -+ /* Check for TI's id */ -+ unsigned short manfid = MAKEWORD(cmdparms[8], cmdparms[9]); -+ -+ if (TI_MANUFACTURER_ID == manfid) { -+ unsigned short version = MAKEWORD(cmdparms[10], cmdparms[11]); -+ -+ unsigned short chip = (version & 0x7C00) >> 10; -+ unsigned short min_ver = (version & 0x007F); -+ unsigned short maj_ver = (version & 0x0380) >> 7; -+ -+ if (0 != (version & 0x8000)) { -+ maj_ver |= 0x0008; -+ } -+ -+ sprintf( bts_file, "TIInit_%d.%d.%d.bts", -+ (int)chip, (int)maj_ver, (int)min_ver); -+ -+ return &bts_file[0]; -+ } -+ return NULL; -+} -+ -+typedef struct tagCHeader -+{ -+ unsigned long magic; -+ unsigned long version; -+ unsigned char future[24]; -+} cheader_t; -+ -+ -+/* The value 0x42535442 stands for (in ASCII) BTSB */ -+/* which is Bluetooth Script Binary */ -+#define FILE_HEADER_MAGIC 0x42535442 -+ -+ -+bts_t * -+bts_load_script(const char* fname, unsigned long* version) -+{ -+ bts_t* bts = NULL; -+ FILE* fp = fopen(fname, "rb"); -+ -+ if (NULL != fp) { -+ /* Read header */ -+ cheader_t header; -+ -+ /* Read header */ -+ if (1 == fread(&header, sizeof(header), 1, fp)) { -+ /* Check magic number for correctness */ -+ if (header.magic == FILE_HEADER_MAGIC) { -+ /* If user wants the version number */ -+ if (NULL != version) { -+ *version = header.version; -+ } -+ bts = (bts_t*)fp; -+ } -+ } -+ /* If failed reading the file, close it */ -+ if (NULL == bts) { -+ fclose(fp); -+ } -+ } -+ return bts; -+} -+ -+unsigned long -+bts_next_action(const bts_t* bts_fp, unsigned char* action_buf, -+ unsigned long nMaxSize, unsigned short* ptype) -+{ -+ unsigned long bytes = 0; -+ FILE* fp = (FILE*)bts_fp; -+ unsigned char action_hdr[4]; -+ -+ if (bts_fp == NULL) -+ return 0; -+ -+ /* Each Action has the following: */ -+ /* UINT16 type of this action */ -+ /* UINT16 size of rest */ -+ /* BYTE[] action buffer (for HCI, includes the type byte e.g. 1 for hci command) */ -+ -+ if (1 == fread(&action_hdr[0], sizeof(action_hdr), 1, fp)) { -+ unsigned short type = *(unsigned short*)&action_hdr[0]; -+ unsigned short size = *(unsigned short*)&action_hdr[2]; -+ -+ if (size <= nMaxSize) { -+ int nread = fread(action_buf, sizeof(action_buf[0]), size, fp); -+ -+ if (nread == size) { -+ *ptype = type; -+ bytes = (unsigned long)size; -+ } -+ } -+ } -+ -+ return bytes; -+} -+ -+void -+bts_unload_script(bts_t* bts_fp) -+{ -+ FILE* fp = (FILE*)bts_fp; -+ -+ if (NULL != fp) { -+ fclose(fp); -+ } -+} -+ |