Changeset 1086


Ignore:
Timestamp:
03/13/11 21:33:29 (2 years ago)
Author:
reyalP
Message:

sx30 and g12 updates from philmoz in http://chdk.setepontos.com/index.php?topic=650.msg62654#msg62654

  • Fixes startup crash (hopefully) by using different 'Open' firmware function (G12 & SX30). (see
  • Added ND filter to G12 (from CHDK-DE).
  • Faster motion detect by implementing vid_get_viewport_live_fb (G12 & SX30).
  • Fixed bracketing in continuous shooting mode when timer enabled.

generic MD optimization will be in a separate commit

Location:
trunk
Files:
18 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/camera.h

    r1081 r1086  
    31233123   // todo - we may need this to save memory 
    31243124    //#define CAM_ZEBRA_NOBUF 1 
    3125 //========================================================== 
    3126 // END of Camera-dependent settings 
    3127 //========================================================== 
    3128  
     3125 
     3126//---------------------------------------------------------- 
    31293127#elif defined (CAMERA_sx30) 
    31303128        #define CAM_PROPSET                                     4 
     
    32533251    #define CAM_HAS_JOGDIAL             1 
    32543252        #undef  CAM_USE_ZOOM_FOR_MF 
     3253    #define CAM_HAS_ND_FILTER               1 
    32553254    #undef  CAM_CONSOLE_LOG_ENABLED         // Development: internal camera stdout -> A/stdout.txt 
    32563255    #define CAM_BRACKETING              1 
  • trunk/platform/g12/sub/100c/boot.c

    r1070 r1086  
    3333//} 
    3434 
     35extern void task_CaptSeq(); 
     36extern void task_InitFileModules(); 
     37extern void task_RotaryEncoder(); 
     38extern void task_MovieRecord(); 
     39extern void task_ExpDrv(); 
     40 
    3541void taskHook(context_t **context) 
    3642{  
    3743        task_t *tcb=(task_t*)((char*)context-offsetof(task_t, context)); 
    38  
    39         extern void task_CaptSeq(); 
    40         extern void task_InitFileModules(); 
    41         extern void task_RotaryEncoder(); 
    42         extern void task_MovieRecord(); 
    43         extern void task_ExpDrv(); 
    4444 
    4545        // Replace firmware task addresses with ours 
     
    4949        if(tcb->entry == (void*)task_MovieRecord)               tcb->entry = (void*)movie_record_task; 
    5050        if(tcb->entry == (void*)task_ExpDrv)                    tcb->entry = (void*)exp_drv_task; 
     51} 
     52 
     53void taskHook2(context_t **context) 
     54{  
     55        task_t *tcb=(task_t*)((char*)context-offsetof(task_t, context)); 
     56 
     57        // Replace firmware task addresses with ours 
     58        if(tcb->entry == (void*)task_InitFileModules)   tcb->entry = (void*)init_file_modules_task; 
    5159} 
    5260 
     
    174182        //http://chdk.setepontos.com/index.php/topic,4194.0.html 
    175183        *(int*)0x1938=(int)taskHook; 
     184        *(int*)0x193C=(int)taskHook2; // setting this to an empty function seems to fix startup crash in movie mode ??? 
    176185     
    177186        // replacement of sub_FF864BE0 for correct power-on. 
  • trunk/platform/g12/sub/100c/lib.c

    r1017 r1086  
    5555 
    5656 
    57 // TODO - ??? Is this needed ??? 
    5857void *vid_get_viewport_live_fb() 
    5958{ 
    60     return 0x0; 
     59        return (void*)(*(int*)(0x21F8));        // Found by searching RAM locations that referenced 0x40587700 (viewport buffer) 
     60                                                                                // and also changed to the other buffer addresses over time. Then used each here 
     61                                                                                // and selected value that gave the fastest Motion Detect response using http://dataghost.com/chdk/md_meter.html. 
    6162} 
    6263 
     
    6667} 
    6768 
    68 // TODO - check that this works 
    6969void *vid_get_viewport_fb_d() 
    7070{ 
  • trunk/platform/g12/sub/100c/stubs_entry_2.S

    r1028 r1086  
    3838NHSTUB(MoveZoomLensWithPoint,                   0xffb05008)     // ok (comp sx30) 
    3939NHSTUB(NewTaskShell,                                    0xff894f0c)     // ok (comp sx30) 
    40 NHSTUB(Open,                                                    0xFF873BFC)     // ok (comp sx30) 
     40NHSTUB(Open,                                                    0xFF81AADC)     // update 5/3/2011 to fix crash startup 
    4141NHSTUB(PostLogicalEventForNotPowerType, 0xff899b70)     // ok (comp sx30) 
    4242NHSTUB(PostLogicalEventToUI,                    0xff899bbc)     // ok (comp sx30) 
     
    8888NHSTUB(UpdateMBROnFlash,                                0xFF8767C8) // Search for 'BOOTDISK', function branches to this at end (after setting up R0,R1,R2) 
    8989NHSTUB(exmem_alloc,                                             0xFF88FFD8)     // search for ExMem.AllocCacheable (from reyalp) 
     90NHSTUB(PutInNdFilter,                   0xFFB04E6C) 
     91NHSTUB(PutOutNdFilter,                  0xFFB04E90) 
    9092 
    9193# From stubs_entry_ida.s 
  • trunk/platform/g12/sub/100e/boot.c

    r1070 r1086  
    3333//} 
    3434 
     35extern void task_CaptSeq(); 
     36extern void task_InitFileModules(); 
     37extern void task_RotaryEncoder(); 
     38extern void task_MovieRecord(); 
     39extern void task_ExpDrv(); 
     40 
    3541void taskHook(context_t **context) 
    3642{  
    3743        task_t *tcb=(task_t*)((char*)context-offsetof(task_t, context)); 
    38  
    39         extern void task_CaptSeq(); 
    40         extern void task_InitFileModules(); 
    41         extern void task_RotaryEncoder(); 
    42         extern void task_MovieRecord(); 
    43         extern void task_ExpDrv(); 
    4444 
    4545        // Replace firmware task addresses with ours 
     
    4949        if(tcb->entry == (void*)task_MovieRecord)               tcb->entry = (void*)movie_record_task; 
    5050        if(tcb->entry == (void*)task_ExpDrv)                    tcb->entry = (void*)exp_drv_task; 
     51} 
     52 
     53void taskHook2(context_t **context) 
     54{  
    5155} 
    5256 
     
    173177        //http://chdk.setepontos.com/index.php/topic,4194.0.html 
    174178        *(int*)0x1938=(int)taskHook; 
     179        *(int*)0x193C=(int)taskHook2; // setting this to an empty function seems to fix startup crash in movie mode ??? 
    175180     
    176181        // replacement of sub_FF864BE0 for correct power-on. 
  • trunk/platform/g12/sub/100e/lib.c

    r1019 r1086  
    5555 
    5656 
    57 // TODO - ??? Is this needed ??? 
    5857void *vid_get_viewport_live_fb() 
    5958{ 
    60     return 0x0; 
     59        return (void*)(*(int*)(0x21F8));        // Found by searching RAM locations that referenced 0x40587700 (viewport buffer) 
     60                                                                                // and also changed to the other buffer addresses over time. Then used each here 
     61                                                                                // and selected value that gave the fastest Motion Detect response using http://dataghost.com/chdk/md_meter.html. 
    6162} 
    6263 
     
    6667} 
    6768 
    68 // TODO - check that this works 
    6969void *vid_get_viewport_fb_d() 
    7070{ 
  • trunk/platform/g12/sub/100e/stubs_entry_2.S

    r1028 r1086  
    3838NHSTUB(MoveZoomLensWithPoint,                   0xFFB051B8)     // ok (comp 1.00c) 
    3939NHSTUB(NewTaskShell,                                    0xff894f0c)     // ok (comp 1.00c) 
    40 NHSTUB(Open,                                                    0xFF873BFC)     // ok (comp 1.00c) 
     40NHSTUB(Open,                                                    0xFF81AADC)     // update 5/3/2011 to fix crash startup 
    4141NHSTUB(PostLogicalEventForNotPowerType, 0xff899b70)     // ok (comp 1.00c) 
    4242NHSTUB(PostLogicalEventToUI,                    0xff899bbc)     // ok (comp 1.00c) 
     
    8888NHSTUB(UpdateMBROnFlash,                                0xFF8767C8) // Search for 'BOOTDISK', function branches to this at end (after setting up R0,R1,R2) 
    8989NHSTUB(exmem_alloc,                                             0xFF88FFD8)     // search for ExMem.AllocCacheable (from reyalp) 
     90NHSTUB(PutInNdFilter,                   0xFFB0501C) 
     91NHSTUB(PutOutNdFilter,                  0xFFB05040) 
    9092 
    9193# From stubs_entry_ida.s 
  • trunk/platform/generic/shooting.c

    r1075 r1086  
    738738        defined (CAMERA_sx20) || \ 
    739739        defined (CAMERA_d10) || \ 
    740         defined (CAMERA_s95) 
     740        defined (CAMERA_s95) || \ 
     741        defined (CAMERA_g12) || defined (CAMERA_sx30) 
    741742   short n; 
    742743   // unlike other cameras, sx200 does set PROPCASE_DRIVE_MODE when in custom timer mode 
  • trunk/platform/sx30/sub/100e/boot.c

    r1068 r1086  
    3333//} 
    3434 
     35extern void task_CaptSeq(); 
     36extern void task_InitFileModules(); 
     37extern void task_RotaryEncoder(); 
     38extern void task_MovieRecord(); 
     39extern void task_ExpDrv(); 
     40 
    3541void taskHook(context_t **context) 
    3642{  
    3743        task_t *tcb=(task_t*)((char*)context-offsetof(task_t, context)); 
    38  
    39         extern void task_CaptSeq(); 
    40         extern void task_InitFileModules(); 
    41         extern void task_RotaryEncoder(); 
    42         extern void task_MovieRecord(); 
    43         extern void task_ExpDrv(); 
    4444 
    4545        // Replace firmware task addresses with ours 
     
    424424                 "BL      sub_FF89A2C0_my\n"                    // patched 
    425425 
    426                  "BL      core_spytask_can_start\n"      // CHDK: Set "it's-save-to-start"-Flag for spytask 
     426                 "BL      core_spytask_can_start\n"      // CHDK: Set "it's-safe-to-start" flag for spytask 
    427427 
    428428                                 "B                     sub_FF8A3B6C\n" // Continue in firmware 
  • trunk/platform/sx30/sub/100e/lib.c

    r1024 r1086  
    5454 
    5555 
    56 void *vid_get_viewport_live_fb() // ??? 
     56void *vid_get_viewport_live_fb() 
    5757{ 
    58     return 0x0; 
     58        // Values below found by searching firmware for references & usage of viewport buffer address 0x40587700 
     59        // then experimenting to see what gave best Motion Detector speed results using http://dataghost.com/chdk/md_meter.html. 
     60        long* t = (long*)0xFFB96808;                                            // Table of viewport buffer addresses (@FF853F24 in _sub_FF853DC0__LiveImage.c__10) 
     61        unsigned char i = *((unsigned char*)(0x20a8));          // Index value (byte) stored here (@FF853F50 in _sub_FF853DC0__LiveImage.c__10) 
     62        return (void*)t[(i-1)&3];                                                       // Appears to be 4 buffers, current index - 1 seems best 
    5963} 
    6064 
  • trunk/platform/sx30/sub/100e/stubs_entry_2.S

    r1028 r1086  
    3838NHSTUB(MoveZoomLensWithPoint,                   0xFFAE9450)     // ok (comp 1.00h) (from function table @FFC4EFF0) 
    3939NHSTUB(NewTaskShell,                                    0xff8993e4) // ok (comp 1.00h) 
    40 NHSTUB(Open,                                                    0xff874500) // ok (comp 1.00h) 
     40NHSTUB(Open,                                                    0xFF81AADC)     // update 5/3/2011 to fix crash startup 
    4141NHSTUB(PostLogicalEventForNotPowerType, 0xff89e028) // ok (comp 1.00h) 
    4242NHSTUB(PostLogicalEventToUI,                    0xff89e074) // ok (comp 1.00h) 
  • trunk/platform/sx30/sub/100h/boot.c

    r1068 r1086  
    3333//} 
    3434 
     35extern void task_CaptSeq(); 
     36extern void task_InitFileModules(); 
     37extern void task_RotaryEncoder(); 
     38extern void task_MovieRecord(); 
     39extern void task_ExpDrv(); 
     40 
    3541void taskHook(context_t **context) 
    3642{  
    3743        task_t *tcb=(task_t*)((char*)context-offsetof(task_t, context)); 
    38  
    39         extern void task_CaptSeq(); 
    40         extern void task_InitFileModules(); 
    41         extern void task_RotaryEncoder(); 
    42         extern void task_MovieRecord(); 
    43         extern void task_ExpDrv(); 
    4444 
    4545        // Replace firmware task addresses with ours 
  • trunk/platform/sx30/sub/100h/lib.c

    r1024 r1086  
    5454 
    5555 
    56 void *vid_get_viewport_live_fb() // ??? 
     56void *vid_get_viewport_live_fb() 
    5757{ 
    58     return 0x0; 
     58        // Values below found by searching firmware for references & usage of viewport buffer address 0x40587700 
     59        // then experimenting to see what gave best Motion Detector speed results using http://dataghost.com/chdk/md_meter.html. 
     60        long* t = (long*)0xFFB968C4;                                            // Table of viewport buffer addresses (@FF853F24 in _sub_FF853DC0__LiveImage.c__10) 
     61        unsigned char i = *((unsigned char*)(0x20a8));          // Index value (byte) stored here (@FF853F50 in _sub_FF853DC0__LiveImage.c__10) 
     62        return (void*)t[(i-1)&3];                                                       // Appears to be 4 buffers, current index - 1 seems best 
    5963} 
    6064 
  • trunk/platform/sx30/sub/100h/stubs_entry_2.S

    r1028 r1086  
    3838NHSTUB(MoveZoomLensWithPoint,                   0xffae950c)     // ok (from function table @FFC4F0AC) 
    3939NHSTUB(NewTaskShell,                                    0xff8993e4) // ok (comp sx20) 
    40 NHSTUB(Open,                                                    0xff874500) // ok 
     40NHSTUB(Open,                                                    0xFF81AADC)     // update 5/3/2011 to fix crash startup 
    4141NHSTUB(PostLogicalEventForNotPowerType, 0xff89e028) // ok (comp sx20) 
    4242NHSTUB(PostLogicalEventToUI,                    0xff89e074) // ok 
  • trunk/platform/sx30/sub/100l/boot.c

    r1068 r1086  
    3333//} 
    3434 
     35extern void task_CaptSeq(); 
     36extern void task_InitFileModules(); 
     37extern void task_RotaryEncoder(); 
     38extern void task_MovieRecord(); 
     39extern void task_ExpDrv(); 
     40 
    3541void taskHook(context_t **context) 
    3642{  
    3743        task_t *tcb=(task_t*)((char*)context-offsetof(task_t, context)); 
    38  
    39         extern void task_CaptSeq(); 
    40         extern void task_InitFileModules(); 
    41         extern void task_RotaryEncoder(); 
    42         extern void task_MovieRecord(); 
    43         extern void task_ExpDrv(); 
    4444 
    4545        // Replace firmware task addresses with ours 
  • trunk/platform/sx30/sub/100l/capt_seq.c

    r1065 r1086  
    44 
    55// TODO ???? 
    6 static long *nrflag = (long*)0xE15C; // probably wrong FFAEC840 (comp s95) 
     6static long *nrflag = (long*)0xE15C; // in sub_FFAEC6E8 (comp D10) 
    77 
    88#include "../../../generic/capt_seq.c" 
  • trunk/platform/sx30/sub/100l/lib.c

    r1024 r1086  
    5454 
    5555 
    56 void *vid_get_viewport_live_fb() // ??? 
     56void *vid_get_viewport_live_fb() 
    5757{ 
    58     return 0x0; 
     58        // Values below found by searching firmware for references & usage of viewport buffer address 0x40587700 
     59        // then experimenting to see what gave best Motion Detector speed results using http://dataghost.com/chdk/md_meter.html. 
     60        long* t = (long*)0xFFB96A6C;                                            // Table of viewport buffer addresses (@FF853F24 in _sub_FF853DC0__LiveImage.c__10) 
     61        unsigned char i = *((unsigned char*)(0x20a8));          // Index value (byte) stored here (@FF853F50 in _sub_FF853DC0__LiveImage.c__10) 
     62        return (void*)t[(i-1)&3];                                                       // Appears to be 4 buffers, current index - 1 seems best 
    5963} 
    6064 
  • trunk/platform/sx30/sub/100l/stubs_entry_2.S

    r1028 r1086  
    3838NHSTUB(MoveZoomLensWithPoint,                   0xFFAE96B4)     // ok (comp 1.00h) 
    3939NHSTUB(NewTaskShell,                                    0xff8993e8) // ok (comp 1.00h) 
    40 NHSTUB(Open,                                                    0xff874500) // ok (comp 1.00h) 
     40NHSTUB(Open,                                                    0xFF81AADC)     // update 5/3/2011 to fix crash startup 
    4141NHSTUB(PostLogicalEventForNotPowerType, 0xff89e02c) // ok (comp 1.00h) 
    4242NHSTUB(PostLogicalEventToUI,                    0xff89e078) // ok (comp 1.00h) 
Note: See TracChangeset for help on using the changeset viewer.