GUIMODE needed for Rebel cameras (500D, 550D, 650D, 700D, 1000D, 800D,...)

Started by scrax, March 13, 2019, 02:15:09 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

scrax

I have updated my old PR for Custom Modes and more GUI options for my 600D to a separated module.
Now my 600D has 3 c-modes and more setting to change from the standard dialog canon use for the four arrow button: WB, Drive mode, Focus option and PicStyles.

The module override button presses in photo mode (not LV) of the arrow to open up the GUIMODE_Q of the same dialog screen because it don't need set to pressed to change the value (and I like it better because if you press halfshutter you don't lose the setting).
Then in those dialog screen it show additional seeting to change with arrow, scrollweel and other buttons.

To work on other camera it needs some missing GUIMODE in platform/x00D.xxx/consts.h and uncomment #define FEATURE_REBEL_GUI  in platform/x00D.xxx/features.h
If someone with those cameras can find those guimode we can make it work on other camera:
500D, 550D, 650D, 700D, 800D, 1000D, other Rebels? (how to find in second post)

For 500D I can compile the module but Picture Style override option will not work for this two GUIMODE because missing

  #define GUIMODE_Q_EXP_COMP_AEB GUIMODE_PICTURE_STYLE // Q Exposition compensation and AEB
  #define GUIMODE_Q_ALO GUIMODE_PICTURE_STYLE // Q Auto Light optimizer settings


(this is what I have for 700D for example):

#define CURRENT_GUI_MODE (*(int*)0x2658C) // in SetGUIRequestMode
#define GUIMODE_PLAY 1
#define GUIMODE_MENU 2
// #define GUIMODE_PICTURE_STYLE 0x
#define GUIMODE_FOCUS_MODE 0x123456
// #define GUIMODE_Q_PICQ 0x
// #define GUIMODE_Q_EXP_COMP_AEB 0x
// #define GUIMODE_Q_FLASH_EXP_COMP 0x
// #define GUIMODE_Q_ALO 0x
// #define GUIMODE_Q_ISO 0x
// #define GUIMODE_Q_FOCUS_MODE 0x
// #define GUIMODE_WB 0x
// #define GUIMODE_Q_WB 0x
// #define GUIMODE_DRIVE_MODE 0x
// #define GUIMODE_Q_DRIVE_MODE 0x


The module is hard to explain but once used is hard to work without because it make really faster to change setting without opening menus.
To see some old screenshot: here
I'm using ML2.3 for photography with:
EOS 600DML | EOS 400Dplus | EOS 5D MLbeta5- EF 100mm f/2.8 USM Macro  - EF-S 17-85mm f4-5.6 IS USM - EF 70-200mm f/4 L USM - 580EXII - OsX, PS, LR, RawTherapee, LightZone -no video experience-

scrax

To find the GUIMODE missing you have to be able to compile ML and edit the code.

enable FEATURE_GUIMODE_TEST for your camera and the edit debug.c

Find this:
static void run_test()
{
}

and add this inside:

static void run_test()
{
    guimode_test();
}

Now you can compile and load the new autoexec.bin in your camera.

clicking "don't press me" will start this test and save a screenshot for each guimode, so follow it and keep track of which one switch number.

The test should remember if a GUIMODE gave problem when trying it so if camera gives errors or locks up try restarting it at first and re do the test.
For my 600D around at 30 loop it gives a guimode that give error and need to remove battery, so after some try from 0 to 30 i then changed
    for (int i = 0; i < 99; i++)
to
    for (int i = 31; i < 99; i++)
and run again to make it start from 31 and so to skip 30.

#ifdef FEATURE_GUIMODE_TEST
// beware, might be dangerous, some gui modes will give errors
void guimode_test()
{
    msleep(1000);
    for (int i = 0; i < 99; i++). //Try all guimode from 0 to 99
    {
        // some GUI modes may lock-up the camera or reboot
        // if this is the case, the troublesome mode will be skipped at next reboot.
        char fn[50];
        snprintf(fn, sizeof(fn), "VRAM%d.BMP", i);

        if (FIO_GetFileSize_direct(fn) != 0xFFFFFFFF) // this gui mode was already tested?
            continue;

        NotifyBox(500, "Trying GUI mode %d...", i);
        dump_seg(0, 0, fn); // temporary flag to indicate that this GUI mode was tried (and probably found to be troublesome)
        msleep(200);

        SetGUIRequestMode(i);

        msleep(1000);
        FIO_RemoveFile(fn);

        take_screenshot(SCREENSHOT_FILENAME_AUTO, SCREENSHOT_BMP);

        // try to reset to initial gui mode
        SetGUIRequestMode(0);
        SetGUIRequestMode(1);
        SetGUIRequestMode(0);

        msleep(1000);
    }
}
#endif
I'm using ML2.3 for photography with:
EOS 600DML | EOS 400Dplus | EOS 5D MLbeta5- EF 100mm f/2.8 USM Macro  - EF-S 17-85mm f4-5.6 IS USM - EF 70-200mm f/4 L USM - 580EXII - OsX, PS, LR, RawTherapee, LightZone -no video experience-

a1ex

These can be found in QEMU, on most DIGIC 3/4/5 models (except 7D).

scrax

I'm using ML2.3 for photography with:
EOS 600DML | EOS 400Dplus | EOS 5D MLbeta5- EF 100mm f/2.8 USM Macro  - EF-S 17-85mm f4-5.6 IS USM - EF 70-200mm f/4 L USM - 580EXII - OsX, PS, LR, RawTherapee, LightZone -no video experience-

scrax

I've tried to use CONFIG_INT for saving and restoring camera settings instead of writing a specific file for the module but came into some issue.

At first try settings were saved only if in ML menu, but not from the GUIMODE where C modes are shown.
Another problem I got is that before by saving each value to a file I didn't had any defaults and they were alway saved all.
Now I've set 0 as default for each value but if the setting we are saving is actually 0 it will not be saved to the module configs file. This broke how I was setting Kelvin or WB previously (kelvin was saved only if it was set so if missing in the file it was not restored, now there is always a value for it).


To make it easier to review I've moved c-modes code out from "Rebel GUI" module and made one specific "C-Modes" module.

Problem is that they should share some variables and I don't know how to handle it, so I've removed that part in C-modes and made it a little more hardcoded than before just to have a working module for now.

But..

Both modules are looking for button press in same GUIMODE_PICTURE_STYLE and that cause them to hang buttons when camera starts, If loaded one by one they work good.

So after a couple of days of insuccess I'm thinking that I should keep one module only approach like before?
I think one module only is ok because both Rebel GUI additions and C-Modes are features missing only on Rebel cameras, so ideally this module should be included only on supported models.

EDIT: found out how to avoid setting a default value with NULL instead of null as I was doing at first)
I'm using ML2.3 for photography with:
EOS 600DML | EOS 400Dplus | EOS 5D MLbeta5- EF 100mm f/2.8 USM Macro  - EF-S 17-85mm f4-5.6 IS USM - EF 70-200mm f/4 L USM - 580EXII - OsX, PS, LR, RawTherapee, LightZone -no video experience-

critix

Quote from: scrax on March 13, 2019, 02:22:56 PM
To find the GUIMODE missing you have to be able to compile ML and edit the code.
Good...
I tried the EOS M2. I ran guimode_test and I have many VRAMXXX.PPM images on my card.

I want to do the same with 500D.
Alex said:
QuoteThese can be found in QEMU, on most DIGIC 3/4/5 models
What to do next?
Maybe I missed something ...
Thank you
Canon 1300D, 500D, EOS M, EOS M2

scrax

Quote from: critix on July 04, 2019, 09:16:20 AM
Maybe I missed something ...
Thank you

If you already can load 500D dump in qemu procedure is the same, after enabling FEATURE_GUIMODE_TEST and edit debug.c just load the modified ML build in qemu instead of using it directly on the camera.

form here you should start the test from don't click me. Not sure if qemu will save the screenshot so maybe you need to take a video of it running to see the different GUIMODEs
I'm using ML2.3 for photography with:
EOS 600DML | EOS 400Dplus | EOS 5D MLbeta5- EF 100mm f/2.8 USM Macro  - EF-S 17-85mm f4-5.6 IS USM - EF 70-200mm f/4 L USM - 580EXII - OsX, PS, LR, RawTherapee, LightZone -no video experience-