diff options
| -rw-r--r-- | tools/hciattach_tialt.c | 53 | 
1 files changed, 11 insertions, 42 deletions
| diff --git a/tools/hciattach_tialt.c b/tools/hciattach_tialt.c index 39292c04..efeae3da 100644 --- a/tools/hciattach_tialt.c +++ b/tools/hciattach_tialt.c @@ -96,72 +96,41 @@ typedef struct {  	uint32_t speed;  } __attribute__((packed)) texas_speed_change_cmd_t; -static int texas_change_speed(int fd, uint32_t speed) { -	 +static int texas_change_speed(int fd, uint32_t speed) +{  	return 0; - -	/* Send a speed-change request */ - -	texas_speed_change_cmd_t cmd; -	int n; - -	cmd.uart_prefix = HCI_COMMAND_PKT; -	cmd.hci_hdr.opcode = 0xff36; -	cmd.hci_hdr.plen = sizeof(uint32_t); -	cmd.speed = speed; - -	fprintf(stdout, "Setting speed to %d\n", speed); -	n = write(fd, &cmd, sizeof(cmd)); -	if (n < 0) { -		perror("Failed to write speed-set command"); -		return -1; -	} - -	n = write(fd, &cmd, sizeof(cmd)); -	if (n < 0) { -		perror("Failed to write command."); -		return -1; -	} -	if (n < (int)sizeof(cmd)) { -		fprintf(stderr, "Wanted to write %d bytes, could only write %d. " -				"Stop\n", (int)sizeof(cmd), n); -		return -1; -	} - -	/* Parse speed-change reply */ -	if (read_command_complete(fd, 0xff36, 4) < 0) { -		return -1; -	} -	fprintf(stdout, "Speed changed to %d.\n", speed);  }  static int texas_load_firmware(int fd, const char *firmware) { -	fprintf(stdout, "Opening firmware file: %s\n", firmware);  	int fw = open(firmware, O_RDONLY); + +	fprintf(stdout, "Opening firmware file: %s\n", firmware); +  	FAILIF(fw < 0,   		   "Could not open firmware file %s: %s (%d).\n",  		   firmware, strerror(errno), errno);  	fprintf(stdout, "Uploading firmware...\n");  	do { -		int nr;  		/* Read each command and wait for a response. */ +		unsigned char data[1024];  		unsigned char cmdp[1 + sizeof(hci_command_hdr)]; +		hci_command_hdr *cmd = (hci_command_hdr *)(cmdp + 1); +		int nr;  		nr = read(fw, cmdp, sizeof(cmdp));  		if (!nr)  			break; -		hci_command_hdr *cmd = (hci_command_hdr *)(cmdp + 1);  		FAILIF(nr != sizeof(cmdp), "Could not read H4 + HCI header!\n");  		FAILIF(*cmdp != HCI_COMMAND_PKT, "Command is not an H4 command packet!\n"); -		unsigned char data[1024];  		FAILIF(read(fw, data, cmd->plen) != cmd->plen,  			   "Could not read %d bytes of data for command with opcode %04x!\n",  			   cmd->plen,  			   cmd->opcode);  		{ +			int nw;  #if 0  			fprintf(stdout, "\topcode 0x%04x (%d bytes of data).\n",   					cmd->opcode,  @@ -172,7 +141,7 @@ static int texas_load_firmware(int fd, const char *firmware) {  			iov_cmd[0].iov_len	= sizeof(cmdp);  			iov_cmd[1].iov_base = data;  			iov_cmd[1].iov_len	= cmd->plen; -			int nw = writev(fd, iov_cmd, 2); +			nw = writev(fd, iov_cmd, 2);  			FAILIF(nw != sizeof(cmd) +	cmd->plen,   				   "Could not send entire command (sent only %d bytes)!\n",  				   nw); @@ -249,6 +218,7 @@ int texasalt_init(int fd, int speed, struct termios *ti)  			"brf6150",  			"brf6300"  		}; +		char fw[100];  		fprintf(stderr, "Texas module LMP sub-version : 0x%04x\n", lmp_subv); @@ -261,7 +231,6 @@ int texasalt_init(int fd, int speed, struct termios *ti)  				((brf_chip > 4) ? "unknown" : c_brf_chip[brf_chip]),  				brf_chip); -		char fw[100];  		sprintf(fw, "/etc/firmware/%s.bin", c_brf_chip[brf_chip]);  		texas_load_firmware(fd, fw); | 
