Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c88d802aa3 | ||
|
|
1f01a8330b | ||
|
|
48c6be2d65 | ||
|
|
71e0eb87ea | ||
|
|
04f94d957a | ||
|
|
7d07f81ec6 | ||
|
|
55bed7e8cd | ||
|
|
e6ac56569c |
No files matched your search
@@ -2,10 +2,6 @@ sudo: false
|
||||
|
||||
language: c
|
||||
|
||||
arch:
|
||||
- AMD64
|
||||
- ppc64le
|
||||
|
||||
compiler:
|
||||
- gcc
|
||||
- clang
|
||||
|
||||
@@ -10,24 +10,24 @@
|
||||
_/ ___|_.|__|
|
||||
'`
|
||||
|
||||
0xFFFF is the Open Free Fiasco Firmware Flasher for Maemo devices. It supports
|
||||
generating and unpacking FIASCO images. It is useful for editing Maemo firmware
|
||||
packages before flashing. It supports flashing via USB any image type to a
|
||||
Maemo device and also \"cold\" flashing which means flashing dead device with
|
||||
erased bootloader. There is support for booting kernel via USB without flashing
|
||||
to NAND and also changing configuration of Maemo device (enable/disable R&D
|
||||
mode, changing HW revision strings, ...).
|
||||
0xFFFF is Open Free Fiasco Firmware Flasher for Maemo devices. It support
|
||||
generating and unpacking FIASCO images on local computer. Useful for editing
|
||||
Maemo firmware package for future flash. It support via USB flashing any image
|
||||
type to Maemo device and also \"cold\" flashing which means flashing dead device
|
||||
with erased bootloader. There is support for booting kernel via USB without
|
||||
flashing to NAND and also changing configuration of Maemo device (enable/disable
|
||||
R&D mode, changing HW revision strings, ...).
|
||||
|
||||
0xFFFF is an alternative tool to proprietary Nokia flasher-3.5 and fiasco-gen.
|
||||
0xFFFF generates compatible FIASCO images and also accepts FIASCO images
|
||||
generated by Nokia fiasco-gen.
|
||||
0xFFFF is alternative tool to proprietary Nokia flasher-3.5 and fiasco-gen.
|
||||
0xFFFF generate compatible FIASCO images and also accept FIASCO images generated
|
||||
by Nokia fiasco-gen.
|
||||
|
||||
Use it with CARE. This is an experimental tool and it can brick your device.
|
||||
It's not supposed to be stable, so Nokia will probably release incompatible
|
||||
It's not supposed to be stable, so nokia will probably release incompatible
|
||||
bootloaders to break this tool. USE IT AT YOUR OWN RISK.
|
||||
|
||||
PLEASE. Read all the documentation inside doc/* carefully before building or
|
||||
using the flasher to avoid questions, problems or so.
|
||||
PLEASE. Read carefully all the documentation inside doc/* for more information
|
||||
before building or using the flasher to avoid questions, problems or so.
|
||||
|
||||
https://github.com/pali/0xFFFF
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
VERSION = 0.9
|
||||
VERSION = 0.8
|
||||
PREFIX = /usr/local
|
||||
|
||||
# NetBSD stuff
|
||||
|
||||
Vendored
+27
@@ -0,0 +1,27 @@
|
||||
0xffff (0.8-1) fremantle; urgency=low
|
||||
|
||||
* New upstream version
|
||||
|
||||
-- Pali Rohár <pali.rohar@gmail.com> Sun, 08 Jul 2018 12:43:42 +0200
|
||||
|
||||
0xffff (0.7-1) fremantle; urgency=low
|
||||
|
||||
* New upstream version
|
||||
|
||||
-- Pali Rohár <pali.rohar@gmail.com> Sun, 25 Dec 2016 11:47:44 +0100
|
||||
|
||||
0xffff (0.6.1-1) experimental; urgency=medium
|
||||
|
||||
* New upstream release
|
||||
- Contains a few security related fixes (memory corruptions & leaks)
|
||||
- Support for -t (filter by type) for -e (dump images)
|
||||
- reattach kernel driver
|
||||
- minor fixes
|
||||
|
||||
-- Sebastian Reichel <sre@debian.org> Thu, 11 Dec 2014 21:52:53 +0100
|
||||
|
||||
0xffff (0.6-1) unstable; urgency=low
|
||||
|
||||
* This is new rewritten version of original 0xFFFF 0.5 tool
|
||||
|
||||
-- Pali Rohár <pali.rohar@gmail.com> Sun, 07 Apr 2013 15:01:50 +0200
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
7
|
||||
Vendored
+89
@@ -0,0 +1,89 @@
|
||||
Source: 0xffff
|
||||
Section: user/system
|
||||
Priority: extra
|
||||
Maintainer: Pali Rohár <pali.rohar@gmail.com>
|
||||
Standards-Version: 3.9.8
|
||||
Build-Depends: debhelper (>= 7),
|
||||
libusb-dev
|
||||
Homepage: https://github.com/pali/0xFFFF
|
||||
Vcs-Git: https://github.com/pali/0xFFFF.git
|
||||
Vcs-Browser: https://github.com/pali/0xFFFF/tree/maemo
|
||||
|
||||
Package: 0xffff
|
||||
Architecture: any
|
||||
Depends: ${misc:Depends}, ${shlibs:Depends}, mtd-utils
|
||||
Description: Open Free Fiasco Firmware Flasher
|
||||
The ‘Open Free Fiasco Firmware Flasher’ aka 0xFFFF utility implements
|
||||
a free userspace handler for the NOLO bootloader and extended features
|
||||
for flashing, dumping and getting information for the Nokia Internet
|
||||
Tablets. Thus it's a free alternative to Nokia's closed source flashing
|
||||
utility called flasher.
|
||||
.
|
||||
Supported operations currently include, but are not limited to:
|
||||
* generating and unpacking FIASCO images on local device
|
||||
* editing Maemo firmware packages
|
||||
* flashing any kind image type to Maemo devices via USB
|
||||
* "cold" flashing for devices with bricked bootloaders
|
||||
* direct kernel boot without flashing it to NAND
|
||||
* changing configuration of Maemo device (R&D flags, HW revision strings, ...)
|
||||
.
|
||||
Supported are the Nokia 770, N800, N810, N810w, N900, N950 and N9.
|
||||
XSBC-Maemo-Display-Name: 0xFFFF
|
||||
XB-Maemo-Icon-26:
|
||||
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
|
||||
5l7y6xMAAAAASUVORK5CYII=
|
||||
Vendored
+31
@@ -0,0 +1,31 @@
|
||||
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||
Source: https://github.com/pali/0xFFFF
|
||||
|
||||
Files: *
|
||||
Copyright: 2007-2012 pancake <pancake@youterm.com>
|
||||
2011 Michael Buesch <mb@bu3sch.de>
|
||||
2011-2013 Pali Rohár <pali.rohar@gmail.com>
|
||||
License: GPL-3+
|
||||
This program is free software; you can redistribute it
|
||||
and/or modify it under the terms of the GNU General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 3 of the License, or (at your option) any later
|
||||
version.
|
||||
.
|
||||
On Debian systems, the complete text of the GPL-3 can be found in
|
||||
/usr/share/common-licenses/GPL-3.
|
||||
|
||||
Files: debian/*
|
||||
Copyright: Sebastian Reichel <sre@debian.org>
|
||||
License: ISC
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted, provided that the above
|
||||
copyright notice and this permission notice appear in all copies.
|
||||
.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
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.
|
||||
Vendored
+3
@@ -0,0 +1,3 @@
|
||||
doc/
|
||||
TODO
|
||||
README
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/make -f
|
||||
|
||||
%:
|
||||
dh $@
|
||||
|
||||
override_dh_auto_install:
|
||||
dh_auto_install -- PREFIX=/usr
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
3.0 (quilt)
|
||||
Vendored
+4
@@ -0,0 +1,4 @@
|
||||
version=3
|
||||
|
||||
opts=filenamemangle=s/.+\/v?(\d\S+)\.tar\.gz/0xFFFF-$1\.tar\.gz/,pgpsigurlmangle=s/$/.asc/ \
|
||||
https://github.com/pali/0xFFFF/releases .*/0xffff_(\d\S+)\.orig\.tar\.gz
|
||||
+7
-7
@@ -191,14 +191,14 @@ static int send_2nd(usb_dev_handle * udev, struct image * image) {
|
||||
if ( ret != sizeof(omap_peripheral_msg) )
|
||||
ERROR_RETURN("Sending OMAP peripheral boot message failed", -1);
|
||||
|
||||
MSLEEP(5);
|
||||
SLEEP(5000);
|
||||
|
||||
printf("Sending 2nd X-Loader image size...\n");
|
||||
ret = usb_bulk_write(udev, USB_WRITE_EP, (char *)&image->size, 4, WRITE_TIMEOUT);
|
||||
if ( ret != 4 )
|
||||
ERROR_RETURN("Sending 2nd X-Loader image size failed", -1);
|
||||
|
||||
MSLEEP(5);
|
||||
SLEEP(5000);
|
||||
|
||||
printf("Sending 2nd X-Loader image...\n");
|
||||
printf_progressbar(0, image->size);
|
||||
@@ -217,7 +217,7 @@ static int send_2nd(usb_dev_handle * udev, struct image * image) {
|
||||
printf_progressbar(sent, image->size);
|
||||
}
|
||||
|
||||
MSLEEP(50);
|
||||
SLEEP(50000);
|
||||
return 0;
|
||||
|
||||
}
|
||||
@@ -237,7 +237,7 @@ static int send_secondary(usb_dev_handle * udev, struct image * image) {
|
||||
ERROR_RETURN("Sending X-Loader init message failed", -1);
|
||||
|
||||
printf("Waiting for X-Loader response...\n");
|
||||
MSLEEP(5);
|
||||
SLEEP(5000);
|
||||
ret = usb_bulk_read(udev, USB_READ_EP, (char *)&buffer, 4, READ_TIMEOUT); /* 4 bytes - dummy value */
|
||||
if ( ret != 4 )
|
||||
ERROR_RETURN("No response", -1);
|
||||
@@ -260,7 +260,7 @@ static int send_secondary(usb_dev_handle * udev, struct image * image) {
|
||||
}
|
||||
|
||||
printf("Waiting for X-Loader response...\n");
|
||||
MSLEEP(5);
|
||||
SLEEP(5000);
|
||||
ret = usb_bulk_read(udev, USB_READ_EP, (char *)&buffer, 4, READ_TIMEOUT); /* 4 bytes - dummy value */
|
||||
if ( ret != 4 )
|
||||
ERROR_RETURN("No response", -1);
|
||||
@@ -296,7 +296,7 @@ static int ping_timeout(usb_dev_handle * udev) {
|
||||
break;
|
||||
}
|
||||
|
||||
MSLEEP(5);
|
||||
SLEEP(5000);
|
||||
--try_read;
|
||||
|
||||
}
|
||||
@@ -413,7 +413,7 @@ int leave_cold_flash(struct usb_device_info * dev) {
|
||||
if ( ret != sizeof(omap_memory_msg) )
|
||||
ERROR_RETURN("Sending OMAP memory boot message failed", -1);
|
||||
|
||||
MSLEEP(250);
|
||||
SLEEP(1000000);
|
||||
return 0;
|
||||
|
||||
}
|
||||
+2
-7
@@ -270,11 +270,6 @@ int disk_dump_dev(int fd, const char * file) {
|
||||
size = read(fd, global_buf, need);
|
||||
if ( size == 0 )
|
||||
break;
|
||||
if ( size < 0 ) {
|
||||
PRINTF_ERROR("Reading from block device failed");
|
||||
close(fd2);
|
||||
return -1;
|
||||
}
|
||||
if ( write(fd2, global_buf, size) != size ) {
|
||||
PRINTF_ERROR("Dumping image failed");
|
||||
close(fd2);
|
||||
@@ -414,8 +409,8 @@ int disk_init(struct usb_device_info * dev) {
|
||||
|
||||
/* TODO: change 1 to 0 when disk_flash_dev will be implemented */
|
||||
|
||||
/* RX-51, RM-680 and RM-696 export MyDocs in first usb device and just first partion, so host system see whole device without MBR table */
|
||||
if ( dev->device == DEVICE_RX_51 || dev->device == DEVICE_RM_680 || dev->device == DEVICE_RM_696 )
|
||||
/* RX-51 and RM-680 export MyDocs in first usb device and just first partion, so host system see whole device without MBR table */
|
||||
if ( dev->device == DEVICE_RX_51 || dev->device == DEVICE_RM_680 )
|
||||
fd = disk_open_dev(maj1, min1, -1, 1);
|
||||
/* Other devices can export SD card as first partition and export whole mmc device, so host system will see MBR table */
|
||||
else if ( maj2 != -1 && min2 != -1 )
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@ extern int verbose;
|
||||
#define ALLOC_ERROR() do { ERROR("Cannot allocate memory"); } while (0)
|
||||
#define ALLOC_ERROR_RETURN(...) do { ALLOC_ERROR(); return __VA_ARGS__; } while (0)
|
||||
|
||||
#define MSLEEP(msec) do { nanosleep(&(struct timespec){ (msec / 1000), (1000L * 1000L * (msec % 1000)) }, NULL); } while (0)
|
||||
#define SLEEP(usec) do { struct timespec _t = { 0, (usec) }; nanosleep(&_t, NULL); } while (0)
|
||||
|
||||
static inline void * MEMMEM(void *haystack, size_t haystacklen, const void *needle, size_t needlelen) {
|
||||
for ( size_t i = 0; i < haystacklen; ++i ) {
|
||||
|
||||
+1
-3
@@ -421,8 +421,6 @@ int main(int argc, char **argv) {
|
||||
enum device detected_device = DEVICE_UNKNOWN;
|
||||
int16_t detected_hwrev = -1;
|
||||
|
||||
struct stat st;
|
||||
|
||||
int i;
|
||||
char buf[512];
|
||||
char * ptr = NULL;
|
||||
@@ -1261,7 +1259,7 @@ int main(int argc, char **argv) {
|
||||
|
||||
for ( i = 0; i < IMAGE_COUNT; ++i ) {
|
||||
|
||||
if ( ! image_tmp_name(i) || ( stat(image_tmp_name(i), &st) < 0 && errno == ENOENT ) )
|
||||
if ( ! image_tmp_name(i) )
|
||||
continue;
|
||||
|
||||
buf[0] = 0;
|
||||
|
||||
@@ -361,11 +361,6 @@ int mkii_reboot_device(struct usb_device_info * dev, int update) {
|
||||
if ( ret != 1 || msg->data[0] != 0 )
|
||||
ERROR_RETURN("Cannot send reboot command", -1);
|
||||
|
||||
if (dev->data & MKII_UPDATE_MODE)
|
||||
MSLEEP(100);
|
||||
else
|
||||
MSLEEP(3000);
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
+1
-1
@@ -541,7 +541,7 @@ int nolo_flash_image(struct usb_device_info * dev, struct image * image) {
|
||||
|
||||
}
|
||||
|
||||
MSLEEP(50);
|
||||
SLEEP(0xc350); // 0.5s
|
||||
|
||||
}
|
||||
|
||||
|
||||
+30
-39
@@ -46,21 +46,16 @@
|
||||
#endif
|
||||
|
||||
static struct usb_flash_device usb_devices[] = {
|
||||
/* vend prod i a protocol devices */
|
||||
{ 0x0421, 0x0096, -1, -1, FLASH_DISK, { DEVICE_RX_44, 0 } },
|
||||
{ 0x0421, 0x0105, 2, 1, FLASH_NOLO, { DEVICE_SU_18, DEVICE_RX_34, DEVICE_RX_44, DEVICE_RX_48, DEVICE_RX_51, DEVICE_RM_680, DEVICE_RM_696, 0 } },
|
||||
{ 0x0421, 0x0106, 0, 0, FLASH_COLD, { DEVICE_RX_51, DEVICE_RM_680, DEVICE_RM_696, 0 } },
|
||||
{ 0x0421, 0x0189, -1, -1, FLASH_DISK, { DEVICE_RX_48, 0 } },
|
||||
{ 0x0421, 0x01c7, -1, -1, FLASH_DISK, { DEVICE_RX_51, 0 } },
|
||||
{ 0x0421, 0x01c8, 1, 1, FLASH_MKII, { DEVICE_RX_51, DEVICE_RM_680, 0 } },
|
||||
{ 0x0421, 0x01c8, 1, 0, FLASH_UNKN, { DEVICE_RX_51, 0 } }, /* U-Boot mode (TTY via USB) */
|
||||
{ 0x0421, 0x03d1, -1, -1, FLASH_DISK, { DEVICE_RM_680, 0 } },
|
||||
{ 0x0421, 0x03d2, 1, 1, FLASH_MKII, { DEVICE_RM_680, 0 } },
|
||||
{ 0x0421, 0x0431, -1, -1, FLASH_DISK, { DEVICE_SU_18, DEVICE_RX_34, 0 } },
|
||||
{ 0x0421, 0x04c3, -1, -1, FLASH_DISK, { DEVICE_RX_34, 0 } },
|
||||
{ 0x0421, 0x0518, -1, -1, FLASH_DISK, { DEVICE_RM_696, 0 } },
|
||||
{ 0x0421, 0x0519, -1, -1, FLASH_UNKN, { DEVICE_RM_696, 0 } }, /* RNDIS/Ethernet mode */
|
||||
{ 0x0421, 0x051a, 2, 1, FLASH_UNKN, { DEVICE_RM_696, 0 } }, /* Sync mode (ADL protocol) */
|
||||
{ 0x0421, 0x0096, -1, -1, -1, FLASH_DISK, { DEVICE_RX_44, 0 } },
|
||||
{ 0x0421, 0x0105, 2, 1, -1, FLASH_NOLO, { DEVICE_SU_18, DEVICE_RX_34, DEVICE_RX_44, DEVICE_RX_48, DEVICE_RX_51, DEVICE_RM_680, DEVICE_RM_696, 0 } },
|
||||
{ 0x0421, 0x0106, 0, -1, -1, FLASH_COLD, { DEVICE_RX_51, DEVICE_RM_680, DEVICE_RM_696, 0 } },
|
||||
{ 0x0421, 0x0189, -1, -1, -1, FLASH_DISK, { DEVICE_RX_48, 0 } },
|
||||
{ 0x0421, 0x01c7, -1, -1, -1, FLASH_DISK, { DEVICE_RX_51, 0 } },
|
||||
{ 0x0421, 0x01c8, 1, 1, -1, FLASH_MKII, { DEVICE_RX_51, DEVICE_RM_680, 0 } },
|
||||
{ 0x0421, 0x03d1, -1, -1, -1, FLASH_DISK, { DEVICE_RM_680, 0 } },
|
||||
{ 0x0421, 0x0431, -1, -1, -1, FLASH_DISK, { DEVICE_SU_18, DEVICE_RX_34, 0 } },
|
||||
{ 0x0421, 0x04c3, -1, -1, -1, FLASH_DISK, { DEVICE_RX_34, 0 } },
|
||||
{ 0x0421, 0x3f00, 2, 1, -1, FLASH_NOLO, { DEVICE_RX_34, 0 } },
|
||||
};
|
||||
|
||||
static const char * usb_flash_protocols[] = {
|
||||
@@ -139,7 +134,7 @@ static void usb_descriptor_info_print(usb_dev_handle * udev, struct usb_device *
|
||||
buf[0] = 0;
|
||||
for ( i = 0; i < ret; i+=2 ) {
|
||||
sscanf(buf+i, "%2x", &x);
|
||||
if ( x > 31 && x < 127 )
|
||||
if ( x > 32 && x < 128 )
|
||||
buf2[i/2] = x;
|
||||
else {
|
||||
buf2[0] = 0;
|
||||
@@ -155,29 +150,14 @@ static void usb_descriptor_info_print(usb_dev_handle * udev, struct usb_device *
|
||||
|
||||
static struct usb_device_info * usb_device_is_valid(struct usb_device * dev) {
|
||||
|
||||
size_t i;
|
||||
int i;
|
||||
char product[1024];
|
||||
struct usb_device_info * ret = NULL;
|
||||
|
||||
for ( i = 0; i < sizeof(usb_devices)/sizeof(usb_devices[0]); ++i ) {
|
||||
for ( i = 0; usb_devices[i].vendor; ++i ) {
|
||||
|
||||
if ( dev->descriptor.idVendor == usb_devices[i].vendor && dev->descriptor.idProduct == usb_devices[i].product ) {
|
||||
|
||||
if ( usb_devices[i].protocol == FLASH_UNKN )
|
||||
continue;
|
||||
|
||||
if ( dev->descriptor.bNumConfigurations < 1 )
|
||||
continue;
|
||||
|
||||
if ( usb_devices[i].interface != -1 ) {
|
||||
if ( usb_devices[i].interface >= dev->config[0].bNumInterfaces )
|
||||
continue;
|
||||
if ( usb_devices[i].alternate != -1 ) {
|
||||
if ( usb_devices[i].alternate >= dev->config[0].interface[usb_devices[i].interface].num_altsetting )
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
printf("\b\b ");
|
||||
PRINTF_END();
|
||||
PRINTF_ADD("Found ");
|
||||
@@ -215,7 +195,18 @@ static struct usb_device_info * usb_device_is_valid(struct usb_device * dev) {
|
||||
if ( usb_devices[i].alternate >= 0 ) {
|
||||
PRINTF_LINE("Setting alternate USB interface...");
|
||||
if ( usb_set_altinterface(udev, usb_devices[i].alternate) < 0 ) {
|
||||
PRINTF_ERROR("usb_set_altinterface failed");
|
||||
PRINTF_ERROR("usb_claim_interface failed");
|
||||
fprintf(stderr, "\n");
|
||||
usb_reattach_kernel_driver(udev, usb_devices[i].interface);
|
||||
usb_close(udev);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if ( usb_devices[i].configuration >= 0 ) {
|
||||
PRINTF_LINE("Setting USB configuration...");
|
||||
if ( usb_set_configuration(udev, usb_devices[i].configuration) < 0 ) {
|
||||
PRINTF_ERROR("usb_set_configuration failed");
|
||||
fprintf(stderr, "\n");
|
||||
usb_reattach_kernel_driver(udev, usb_devices[i].interface);
|
||||
usb_close(udev);
|
||||
@@ -239,13 +230,13 @@ static struct usb_device_info * usb_device_is_valid(struct usb_device * dev) {
|
||||
ret->device = DEVICE_RX_44;
|
||||
else if ( strcmp(product, "Nokia N810 Internet Tablet WiMAX Edition") == 0 || strcmp(product, "Nokia-RX48 (Update mode)") == 0 )
|
||||
ret->device = DEVICE_RX_48;
|
||||
else if ( strcmp(product, "N900 (Storage Mode)") == 0 || strcmp(product, "Nokia N900 (Update mode)") == 0 || strcmp(product, "N900 (PC-Suite Mode)") == 0 || strcmp(product, "N900 (U-Boot)") == 0 )
|
||||
else if ( strcmp(product, "N900 (Storage Mode)") == 0 || strcmp(product, "Nokia N900 (Update mode)") == 0 || strcmp(product, "N900 (PC-Suite Mode)") == 0 )
|
||||
ret->device = DEVICE_RX_51;
|
||||
else if ( strcmp(product, "Nokia N950") == 0 || strcmp(product, "N950 (Update mode)") == 0 )
|
||||
else if ( strcmp(product, "Nokia N950") == 0 || strcmp(product, "Sync Mode") == 0 || strcmp(product, "N950 (Update mode)") == 0 )
|
||||
ret->device = DEVICE_RM_680;
|
||||
else if ( strcmp(product, "Nokia N9") == 0 || strcmp(product, "N9 (Update mode)") == 0 || strcmp(product, "Nokia N9 RNDIS/Ethernet") == 0 )
|
||||
else if ( strcmp(product, "N9 (Update mode)") == 0 || strcmp(product, "Nxy (Update mode)") == 0 )
|
||||
ret->device = DEVICE_RM_696;
|
||||
else if ( strcmp(product, "Nokia USB ROM") == 0 || strcmp(product, "Sync Mode") == 0 || strcmp(product, "Nxy (Update mode)") == 0 )
|
||||
else if ( strcmp(product, "Nokia USB ROM") == 0 )
|
||||
ret->device = DEVICE_ANY;
|
||||
else
|
||||
ret->device = DEVICE_UNKNOWN;
|
||||
@@ -370,7 +361,7 @@ struct usb_device_info * usb_open_and_wait_for_device(void) {
|
||||
if ( ret )
|
||||
break;
|
||||
|
||||
MSLEEP(50);
|
||||
SLEEP(0xc350); // 0.5s
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -49,6 +49,7 @@ struct usb_flash_device {
|
||||
uint16_t product;
|
||||
int interface;
|
||||
int alternate;
|
||||
int configuration;
|
||||
enum usb_flash_protocol protocol;
|
||||
enum device devices[DEVICE_COUNT];
|
||||
};
|
||||
|
||||
Reference in new issue
Block a user