Taking a close look at these two tests in the selftest module:
TEST_VOID(GUI_Control(BGMT_PLAY, 0, 0, 0); msleep(1000););
TEST_VOID(GUI_Control(BGMT_MENU, 0, 0, 0); msleep(500););
After running each one how about printing out which mode the camera is in:
TEST_MSG("[INFO] MENU_MODE: 0x%X\n", MENU_MODE);
TEST_MSG("[INFO] PLAY_MODE: 0x%X\n", PLAY_MODE);
Testing on the EOSM to see how it is supposed to work:
EOSM
GUI_Control(BGMT_PLAY, 0, 0, 0); msleep(1000);
[INFO] MENU_MODE: 0x0
[INFO] PLAY_MODE: 0x1
GUI_Control(BGMT_MENU, 0, 0, 0); msleep(500);
[INFO] MENU_MODE: 0x1
[INFO] PLAY_MODE: 0x0
GUI_Control(BGMT_PLAY, 0, 0, 0); msleep(1000);
[INFO] MENU_MODE: 0x0
[INFO] PLAY_MODE: 0x1
GUI_Control(BGMT_MENU, 0, 0, 0); msleep(500);
[INFO] MENU_MODE: 0x1
[INFO] PLAY_MODE: 0x0
GUI_Control(BGMT_PLAY, 0, 0, 0); msleep(1000);
[INFO] MENU_MODE: 0x0
[INFO] PLAY_MODE: 0x1
GUI_Control(BGMT_MENU, 0, 0, 0); msleep(500);
[INFO] MENU_MODE: 0x1
[INFO] PLAY_MODE: 0x0
GUI_Control(BGMT_PLAY, 0, 0, 0); msleep(1000);
[INFO] MENU_MODE: 0x0
[INFO] PLAY_MODE: 0x1
GUI_Control(BGMT_MENU, 0, 0, 0); msleep(500);
[INFO] MENU_MODE: 0x1
[INFO] PLAY_MODE: 0x0
GUI_Control(BGMT_MENU, 0, 0, 0); msleep(500);
[INFO] MENU_MODE: 0x0
[INFO] PLAY_MODE: 0x0
GUI_Control(BGMT_MENU, 0, 0, 0); msleep(500);
[INFO] MENU_MODE: 0x1
[INFO] PLAY_MODE: 0x0
GUI_Control(BGMT_MENU, 0, 0, 0); msleep(500);
[INFO] MENU_MODE: 0x0
[INFO] PLAY_MODE: 0x0
GUI_Control(BGMT_PLAY, 0, 0, 0); msleep(1000);
[INFO] MENU_MODE: 0x0
[INFO] PLAY_MODE: 0x1
GUI_Control(BGMT_PLAY, 0, 0, 0); msleep(1000);
[INFO] MENU_MODE: 0x0
[INFO] PLAY_MODE: 0x0
GUI_Control(BGMT_PLAY, 0, 0, 0); msleep(1000);
[INFO] MENU_MODE: 0x0
[INFO] PLAY_MODE: 0x1
GUI_Control(BGMT_PLAY, 0, 0, 0); msleep(1000);
[INFO] MENU_MODE: 0x0
[INFO] PLAY_MODE: 0x0
Changing from play to menu to play makes sense. I didn't expect it to toggle the mode on/off, learned something new.
Now how about the EOSM2:
EOSM2
GUI_Control(BGMT_PLAY, 0, 0, 0); msleep(1000);
[INFO] MENU_MODE: 0x0
[INFO] PLAY_MODE: 0x1
GUI_Control(BGMT_MENU, 0, 0, 0); msleep(500);
[INFO] MENU_MODE: 0x0
[INFO] PLAY_MODE: 0x1
GUI_Control(BGMT_PLAY, 0, 0, 0); msleep(1000);
[INFO] MENU_MODE: 0x0
[INFO] PLAY_MODE: 0x0
GUI_Control(BGMT_MENU, 0, 0, 0); msleep(500);
[INFO] MENU_MODE: 0x1
[INFO] PLAY_MODE: 0x0
GUI_Control(BGMT_PLAY, 0, 0, 0); msleep(1000);
[INFO] MENU_MODE: 0x0
[INFO] PLAY_MODE: 0x1
GUI_Control(BGMT_MENU, 0, 0, 0); msleep(500);
[INFO] MENU_MODE: 0x0
[INFO] PLAY_MODE: 0x1
GUI_Control(BGMT_PLAY, 0, 0, 0); msleep(1000);
[INFO] MENU_MODE: 0x0
[INFO] PLAY_MODE: 0x0
GUI_Control(BGMT_MENU, 0, 0, 0); msleep(500);
[INFO] MENU_MODE: 0x1
[INFO] PLAY_MODE: 0x0
GUI_Control(BGMT_MENU, 0, 0, 0); msleep(500);
[INFO] MENU_MODE: 0x0
[INFO] PLAY_MODE: 0x0
GUI_Control(BGMT_MENU, 0, 0, 0); msleep(500);
[INFO] MENU_MODE: 0x1
[INFO] PLAY_MODE: 0x0
GUI_Control(BGMT_MENU, 0, 0, 0); msleep(500);
[INFO] MENU_MODE: 0x0
[INFO] PLAY_MODE: 0x0
GUI_Control(BGMT_PLAY, 0, 0, 0); msleep(1000);
[INFO] MENU_MODE: 0x0
[INFO] PLAY_MODE: 0x1
GUI_Control(BGMT_PLAY, 0, 0, 0); msleep(1000);
[INFO] MENU_MODE: 0x0
[INFO] PLAY_MODE: 0x0
GUI_Control(BGMT_PLAY, 0, 0, 0); msleep(1000);
[INFO] MENU_MODE: 0x0
[INFO] PLAY_MODE: 0x1
GUI_Control(BGMT_PLAY, 0, 0, 0); msleep(1000);
[INFO] MENU_MODE: 0x0
[INFO] PLAY_MODE: 0x0
The toggling works but there's a problem when in play mode and you switch to menu mode.
GUI_Control(BGMT_PLAY, 0, 0, 0); msleep(1000);
[INFO] MENU_MODE: 0x0
[INFO] PLAY_MODE: 0x1
GUI_Control(BGMT_MENU, 0, 0, 0); msleep(500);
[INFO] MENU_MODE: 0x0
[INFO] PLAY_MODE: 0x1
This is not an issue going the other way:
GUI_Control(BGMT_MENU, 0, 0, 0); msleep(500);
[INFO] MENU_MODE: 0x1
[INFO] PLAY_MODE: 0x0
GUI_Control(BGMT_PLAY, 0, 0, 0); msleep(1000);
[INFO] MENU_MODE: 0x0
[INFO] PLAY_MODE: 0x1
Just for the record, I did these tests like this:
modules/selftest/selftest.c
static void stub_test_gui()
{
msleep(1000);
TEST_VOID(GUI_Control(BGMT_MENU, 0, 0, 0); msleep(500););
TEST_MSG("[INFO] MENU_MODE: 0x%X\n", MENU_MODE);
TEST_MSG("[INFO] PLAY_MODE: 0x%X\n", PLAY_MODE);
TEST_VOID(GUI_Control(BGMT_PLAY, 0, 0, 0); msleep(1000););
TEST_MSG("[INFO] MENU_MODE: 0x%X\n", MENU_MODE);
TEST_MSG("[INFO] PLAY_MODE: 0x%X\n", PLAY_MODE);
}
Any hints on which stub is the culprit here?
[EDIT] Can't be this, can it?
platform/EOSM2.103/gui.h
#define BGMT_MENU 0x6