Hiding Bottom Bar for good.

Started by 1%, April 20, 2013, 10:28:56 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

1%

Ok, so I've discovered we don't need the debugmsg hack for the bottom bar.

EOS_M
UNAVI_FEEDBACK_TIMER_ACTIVE (MEM(0x5D858) == 0x2)

6D
UNAVI_FEEDBACK_TIMER_ACTIVE (MEM(0x8418c) == 0x2)

Look around that DebugMsg locaton near all of the 0x17 values and you'll see an int that goes 1 or 3 when in LV but 2 when you hold h/s and bottom bar is displayed. You will find the value for remaining 2 cameras.


Its pretty reliable... then we can just move the Mem(location) = 0 to where its currently running HideUnaviFeedbackTimer.

BTW: ALL of those functions are wrong. That location is always 0x17 and running this function does nothing.

Need to find the function that creates/draws the bar in the first place (and probably changes this value). There is probably another location you can set to 0. I have been unsuccessful at cache hacking anything around there... the bar still displays, nothing hides. Also metering is seperate and redraws when exposure changes over both 6D and EOS M... even with the previous debugmesg.

The setting of the location to 0 kills it but I guess an update to metering resets that 0 again. So any ideas where the bar is actually spawned?

1%

Ok I think this doesnt work for the scroll wheels.

Have to investigate that.

nanomad

A timer value of 0x17 means the timer has not been initialized yet  ;)
EOS 1100D | EOS 650 (No, I didn't forget the D) | Ye Olde Canon EF Lenses ('87): 50 f/1.8 - 28 f/2.8 - 70-210 f/4 | EF-S 18-55 f/3.5-5.6 | Metz 36 AF-5

1%

It never seems to gets initialized on 6D and EOS M at least.  Without doing the message hack too the scroll wheels behave like h/s does now. So overlay pops and hides behind the menu. The message seems to get it pre-emptively.

There has to be a function to undraw the info screen. Being able to detect when the overlay is on we can run any function... I've tried a few that clear graphics but the best I could do was shutdown the LV app and blackout the screen.

Also its possible to disable the front buffer and redraw when the metering/bottom bar is active but I don't know how to do it cleanly. I wish I could find the function that runs when H/S is released so that UNAVI_FEEDBACK can run that instead of the function it runs now.







1%

I think I've found a solution:

https://bitbucket.org/OtherOnePercent/tragic-lantern-6d/commits/c7d34f9960b9f8b3eb5145698b9519aa7c31728e


Hides the bar, redraws, enables overlays back when shutter is released. Anything wrong with this code?
Added benefit of clearing the focus box from the screen and it kinda looks natural.

Done for EOSM too... for some reason 2nd line of the top bar doesn't redraw on EOS M but don't have this problem on 6D, why?

I added the drawing of the black bars back... missing the little gray strip for some reason.

nanomad

Found what looks like a nice portable solution

consts.h


#define UNAVI (MEM(0x4188c)) // dec CancelUnaviFeedBackTimer, then look around that memory area for a location that changes when you keep HS pressed
#define UNAVI_AV (MEM(0x418C0)) //Same as above, but this location is linked to the exp comp button
#define UNAVI_FEEDBACK_TIMER_ACTIVE ((UNAVI == 2) || (UNAVI_AV != 0))


gui-common.c

#elif defined(CONFIG_650D)
    if (lv && event->type == 2 && event->param == GMT_LOCAL_DIALOG_REFRESH_LV)
    {
        if (lv_disp_mode == 0 && get_global_draw_setting() && liveview_display_idle() && lv_dispsize == 1)
        {
            if (get_halfshutter_pressed()) bottom_bar_dirty = 10;
           
            if (fbuff && UNAVI_FEEDBACK_TIMER_ACTIVE)
            {
                clrscr();
                canon_gui_disable_front_buffer();
                bottom_bar_dirty=0;
                fbuff = 0;
            }   
            if (!fbuff && !UNAVI_FEEDBACK_TIMER_ACTIVE)
            {
                canon_gui_enable_front_buffer(0);
                fbuff=1;
            }   
        }   
        else
        {
            bottom_bar_dirty = 0;
        }   
       
        if (!liveview_display_idle()) bottom_bar_dirty = 0;
        if (bottom_bar_dirty) bottom_bar_dirty--;
       
        if (bottom_bar_dirty == 1)
        {
            lens_display_set_dirty();
        }   
    }   
#endif 
EOS 1100D | EOS 650 (No, I didn't forget the D) | Ye Olde Canon EF Lenses ('87): 50 f/1.8 - 28 f/2.8 - 70-210 f/4 | EF-S 18-55 f/3.5-5.6 | Metz 36 AF-5

1%

Does it do scroll wheel too? AV button on 600D doesn't bring up the expo meter I think 6D neither (no button).


The unavi timer in the tree is for when you press q in LV and those menus.

nanomad

Yes it does :)

They appear for a split second though (until redraw kicks in)
EOS 1100D | EOS 650 (No, I didn't forget the D) | Ye Olde Canon EF Lenses ('87): 50 f/1.8 - 28 f/2.8 - 70-210 f/4 | EF-S 18-55 f/3.5-5.6 | Metz 36 AF-5

1%

On 6D and 600D I still had to use the other hack... I only wish it were more seamless. Dunno if its better to clear the screen before or after the buffer. I'll see if thats why I have to redraw the bars.

nanomad

Quote from: 1% on May 11, 2013, 12:53:10 AM
On 6D and 600D I still had to use the other hack... I only wish it were more seamless. Dunno if its better to clear the screen before or after the buffer. I'll see if thats why I have to redraw the bars.
Did you find both unavi and unavi_av?
EOS 1100D | EOS 650 (No, I didn't forget the D) | Ye Olde Canon EF Lenses ('87): 50 f/1.8 - 28 f/2.8 - 70-210 f/4 | EF-S 18-55 f/3.5-5.6 | Metz 36 AF-5

1%

I have no AV button on 6D. On 600D it doesn't bring up any expo stuff (or change anything around the memory area memory).. does the other timer move with scroll wheels, I couldn't find anything like that with either camera. I did find some timer like this that comes on when LV starts.

Black bars have to be redrawn only for display filters.