Changeset 1768


Ignore:
Timestamp:
03/25/12 09:43:44 (14 months ago)
Author:
philmoz
Message:

Update to finsig_dryos.c for new DryOS version R50, in SX260HS.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/release-1_0/tools/finsig_dryos.c

    r1659 r1768  
    515515 
    516516typedef 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; 
    525530} firmware; 
    526531 
     
    529534    if ((i >= 0) && (i < fw->size)) 
    530535        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    } 
    531542    fprintf(stderr,"Invalid firmware offset %d.\n",i); 
    532543    bprintf("\nInvalid firmware offset %d. Possible corrupt firmware or incorrect start address.\n",i); 
     
    820831        { 
    821832                fw->dryos_ver = atoi(((char*)&fw->buf[k])+28); 
    822         if (fw->dryos_ver > 49) 
     833        if (fw->dryos_ver > 50) 
    823834                bprintf("//   DRYOS R%d (%s) *** New DRYOS Version - please update finsig_dryos.c ***\n",fw->dryos_ver,(char*)&fw->buf[k]); 
    824835        else 
    825836                bprintf("//   DRYOS R%d (%s)\n",fw->dryos_ver,(char*)&fw->buf[k]); 
    826837        } 
    827          
     838     
    828839        // Get firmware version info 
    829840        k = find_str(fw, "Firmware Ver "); 
     
    838849        } 
    839850 
    840         // Get camera name & platformid 
     851        // Get camera name & platformid     ***** UPDATE for new DryOS version ***** 
    841852        int fsize = -((int)fw->base)/4; 
    842853        int cam_idx = 0; 
     
    861872        break; 
    862873        case 49:  
     874        case 50:  
    863875        cam_idx = (((fw->base==0xFF000000)?0xFFF40190:0xFFFE0170) - fw->base) / 4;  
    864876        pid_idx = (((fw->base==0xFF000000)?0xFFF40040:0xFFFE0040) - fw->base) / 4;  
     
    970982        } 
    971983    } 
     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    } 
    9721014 
    9731015        bprintf("\n"); 
     
    11061148    char    *ev_name; 
    11071149    int     offset; 
    1108         int             dryos20_offset; 
     1150        int             dryos20_offset;     // ***** UPDATE for new DryOS version ***** 
    11091151        int             dryos23_offset; 
    11101152        int             dryos31_offset; 
     
    11141156        int             dryos47_offset; 
    11151157        int             dryos49_offset; 
     1158        int             dryos50_offset; 
    11161159} string_sig; 
    11171160 
     
    12621305 
    12631306    { 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 }, 
    12671313 
    12681314    { 6, "Restart", "Bye", 0 }, 
     
    12791325        { 8, "WriteSDCard", "Mounter.c", 0 },  
    12801326         
    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 }, 
    12861332        { 9, "kbd_read_keys_r2", "kbd_read_keys", 0x0100000C }, 
    12871333        { 9, "GetKbdState", "kbd_read_keys", 0x01000009 }, 
     
    12971343        { 10, "task_RotaryEncoder", "RotarySw", 1 }, 
    12981344 
    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 }, 
    13171363         
    13181364        { 13, "strftime", "Sunday", 1 }, 
     
    13511397        case 47:        return sig->dryos47_offset; 
    13521398        case 49:        return sig->dryos49_offset; 
     1399        case 50:        return sig->dryos50_offset; 
    13531400        } 
    13541401        return 0; 
     
    25892636                                                                while ((*p != 0xFFFF) && (k < 50)) 
    25902637                                                                { 
    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)))) 
    25922639                                                                        { 
    25932640                                                                                osig *m = find_sig_val(modemap, *p); 
     
    37563803                 
    37573804                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) 
    37593806        { 
    37603807            // Event ID's have changed in DryOS R49 ********** 
Note: See TracChangeset for help on using the changeset viewer.