Changeset 1768
- Timestamp:
- 03/25/12 09:43:44 (14 months ago)
- File:
-
- 1 edited
-
branches/release-1_0/tools/finsig_dryos.c (modified) (14 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/release-1_0/tools/finsig_dryos.c
r1659 r1768 515 515 516 516 typedef struct { 517 uint32_t *buf; 518 uint32_t base; 519 int size; 520 BufRange *br, *last; 521 int dryos_ver; 522 int pid; 523 int maxram; 524 char cam[100]; 517 uint32_t *buf; 518 uint32_t base; 519 int size; 520 BufRange *br, *last; 521 int dryos_ver; 522 int pid; 523 int maxram; 524 char cam[100]; 525 526 // Alt copy of ROM in RAM (DryOS R50) 527 uint32_t *buf2; 528 uint32_t base2; 529 int size2; 525 530 } firmware; 526 531 … … 529 534 if ((i >= 0) && (i < fw->size)) 530 535 return fw->buf[i]; 536 if (fw->dryos_ver == 50) 537 { 538 i = ((i * 4) + (fw->base - fw->base2)) / 4; 539 if ((i >= 0) && (i < fw->size2)) 540 return fw->buf2[i]; 541 } 531 542 fprintf(stderr,"Invalid firmware offset %d.\n",i); 532 543 bprintf("\nInvalid firmware offset %d. Possible corrupt firmware or incorrect start address.\n",i); … … 820 831 { 821 832 fw->dryos_ver = atoi(((char*)&fw->buf[k])+28); 822 if (fw->dryos_ver > 49)833 if (fw->dryos_ver > 50) 823 834 bprintf("// DRYOS R%d (%s) *** New DRYOS Version - please update finsig_dryos.c ***\n",fw->dryos_ver,(char*)&fw->buf[k]); 824 835 else 825 836 bprintf("// DRYOS R%d (%s)\n",fw->dryos_ver,(char*)&fw->buf[k]); 826 837 } 827 838 828 839 // Get firmware version info 829 840 k = find_str(fw, "Firmware Ver "); … … 838 849 } 839 850 840 // Get camera name & platformid 851 // Get camera name & platformid ***** UPDATE for new DryOS version ***** 841 852 int fsize = -((int)fw->base)/4; 842 853 int cam_idx = 0; … … 861 872 break; 862 873 case 49: 874 case 50: 863 875 cam_idx = (((fw->base==0xFF000000)?0xFFF40190:0xFFFE0170) - fw->base) / 4; 864 876 pid_idx = (((fw->base==0xFF000000)?0xFFF40040:0xFFFE0040) - fw->base) / 4; … … 970 982 } 971 983 } 984 985 // DryOS R50 copies a block of ROM to RAM and then uses that copy 986 // Need to allow for this in finding addresses 987 // Seen on SX260HS 988 if (fw->dryos_ver == 50) 989 { 990 fw->buf2 = 0; 991 fw->base2 = 0; 992 fw->size2 = 0; 993 994 int i; 995 // Try and find ROM address copied, and location copied to 996 for (i=3; i<100; i++) 997 { 998 if (isLDR_PC(fw,i) && isLDR_PC(fw,i+1) && (isLDR_PC(fw,i+2))) 999 { 1000 uint32_t fadr = LDR2val(fw,i); 1001 uint32_t dadr = LDR2val(fw,i+1); 1002 uint32_t eadr = LDR2val(fw,i+2); 1003 if ((fadr > fw->base) && (dadr < fw->base)) 1004 { 1005 fw->buf2 = &fw->buf[adr2idx(fw,fadr)]; 1006 fw->base2 = dadr; 1007 fw->size2 = (eadr - dadr) / 4; 1008 bprintf("\n// Note, ROM copied to RAM :- from 0x%08x, to 0x%08x, len %d words.\n",fadr,dadr,(eadr-dadr)/4); 1009 break; 1010 } 1011 } 1012 } 1013 } 972 1014 973 1015 bprintf("\n"); … … 1106 1148 char *ev_name; 1107 1149 int offset; 1108 int dryos20_offset; 1150 int dryos20_offset; // ***** UPDATE for new DryOS version ***** 1109 1151 int dryos23_offset; 1110 1152 int dryos31_offset; … … 1114 1156 int dryos47_offset; 1115 1157 int dryos49_offset; 1158 int dryos50_offset; 1116 1159 } string_sig; 1117 1160 … … 1262 1305 1263 1306 { 5, "UIFS_WriteFirmInfoToFile", "UIFS_WriteFirmInfoToFile", 1 }, 1264 // R20 R23 R31 R39 R43 R45 R47 R49 1265 { 5, "UpdateMBROnFlash", "MakeBootDisk", 0x01000003, 11, 11, 11, 11, 11, 11, 1, 1 }, 1266 { 5, "MakeSDCardBootable", "MakeBootDisk", 0x01000003, 1, 1, 1, 1, 1, 1, 8, 8 }, 1307 { 5, "CreateTask", "CreateTask", 1 }, 1308 { 5, "ExitTask", "ExitTask", 1 }, 1309 { 5, "SleepTask", "SleepTask", 1 }, 1310 // R20 R23 R31 R39 R43 R45 R47 R49 R50 1311 { 5, "UpdateMBROnFlash", "MakeBootDisk", 0x01000003, 11, 11, 11, 11, 11, 11, 1, 1, 1 }, 1312 { 5, "MakeSDCardBootable", "MakeBootDisk", 0x01000003, 1, 1, 1, 1, 1, 1, 8, 8, 8 }, 1267 1313 1268 1314 { 6, "Restart", "Bye", 0 }, … … 1279 1325 { 8, "WriteSDCard", "Mounter.c", 0 }, 1280 1326 1281 // R20 R23 R31 R39 R43 R45 R47 R49 1282 { 9, "kbd_p1_f", "task_PhySw", 0x01000001, 5, 5, 5, 5, 5, 5, 5, 5 },1283 { 9, "kbd_p2_f", "task_PhySw", 0xf1000001, 7, 7, 7, 7, 7, 7, 7, 7 },1284 { 9, "kbd_read_keys", "kbd_p1_f", 0x01000001, 2, 2, 2, 2, 2, 2, 2, 2 },1285 { 9, "kbd_p1_f_cont", "kbd_p1_f", 0, 3, 3, 3, 3, 3, 3, 3, 3 },1327 // R20 R23 R31 R39 R43 R45 R47 R49 R50 1328 { 9, "kbd_p1_f", "task_PhySw", 0x01000001, 5, 5, 5, 5, 5, 5, 5, 5, 5 }, 1329 { 9, "kbd_p2_f", "task_PhySw", 0xf1000001, 7, 7, 7, 7, 7, 7, 7, 7, 7 }, 1330 { 9, "kbd_read_keys", "kbd_p1_f", 0x01000001, 2, 2, 2, 2, 2, 2, 2, 2, 2 }, 1331 { 9, "kbd_p1_f_cont", "kbd_p1_f", 0, 3, 3, 3, 3, 3, 3, 3, 3, 3 }, 1286 1332 { 9, "kbd_read_keys_r2", "kbd_read_keys", 0x0100000C }, 1287 1333 { 9, "GetKbdState", "kbd_read_keys", 0x01000009 }, … … 1297 1343 { 10, "task_RotaryEncoder", "RotarySw", 1 }, 1298 1344 1299 // R20 R23 R31 R39 R43 R45 R47 R49 1300 { 11, "DebugAssert", "\nAssert: File %s Line %d\n", 0, 5, 5, 5, 5, 5, 5, 5, 5 },1301 { 11, "set_control_event", "Button:0x%08X:%s", 0x01000001, 14, 14, 14, 14, 14, 14, 14, 14 },1302 { 11, "set_control_event", "Button:0x%08X:%s", 0x01000001, 15, 15, 15, 15, 15, 15, 15, 15 },1303 { 11, "set_control_event", "Button:0x%08X:%s", 0x01000001, 20, 20, 20, 20, 20, 20, 19, 20 },1304 { 11, "_log", (char*)log_test, 0x01000001, 1, 1, 1, 1, 1, 1, 1, 1 },1305 1306 // R20 R23 R31 R39 R43 R45 R47 R49 1307 { 12, "DeleteFile_Fut", "DeleteFile_Fut", 1, 0x38, 0x38, 0x4C, 0x4C, 0x4C, 0x54, 0x54, 0x54 },1308 { 12, "AllocateUncacheableMemory", "AllocateUncacheableMemory", 1, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x34, 0x34, 0x34 },1309 { 12, "FreeUncacheableMemory", "FreeUncacheableMemory", 1, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x38, 0x38 },1310 { 12, "free", "free", 1, 0x28, 0x28, 0x28, 0x28, 0x28, 0x30, 0x30, 0x30 },1311 { 12, "malloc", "malloc", 0x01000003, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2C, 0x2C, 0x2C },1312 { 12, "TakeSemaphore", "TakeSemaphore", 1, 0x14, 0x14, 0x14, 0x14, 0x14, 0x1C, 0x1C, 0x1C },1313 { 12, "GiveSemaphore", "GiveSemaphore", 1, 0x18, 0x18, 0x18, 0x18, 0x18, 0x20, 0x20, 0x20 },1314 { 12, "_log10", "_log10", 0x01000006, 0x278,0x280,0x280,0x284,0x294,0x2FC,0x2FC,0x31C },1315 { 12, "_log10", "_log10", 0x01000006, 0x000,0x278,0x27C,0x000,0x000,0x000,0x000,0x000 },1316 { 12, "_log10", "_log10", 0x01000006, 0x000,0x000,0x2C4,0x000,0x000,0x000,0x000,0x000 },1345 // R20 R23 R31 R39 R43 R45 R47 R49 R50 1346 { 11, "DebugAssert", "\nAssert: File %s Line %d\n", 0, 5, 5, 5, 5, 5, 5, 5, 5, 5 }, 1347 { 11, "set_control_event", "Button:0x%08X:%s", 0x01000001, 14, 14, 14, 14, 14, 14, 14, 14, 14 }, 1348 { 11, "set_control_event", "Button:0x%08X:%s", 0x01000001, 15, 15, 15, 15, 15, 15, 15, 15, 15 }, 1349 { 11, "set_control_event", "Button:0x%08X:%s", 0x01000001, 20, 20, 20, 20, 20, 20, 19, 20, 20 }, 1350 { 11, "_log", (char*)log_test, 0x01000001, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, 1351 1352 // R20 R23 R31 R39 R43 R45 R47 R49 R50 1353 { 12, "DeleteFile_Fut", "DeleteFile_Fut", 1, 0x38, 0x38, 0x4C, 0x4C, 0x4C, 0x54, 0x54, 0x54, 0x00 }, 1354 { 12, "AllocateUncacheableMemory", "AllocateUncacheableMemory", 1, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x34, 0x34, 0x34, 0x4C }, 1355 { 12, "FreeUncacheableMemory", "FreeUncacheableMemory", 1, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x38, 0x38, 0x50 }, 1356 { 12, "free", "free", 1, 0x28, 0x28, 0x28, 0x28, 0x28, 0x30, 0x30, 0x30, 0x48 }, 1357 { 12, "malloc", "malloc", 0x01000003, 0x24, 0x24, 0x24, 0x24, 0x24, 0x2C, 0x2C, 0x2C, 0x44 }, 1358 { 12, "TakeSemaphore", "TakeSemaphore", 1, 0x14, 0x14, 0x14, 0x14, 0x14, 0x1C, 0x1C, 0x1C, 0x1C }, 1359 { 12, "GiveSemaphore", "GiveSemaphore", 1, 0x18, 0x18, 0x18, 0x18, 0x18, 0x20, 0x20, 0x20, 0x20 }, 1360 { 12, "_log10", "_log10", 0x01000006, 0x278,0x280,0x280,0x284,0x294,0x2FC,0x2FC,0x31C,0x354 }, 1361 { 12, "_log10", "_log10", 0x01000006, 0x000,0x278,0x27C,0x000,0x000,0x000,0x000,0x000,0x000 }, 1362 { 12, "_log10", "_log10", 0x01000006, 0x000,0x000,0x2C4,0x000,0x000,0x000,0x000,0x000,0x000 }, 1317 1363 1318 1364 { 13, "strftime", "Sunday", 1 }, … … 1351 1397 case 47: return sig->dryos47_offset; 1352 1398 case 49: return sig->dryos49_offset; 1399 case 50: return sig->dryos50_offset; 1353 1400 } 1354 1401 return 0; … … 2589 2636 while ((*p != 0xFFFF) && (k < 50)) 2590 2637 { 2591 if (((fw->dryos_ver < 49) && ((*p < 8000) || (*p > 8999))) || ((fw->dryos_ver == 49) && ((*p < 4000) || (*p > 4999))))2638 if (((fw->dryos_ver < 49) && ((*p < 8000) || (*p > 8999))) || ((fw->dryos_ver >= 49) && ((*p < 4000) || (*p > 4999)))) 2592 2639 { 2593 2640 osig *m = find_sig_val(modemap, *p); … … 3756 3803 3757 3804 bprintf("// Bitmap masks and physw_status index values for SD_READONLY and USB power flags (for kbd.c).\n"); 3758 if (fw->dryos_ver == 49)3805 if (fw->dryos_ver >= 49) 3759 3806 { 3760 3807 // Event ID's have changed in DryOS R49 **********
Note: See TracChangeset
for help on using the changeset viewer.