Difference between revisions of "DFU 0x1227"

From The iPhone Wiki
Jump to: navigation, search
m (Code: optimized code)
m
 
(3 intermediate revisions by 2 users not shown)
Line 1: Line 1:
This is the protocol used to talk to [[DFU Mode]] and [[WTF]] version 2.
+
'''DFU 0x1227''' is the protocol used to talk to a device in [[DFU Mode]] or [[WTF]] v2.
   
==Protocol==
+
== Protocol ==
Same as sending a file to the 2.x [[Recovery Mode (Protocols)|Recovery Mode]]
+
The protocol is the same as sending a file to a device in [[Recovery Mode (Protocols)|Recovery Mode]] on 2.x.
   
==Code==
+
== Code ==
  +
uint8_t fbuf[FBUF_LENGTH];
int ???(???)
 
  +
uint8_t buf[100];
{
 
hexdump(fbuf, usb_control_msg(idev, 0x80, 6, 0x200, 0, fbuf, 0x100, 1000));
+
hexdump(fbuf, usb_control_msg(idev, 0x80, 6, 0x200, 0, fbuf, 0x100, 1000));
printf("WTF: ");
+
printf("WTF: ");
fgets(buf, 100, stdin);
+
fgets(buf, 100, stdin);
buf[strlen(buf) - 1] = 0;
+
buf[strlen(buf) - 1] = 0;
FILE *f = fopen(buf, "rb");
+
FILE *f = fopen(buf, "rb");
int s = 0;
+
int s;
int c = 0;
+
int c = 0;
if (f <= 0)
+
if (f > 0) {
{
+
do {
printf("file not found\n");
 
system("PAUSE");
 
return 0;
 
}
 
do
 
{
 
 
s = fread(fbuf, 1, 0x800, f);
 
s = fread(fbuf, 1, 0x800, f);
 
if (usb_control_msg(idev, 0x21, 1, c, 0, fbuf, s, 1000) == s)
 
if (usb_control_msg(idev, 0x21, 1, c, 0, fbuf, s, 1000) == s)
{
+
printf(".");
printf(".");
 
}
 
 
else
 
else
{
+
printf("x");
  +
if (usb_control_msg(idev, 0xA1, 3, 0, 0, fbuf, 6, 1000) != 6|| fbuf[4] != 5)
printf("x");
 
}
+
printf("%d", fbuf[4]);
if (usb_control_msg(idev, 0xA1, 3, 0, 0, fbuf, 6, 1000) != 6 || fbuf[4] != 5)
 
{
 
printf("%d", fbuf[4]);
 
}
 
 
c++;
 
c++;
} while (s > 0);
+
} while (s > 0);
printf("\n");
+
printf("\n");
usb_control_msg(idev, 0xA1, 3, 0, 0, buf, 6, 1000);
+
usb_control_msg(idev, 0xA1, 3, 0, 0, buf, 6, 1000);
hexdump(buf, 6);
+
hexdump(buf, 6);
usb_control_msg(idev, 0xA1, 3, 0, 0, buf, 6, 1000);
+
usb_control_msg(idev, 0xA1, 3, 0, 0, buf, 6, 1000);
hexdump(buf, 6);
+
hexdump(buf, 6);
usb_reset(idev);
+
usb_reset(idev);
fclose(f);
+
fclose(f);
  +
} else {
system("PAUSE");
 
  +
printf("file not found\n");
return 0;
 
  +
}
  +
system("PAUSE");
  +
return 0;
 
}
 
}
  +
  +
[[Category:Protocols (S5L)]]

Latest revision as of 22:52, 30 December 2012

DFU 0x1227 is the protocol used to talk to a device in DFU Mode or WTF v2.

Protocol

The protocol is the same as sending a file to a device in Recovery Mode on 2.x.

Code

  uint8_t fbuf[FBUF_LENGTH];
  uint8_t buf[100];
  hexdump(fbuf, usb_control_msg(idev, 0x80, 6, 0x200, 0, fbuf, 0x100, 1000));
  printf("WTF: ");
  fgets(buf, 100, stdin);
  buf[strlen(buf) - 1] = 0;
  FILE *f = fopen(buf, "rb");
  int s;
  int c = 0;
  if (f > 0) {
    do {
      s = fread(fbuf, 1, 0x800, f);
      if (usb_control_msg(idev, 0x21, 1, c, 0, fbuf, s, 1000) == s)
        printf(".");
      else
        printf("x");
      if (usb_control_msg(idev, 0xA1, 3, 0, 0, fbuf, 6, 1000) !=  6|| fbuf[4] != 5)
        printf("%d", fbuf[4]);
      c++;
    } while (s > 0);
    printf("\n");
    usb_control_msg(idev, 0xA1, 3, 0, 0, buf, 6, 1000);
    hexdump(buf, 6);
    usb_control_msg(idev, 0xA1, 3, 0, 0, buf, 6, 1000);
    hexdump(buf, 6);
    usb_reset(idev);
    fclose(f);
  } else {
    printf("file not found\n");
  }
  system("PAUSE");
  return 0;
}