Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bf24ca2345 | ||
|
|
5c845a947e | ||
|
|
673ccaf71d | ||
|
|
9bc4b8c26f | ||
|
|
e6422cf5a2 | ||
|
|
a6effa8f62 | ||
|
|
e16a79f75e | ||
|
|
93bd73d451 | ||
|
|
0e5ceffa42 | ||
|
|
ca080dd33f | ||
|
|
4ae1f13624 | ||
|
|
69a7c2705e | ||
|
|
8d053c9074 | ||
|
|
f37c2cd7e8 | ||
|
|
e94279eecb | ||
|
|
52793b733d | ||
|
|
4bd0a47b22 | ||
|
|
adeca0dd45 |
No files matched your search
@@ -2,6 +2,10 @@ sudo: false
|
|||||||
|
|
||||||
language: c
|
language: c
|
||||||
|
|
||||||
|
arch:
|
||||||
|
- AMD64
|
||||||
|
- ppc64le
|
||||||
|
|
||||||
compiler:
|
compiler:
|
||||||
- gcc
|
- gcc
|
||||||
- clang
|
- clang
|
||||||
|
|||||||
@@ -10,24 +10,24 @@
|
|||||||
_/ ___|_.|__|
|
_/ ___|_.|__|
|
||||||
'`
|
'`
|
||||||
|
|
||||||
0xFFFF is Open Free Fiasco Firmware Flasher for Maemo devices. It support
|
0xFFFF is the Open Free Fiasco Firmware Flasher for Maemo devices. It supports
|
||||||
generating and unpacking FIASCO images on local computer. Useful for editing
|
generating and unpacking FIASCO images. It is useful for editing Maemo firmware
|
||||||
Maemo firmware package for future flash. It support via USB flashing any image
|
packages before flashing. It supports flashing via USB any image type to a
|
||||||
type to Maemo device and also \"cold\" flashing which means flashing dead device
|
Maemo device and also \"cold\" flashing which means flashing dead device with
|
||||||
with erased bootloader. There is support for booting kernel via USB without
|
erased bootloader. There is support for booting kernel via USB without flashing
|
||||||
flashing to NAND and also changing configuration of Maemo device (enable/disable
|
to NAND and also changing configuration of Maemo device (enable/disable R&D
|
||||||
R&D mode, changing HW revision strings, ...).
|
mode, changing HW revision strings, ...).
|
||||||
|
|
||||||
0xFFFF is alternative tool to proprietary Nokia flasher-3.5 and fiasco-gen.
|
0xFFFF is an alternative tool to proprietary Nokia flasher-3.5 and fiasco-gen.
|
||||||
0xFFFF generate compatible FIASCO images and also accept FIASCO images generated
|
0xFFFF generates compatible FIASCO images and also accepts FIASCO images
|
||||||
by Nokia fiasco-gen.
|
generated by Nokia fiasco-gen.
|
||||||
|
|
||||||
Use it with CARE. This is an experimental tool and it can brick your device.
|
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.
|
bootloaders to break this tool. USE IT AT YOUR OWN RISK.
|
||||||
|
|
||||||
PLEASE. Read carefully all the documentation inside doc/* for more information
|
PLEASE. Read all the documentation inside doc/* carefully before building or
|
||||||
before building or using the flasher to avoid questions, problems or so.
|
using the flasher to avoid questions, problems or so.
|
||||||
|
|
||||||
https://github.com/pali/0xFFFF
|
https://github.com/pali/0xFFFF
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
VERSION = 0.8
|
VERSION = 0.9
|
||||||
PREFIX = /usr/local
|
PREFIX = /usr/local
|
||||||
|
|
||||||
# NetBSD stuff
|
# NetBSD stuff
|
||||||
|
|||||||
+7
-7
@@ -191,14 +191,14 @@ static int send_2nd(usb_dev_handle * udev, struct image * image) {
|
|||||||
if ( ret != sizeof(omap_peripheral_msg) )
|
if ( ret != sizeof(omap_peripheral_msg) )
|
||||||
ERROR_RETURN("Sending OMAP peripheral boot message failed", -1);
|
ERROR_RETURN("Sending OMAP peripheral boot message failed", -1);
|
||||||
|
|
||||||
SLEEP(5000);
|
MSLEEP(5);
|
||||||
|
|
||||||
printf("Sending 2nd X-Loader image size...\n");
|
printf("Sending 2nd X-Loader image size...\n");
|
||||||
ret = usb_bulk_write(udev, USB_WRITE_EP, (char *)&image->size, 4, WRITE_TIMEOUT);
|
ret = usb_bulk_write(udev, USB_WRITE_EP, (char *)&image->size, 4, WRITE_TIMEOUT);
|
||||||
if ( ret != 4 )
|
if ( ret != 4 )
|
||||||
ERROR_RETURN("Sending 2nd X-Loader image size failed", -1);
|
ERROR_RETURN("Sending 2nd X-Loader image size failed", -1);
|
||||||
|
|
||||||
SLEEP(5000);
|
MSLEEP(5);
|
||||||
|
|
||||||
printf("Sending 2nd X-Loader image...\n");
|
printf("Sending 2nd X-Loader image...\n");
|
||||||
printf_progressbar(0, image->size);
|
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);
|
printf_progressbar(sent, image->size);
|
||||||
}
|
}
|
||||||
|
|
||||||
SLEEP(50000);
|
MSLEEP(50);
|
||||||
return 0;
|
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);
|
ERROR_RETURN("Sending X-Loader init message failed", -1);
|
||||||
|
|
||||||
printf("Waiting for X-Loader response...\n");
|
printf("Waiting for X-Loader response...\n");
|
||||||
SLEEP(5000);
|
MSLEEP(5);
|
||||||
ret = usb_bulk_read(udev, USB_READ_EP, (char *)&buffer, 4, READ_TIMEOUT); /* 4 bytes - dummy value */
|
ret = usb_bulk_read(udev, USB_READ_EP, (char *)&buffer, 4, READ_TIMEOUT); /* 4 bytes - dummy value */
|
||||||
if ( ret != 4 )
|
if ( ret != 4 )
|
||||||
ERROR_RETURN("No response", -1);
|
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");
|
printf("Waiting for X-Loader response...\n");
|
||||||
SLEEP(5000);
|
MSLEEP(5);
|
||||||
ret = usb_bulk_read(udev, USB_READ_EP, (char *)&buffer, 4, READ_TIMEOUT); /* 4 bytes - dummy value */
|
ret = usb_bulk_read(udev, USB_READ_EP, (char *)&buffer, 4, READ_TIMEOUT); /* 4 bytes - dummy value */
|
||||||
if ( ret != 4 )
|
if ( ret != 4 )
|
||||||
ERROR_RETURN("No response", -1);
|
ERROR_RETURN("No response", -1);
|
||||||
@@ -296,7 +296,7 @@ static int ping_timeout(usb_dev_handle * udev) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
SLEEP(5000);
|
MSLEEP(5);
|
||||||
--try_read;
|
--try_read;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -413,7 +413,7 @@ int leave_cold_flash(struct usb_device_info * dev) {
|
|||||||
if ( ret != sizeof(omap_memory_msg) )
|
if ( ret != sizeof(omap_memory_msg) )
|
||||||
ERROR_RETURN("Sending OMAP memory boot message failed", -1);
|
ERROR_RETURN("Sending OMAP memory boot message failed", -1);
|
||||||
|
|
||||||
SLEEP(1000000);
|
MSLEEP(250);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
+7
-2
@@ -270,6 +270,11 @@ int disk_dump_dev(int fd, const char * file) {
|
|||||||
size = read(fd, global_buf, need);
|
size = read(fd, global_buf, need);
|
||||||
if ( size == 0 )
|
if ( size == 0 )
|
||||||
break;
|
break;
|
||||||
|
if ( size < 0 ) {
|
||||||
|
PRINTF_ERROR("Reading from block device failed");
|
||||||
|
close(fd2);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
if ( write(fd2, global_buf, size) != size ) {
|
if ( write(fd2, global_buf, size) != size ) {
|
||||||
PRINTF_ERROR("Dumping image failed");
|
PRINTF_ERROR("Dumping image failed");
|
||||||
close(fd2);
|
close(fd2);
|
||||||
@@ -409,8 +414,8 @@ int disk_init(struct usb_device_info * dev) {
|
|||||||
|
|
||||||
/* TODO: change 1 to 0 when disk_flash_dev will be implemented */
|
/* TODO: change 1 to 0 when disk_flash_dev will be implemented */
|
||||||
|
|
||||||
/* RX-51 and RM-680 export MyDocs in first usb device and just first partion, so host system see whole device without MBR table */
|
/* 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 )
|
if ( dev->device == DEVICE_RX_51 || dev->device == DEVICE_RM_680 || dev->device == DEVICE_RM_696 )
|
||||||
fd = disk_open_dev(maj1, min1, -1, 1);
|
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 */
|
/* 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 )
|
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() do { ERROR("Cannot allocate memory"); } while (0)
|
||||||
#define ALLOC_ERROR_RETURN(...) do { ALLOC_ERROR(); return __VA_ARGS__; } while (0)
|
#define ALLOC_ERROR_RETURN(...) do { ALLOC_ERROR(); return __VA_ARGS__; } while (0)
|
||||||
|
|
||||||
#define SLEEP(usec) do { struct timespec _t = { 0, (usec) }; nanosleep(&_t, NULL); } while (0)
|
#define MSLEEP(msec) do { nanosleep(&(struct timespec){ (msec / 1000), (1000L * 1000L * (msec % 1000)) }, NULL); } while (0)
|
||||||
|
|
||||||
static inline void * MEMMEM(void *haystack, size_t haystacklen, const void *needle, size_t needlelen) {
|
static inline void * MEMMEM(void *haystack, size_t haystacklen, const void *needle, size_t needlelen) {
|
||||||
for ( size_t i = 0; i < haystacklen; ++i ) {
|
for ( size_t i = 0; i < haystacklen; ++i ) {
|
||||||
|
|||||||
+3
-1
@@ -421,6 +421,8 @@ int main(int argc, char **argv) {
|
|||||||
enum device detected_device = DEVICE_UNKNOWN;
|
enum device detected_device = DEVICE_UNKNOWN;
|
||||||
int16_t detected_hwrev = -1;
|
int16_t detected_hwrev = -1;
|
||||||
|
|
||||||
|
struct stat st;
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
char buf[512];
|
char buf[512];
|
||||||
char * ptr = NULL;
|
char * ptr = NULL;
|
||||||
@@ -1259,7 +1261,7 @@ int main(int argc, char **argv) {
|
|||||||
|
|
||||||
for ( i = 0; i < IMAGE_COUNT; ++i ) {
|
for ( i = 0; i < IMAGE_COUNT; ++i ) {
|
||||||
|
|
||||||
if ( ! image_tmp_name(i) )
|
if ( ! image_tmp_name(i) || ( stat(image_tmp_name(i), &st) < 0 && errno == ENOENT ) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
buf[0] = 0;
|
buf[0] = 0;
|
||||||
|
|||||||
@@ -361,6 +361,11 @@ int mkii_reboot_device(struct usb_device_info * dev, int update) {
|
|||||||
if ( ret != 1 || msg->data[0] != 0 )
|
if ( ret != 1 || msg->data[0] != 0 )
|
||||||
ERROR_RETURN("Cannot send reboot command", -1);
|
ERROR_RETURN("Cannot send reboot command", -1);
|
||||||
|
|
||||||
|
if (dev->data & MKII_UPDATE_MODE)
|
||||||
|
MSLEEP(100);
|
||||||
|
else
|
||||||
|
MSLEEP(3000);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -541,7 +541,7 @@ int nolo_flash_image(struct usb_device_info * dev, struct image * image) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SLEEP(0xc350); // 0.5s
|
MSLEEP(50);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+39
-30
@@ -46,16 +46,21 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
static struct usb_flash_device usb_devices[] = {
|
static struct usb_flash_device usb_devices[] = {
|
||||||
{ 0x0421, 0x0096, -1, -1, -1, FLASH_DISK, { DEVICE_RX_44, 0 } },
|
/* vend prod i a protocol devices */
|
||||||
{ 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, 0x0096, -1, -1, FLASH_DISK, { DEVICE_RX_44, 0 } },
|
||||||
{ 0x0421, 0x0106, 0, -1, -1, FLASH_COLD, { DEVICE_RX_51, DEVICE_RM_680, DEVICE_RM_696, 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, 0x0189, -1, -1, -1, FLASH_DISK, { DEVICE_RX_48, 0 } },
|
{ 0x0421, 0x0106, 0, 0, FLASH_COLD, { DEVICE_RX_51, DEVICE_RM_680, DEVICE_RM_696, 0 } },
|
||||||
{ 0x0421, 0x01c7, -1, -1, -1, FLASH_DISK, { DEVICE_RX_51, 0 } },
|
{ 0x0421, 0x0189, -1, -1, FLASH_DISK, { DEVICE_RX_48, 0 } },
|
||||||
{ 0x0421, 0x01c8, 1, 1, -1, FLASH_MKII, { DEVICE_RX_51, DEVICE_RM_680, 0 } },
|
{ 0x0421, 0x01c7, -1, -1, FLASH_DISK, { DEVICE_RX_51, 0 } },
|
||||||
{ 0x0421, 0x03d1, -1, -1, -1, FLASH_DISK, { DEVICE_RM_680, 0 } },
|
{ 0x0421, 0x01c8, 1, 1, FLASH_MKII, { DEVICE_RX_51, DEVICE_RM_680, 0 } },
|
||||||
{ 0x0421, 0x0431, -1, -1, -1, FLASH_DISK, { DEVICE_SU_18, DEVICE_RX_34, 0 } },
|
{ 0x0421, 0x01c8, 1, 0, FLASH_UNKN, { DEVICE_RX_51, 0 } }, /* U-Boot mode (TTY via USB) */
|
||||||
{ 0x0421, 0x04c3, -1, -1, -1, FLASH_DISK, { DEVICE_RX_34, 0 } },
|
{ 0x0421, 0x03d1, -1, -1, FLASH_DISK, { DEVICE_RM_680, 0 } },
|
||||||
{ 0x0421, 0x3f00, 2, 1, -1, FLASH_NOLO, { DEVICE_RX_34, 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) */
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char * usb_flash_protocols[] = {
|
static const char * usb_flash_protocols[] = {
|
||||||
@@ -134,7 +139,7 @@ static void usb_descriptor_info_print(usb_dev_handle * udev, struct usb_device *
|
|||||||
buf[0] = 0;
|
buf[0] = 0;
|
||||||
for ( i = 0; i < ret; i+=2 ) {
|
for ( i = 0; i < ret; i+=2 ) {
|
||||||
sscanf(buf+i, "%2x", &x);
|
sscanf(buf+i, "%2x", &x);
|
||||||
if ( x > 32 && x < 128 )
|
if ( x > 31 && x < 127 )
|
||||||
buf2[i/2] = x;
|
buf2[i/2] = x;
|
||||||
else {
|
else {
|
||||||
buf2[0] = 0;
|
buf2[0] = 0;
|
||||||
@@ -150,14 +155,29 @@ 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) {
|
static struct usb_device_info * usb_device_is_valid(struct usb_device * dev) {
|
||||||
|
|
||||||
int i;
|
size_t i;
|
||||||
char product[1024];
|
char product[1024];
|
||||||
struct usb_device_info * ret = NULL;
|
struct usb_device_info * ret = NULL;
|
||||||
|
|
||||||
for ( i = 0; usb_devices[i].vendor; ++i ) {
|
for ( i = 0; i < sizeof(usb_devices)/sizeof(usb_devices[0]); ++i ) {
|
||||||
|
|
||||||
if ( dev->descriptor.idVendor == usb_devices[i].vendor && dev->descriptor.idProduct == usb_devices[i].product ) {
|
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("\b\b ");
|
||||||
PRINTF_END();
|
PRINTF_END();
|
||||||
PRINTF_ADD("Found ");
|
PRINTF_ADD("Found ");
|
||||||
@@ -195,18 +215,7 @@ static struct usb_device_info * usb_device_is_valid(struct usb_device * dev) {
|
|||||||
if ( usb_devices[i].alternate >= 0 ) {
|
if ( usb_devices[i].alternate >= 0 ) {
|
||||||
PRINTF_LINE("Setting alternate USB interface...");
|
PRINTF_LINE("Setting alternate USB interface...");
|
||||||
if ( usb_set_altinterface(udev, usb_devices[i].alternate) < 0 ) {
|
if ( usb_set_altinterface(udev, usb_devices[i].alternate) < 0 ) {
|
||||||
PRINTF_ERROR("usb_claim_interface failed");
|
PRINTF_ERROR("usb_set_altinterface 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");
|
fprintf(stderr, "\n");
|
||||||
usb_reattach_kernel_driver(udev, usb_devices[i].interface);
|
usb_reattach_kernel_driver(udev, usb_devices[i].interface);
|
||||||
usb_close(udev);
|
usb_close(udev);
|
||||||
@@ -230,13 +239,13 @@ static struct usb_device_info * usb_device_is_valid(struct usb_device * dev) {
|
|||||||
ret->device = DEVICE_RX_44;
|
ret->device = DEVICE_RX_44;
|
||||||
else if ( strcmp(product, "Nokia N810 Internet Tablet WiMAX Edition") == 0 || strcmp(product, "Nokia-RX48 (Update mode)") == 0 )
|
else if ( strcmp(product, "Nokia N810 Internet Tablet WiMAX Edition") == 0 || strcmp(product, "Nokia-RX48 (Update mode)") == 0 )
|
||||||
ret->device = DEVICE_RX_48;
|
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 )
|
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 )
|
||||||
ret->device = DEVICE_RX_51;
|
ret->device = DEVICE_RX_51;
|
||||||
else if ( strcmp(product, "Nokia N950") == 0 || strcmp(product, "Sync Mode") == 0 || strcmp(product, "N950 (Update mode)") == 0 )
|
else if ( strcmp(product, "Nokia N950") == 0 || strcmp(product, "N950 (Update mode)") == 0 )
|
||||||
ret->device = DEVICE_RM_680;
|
ret->device = DEVICE_RM_680;
|
||||||
else if ( strcmp(product, "N9 (Update mode)") == 0 || strcmp(product, "Nxy (Update mode)") == 0 )
|
else if ( strcmp(product, "Nokia N9") == 0 || strcmp(product, "N9 (Update mode)") == 0 || strcmp(product, "Nokia N9 RNDIS/Ethernet") == 0 )
|
||||||
ret->device = DEVICE_RM_696;
|
ret->device = DEVICE_RM_696;
|
||||||
else if ( strcmp(product, "Nokia USB ROM") == 0 )
|
else if ( strcmp(product, "Nokia USB ROM") == 0 || strcmp(product, "Sync Mode") == 0 || strcmp(product, "Nxy (Update mode)") == 0 )
|
||||||
ret->device = DEVICE_ANY;
|
ret->device = DEVICE_ANY;
|
||||||
else
|
else
|
||||||
ret->device = DEVICE_UNKNOWN;
|
ret->device = DEVICE_UNKNOWN;
|
||||||
@@ -361,7 +370,7 @@ struct usb_device_info * usb_open_and_wait_for_device(void) {
|
|||||||
if ( ret )
|
if ( ret )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
SLEEP(0xc350); // 0.5s
|
MSLEEP(50);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -49,7 +49,6 @@ struct usb_flash_device {
|
|||||||
uint16_t product;
|
uint16_t product;
|
||||||
int interface;
|
int interface;
|
||||||
int alternate;
|
int alternate;
|
||||||
int configuration;
|
|
||||||
enum usb_flash_protocol protocol;
|
enum usb_flash_protocol protocol;
|
||||||
enum device devices[DEVICE_COUNT];
|
enum device devices[DEVICE_COUNT];
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in new issue
Block a user