From ae8e695cf779dc1168089997bdc4add4f49936ce Mon Sep 17 00:00:00 2001 From: Alex Gonzalez Date: Thu, 6 Apr 2017 09:31:23 +0200 Subject: [PATCH] meta-digi-dey: bluez5-5.41: ccim6ul: Modify hciattach This commits adds patches to hciattach for the following: * Strict flow control setting The hciattach application has a flow | noflow command line argument that is currently only applied on the first configuration of the uart port. The hciattach_rome plugin ignores this setting and assumes hardware flow control is always supported. This commits makes hciattach obey the user flow control indication. * Modify hciattach_rome to set MAC address. The MAC address setting feature in the rome plugin now works with the command line specified MAC. * Reduce verbosity. hciattach now accepts a "-v" verbose flag. By default verbose output it omitted. https://jira.digi.com/browse/DEL-3711 https://jira.digi.com/browse/DEL-3436 https://jira.digi.com/browse/DEL-3636 https://jira.digi.com/browse/DEL-3955 Signed-off-by: Alex Gonzalez --- ...espect-the-user-indication-for-noflo.patch | 186 +++++ ...If-the-user-supplies-a-bdaddr-use-it.patch | 177 +++++ .../0024-hciattach-Add-verbosity-option.patch | 723 ++++++++++++++++++ .../bluez/bluez5_5.41.bbappend | 3 + 4 files changed, 1089 insertions(+) create mode 100644 meta-digi-dey/recipes-connectivity/bluez/bluez5-5.41/ccimx6ul/0022-hciattach_rome-Respect-the-user-indication-for-noflo.patch create mode 100644 meta-digi-dey/recipes-connectivity/bluez/bluez5-5.41/ccimx6ul/0023-hciattach-If-the-user-supplies-a-bdaddr-use-it.patch create mode 100644 meta-digi-dey/recipes-connectivity/bluez/bluez5-5.41/ccimx6ul/0024-hciattach-Add-verbosity-option.patch diff --git a/meta-digi-dey/recipes-connectivity/bluez/bluez5-5.41/ccimx6ul/0022-hciattach_rome-Respect-the-user-indication-for-noflo.patch b/meta-digi-dey/recipes-connectivity/bluez/bluez5-5.41/ccimx6ul/0022-hciattach_rome-Respect-the-user-indication-for-noflo.patch new file mode 100644 index 000000000..e5d76303a --- /dev/null +++ b/meta-digi-dey/recipes-connectivity/bluez/bluez5-5.41/ccimx6ul/0022-hciattach_rome-Respect-the-user-indication-for-noflo.patch @@ -0,0 +1,186 @@ +From: Alex Gonzalez +Date: Thu, 6 Apr 2017 09:27:09 +0200 +Subject: [PATCH] hciattach_rome: Respect the user indication for noflow + +When hciattach is called with noflow, it should not assume the hardware +supports hardware flow control. + +Basically, use 'flow' or 'noflow' on the hciattach command line arguments +to indicate whether to use or not hardware flow control. + +Signed-off-by: Alex Gonzalez +--- + tools/hciattach.c | 2 +- + tools/hciattach.h | 2 +- + tools/hciattach_rome.c | 50 +++++++++++++++++++++++++++++++++++--------------- + tools/hciattach_rome.h | 1 + + 4 files changed, 38 insertions(+), 17 deletions(-) + +diff --git a/tools/hciattach.c b/tools/hciattach.c +index dda639cabca3..81d78ab3f69a 100644 +--- a/tools/hciattach.c ++++ b/tools/hciattach.c +@@ -286,7 +286,7 @@ static int ath3k_pm(int fd, struct uart_t *u, struct termios *ti) + static int qca(int fd, struct uart_t *u, struct termios *ti) + { + fprintf(stderr,"qca\n"); +- return qca_soc_init(fd, u->speed, u->bdaddr); ++ return qca_soc_init(fd, u->speed, u->bdaddr, ti); + } + + static int qualcomm(int fd, struct uart_t *u, struct termios *ti) +diff --git a/tools/hciattach.h b/tools/hciattach.h +index 49e59321fcac..3524e716c847 100644 +--- a/tools/hciattach.h ++++ b/tools/hciattach.h +@@ -64,7 +64,7 @@ int ath3k_init(int fd, int speed, int init_speed, char *bdaddr, + struct termios *ti); + int ath3k_post(int fd, int pm); + int qualcomm_init(int fd, int speed, struct termios *ti, const char *bdaddr); +-int qca_soc_init(int fd, int speed, char *bdaddr); ++int qca_soc_init(int fd, int speed, char *bdaddr , struct termios * ti); + int intel_init(int fd, int init_speed, int *speed, struct termios *ti); + int bcm43xx_init(int fd, int def_speed, int speed, struct termios *ti, + const char *bdaddr); +diff --git a/tools/hciattach_rome.c b/tools/hciattach_rome.c +index 59bdc16e4e8f..ee67bb068c09 100644 +--- a/tools/hciattach_rome.c ++++ b/tools/hciattach_rome.c +@@ -1565,7 +1565,8 @@ static void flow_control(int fd, int opt) + } + + +-int rome_set_baudrate_req(int fd, int local_baud_rate, int controller_baud_rate) ++int rome_set_baudrate_req(int fd, int local_baud_rate, ++ int controller_baud_rate, int hwfc) + { + int size, err = 0; + unsigned char cmd[HCI_MAX_CMD_SIZE]; +@@ -1575,6 +1576,12 @@ int rome_set_baudrate_req(int fd, int local_baud_rate, int controller_baud_rate) + + memset(cmd, 0x0, HCI_MAX_CMD_SIZE); + ++ /* If not using hardware flow control limit baud rate to 115200 */ ++ if (!hwfc) { ++ local_baud_rate = USERIAL_BAUD_115200; ++ controller_baud_rate = BAUDRATE_115200; ++ } ++ + cmd_hdr = (void *) (cmd + 1); + cmd[0] = HCI_COMMAND_PKT; + cmd_hdr->opcode = cmd_opcode_pack(HCI_VENDOR_CMD_OGF, EDL_SET_BAUDRATE_CMD_OCF); +@@ -1621,7 +1628,7 @@ error: + } + + +-int rome_hci_reset_req(int fd, char baud) ++int rome_hci_reset_req(int fd, char baud, int hwfc) + { + int size, err = 0; + unsigned char cmd[HCI_MAX_CMD_SIZE]; +@@ -1641,8 +1648,9 @@ int rome_hci_reset_req(int fd, char baud) + /* Total length of the packet to be sent to the Controller */ + size = (HCI_CMD_IND + HCI_COMMAND_HDR_SIZE); + +- /* Flow off during baudrate change */ +- flow_control(fd, MSM_DISABLE_FLOW_CTRL); ++ /* If using hardware flow control, turn off during baudrate change */ ++ if (hwfc) ++ flow_control(fd, MSM_DISABLE_FLOW_CTRL); + + /* Send the HCI command packet to UART for transmission */ + fprintf(stderr, "%s: HCI CMD: 0x%x 0x%x 0x%x 0x%x\n", __FUNCTION__, cmd[0], cmd[1], cmd[2], cmd[3]); +@@ -1655,8 +1663,9 @@ int rome_hci_reset_req(int fd, char baud) + /* Change Local UART baudrate to high speed UART */ + userial_vendor_set_baud(baud); + +- /* Flow on after changing local uart baudrate */ +- flow_control(fd, MSM_ENABLE_FLOW_CTRL); ++ /* If using hardware flow control, turn on after changing local uart baudrate */ ++ if (hwfc) ++ flow_control(fd, MSM_ENABLE_FLOW_CTRL); + + /* Wait for command complete event */ + err = read_hci_event(fd, rsp, HCI_MAX_EVENT_SIZE); +@@ -1778,7 +1787,7 @@ int isSpeedValid(int speed, int *local_baud_rate, int *controller_baud_rate) + return -1; + } + +-int qca_soc_init(int fd, int speed, char *bdaddr) ++int qca_soc_init(int fd, int speed, char *bdaddr , struct termios * ti) + { + int err = -1; + int size, local_baud_rate = 0, controller_baud_rate = 0; +@@ -1793,6 +1802,12 @@ int qca_soc_init(int fd, int speed, char *bdaddr) + return -1; + } + #endif ++ ++ /* Assume we don't use hardware flow control unless user requested 'flow' */ ++ vnd_userial.hwfc = 0; ++ if (ti->c_cflag & ~CRTSCTS) ++ vnd_userial.hwfc = 1; ++ + /* Get Rome version information */ + if((err = rome_patch_ver_req(fd)) <0){ + fprintf(stderr, "%s: Fail to get Rome Version (0x%x)\n", __FUNCTION__, err); +@@ -1838,11 +1853,14 @@ int qca_soc_init(int fd, int speed, char *bdaddr) + goto error; + } + +- /* Change baud rate 115.2 kbps to 3Mbps*/ +- err = rome_hci_reset_req(fd, local_baud_rate); +- if ( err <0 ) { +- fprintf(stderr, "HCI Reset Failed !!\n"); +- goto error; ++ /* If using hw flow control, change baud rate 115.2 kbps to 3Mbps*/ ++ if (vnd_userial.hwfc) { ++ err = rome_hci_reset_req(fd, local_baud_rate, ++ vnd_userial.hwfc); ++ if ( err <0 ) { ++ fprintf(stderr, "HCI Reset Failed !!\n"); ++ goto error; ++ } + } + + fprintf(stderr, "HCI Reset is done\n"); +@@ -1888,7 +1906,8 @@ download: + if (local_baud_rate < 0 || controller_baud_rate < 0) + goto error; + +- err = rome_set_baudrate_req(fd, local_baud_rate, controller_baud_rate); ++ err = rome_set_baudrate_req(fd, local_baud_rate, ++ controller_baud_rate, vnd_userial.hwfc); + if (err < 0) { + fprintf(stderr, "%s: Baud rate change failed!\n", __FUNCTION__); + goto error; +@@ -1907,14 +1926,15 @@ download: + * Overriding the baud rate value in NVM file with the user + * requested baud rate, since default baud rate in NVM file is 3M. + */ +- err = rome_set_baudrate_req(fd, local_baud_rate, controller_baud_rate); ++ err = rome_set_baudrate_req(fd, local_baud_rate, ++ controller_baud_rate, vnd_userial.hwfc); + if (err < 0) { + fprintf(stderr, "%s: Baud rate change failed!\n", __FUNCTION__); + goto error; + } + + /* Perform HCI reset here*/ +- err = rome_hci_reset_req(fd, local_baud_rate); ++ err = rome_hci_reset_req(fd, local_baud_rate, vnd_userial.hwfc); + if ( err <0 ) { + fprintf(stderr, "HCI Reset Failed !!!\n"); + goto error; +diff --git a/tools/hciattach_rome.h b/tools/hciattach_rome.h +index 89f7db3bef86..760685ad7915 100644 +--- a/tools/hciattach_rome.h ++++ b/tools/hciattach_rome.h +@@ -62,6 +62,7 @@ typedef struct + int fd; /* fd to Bluetooth device */ + struct termios termios; /* serial terminal of BT port */ + char port_name[256]; ++ int hwfc; + } vnd_userial_cb_t; + + /**** baud rates ****/ diff --git a/meta-digi-dey/recipes-connectivity/bluez/bluez5-5.41/ccimx6ul/0023-hciattach-If-the-user-supplies-a-bdaddr-use-it.patch b/meta-digi-dey/recipes-connectivity/bluez/bluez5-5.41/ccimx6ul/0023-hciattach-If-the-user-supplies-a-bdaddr-use-it.patch new file mode 100644 index 000000000..208f587a2 --- /dev/null +++ b/meta-digi-dey/recipes-connectivity/bluez/bluez5-5.41/ccimx6ul/0023-hciattach-If-the-user-supplies-a-bdaddr-use-it.patch @@ -0,0 +1,177 @@ +From: Alex Gonzalez +Date: Thu, 6 Apr 2017 14:37:57 +0200 +Subject: [PATCH] hciattach: If the user supplies a bdaddr, use it + +The QCA6564 has no non-volatile configuration file for the bluetooth +MAC, so use the one supplied on the command line. + +Signed-off-by: Alex Gonzalez +--- + tools/hciattach.c | 4 +-- + tools/hciattach_rome.c | 76 ++++++++++---------------------------------------- + 2 files changed, 17 insertions(+), 63 deletions(-) + +diff --git a/tools/hciattach.c b/tools/hciattach.c +index 81d78ab3f69a..022bbe5fa6d5 100644 +--- a/tools/hciattach.c ++++ b/tools/hciattach.c +@@ -285,7 +285,7 @@ static int ath3k_pm(int fd, struct uart_t *u, struct termios *ti) + + static int qca(int fd, struct uart_t *u, struct termios *ti) + { +- fprintf(stderr,"qca\n"); ++ fprintf(stderr,"qca, bdaddr %s\n", u->bdaddr ? u->bdaddr : "Default"); + return qca_soc_init(fd, u->speed, u->bdaddr, ti); + } + +@@ -1363,7 +1363,7 @@ int main(int argc, char *argv[]) + fprintf(stderr, "Unknown device type or id\n"); + exit(1); + } +- ++ u->bdaddr = NULL; + break; + + case 2: +diff --git a/tools/hciattach_rome.c b/tools/hciattach_rome.c +index ee67bb068c09..854cfff707aa 100644 +--- a/tools/hciattach_rome.c ++++ b/tools/hciattach_rome.c +@@ -45,6 +45,7 @@ + #include + #include + #include ++#include + #include + #include "hciattach_rome.h" + #include "hciattach.h" +@@ -911,7 +912,7 @@ int get_value_from_config(char *file_path,char *param) + return ret; + } + +-int rome_get_tlv_file(char *file_path) ++int rome_get_tlv_file(char *file_path, unsigned char * bdaddr) + { + FILE * pFile; + long fileSize; +@@ -921,7 +922,6 @@ int rome_get_tlv_file(char *file_path) + tlv_nvm_hdr *nvm_ptr; + unsigned char data_buf[PRINT_BUF_SIZE]={0,}; + unsigned char *nvm_byte_ptr; +- unsigned char bdaddr[6]; + unsigned short pcm_value, ibs_value; + + fprintf(stderr, "File Open (%s)\n", file_path); +@@ -1008,12 +1008,15 @@ int rome_get_tlv_file(char *file_path) + nvm_byte_ptr+=sizeof(tlv_nvm_hdr); + + /* Write BD Address */ +- if(nvm_ptr->tag_id == TAG_NUM_2 && read_bd_address(&bdaddr) == 0) { +- memcpy(nvm_byte_ptr, bdaddr, 6); +- fprintf(stderr, "Overriding default BD ADDR with user" +- " programmed BD Address: %02x:%02x:%02x:%02x:%02x:%02x\n", +- *nvm_byte_ptr, *(nvm_byte_ptr+1), *(nvm_byte_ptr+2), +- *(nvm_byte_ptr+3), *(nvm_byte_ptr+4), *(nvm_byte_ptr+5)); ++ if(nvm_ptr->tag_id == TAG_NUM_2 && bdaddr) { ++ bdaddr_t ba; ++ if (!str2ba(bdaddr, &ba)) { ++ memcpy(nvm_byte_ptr, &ba, 6); ++ fprintf(stderr, "Overriding default BD ADDR with user" ++ " programmed BD Address: %02x:%02x:%02x:%02x:%02x:%02x\n", ++ *(nvm_byte_ptr+5), *(nvm_byte_ptr+4), *(nvm_byte_ptr+3), ++ *(nvm_byte_ptr+2), *(nvm_byte_ptr+1), *nvm_byte_ptr); ++ } + } + + if (nvm_ptr->tag_id == TAG_NUM_17) { +@@ -1209,14 +1212,14 @@ error: + return err; + } + +-int rome_download_tlv_file(int fd) ++int rome_download_tlv_file(int fd, char * bdaddr) + { + int tlv_size, err = -1; + + /* Rampatch TLV file Downloading */ + pdata_buffer = NULL; + +- if((tlv_size = rome_get_tlv_file(rampatch_file_path)) < 0) ++ if((tlv_size = rome_get_tlv_file(rampatch_file_path, bdaddr)) < 0) + goto error; + + if((err =rome_tlv_dnld_req(fd, tlv_size)) <0 ) +@@ -1228,7 +1231,7 @@ int rome_download_tlv_file(int fd) + } + + /* NVM TLV file Downloading */ +- if((tlv_size = rome_get_tlv_file(nvm_file_path)) < 0) ++ if((tlv_size = rome_get_tlv_file(nvm_file_path, bdaddr)) < 0) + goto error; + + if((err =rome_tlv_dnld_req(fd, tlv_size)) <0 ) +@@ -1679,55 +1682,6 @@ error: + + } + +-int read_bd_address(unsigned char *bdaddr) +-{ +- int fd = -1; +- int readPtr = 0; +- unsigned char data[BD_ADDR_LEN]; +- +- /* Open the persist file for reading device address*/ +- fd = open("/etc/bluetooth/.bt_nv.bin", O_RDONLY); +- if(fd < 0) +- { +- fprintf(stderr, "%s: Open failed: Programming default BD ADDR\n", __func__); +- return -1; +- } +- +- /* Read the NVM Header : fp will be advanced by readPtr number of bytes */ +- readPtr = read(fd, data, PERSIST_HEADER_LEN); +- if (readPtr > 0) +- fprintf(stderr, "%s: Persist header data: %02x \t %02x \t %02x\n", __func__, +- data[NVITEM], data[RDWR_PROT], data[NVITEM_SIZE]); +- else { +- fprintf(stderr, "%s: Read from persist memory failed : Programming default" +- " BD ADDR\n"); +- close(fd); +- return -1; +- } +- +- /* Check for BD ADDR length before programming */ +- if(data[NVITEM_SIZE] != BD_ADDR_LEN) { +- fprintf(stderr, "Invalid BD ADDR: Programming default BD ADDR!\n"); +- close(fd); +- return -1; +- } +- +- /* Read the BD ADDR info */ +- readPtr = read(fd, data, BD_ADDR_LEN); +- if (readPtr > 0) +- fprintf(stderr, "BD-ADDR: ==> %02x:%02x:%02x:%02x:%02x:%02x\n", data[0], +- data[1], data[2], data[3], data[4], data[5]); +- else { +- fprintf(stderr, "%s: Read from persist memory failed : Programming default" +- " BD ADDR\n"); +- close(fd); +- return -1; +- } +- memcpy(bdaddr, data, BD_ADDR_LEN); +- close(fd); +- return 0; +-} +- + int isSpeedValid(int speed, int *local_baud_rate, int *controller_baud_rate) + { + switch(speed) { +@@ -1915,7 +1869,7 @@ download: + } + + /* Donwload TLV files (rampatch, NVM) */ +- err = rome_download_tlv_file(fd); ++ err = rome_download_tlv_file(fd, bdaddr); + if (err < 0) { + fprintf(stderr, "%s: Download TLV file failed!\n", __FUNCTION__); + goto error; diff --git a/meta-digi-dey/recipes-connectivity/bluez/bluez5-5.41/ccimx6ul/0024-hciattach-Add-verbosity-option.patch b/meta-digi-dey/recipes-connectivity/bluez/bluez5-5.41/ccimx6ul/0024-hciattach-Add-verbosity-option.patch new file mode 100644 index 000000000..d1e540a92 --- /dev/null +++ b/meta-digi-dey/recipes-connectivity/bluez/bluez5-5.41/ccimx6ul/0024-hciattach-Add-verbosity-option.patch @@ -0,0 +1,723 @@ +From: Alex Gonzalez +Date: Mon, 10 Apr 2017 12:44:00 +0200 +Subject: [PATCH] hciattach: Add verbosity option + +And reduce the verbosity of the hciattach_rome plugin. + +Signed-off-by: Alex Gonzalez +--- + lib/bluetooth.h | 3 + + tools/hciattach.c | 13 ++- + tools/hciattach_rome.c | 244 ++++++++++++++++++++++++------------------------- + 3 files changed, 132 insertions(+), 128 deletions(-) + +diff --git a/lib/bluetooth.h b/lib/bluetooth.h +index eb279260e009..38e3e6900744 100644 +--- a/lib/bluetooth.h ++++ b/lib/bluetooth.h +@@ -136,6 +136,9 @@ enum { + BT_CLOSED + }; + ++extern int verbose_on; ++#define hciprintf(fd, arg...) if (verbose_on) { fprintf(fd, ##arg);} else { do {} while (0);} ++ + /* Byte order conversions */ + #if __BYTE_ORDER == __LITTLE_ENDIAN + #define htobs(d) (d) +diff --git a/tools/hciattach.c b/tools/hciattach.c +index 022bbe5fa6d5..4aacdafeda7d 100644 +--- a/tools/hciattach.c ++++ b/tools/hciattach.c +@@ -50,6 +50,8 @@ + + #include "hciattach.h" + ++int verbose_on = 0; ++ + struct uart_t { + char *type; + int m_id; +@@ -125,8 +127,6 @@ int read_hci_event(int fd, unsigned char* buf, int size) + fprintf(stderr, "%s: Timing out on select for 3 secs.\n", __FUNCTION__); + return -1; + } +- else +- fprintf(stderr, "%s: Data(HCI-CMD-COMP-EVENT) available in TTY Serial buffer\n", __FUNCTION__); + + /* The first byte identifies the packet type. For HCI event packets, it + * should be 0x04, so we read until we get to the 0x04. */ +@@ -285,7 +285,7 @@ static int ath3k_pm(int fd, struct uart_t *u, struct termios *ti) + + static int qca(int fd, struct uart_t *u, struct termios *ti) + { +- fprintf(stderr,"qca, bdaddr %s\n", u->bdaddr ? u->bdaddr : "Default"); ++ fprintf(stderr,"qca, bdaddr %s, verbose %d\n", u->bdaddr ? u->bdaddr : "Default", verbose_on); + return qca_soc_init(fd, u->speed, u->bdaddr, ti); + } + +@@ -1258,7 +1258,7 @@ static void usage(void) + { + printf("hciattach - HCI UART driver initialization utility\n"); + printf("Usage:\n"); +- printf("\thciattach [-n] [-p] [-b] [-r] [-t timeout] [-s initial_speed]" ++ printf("\thciattach [-n] [-p] [-b] [-r] [-v] [-t timeout] [-s initial_speed]" + " [speed] [flow|noflow]" + " [sleep|nosleep] [bdaddr]\n"); + printf("\thciattach -l\n"); +@@ -1281,7 +1281,7 @@ int main(int argc, char *argv[]) + printpid = 0; + raw = 0; + +- while ((opt=getopt(argc, argv, "bnpt:s:lrf:")) != EOF) { ++ while ((opt=getopt(argc, argv, "bnpt:s:lrf:v")) != EOF) { + switch(opt) { + case 'b': + send_break = 1; +@@ -1319,6 +1319,9 @@ int main(int argc, char *argv[]) + fprintf(stderr, "Line_disp val : %d\n", line_disp); + break; + ++ case 'v': ++ verbose_on = 1; ++ break; + default: + usage(); + exit(1); +diff --git a/tools/hciattach_rome.c b/tools/hciattach_rome.c +index 854cfff707aa..40983fc087c0 100644 +--- a/tools/hciattach_rome.c ++++ b/tools/hciattach_rome.c +@@ -139,7 +139,7 @@ unsigned char userial_to_tcio_baud(unsigned char cfg_baud, unsigned int *baud) + void userial_vendor_set_baud(unsigned char userial_baud) + { + unsigned int tcio_baud; +- fprintf(stderr, "## userial_vendor_set_baud: %d\n", userial_baud); ++ hciprintf(stderr, "## userial_vendor_set_baud: %d\n", userial_baud); + + if (tcgetattr(vnd_userial.fd, &vnd_userial.termios) < 0) { + perror("Can't get port settings"); +@@ -201,7 +201,7 @@ int userial_vendor_ioctl(int fd, userial_vendor_ioctl_op_t op, int *p_data) + break; + #endif // (BT_WAKE_VIA_USERIAL_IOCTL==TRUE) + case USERIAL_OP_FLOW_ON: +- fprintf(stderr, "## userial_vendor_ioctl: UART Flow On\n "); ++ hciprintf(stderr, "## userial_vendor_ioctl: UART Flow On\n "); + ti.c_cflag |= CRTSCTS; + + if (err = tcsetattr(fd, TCSANOW, &ti) < 0) { +@@ -212,7 +212,7 @@ int userial_vendor_ioctl(int fd, userial_vendor_ioctl_op_t op, int *p_data) + break; + + case USERIAL_OP_FLOW_OFF: +- fprintf(stderr, "## userial_vendor_ioctl: UART Flow Off\n "); ++ hciprintf(stderr, "## userial_vendor_ioctl: UART Flow Off\n "); + ti.c_cflag &= ~CRTSCTS; + if (err = tcsetattr(fd, TCSANOW, &ti) < 0) { + fprintf(stderr, "Can't set port settings"); +@@ -233,51 +233,51 @@ int get_vs_hci_event(unsigned char *rsp) + int err = 0, soc_id =0; + unsigned char paramlen = 0; + +- if( (rsp[EVENTCODE_OFFSET] == VSEVENT_CODE) || (rsp[EVENTCODE_OFFSET] == EVT_CMD_COMPLETE)) +- fprintf(stderr, "%s: Received HCI-Vendor Specific event\n", __FUNCTION__); +- else { ++ if( (rsp[EVENTCODE_OFFSET] == VSEVENT_CODE) || (rsp[EVENTCODE_OFFSET] == EVT_CMD_COMPLETE)) { ++ hciprintf(stderr, "%s: Received HCI-Vendor Specific event\n", __FUNCTION__); ++ } else { + fprintf(stderr, "%s: Failed to receive HCI-Vendor Specific event\n", __FUNCTION__); + err = -EIO; + goto failed; + } + +- fprintf(stderr, "%s: Parameter Length: 0x%x\n", __FUNCTION__, paramlen = rsp[EVT_PLEN]); +- fprintf(stderr, "%s: Command response: 0x%x\n", __FUNCTION__, rsp[CMD_RSP_OFFSET]); +- fprintf(stderr, "%s: Response type : 0x%x\n", __FUNCTION__, rsp[RSP_TYPE_OFFSET]); ++ paramlen = rsp[EVT_PLEN]; ++ hciprintf(stderr, "%s: Parameter Length: 0x%x\n", __FUNCTION__, paramlen); ++ hciprintf(stderr, "%s: Command response: 0x%x\n", __FUNCTION__, rsp[CMD_RSP_OFFSET]); ++ hciprintf(stderr, "%s: Response type : 0x%x\n", __FUNCTION__, rsp[RSP_TYPE_OFFSET]); + + /* Check the status of the operation */ + switch ( rsp[CMD_RSP_OFFSET] ) + { + case EDL_CMD_REQ_RES_EVT: +- fprintf(stderr, "%s: Command Request Response\n", __FUNCTION__); ++ hciprintf(stderr, "%s: Command Request Response\n", __FUNCTION__); + switch(rsp[RSP_TYPE_OFFSET]) + { + case EDL_PATCH_VER_RES_EVT: + case EDL_APP_VER_RES_EVT: +- fprintf(stderr, "\t Current Product ID\t\t: 0x%08x\n", +- (unsigned int)(rsp[PATCH_PROD_ID_OFFSET +3] << 24 | ++ hciprintf(stderr, "\t Current Product ID\t\t: 0x%08x\n", ++ (unsigned int)(rsp[PATCH_PROD_ID_OFFSET +3] << 24 | + rsp[PATCH_PROD_ID_OFFSET+2] << 16 | + rsp[PATCH_PROD_ID_OFFSET+1] << 8 | + rsp[PATCH_PROD_ID_OFFSET] )); + + /* Patch Version indicates FW patch version */ +- fprintf(stderr, "\t Current Patch Version\t\t: 0x%04x\n", +- (unsigned short)(rsp[PATCH_PATCH_VER_OFFSET + 1] << 8 | ++ hciprintf(stderr, "\t Current Patch Version\t\t: 0x%04x\n", ++ (unsigned short)(rsp[PATCH_PATCH_VER_OFFSET + 1] << 8 | + rsp[PATCH_PATCH_VER_OFFSET] )); + + /* ROM Build Version indicates ROM build version like 1.0/1.1/2.0 */ +- fprintf(stderr, "\t Current ROM Build Version\t: 0x%04x\n", rome_ver = +- (int)(rsp[PATCH_ROM_BUILD_VER_OFFSET + 1] << 8 | +- rsp[PATCH_ROM_BUILD_VER_OFFSET] )); ++ rome_ver = (int)(rsp[PATCH_ROM_BUILD_VER_OFFSET + 1] << 8 | ++ rsp[PATCH_ROM_BUILD_VER_OFFSET] ); ++ hciprintf(stderr, "\t Current ROM Build Version\t: 0x%04x\n", rome_ver); + + /* In case rome 1.0/1.1, there is no SOC ID version available */ +- if (paramlen - 10) +- { +- fprintf(stderr, "\t Current SOC Version\t\t: 0x%08x\n", soc_id = +- (unsigned int)(rsp[PATCH_SOC_VER_OFFSET +3] << 24 | +- rsp[PATCH_SOC_VER_OFFSET+2] << 16 | +- rsp[PATCH_SOC_VER_OFFSET+1] << 8 | +- rsp[PATCH_SOC_VER_OFFSET] )); ++ if (paramlen - 10) { ++ soc_id = (unsigned int)(rsp[PATCH_SOC_VER_OFFSET +3] << 24 | ++ rsp[PATCH_SOC_VER_OFFSET+2] << 16 | ++ rsp[PATCH_SOC_VER_OFFSET+1] << 8 | ++ rsp[PATCH_SOC_VER_OFFSET]); ++ hciprintf(stderr, "\t Current SOC Version\t\t: 0x%08x\n", soc_id); + } + + /* Rome Chipset Version can be decided by Patch version and SOC version, +@@ -290,7 +290,7 @@ int get_vs_hci_event(unsigned char *rsp) + switch (err = rsp[CMD_STATUS_OFFSET]) + { + case HCI_CMD_SUCCESS: +- fprintf(stderr, "%s: Download Packet successfully!\n", __FUNCTION__); ++ hciprintf(stderr, "%s: Download Packet successfully!\n", __FUNCTION__); + break; + case PATCH_LEN_ERROR: + fprintf(stderr, "%s: Invalid patch length argument passed for EDL PATCH " +@@ -318,7 +318,7 @@ int get_vs_hci_event(unsigned char *rsp) + break; + + case NVM_ACCESS_CODE: +- fprintf(stderr, "%s: NVM Access Code!!!\n", __FUNCTION__); ++ hciprintf(stderr, "%s: NVM Access Code!!!\n", __FUNCTION__); + err = HCI_CMD_SUCCESS; + break; + case EDL_SET_BAUDRATE_RSP_EVT: +@@ -362,7 +362,7 @@ int wait_for_data(int fd, int maxTimeOut) + return -1; + } + else +- fprintf(stderr, "%s: HCI-VS-EVENT available in TTY Serial buffer\n", ++ hciprintf(stderr, "%s: HCI-VS-EVENT available in TTY Serial buffer\n", + __FUNCTION__); + + return 1; +@@ -381,7 +381,7 @@ int read_vs_hci_event(int fd, unsigned char* buf, int size) + return -1; + } + +- fprintf(stderr, "%s: Wait for HCI-Vendor Specfic Event from SOC\n", ++ hciprintf(stderr, "%s: Wait for HCI-Vendor Specfic Event from SOC\n", + __FUNCTION__); + + /* Check whether data is available in TTY buffer before calling read() */ +@@ -425,7 +425,7 @@ int read_vs_hci_event(int fd, unsigned char* buf, int size) + } + count++; + +- fprintf(stderr, "%s: Wait for HCI-Vendor Specfic Event from SOC, buf[0] - 0x%x\n", __FUNCTION__, buf[0]); ++ hciprintf(stderr, "%s: Wait for HCI-Vendor Specfic Event from SOC, buf[0] - 0x%x\n", __FUNCTION__, buf[0]); + /* The next two bytes are the event code and parameter total length. */ + while (count < 3) { + r = read(fd, buf + count, 3 - count); +@@ -436,7 +436,7 @@ int read_vs_hci_event(int fd, unsigned char* buf, int size) + count += r; + } + +- fprintf(stderr, "%s: Wait for HCI-Vendor Specfic Event from SOC, buf[1] - 0x%x\n", __FUNCTION__, buf[1]); ++ hciprintf(stderr, "%s: Wait for HCI-Vendor Specfic Event from SOC, buf[1] - 0x%x\n", __FUNCTION__, buf[1]); + /* Now we read the parameters. */ + if (buf[2] < (size - 3)) + remain = buf[2]; +@@ -454,7 +454,7 @@ int read_vs_hci_event(int fd, unsigned char* buf, int size) + if(get_vs_hci_event(buf) != HCI_CMD_SUCCESS) + return -1; + +- fprintf(stderr, "%s: Wait for HCI-Vendor Specfic Event from SOC, count - 0x%x\n", __FUNCTION__, count); ++ hciprintf(stderr, "%s: Wait for HCI-Vendor Specfic Event from SOC, count - 0x%x\n", __FUNCTION__, count); + return count; + } + +@@ -477,7 +477,7 @@ int hci_send_vs_cmd(int fd, unsigned char *cmd, unsigned char *rsp, int size) + fprintf(stderr, "%s: Failed to get HCI-VS Event from SOC\n", __FUNCTION__); + goto failed; + } +- fprintf(stderr, "%s: Received HCI-Vendor Specific Event from SOC\n", __FUNCTION__); ++ hciprintf(stderr, "%s: Received HCI-Vendor Specific Event from SOC\n", __FUNCTION__); + } + + failed: +@@ -507,8 +507,8 @@ void frame_hci_cmd_pkt( + case EDL_PATCH_SET_REQ_CMD: + /* Copy the patch header info as CMD params */ + memcpy(&cmd[5], phdr_buffer, PATCH_HDR_LEN); +- fprintf(stderr, "%s: Sending EDL_PATCH_SET_REQ_CMD\n", __FUNCTION__); +- fprintf(stderr, "HCI-CMD %d:\t0x%x \t0x%x \t0x%x \t0x%x \t0x%x\n", ++ hciprintf(stderr, "%s: Sending EDL_PATCH_SET_REQ_CMD\n", __FUNCTION__); ++ hciprintf(stderr, "HCI-CMD %d:\t0x%x \t0x%x \t0x%x \t0x%x \t0x%x\n", + segtNo, cmd[0], cmd[1], cmd[2], cmd[3], cmd[4]); + break; + case EDL_PATCH_DLD_REQ_CMD: +@@ -522,36 +522,36 @@ void frame_hci_cmd_pkt( + cmd[9] = EXTRACT_BYTE(p_base_addr, 3); + memcpy(&cmd[10], (pdata_buffer + offset), size); + +- fprintf(stderr, "%s: Sending EDL_PATCH_DLD_REQ_CMD: size: %d bytes\n", ++ hciprintf(stderr, "%s: Sending EDL_PATCH_DLD_REQ_CMD: size: %d bytes\n", + __FUNCTION__, size); +- fprintf(stderr, "HCI-CMD %d:\t0x%x\t0x%x\t0x%x\t0x%x\t0x%x\t0x%x\t0x%x\t" ++ hciprintf(stderr, "HCI-CMD %d:\t0x%x\t0x%x\t0x%x\t0x%x\t0x%x\t0x%x\t0x%x\t" + "0x%x\t0x%x\t0x%x\t\n", segtNo, cmd[0], cmd[1], cmd[2], + cmd[3], cmd[4], cmd[5], cmd[6], cmd[7], cmd[8], cmd[9]); + break; + case EDL_PATCH_ATCH_REQ_CMD: +- fprintf(stderr, "%s: Sending EDL_PATCH_ATTACH_REQ_CMD\n", __FUNCTION__); +- fprintf(stderr, "HCI-CMD %d:\t0x%x \t0x%x \t0x%x \t0x%x \t0x%x\n", +- segtNo, cmd[0], cmd[1], cmd[2], cmd[3], cmd[4]); ++ hciprintf(stderr, "%s: Sending EDL_PATCH_ATTACH_REQ_CMD\n", __FUNCTION__); ++ hciprintf(stderr, "HCI-CMD %d:\t0x%x \t0x%x \t0x%x \t0x%x \t0x%x\n", ++ segtNo, cmd[0], cmd[1], cmd[2], cmd[3], cmd[4]); + break; + case EDL_PATCH_RST_REQ_CMD: +- fprintf(stderr, "%s: Sending EDL_PATCH_RESET_REQ_CMD\n", __FUNCTION__); +- fprintf(stderr, "HCI-CMD %d:\t0x%x \t0x%x \t0x%x \t0x%x \t0x%x\n", +- segtNo, cmd[0], cmd[1], cmd[2], cmd[3], cmd[4]); ++ hciprintf(stderr, "%s: Sending EDL_PATCH_RESET_REQ_CMD\n", __FUNCTION__); ++ hciprintf(stderr, "HCI-CMD %d:\t0x%x \t0x%x \t0x%x \t0x%x \t0x%x\n", ++ segtNo, cmd[0], cmd[1], cmd[2], cmd[3], cmd[4]); + break; + case EDL_PATCH_VER_REQ_CMD: +- fprintf(stderr, "%s: Sending EDL_PATCH_VER_REQ_CMD\n", __FUNCTION__); +- fprintf(stderr, "HCI-CMD %d:\t0x%x \t0x%x \t0x%x \t0x%x \t0x%x\n", +- segtNo, cmd[0], cmd[1], cmd[2], cmd[3], cmd[4]); +- break; ++ hciprintf(stderr, "%s: Sending EDL_PATCH_VER_REQ_CMD\n", __FUNCTION__); ++ hciprintf(stderr, "HCI-CMD %d:\t0x%x \t0x%x \t0x%x \t0x%x \t0x%x\n", ++ segtNo, cmd[0], cmd[1], cmd[2], cmd[3], cmd[4]); ++ break; + case EDL_PATCH_TLV_REQ_CMD: +- fprintf(stderr, "%s: Sending EDL_PATCH_TLV_REQ_CMD\n", __FUNCTION__); ++ hciprintf(stderr, "%s: Sending EDL_PATCH_TLV_REQ_CMD\n", __FUNCTION__); + /* Parameter Total Length */ + cmd[3] = size +2; + + /* TLV Segment Length */ + cmd[5] = size; +- fprintf(stderr, "HCI-CMD %d:\t0x%x \t0x%x \t0x%x \t0x%x \t0x%x \t0x%x\n", +- segtNo, cmd[0], cmd[1], cmd[2], cmd[3], cmd[4], cmd[5]); ++ hciprintf(stderr, "HCI-CMD %d:\t0x%x \t0x%x \t0x%x \t0x%x \t0x%x \t0x%x\n", ++ segtNo, cmd[0], cmd[1], cmd[2], cmd[3], cmd[4], cmd[5]); + offset = (segtNo * MAX_SIZE_PER_TLV_SEGMENT); + memcpy(&cmd[6], (pdata_buffer + offset), size); + break; +@@ -601,14 +601,13 @@ void rome_extract_patch_header_info(unsigned char *buf) + rampatch_patch_info.patch_ctrl |= + (LSH(buf[index + P_CONTROL_OFFSET], (index * 8))); + +- fprintf(stderr, "PATCH_ID\t : 0x%x\n", rampatch_patch_info.patch_id); +- fprintf(stderr, "ROM_VERSION\t : 0x%x\n", rampatch_patch_info.patch_ver.rom_version); +- fprintf(stderr, "BUILD_VERSION\t : 0x%x\n", rampatch_patch_info.patch_ver.build_version); +- fprintf(stderr, "PATCH_LENGTH\t : 0x%x\n", rampatch_patch_info.patch_length); +- fprintf(stderr, "PATCH_CRC\t : 0x%x\n", rampatch_patch_info.patch_crc); +- fprintf(stderr, "PATCH_CONTROL\t : 0x%x\n", rampatch_patch_info.patch_ctrl); +- fprintf(stderr, "PATCH_BASE_ADDR\t : 0x%x\n", rampatch_patch_info.patch_base_addr); +- ++ hciprintf(stderr, "PATCH_ID\t : 0x%x\n", rampatch_patch_info.patch_id); ++ hciprintf(stderr, "ROM_VERSION\t : 0x%x\n", rampatch_patch_info.patch_ver.rom_version); ++ hciprintf(stderr, "BUILD_VERSION\t : 0x%x\n", rampatch_patch_info.patch_ver.build_version); ++ hciprintf(stderr, "PATCH_LENGTH\t : 0x%x\n", rampatch_patch_info.patch_length); ++ hciprintf(stderr, "PATCH_CRC\t : 0x%x\n", rampatch_patch_info.patch_crc); ++ hciprintf(stderr, "PATCH_CONTROL\t : 0x%x\n", rampatch_patch_info.patch_ctrl); ++ hciprintf(stderr, "PATCH_BASE_ADDR\t : 0x%x\n", rampatch_patch_info.patch_base_addr); + } + + int rome_edl_set_patch_request(int fd) +@@ -636,7 +635,7 @@ int rome_edl_set_patch_request(int fd) + fprintf(stderr, "%s: Failed to set patch info on Controller\n", __FUNCTION__); + goto error; + } +- fprintf(stderr, "%s: Successfully set patch info on the Controller\n", __FUNCTION__); ++ hciprintf(stderr, "%s: Successfully set patch info on the Controller\n", __FUNCTION__); + error: + return err; + } +@@ -651,7 +650,7 @@ int rome_edl_patch_download_request(int fd) + + no_of_patch_segment = (rampatch_patch_info.patch_length / + MAX_DATA_PER_SEGMENT); +- fprintf(stderr, "%s: %d patch segments to be d'loaded from patch base addr: 0x%x\n", ++ hciprintf(stderr, "%s: %d patch segments to be d'loaded from patch base addr: 0x%x\n", + __FUNCTION__, no_of_patch_segment, + rampatch_patch_info.patch_base_addr); + +@@ -663,8 +662,7 @@ int rome_edl_patch_download_request(int fd) + * segments with a max. size of 239 bytes + */ + for (index = 1; index <= no_of_patch_segment; index++) { +- +- fprintf(stderr, "%s: Downloading patch segment: %d\n", __FUNCTION__, index); ++ hciprintf(stderr, "%s: Downloading patch segment: %d\n", __FUNCTION__, index); + + /* Frame the HCI CMD PKT to be sent to Controller*/ + frame_hci_cmd_pkt(cmd, EDL_PATCH_DLD_REQ_CMD, p_base_addr, +@@ -690,8 +688,9 @@ int rome_edl_patch_download_request(int fd) + __FUNCTION__, index); + goto error; + } +- fprintf(stderr, "%s: Successfully downloaded patch segment: %d\n", +- __FUNCTION__, index); ++ ++ hciprintf(stderr, "%s: Successfully downloaded patch segment: %d\n", ++ __FUNCTION__, index); + } + + /* Check if any pending patch data to be sent */ +@@ -725,8 +724,8 @@ int rome_edl_patch_download_request(int fd) + goto error; + } + +- fprintf(stderr, "%s: Successfully downloaded patch segment: %d\n", +- __FUNCTION__, index); ++ hciprintf(stderr, "%s: Successfully downloaded patch segment: %d\n", ++ __FUNCTION__, index); + } + + error: +@@ -740,7 +739,7 @@ static int rome_download_rampatch(int fd) + fprintf(stderr, "%s:\n", __FUNCTION__); + + /* Get handle to the RAMPATCH binary file */ +- fprintf(stderr, "%s: Getting handle to the RAMPATCH binary file from %s\n", __FUNCTION__, ROME_FW_PATH); ++ hciprintf(stderr, "%s: Getting handle to the RAMPATCH binary file from %s\n", __FUNCTION__, ROME_FW_PATH); + file = fopen(ROME_FW_PATH, "r"); + if (file == NULL) { + fprintf(stderr, "%s: Failed to get handle to the RAMPATCH bin file!\n", +@@ -749,7 +748,7 @@ static int rome_download_rampatch(int fd) + } + + /* Allocate memory for the patch headder info */ +- fprintf(stderr, "%s: Allocating memory for the patch header\n", __FUNCTION__); ++ hciprintf(stderr, "%s: Allocating memory for the patch header\n", __FUNCTION__); + phdr_buffer = (unsigned char *) malloc(PATCH_HDR_LEN + 1); + if (phdr_buffer == NULL) { + fprintf(stderr, "%s: Failed to allocate memory for patch header\n", +@@ -760,7 +759,7 @@ static int rome_download_rampatch(int fd) + phdr_buffer[index] = 0x0; + + /* Read 28 bytes of patch header information */ +- fprintf(stderr, "%s: Reading patch header info\n", __FUNCTION__); ++ hciprintf(stderr, "%s: Reading patch header info\n", __FUNCTION__); + index = 0; + do { + c = fgetc (file); +@@ -768,7 +767,7 @@ static int rome_download_rampatch(int fd) + } while (index != PATCH_HDR_LEN); + + /* Save the patch header info into local structure */ +- fprintf(stderr, "%s: Saving patch hdr. info\n", __FUNCTION__); ++ hciprintf(stderr, "%s: Saving patch hdr. info\n", __FUNCTION__); + rome_extract_patch_header_info((unsigned char *)phdr_buffer); + + /* Set the patch header info onto the Controller */ +@@ -779,7 +778,7 @@ static int rome_download_rampatch(int fd) + } + + /* Allocate memory for the patch payload */ +- fprintf(stderr, "%s: Allocating memory for patch payload\n", __FUNCTION__); ++ hciprintf(stderr, "%s: Allocating memory for patch payload\n", __FUNCTION__); + size = rampatch_patch_info.patch_length; + pdata_buffer = (unsigned char *) malloc(size+1); + if (pdata_buffer == NULL) { +@@ -791,7 +790,7 @@ static int rome_download_rampatch(int fd) + pdata_buffer[index] = 0x0; + + /* Read the patch data from Rampatch binary image */ +- fprintf(stderr, "%s: Reading patch payload from RAMPATCH file\n", __FUNCTION__); ++ hciprintf(stderr, "%s: Reading patch payload from RAMPATCH file\n", __FUNCTION__); + index = 0; + do { + c = fgetc (file); +@@ -924,7 +923,7 @@ int rome_get_tlv_file(char *file_path, unsigned char * bdaddr) + unsigned char *nvm_byte_ptr; + unsigned short pcm_value, ibs_value; + +- fprintf(stderr, "File Open (%s)\n", file_path); ++ hciprintf(stderr, "File Open (%s)\n", file_path); + pFile = fopen ( file_path , "r" ); + if (pFile==NULL) {; + fprintf(stderr, "%s File Open Fail\n", file_path); +@@ -967,30 +966,30 @@ int rome_get_tlv_file(char *file_path, unsigned char * bdaddr) + gtlv_dwndcfg = ptlv_header->tlv.patch.dwnd_cfg; + + if(ptlv_header->tlv_type == TLV_TYPE_PATCH){ +- fprintf(stderr, "====================================================\n"); +- fprintf(stderr, "TLV Type\t\t\t : 0x%x\n", ptlv_header->tlv_type); +- fprintf(stderr, "Length\t\t\t : %d bytes\n", (ptlv_header->tlv_length1) | +- (ptlv_header->tlv_length2 << 8) | +- (ptlv_header->tlv_length3 << 16)); +- fprintf(stderr, "Total Length\t\t\t : %d bytes\n", ptlv_header->tlv.patch.tlv_data_len); +- fprintf(stderr, "Patch Data Length\t\t\t : %d bytes\n",ptlv_header->tlv.patch.tlv_patch_data_len); +- fprintf(stderr, "Signing Format Version\t : 0x%x\n", ptlv_header->tlv.patch.sign_ver); +- fprintf(stderr, "Signature Algorithm\t\t : 0x%x\n", ptlv_header->tlv.patch.sign_algorithm); +- fprintf(stderr, "Event Handling\t\t\t : 0x%x", ptlv_header->tlv.patch.dwnd_cfg); +- fprintf(stderr, "Reserved\t\t\t : 0x%x\n", ptlv_header->tlv.patch.reserved1); +- fprintf(stderr, "Product ID\t\t\t : 0x%04x\n", ptlv_header->tlv.patch.prod_id); +- fprintf(stderr, "Rom Build Version\t\t : 0x%04x\n", ptlv_header->tlv.patch.build_ver); +- fprintf(stderr, "Patch Version\t\t : 0x%04x\n", ptlv_header->tlv.patch.patch_ver); +- fprintf(stderr, "Reserved\t\t\t : 0x%x\n", ptlv_header->tlv.patch.reserved2); +- fprintf(stderr, "Patch Entry Address\t\t : 0x%x\n", (ptlv_header->tlv.patch.patch_entry_addr)); +- fprintf(stderr, "====================================================\n"); +- ++ hciprintf(stderr, "====================================================\n"); ++ hciprintf(stderr, "TLV Type\t\t\t : 0x%x\n", ptlv_header->tlv_type); ++ hciprintf(stderr, "Length\t\t\t : %d bytes\n", (ptlv_header->tlv_length1) | ++ (ptlv_header->tlv_length2 << 8) | ++ (ptlv_header->tlv_length3 << 16)); ++ hciprintf(stderr, "Total Length\t\t\t : %d bytes\n", ptlv_header->tlv.patch.tlv_data_len); ++ hciprintf(stderr, "Patch Data Length\t\t\t : %d bytes\n",ptlv_header->tlv.patch.tlv_patch_data_len); ++ hciprintf(stderr, "Signing Format Version\t : 0x%x\n", ptlv_header->tlv.patch.sign_ver); ++ hciprintf(stderr, "Signature Algorithm\t\t : 0x%x\n", ptlv_header->tlv.patch.sign_algorithm); ++ hciprintf(stderr, "Event Handling\t\t\t : 0x%x", ptlv_header->tlv.patch.dwnd_cfg); ++ hciprintf(stderr, "Reserved\t\t\t : 0x%x\n", ptlv_header->tlv.patch.reserved1); ++ hciprintf(stderr, "Product ID\t\t\t : 0x%04x\n", ptlv_header->tlv.patch.prod_id); ++ hciprintf(stderr, "Rom Build Version\t\t : 0x%04x\n", ptlv_header->tlv.patch.build_ver); ++ hciprintf(stderr, "Patch Version\t\t : 0x%04x\n", ptlv_header->tlv.patch.patch_ver); ++ hciprintf(stderr, "Reserved\t\t\t : 0x%x\n", ptlv_header->tlv.patch.reserved2); ++ hciprintf(stderr, "Patch Entry Address\t\t : 0x%x\n", (ptlv_header->tlv.patch.patch_entry_addr)); ++ hciprintf(stderr, "====================================================\n"); + } else if(ptlv_header->tlv_type == TLV_TYPE_NVM) { +- fprintf(stderr, "====================================================\n"); +- fprintf(stderr, "TLV Type\t\t\t : 0x%x\n", ptlv_header->tlv_type); +- fprintf(stderr, "Length\t\t\t : %d bytes\n", nvm_length = (ptlv_header->tlv_length1) | +- (ptlv_header->tlv_length2 << 8) | +- (ptlv_header->tlv_length3 << 16)); ++ nvm_length = (ptlv_header->tlv_length1) | ++ (ptlv_header->tlv_length2 << 8) | ++ (ptlv_header->tlv_length3 << 16); ++ hciprintf(stderr, "====================================================\n"); ++ hciprintf(stderr, "TLV Type\t\t\t : 0x%x\n", ptlv_header->tlv_type); ++ hciprintf(stderr, "Length\t\t\t : %d bytes\n", nvm_length); + + if(nvm_length <= 0) + return readSize; +@@ -998,11 +997,11 @@ int rome_get_tlv_file(char *file_path, unsigned char * bdaddr) + for(nvm_byte_ptr=(unsigned char *)(nvm_ptr = &(ptlv_header->tlv.nvm)), nvm_index=0; + nvm_index < nvm_length ; nvm_ptr = (tlv_nvm_hdr *) nvm_byte_ptr) + { +- fprintf(stderr, "TAG ID\t\t\t : %d\n", nvm_ptr->tag_id); +- fprintf(stderr, "TAG Length\t\t\t : %d\n", nvm_tag_len = nvm_ptr->tag_len); +- fprintf(stderr, "TAG Pointer\t\t\t : %d\n", nvm_ptr->tag_ptr); +- fprintf(stderr, "TAG Extended Flag\t\t : %d\n", nvm_ptr->tag_ex_flag); +- ++ nvm_tag_len = nvm_ptr->tag_len; ++ hciprintf(stderr, "TAG ID\t\t\t : %d\n", nvm_ptr->tag_id); ++ hciprintf(stderr, "TAG Length\t\t\t : %d\n", nvm_tag_len); ++ hciprintf(stderr, "TAG Pointer\t\t\t : %d\n", nvm_ptr->tag_ptr); ++ hciprintf(stderr, "TAG Extended Flag\t\t : %d\n", nvm_ptr->tag_ex_flag); + /* Increase nvm_index to NVM data */ + nvm_index+=sizeof(tlv_nvm_hdr); + nvm_byte_ptr+=sizeof(tlv_nvm_hdr); +@@ -1058,7 +1057,7 @@ int rome_get_tlv_file(char *file_path, unsigned char * bdaddr) + snprintf((char *) data_buf, PRINT_BUF_SIZE, "%s%.02x ", + (char *)data_buf, *(nvm_byte_ptr + i)); + +- fprintf(stderr, "TAG Data\t\t\t : %s\n", data_buf); ++ hciprintf(stderr, "TAG Data\t\t\t : %s\n", data_buf); + + /* Clear buffer */ + memset(data_buf, 0x0, PRINT_BUF_SIZE); +@@ -1068,7 +1067,7 @@ int rome_get_tlv_file(char *file_path, unsigned char * bdaddr) + nvm_byte_ptr +=nvm_ptr->tag_len; + } + +- fprintf(stderr, "====================================================\n"); ++ hciprintf(stderr, "====================================================\n"); + + } else { + fprintf(stderr, "TLV Header type is unknown (%d) \n", ptlv_header->tlv_type); +@@ -1083,7 +1082,7 @@ int rome_tlv_dnld_segment(int fd, int index, int seg_size, unsigned char wait_cc + unsigned char cmd[HCI_MAX_CMD_SIZE]; + unsigned char rsp[HCI_MAX_EVENT_SIZE]; + +- fprintf(stderr, "%s: Downloading TLV Patch segment no.%d, size:%d wait_cc_evt = 0x%x\n", __FUNCTION__, index, seg_size, wait_cc_evt); ++ hciprintf(stderr, "%s: Downloading TLV Patch segment no.%d, size:%d wait_cc_evt = 0x%x\n", __FUNCTION__, index, seg_size, wait_cc_evt); + + /* Frame the HCI CMD PKT to be sent to Controller*/ + frame_hci_cmd_pkt(cmd, EDL_PATCH_TLV_REQ_CMD, 0, index, seg_size); +@@ -1109,7 +1108,7 @@ int rome_tlv_dnld_segment(int fd, int index, int seg_size, unsigned char wait_cc + } + } + +- fprintf(stderr, "%s: Successfully downloaded patch segment: %d\n", __FUNCTION__, index); ++ hciprintf(stderr, "%s: Successfully downloaded patch segment: %d\n", __FUNCTION__, index); + return err; + } + +@@ -1123,7 +1122,7 @@ int rome_tlv_dnld_req(int fd, int tlv_size) + remain_size = (tlv_size < MAX_SIZE_PER_TLV_SEGMENT)?\ + tlv_size: (tlv_size%MAX_SIZE_PER_TLV_SEGMENT); + +- fprintf(stderr, "%s: TLV size: %d, Total Seg num: %d, remain size: %d\n", ++ hciprintf(stderr, "%s: TLV size: %d, Total Seg num: %d, remain size: %d\n", + __FUNCTION__,tlv_size, total_segment, remain_size); + + if (gTlv_type == TLV_TYPE_PATCH) { +@@ -1137,12 +1136,12 @@ int rome_tlv_dnld_req(int fd, int tlv_size) + case ROME_SKIP_EVT_NONE: + wait_vsc_evt = TRUE; + wait_cc_evt = TRUE; +- fprintf(stderr, "%s: Event handling type: ROME_SKIP_EVT_NONE", __func__); ++ hciprintf(stderr, "%s: Event handling type: ROME_SKIP_EVT_NONE", __func__); + break; + case ROME_SKIP_EVT_VSE_CC: + wait_vsc_evt = FALSE; + wait_cc_evt = FALSE; +- fprintf(stderr, "%s: Event handling type: ROME_SKIP_EVT_VSE_CC", __func__); ++ hciprintf(stderr, "%s: Event handling type: ROME_SKIP_EVT_VSE_CC", __func__); + break; + /* Not handled for now */ + case ROME_SKIP_EVT_VSE: +@@ -1479,14 +1478,14 @@ int rome_1_0_nvm_tag_dnld(int fd) + }; + #endif + +- fprintf(stderr, "%s: Start sending NVM Tags (ver: 0x%x)\n", __FUNCTION__, (unsigned int) NVM_VERSION); ++ hciprintf(stderr, "%s: Start sending NVM Tags (ver: 0x%x)\n", __FUNCTION__, (unsigned int) NVM_VERSION); + + for (i=0; (i < MAX_TAG_CMD) && (cmds[i][0] != TAG_END); i++) + { + /* Write BD Address */ + if(cmds[i][TAG_NUM_OFFSET] == TAG_NUM_2){ + memcpy(&cmds[i][TAG_BDADDR_OFFSET], vnd_local_bd_addr, 6); +- fprintf(stderr, "BD Address: %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n", ++ hciprintf(stderr, "BD Address: %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n", + cmds[i][TAG_BDADDR_OFFSET ], cmds[i][TAG_BDADDR_OFFSET + 1], + cmds[i][TAG_BDADDR_OFFSET + 2], cmds[i][TAG_BDADDR_OFFSET + 3], + cmds[i][TAG_BDADDR_OFFSET + 4], cmds[i][TAG_BDADDR_OFFSET + 5]); +@@ -1598,7 +1597,7 @@ int rome_set_baudrate_req(int fd, int local_baud_rate, + flow_control(fd, MSM_DISABLE_FLOW_CTRL); + + /* Send the HCI command packet to UART for transmission */ +- fprintf(stderr, "%s: HCI CMD: 0x%x 0x%x 0x%x 0x%x 0x%x\n", __FUNCTION__, cmd[0], cmd[1], cmd[2], cmd[3],cmd[4]) ; ++ hciprintf(stderr, "%s: HCI CMD: 0x%x 0x%x 0x%x 0x%x 0x%x\n", __FUNCTION__, cmd[0], cmd[1], cmd[2], cmd[3],cmd[4]) ; + err = write(fd, cmd, size); + if (err != size) { + fprintf(stderr, "%s: Send failed with ret value: %d\n", __FUNCTION__, err); +@@ -1616,7 +1615,7 @@ int rome_set_baudrate_req(int fd, int local_baud_rate, + goto error; + } + +- fprintf(stderr, "%s: Received HCI-Vendor Specific Event from SOC\n", __FUNCTION__); ++ hciprintf(stderr, "%s: Received HCI-Vendor Specific Event from SOC\n", __FUNCTION__); + + /* Wait for command complete event */ + err = read_hci_event(fd, rsp, HCI_MAX_EVENT_SIZE); +@@ -1624,7 +1623,6 @@ int rome_set_baudrate_req(int fd, int local_baud_rate, + fprintf(stderr, "%s: Failed to set patch info on Controller\n", __FUNCTION__); + goto error; + } +- fprintf(stderr, "%s\n", __FUNCTION__); + error: + return err; + +@@ -1639,7 +1637,7 @@ int rome_hci_reset_req(int fd, char baud, int hwfc) + hci_command_hdr *cmd_hdr; + int flags; + +- fprintf(stderr, "%s: HCI RESET \n", __FUNCTION__); ++ hciprintf(stderr, "%s: HCI RESET \n", __FUNCTION__); + + memset(cmd, 0x0, HCI_MAX_CMD_SIZE); + +@@ -1656,7 +1654,7 @@ int rome_hci_reset_req(int fd, char baud, int hwfc) + flow_control(fd, MSM_DISABLE_FLOW_CTRL); + + /* Send the HCI command packet to UART for transmission */ +- fprintf(stderr, "%s: HCI CMD: 0x%x 0x%x 0x%x 0x%x\n", __FUNCTION__, cmd[0], cmd[1], cmd[2], cmd[3]); ++ hciprintf(stderr, "%s: HCI CMD: 0x%x 0x%x 0x%x 0x%x\n", __FUNCTION__, cmd[0], cmd[1], cmd[2], cmd[3]); + err = write(fd, cmd, size); + if (err != size) { + fprintf(stderr, "%s: Send failed with ret value: %d\n", __FUNCTION__, err); +@@ -1768,28 +1766,28 @@ int qca_soc_init(int fd, int speed, char *bdaddr , struct termios * ti) + goto error; + } + +- fprintf(stderr, "%s: Rome Version (0x%08x)\n", __FUNCTION__, rome_ver); ++ hciprintf(stderr, "%s: Rome Version (0x%08x)\n", __FUNCTION__, rome_ver); + + switch (rome_ver){ + case ROME_VER_1_0: + { + /* Set and Download the RAMPATCH */ +- fprintf(stderr, "%s: Setting Patch Header & Downloading Patches\n", __FUNCTION__); ++ hciprintf(stderr, "%s: Setting Patch Header & Downloading Patches\n", __FUNCTION__); + err = rome_download_rampatch(fd); + if (err < 0) { + fprintf(stderr, "%s: DOWNLOAD RAMPATCH failed!\n", __FUNCTION__); + goto error; + } +- fprintf(stderr, "%s: DOWNLOAD RAMPTACH complete\n", __FUNCTION__); ++ hciprintf(stderr, "%s: DOWNLOAD RAMPTACH complete\n", __FUNCTION__); + + /* Attach the RAMPATCH */ +- fprintf(stderr, "%s: Attaching the patches\n", __FUNCTION__); ++ hciprintf(stderr, "%s: Attaching the patches\n", __FUNCTION__); + err = rome_attach_rampatch(fd); + if (err < 0) { + fprintf(stderr, "%s: ATTACH RAMPATCH failed!\n", __FUNCTION__); + goto error; + } +- fprintf(stderr, "%s: ATTACH RAMPTACH complete\n", __FUNCTION__); ++ hciprintf(stderr, "%s: ATTACH RAMPTACH complete\n", __FUNCTION__); + + /* Send Reset */ + size = (HCI_CMD_IND + HCI_COMMAND_HDR_SIZE + EDL_PATCH_CMD_LEN); +@@ -1800,7 +1798,7 @@ int qca_soc_init(int fd, int speed, char *bdaddr , struct termios * ti) + } + + /* NVM download */ +- fprintf(stderr, "%s: Downloading NVM\n", __FUNCTION__); ++ hciprintf(stderr, "%s: Downloading NVM\n", __FUNCTION__); + err = rome_1_0_nvm_tag_dnld(fd); + if ( err <0 ) { + fprintf(stderr, "Downloading NVM Failed !!\n"); +@@ -1817,7 +1815,7 @@ int qca_soc_init(int fd, int speed, char *bdaddr , struct termios * ti) + } + } + +- fprintf(stderr, "HCI Reset is done\n"); ++ hciprintf(stderr, "HCI Reset is done\n"); + } + break; + case ROME_VER_1_1: +@@ -1874,7 +1872,7 @@ download: + fprintf(stderr, "%s: Download TLV file failed!\n", __FUNCTION__); + goto error; + } +- fprintf(stderr, "%s: Download TLV file successfully \n", __FUNCTION__); ++ hciprintf(stderr, "%s: Download TLV file successfully \n", __FUNCTION__); + + /* + * Overriding the baud rate value in NVM file with the user +@@ -1893,7 +1891,7 @@ download: + fprintf(stderr, "HCI Reset Failed !!!\n"); + goto error; + } +- fprintf(stderr, "HCI Reset is done\n"); ++ hciprintf(stderr, "HCI Reset is done\n"); + + break; + case ROME_VER_UNKNOWN: diff --git a/meta-digi-dey/recipes-connectivity/bluez/bluez5_5.41.bbappend b/meta-digi-dey/recipes-connectivity/bluez/bluez5_5.41.bbappend index 02ac853df..2bb3bf356 100644 --- a/meta-digi-dey/recipes-connectivity/bluez/bluez5_5.41.bbappend +++ b/meta-digi-dey/recipes-connectivity/bluez/bluez5_5.41.bbappend @@ -29,6 +29,9 @@ SRC_URI_append_ccimx6ul = " \ file://0019-bluetooth-Fix-flow-control-operation.patch \ file://0020-Adding-MDM-specific-code-under-_PLATFORM_MDM_.patch \ file://0021-Bluetooth-Fix-static-analysis-issues.patch \ + file://0022-hciattach_rome-Respect-the-user-indication-for-noflo.patch \ + file://0023-hciattach-If-the-user-supplies-a-bdaddr-use-it.patch \ + file://0024-hciattach-Add-verbosity-option.patch \ " inherit update-rc.d