mkii: Implement rebooting to Update mode
This commit is contained in:
1 parent
54805eb040
commit
d2e7b3d242
4 files changed
+21
-9
No files matched your search
+13
-3
@@ -340,18 +340,28 @@ int mkii_flash_image(struct usb_device_info * dev, struct image * image) {
|
||||
|
||||
}
|
||||
|
||||
int mkii_reboot_device(struct usb_device_info * dev) {
|
||||
int mkii_reboot_device(struct usb_device_info * dev, int update) {
|
||||
|
||||
char buf[2048];
|
||||
struct mkii_message * msg;
|
||||
const char * str;
|
||||
int len;
|
||||
int ret;
|
||||
|
||||
msg = (struct mkii_message *)buf;
|
||||
|
||||
if ( update ) {
|
||||
printf("Rebooting device to Update mode...\n");
|
||||
len = sizeof("reboot=update");
|
||||
str = "reboot=update";
|
||||
} else {
|
||||
printf("Rebooting device...\n");
|
||||
len = sizeof("reboot");
|
||||
str = "reboot";
|
||||
}
|
||||
|
||||
memcpy(msg->data, "reboot", sizeof("reboot"));
|
||||
ret = mkii_send_receive(dev->udev, MKII_REBOOT, msg, sizeof("reboot"), msg, sizeof(buf));
|
||||
memcpy(msg->data, str, len);
|
||||
ret = mkii_send_receive(dev->udev, MKII_REBOOT, msg, len, msg, sizeof(buf));
|
||||
if ( ret != 1 || msg->data[0] != 0 )
|
||||
return -1;
|
||||
|
||||
|
||||
+1
-1
@@ -31,7 +31,7 @@ int mkii_init(struct usb_device_info * dev);
|
||||
enum device mkii_get_device(struct usb_device_info * dev);
|
||||
|
||||
int mkii_flash_image(struct usb_device_info * dev, struct image * image);
|
||||
int mkii_reboot_device(struct usb_device_info * dev);
|
||||
int mkii_reboot_device(struct usb_device_info * dev, int update);
|
||||
|
||||
int mkii_get_root_device(struct usb_device_info * dev);
|
||||
int mkii_set_root_device(struct usb_device_info * dev, int device);
|
||||
|
||||
+3
-1
@@ -243,6 +243,8 @@ int dev_boot_device(struct device_info * dev, const char * cmdline) {
|
||||
|
||||
if ( protocol == FLASH_NOLO )
|
||||
return nolo_boot_device(dev->usb, cmdline);
|
||||
else if ( protocol == FLASH_MKII && strcmp(cmdline, "update") == 0 )
|
||||
return mkii_reboot_device(dev->usb, 1);
|
||||
|
||||
usb_switch_to_nolo(dev->usb);
|
||||
return -EAGAIN;
|
||||
@@ -267,7 +269,7 @@ int dev_reboot_device(struct device_info * dev) {
|
||||
else if ( protocol == FLASH_NOLO )
|
||||
return nolo_reboot_device(dev->usb);
|
||||
else if ( protocol == FLASH_MKII )
|
||||
return mkii_reboot_device(dev->usb);
|
||||
return mkii_reboot_device(dev->usb, 0);
|
||||
else {
|
||||
usb_switch_to_nolo(dev->usb);
|
||||
return -EAGAIN;
|
||||
|
||||
+4
-4
@@ -350,7 +350,7 @@ void usb_switch_to_nolo(struct usb_device_info * dev) {
|
||||
if ( dev->flash_device->protocol == FLASH_COLD )
|
||||
leave_cold_flash(dev);
|
||||
else if ( dev->flash_device->protocol == FLASH_MKII )
|
||||
mkii_reboot_device(dev);
|
||||
mkii_reboot_device(dev, 0);
|
||||
else if ( dev->flash_device->protocol == FLASH_DISK )
|
||||
printf_and_wait("Unplug USB cable, turn device off, press ENTER and plug USB cable again");
|
||||
|
||||
@@ -363,7 +363,7 @@ void usb_switch_to_cold(struct usb_device_info * dev) {
|
||||
if ( dev->flash_device->protocol == FLASH_NOLO )
|
||||
nolo_reboot_device(dev);
|
||||
else if ( dev->flash_device->protocol == FLASH_MKII )
|
||||
mkii_reboot_device(dev);
|
||||
mkii_reboot_device(dev, 0);
|
||||
else if ( dev->flash_device->protocol == FLASH_DISK )
|
||||
printf_and_wait("Unplug USB cable, turn device off, press ENTER and plug USB cable again");
|
||||
|
||||
@@ -378,7 +378,7 @@ void usb_switch_to_update(struct usb_device_info * dev) {
|
||||
else if ( dev->flash_device->protocol == FLASH_NOLO )
|
||||
nolo_boot_device(dev, "update");
|
||||
else if ( dev->flash_device->protocol == FLASH_MKII && ! ( dev->data & MKII_UPDATE_MODE ) )
|
||||
mkii_reboot_device(dev);
|
||||
mkii_reboot_device(dev, 1);
|
||||
else if ( dev->flash_device->protocol == FLASH_DISK )
|
||||
printf_and_wait("Unplug USB cable, turn device off, press ENTER and plug USB cable again");
|
||||
|
||||
@@ -395,7 +395,7 @@ void usb_switch_to_disk(struct usb_device_info * dev) {
|
||||
printf_and_wait("Wait until device start, choose USB Mass Storage Mode and press ENTER");
|
||||
} else if ( dev->flash_device->protocol == FLASH_MKII ) {
|
||||
if ( dev->data & MKII_UPDATE_MODE )
|
||||
mkii_reboot_device(dev);
|
||||
mkii_reboot_device(dev, 0);
|
||||
else
|
||||
printf_and_wait("Unplug USB cable, plug again, choose USB Mass Storage Mode and press ENTER");
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user