Return-Path: Message-ID: <4704DFAC.2050709@silicom.fr> Date: Thu, 04 Oct 2007 14:42:20 +0200 From: Fabien Chevalier MIME-Version: 1.0 To: BlueZ development CC: denis.kenzior@trolltech.com, Marcel Holtmann Subject: Re: [Bluez-devel] [PATCH] makes STLC2500 start without files download & other cleanup References: <47049EBF.2000103@silicom.fr> In-Reply-To: <47049EBF.2000103@silicom.fr> Content-Type: multipart/mixed; boundary="------------060406010207060308090302" List-ID: This is a multi-part message in MIME format. --------------060406010207060308090302 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit All, I didn't notice the ST firmware was in bluez-firmware package. So i finally was able to regression test it. ==> Result is it still works fine with firmware download too. Cheers, Fabien > All, > > I cooked up a patch for the STLC2500 startup sequence. > The changes are listed below: > > * Makes the firmware & parameters download optional : even though those > are supposed to be mandatory, practive shows that the chip can run > without them. > * Cleanup the speed setting step : call the Ericsson routines directly > instead of duplicating the code. > * Reset the chip only once after all settings & downloads have been done. > > I couldn't regression test the file download stuff as i don't have any > firmware patch files or parameters files to download. > > Denis, it would be great if you could give this patch a try on a > Greenphone, see if i didn't break anything :-) > > Cheers, > > Fabien > > > > ------------------------------------------------------------------------ > > --- tools/hciattach.c (.../trunk) (révision 89) > +++ tools/hciattach.c (.../branches/20070928_1730) (révision 89) > @@ -829,62 +829,20 @@ > > extern int stlc2500_init(int fd, bdaddr_t *bdaddr); > > static int stlc2500(int fd, struct uart_t *u, struct termios *ti) > { > bdaddr_t bdaddr; > - char cmd[5]; > unsigned char resp[10]; > int n; > + int rvalue; > > - /* STLC2500 Set Baud Rate stuff */ > - /* We should set the baud rate first, so the firmware download */ > - /* goes much faster */ > - > - /* STLC2500 Seems to support the Ericsson set baud rate stuff */ > - /* It should also support the ST Set Baud Rate command */ > - /* (as in st() function above, but those commands never succeed */ > - cmd[0] = HCI_COMMAND_PKT; > - cmd[1] = 0x09; > - cmd[2] = 0xfc; > - cmd[3] = 0x01; > - > - switch (u->speed) { > - case 57600: > - cmd[4] = 0x03; > - break; > - case 115200: > - cmd[4] = 0x02; > - break; > - case 230400: > - cmd[4] = 0x01; > - break; > - case 460800: > - cmd[4] = 0x00; > - break; > - case 921600: > - cmd[4] = 0x20; > - break; > - default: > - cmd[4] = 0x02; > - u->speed = 115200; > - break; > - } > - > -#ifdef STLC2500_DEBUG > - fprintf(stderr, "Sending Baud Rate %02x\n", cmd[4]); > -#endif > - /* Send initialization command */ > - if (write(fd, cmd, 5) != 5) { > - perror("Failed to write init command"); > - return -1; > - } > - > - /* Need to wait here to give a chance for the device to set baud */ > - /* But no more than 0.5 seconds */ > - usleep(200000); > + /* STLC2500 has an ericsson core */ > + rvalue = ericsson(fd, u, ti); > + if(rvalue != 0) > + return rvalue; > > #ifdef STLC2500_DEBUG > fprintf(stderr, "Setting speed\n"); > #endif > if (set_speed(fd, ti, u->speed) < 0) { > perror("Can't set baud rate"); > Index: tools/hciattach_st.c > =================================================================== > --- tools/hciattach_st.c (.../trunk) (révision 89) > +++ tools/hciattach_st.c (.../branches/20070928_1730) (révision 89) > @@ -119,13 +119,13 @@ > DIR *dir; > struct dirent *d; > char pathname[PATH_MAX], filename[NAME_MAX], prefix[20]; > unsigned char cmd[256]; > unsigned char buf[256]; > uint8_t seqnum = 0; > - int fd, size, len; > + int fd, size, len, found_fw_file; > > memset(filename, 0, sizeof(filename)); > > snprintf(prefix, sizeof(prefix), "STLC2500_R%d_%02d_", > version >> 8, version & 0xff); > > @@ -135,12 +135,13 @@ > strcpy(pathname, "."); > dir = opendir(pathname); > if (!dir) > return -errno; > } > > + found_fw_file = 0; > while (1) { > d = readdir(dir); > if (!d) > break; > > if (strncmp(d->d_name + strlen(d->d_name) - strlen(suffix), > @@ -149,16 +150,20 @@ > > if (strncmp(d->d_name, prefix, strlen(prefix))) > continue; > > snprintf(filename, sizeof(filename), "%s/%s", > pathname, d->d_name); > + found_fw_file = 1; > } > > closedir(dir); > > + if(!found_fw_file) > + return -ENOENT; > + > printf("Loading file %s\n", filename); > > fd = open(filename, O_RDONLY); > if (fd < 0) { > perror("Can't open firmware file"); > return -errno; > @@ -191,47 +196,54 @@ > int stlc2500_init(int dd, bdaddr_t *bdaddr) > { > unsigned char cmd[16]; > unsigned char buf[254]; > uint16_t version; > int len; > + int err; > > - len = do_command(dd, 0x04, 0x0001, NULL, 0, buf, sizeof(buf)); > + /* Hci_Cmd_Ericsson_Read_Revision_Information */ > + len = do_command(dd, 0xff, 0x000f, NULL, 0, buf, sizeof(buf)); > if (len < 0) > return -1; > > - version = buf[2] << 8 | buf[1]; > - > - if (load_file(dd, version, ".ptc") < 0) > - return -1; > + printf("%s\n", buf); > > - len = do_command(dd, 0x03, 0x0003, NULL, 0, buf, sizeof(buf)); > + /* HCI_Read_Local_Version_Information */ > + len = do_command(dd, 0x04, 0x0001, NULL, 0, buf, sizeof(buf)); > if (len < 0) > return -1; > > - if (load_file(dd, buf[2] << 8 | buf[1], ".ssf") < 0) > - return -1; > - > - len = do_command(dd, 0x03, 0x0003, NULL, 0, buf, sizeof(buf)); > - if (len < 0) > - return -1; > + version = buf[2] << 8 | buf[1]; > > - len = do_command(dd, 0xff, 0x000f, NULL, 0, buf, sizeof(buf)); > - if (len < 0) > - return -1; > + err = load_file(dd, version, ".ptc"); > + if(err < 0) { > + if(err == -ENOENT) > + fprintf(stderr, "No ROM patch file loaded.\n"); > + else > + return -1; > + } > > - printf("%s\n", buf); > + err = load_file(dd, buf[2] << 8 | buf[1], ".ssf"); > + if(err < 0) { > + if(err == -ENOENT) > + fprintf(stderr, "No static settings file loaded.\n"); > + else > + return -1; > + } > > cmd[0] = 0xfe; > cmd[1] = 0x06; > bacpy((bdaddr_t *) (cmd + 2), bdaddr); > > + /* Hci_Cmd_ST_Store_In_NVDS */ > len = do_command(dd, 0xff, 0x0022, cmd, 8, buf, sizeof(buf)); > if (len < 0) > return -1; > > + /* HCI_Reset : applies parameters*/ > len = do_command(dd, 0x03, 0x0003, NULL, 0, buf, sizeof(buf)); > if (len < 0) > return -1; > > return 0; > } > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Splunk Inc. > Still grepping through log files to find problems? Stop. > Now Search log events and configuration files using AJAX and a browser. > Download your FREE copy of Splunk now >> http://get.splunk.com/ > > > ------------------------------------------------------------------------ > > _______________________________________________ > Bluez-devel mailing list > Bluez-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/bluez-devel --------------060406010207060308090302 Content-Type: text/x-vcard; charset=utf-8; name="fchevalier.vcf" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="fchevalier.vcf" YmVnaW46dmNhcmQNCmZuOkZhYmllbiBDSEVWQUxJRVINCm46Q0hFVkFMSUVSO0ZhYmllbg0K b3JnOlNJTElDT00NCmFkcjo7OzQgcnVlIGRlIEpvdWFuZXQ7IFJFTk5FUyBBVEFMQU5URTs7 MzU3MDA7RlJBTkNFDQplbWFpbDtpbnRlcm5ldDpmY2hldmFsaWVyQHNpbGljb20uZnINCnRp dGxlOlNvZnR3YXJlICYgU3R1ZGllcyBFbmdpbmVlcg0KdGVsO3dvcms6KzMzICgwKSAyIDk5 IDg0IDE3IDE3DQp2ZXJzaW9uOjIuMQ0KZW5kOnZjYXJkDQoNCg== --------------060406010207060308090302--