/* * 500D 1.1.1 consts */ #define CANON_SHUTTER_RATING 100000 #define CARD_LED_ADDRESS 0xC0220134 // http://magiclantern.wikia.com/wiki/Led_addresses. TODO: Alex, plese double check it. reboot.c used a different address #define LEDON 0x46 #define LEDOFF 0x44 #define HIJACK_INSTR_BL_CSTART 0xFF012AE8 #define HIJACK_INSTR_BSS_END 0xFF01093C #define HIJACK_FIXBR_BZERO32 0xFF0108A4 #define HIJACK_FIXBR_CREATE_ITASK 0xFF01092C #define HIJACK_INSTR_MY_ITASK 0xFF010948 #define HIJACK_TASK_ADDR 0x1A74 #define ARMLIB_OVERFLOWING_BUFFER 0x244c0 // in AJ_armlib_setup_related3 #define DRYOS_ASSERT_HANDLER 0x1A18 // dec TH_assert or assert_0 // 720x480, changes when external monitor is connected #define YUV422_LV_BUFFER_1 0x41B07800 #define YUV422_LV_BUFFER_2 0x43738800 #define YUV422_LV_BUFFER_3 0x43B48800 #define YUV422_LV_PITCH 1440 //~ #define YUV422_LV_PITCH_RCA 1080 //~ #define YUV422_LV_PITCH_HDMI 3840 //~ #define YUV422_LV_HEIGHT 480 //~ #define YUV422_LV_HEIGHT_RCA 540 //~ #define YUV422_LV_HEIGHT_HDMI 1080 #define REG_EDMAC_WRITE_LV_ADDR 0xc0f26208 // SDRAM address of LV buffer (aka VRAM) #define REG_EDMAC_WRITE_HD_ADDR 0xc0f04008 // SDRAM address of HD buffer (aka YUV) #define YUV422_LV_BUFFER_DISPLAY_ADDR (*(uint32_t*)0x26A8) #define YUV422_HD_BUFFER_DMA_ADDR (shamem_read(REG_EDMAC_WRITE_HD_ADDR)) #define YUV422_HD_BUFFER_1 0x44000080 #define YUV422_HD_BUFFER_2 0x46000080 // guess #define FOCUS_CONFIRMATION (*(int*)0x3edc) // see "focusinfo" and Wiki:Struct_Guessing #define HALFSHUTTER_PRESSED (*(int*)0x1b74) // used for Trap Focus and Magic Off. //~ #define AF_BUTTON_PRESSED_LV 0 // To find it, go to MainCtrl task and take the number from the second line minus 4. // See also "cam event metering" //~ #define DISPLAY_SENSOR (*(int*)0x2dec) //~ #define DISPLAY_SENSOR_ACTIVE (*(int*)0xC0220104) #define DISPLAY_SENSOR_POWERED (*(int*)0x328c) // dec AJ_Req_DispSensorStart #define LV_BOTTOM_BAR_DISPLAYED (MEM(0x329D8) != 3) #define ISO_ADJUSTMENT_ACTIVE ((*(int*)0x784C) == 0xF) // dec ptpNotifyOlcInfoChanged and look for: if arg1 == 1: MEM(0x79B8) = *(arg2) #define SHOOTING_MODE (*(int*)0x313C) #define COLOR_FG_NONLV 80 #define MVR_190_STRUCT (*(void**)0x1e90) // look in MVR_Initialize for AllocateMemory call; decompile it and see where ret_AllocateMemory is stored. #define div_maybe(a,b) ((a)/(b)) // see mvrGetBufferUsage, which is not really safe to call => err70 // macros copied from arm-console #define MVR_BUFFER_USAGE div_maybe(-100*MEM(316 + MVR_190_STRUCT) - 100*MEM(324 + MVR_190_STRUCT) - 100*MEM(496 + MVR_190_STRUCT) - 100*MEM(504 + MVR_190_STRUCT) + 100*MEM(320 + MVR_190_STRUCT) + 100*MEM(328 + MVR_190_STRUCT), -MEM(316 + MVR_190_STRUCT) - MEM(324 + MVR_190_STRUCT) + MEM(320 + MVR_190_STRUCT) + MEM(328 + MVR_190_STRUCT)) #define MVR_FRAME_NUMBER (*(int*)(300 + MVR_190_STRUCT)) //#define MVR_LAST_FRAME_SIZE (*(int*)(512 + MVR_190_STRUCT)) #define MVR_BYTES_WRITTEN MEM((292 + MVR_190_STRUCT)) #define MOV_RES_AND_FPS_COMBINATIONS 3 #define MOV_OPT_NUM_PARAMS 2 #define MOV_GOP_OPT_NUM_PARAMS 3 #define MOV_OPT_STEP 5 #define MOV_GOP_OPT_STEP 3 #define AE_STATE (*(int8_t*)(0x14CC8 + 0x1C)) #define AE_VALUE (*(int8_t*)(0x14CC8 + 0x1D)) #define CURRENT_GUI_MODE (*(int*)0x3a9c) #define GUIMODE_WB 0x24 #define GUIMODE_FOCUS_MODE 0x27 #define GUIMODE_DRIVE_MODE 0x28 #define GUIMODE_PICTURE_STYLE 0x23 #define GUIMODE_PLAY 1 #define GUIMODE_MENU 2 #define GUIMODE_Q_UNAVI 0x1E #define GUIMODE_FLASH_AE 0x21 #define GUIMODE_PICQ 0x26 #define GUIMODE_MOVIE_ENSURE_A_LENS_IS_ATTACHED (CURRENT_GUI_MODE == 0x1B) #define GUIMODE_MOVIE_PRESS_LV_TO_RESUME (CURRENT_GUI_MODE == 0x1B) #define AUDIO_MONITORING_HEADPHONES_CONNECTED (!((*(int*)0xc0220070) & 1)) #define HOTPLUG_VIDEO_OUT_PROP_DELIVER_ADDR 0x1afc // this prop_deliver performs the action for Video Connect and Video Disconnect #define HOTPLUG_VIDEO_OUT_STATUS_ADDR 0x1b20 // passed as 2nd arg to prop_deliver; 1 = display connected, 0 = not, other values disable this event (trick) #define PLAY_MODE (gui_state == GUISTATE_PLAYMENU && CURRENT_GUI_MODE == GUIMODE_PLAY) #define MENU_MODE (gui_state == GUISTATE_PLAYMENU && CURRENT_GUI_MODE == GUIMODE_MENU) // In bindGUIEventFromGUICBR, look for "LV Set" => arg0 = 6 // Next, in SetGUIRequestMode, look at what code calls NotifyGUIEvent(6, something) #define GUIMODE_ML_MENU (is_movie_mode() ? 0 : lv ? 43 : 2) // position for ML ISO disp outside LV #define MENU_DISP_ISO_POS_X 470 #define MENU_DISP_ISO_POS_Y 40 //position for ML MAX ISO not present on 500D //#define MAX_ISO_POS_X 590 //#define MAX_ISO_POS_Y 28 // for ML hdr display #define HDR_STATUS_POS_X 560 //was 380 #define HDR_STATUS_POS_Y 100 //was 450 //for HTP mode on display #define HTP_STATUS_POS_X 410 #define HTP_STATUS_POS_Y 220 //for Mirror Lock Up enabled on display #define MLU_STATUS_POS_X 670 #define MLU_STATUS_POS_Y 316 //#define WBS_POS_X 365 //#define WBS_POS_Y 260 //#define WBS_GM_POS_X 365 //#define WBS_GM_POS_Y 230 // Audio remote shot position info photo mode #define AUDIO_REM_SHOT_POS_X 200 #define AUDIO_REM_SHOT_POS_Y 386 // position for displaying clock outside LV #define DISPLAY_CLOCK_POS_X 41 #define DISPLAY_CLOCK_POS_Y 259 // position for displaying K icon in photo info display #define DISPLAY_KELVIN_POS_X 487 #define DISPLAY_KELVIN_POS_Y 580 // position for displaying card size remain outside LV #define DISPLAY_GB_POS_X 32 #define DISPLAY_GB_POS_Y 144 // for displaying TRAP FOCUS msg outside LV #define DISPLAY_TRAP_FOCUS_POS_X 401 #define DISPLAY_TRAP_FOCUS_POS_Y 326 #define DISPLAY_TRAP_FOCUS_MSG " TRAP \n FOCUS " #define DISPLAY_TRAP_FOCUS_MSG_BLANK " \n " // not needed, camera redraws the place itself #define NUM_PICSTYLES 9 #define FLASH_MAX_EV 3 #define FLASH_MIN_EV -10 // not sure if it actually works #define FASTEST_SHUTTER_SPEED_RAW 152 #define MAX_AE_EV 2 #define DIALOG_MnCardFormatBegin (0x242AC+4) // ret_CreateDialogBox(...DlgMnCardFormatBegin_handler...) is stored there #define DIALOG_MnCardFormatExecute (0x24398+4) // similar #define FORMAT_BTN_NAME "[LiveView]" #define FORMAT_BTN BGMT_LV #define FORMAT_STR_LOC 12 #define BULB_MIN_EXPOSURE 1000 // http://magiclantern.wikia.com/wiki/Fonts #define BFNT_CHAR_CODES 0xFF61E250 #define BFNT_BITMAP_OFFSET 0xFF6206D8 #define BFNT_BITMAP_DATA 0xFF622B60 // from CFn #define AF_BTN_HALFSHUTTER 0 #define AF_BTN_STAR 1 #define IMGPLAY_ZOOM_LEVEL_ADDR (0x14BB0) // dec GuiImageZoomDown and look for a negative counter #define IMGPLAY_ZOOM_LEVEL_MAX 14 #define IMGPLAY_ZOOM_POS_X MEM(0x373E0) // Zoom CentrePos #define IMGPLAY_ZOOM_POS_Y MEM(0x373E4) #define IMGPLAY_ZOOM_POS_X_CENTER 0x252 #define IMGPLAY_ZOOM_POS_Y_CENTER 0x18c #define IMGPLAY_ZOOM_POS_DELTA_X (0x252 - 0x117) #define IMGPLAY_ZOOM_POS_DELTA_Y (0x18c - 0xb4) #define BULB_EXPOSURE_CORRECTION 150 // min value for which bulb exif is OK #define WINSYS_BMP_DIRTY_BIT_NEG MEM(0x1888c+0x30) // DebugMsg(4, 2, msg='Whole Screen Backup end') // winsys_struct.WINSYS_BMP_DIRTY_BIT_NEG /*off_0x30, 0x188BC*/ = 0 // manual exposure overrides #define LVAE_STRUCT 0x168B8 #define CONTROL_BV (*(uint16_t*)(LVAE_STRUCT+0x16)) // EP_SetControlBv #define CONTROL_BV_TV (*(uint16_t*)(LVAE_STRUCT+0x18)) // EP_SetControlParam #define CONTROL_BV_AV (*(uint16_t*)(LVAE_STRUCT+0x1a)) #define CONTROL_BV_ISO (*(uint16_t*)(LVAE_STRUCT+0x1c)) #define CONTROL_BV_ZERO (*(uint16_t*)(LVAE_STRUCT+0x1e)) #define LVAE_ISO_SPEED (*(uint8_t* )(LVAE_STRUCT)) // offset 0x0; at 3 it changes iso very slowly #define LVAE_ISO_MIN (*(uint8_t* )(LVAE_STRUCT+0x24)) // string: ISOMin:%d #define LVAE_ISO_HIS (*(uint8_t* )(LVAE_STRUCT+0x26)) // no idea what this is #define LVAE_DISP_GAIN (*(uint16_t*)(LVAE_STRUCT+0x20)) // lvae_setdispgain #define LVAE_MOV_M_CTRL (*(uint8_t* )(LVAE_STRUCT+0x5c)) // lvae_setmoviemanualcontrol #define MIN_MSLEEP 11 #define INFO_BTN_NAME "DISP" #define Q_BTN_NAME "LV button" #define ARROW_MODE_TOGGLE_KEY "LCD sensor" #define DISPLAY_IS_ON MEM(0x2600) // TurnOnDisplay (PUB) Type=%ld fDisplayTurnOn=%ld #define LV_STRUCT_PTR 0x1d78 #define FRAME_ISO *(uint16_t*)(MEM(LV_STRUCT_PTR) + 0x56) //~ #define FRAME_SHUTTER_TIMER *(uint16_t*)(MEM(LV_STRUCT_PTR) + 0x58) NG // see "Malloc Information" #define MALLOC_STRUCT 0x24d48 #define MALLOC_FREE_MEMORY (MEM(MALLOC_STRUCT + 24 + 4) - MEM(MALLOC_STRUCT + 24 + 8)) // "Total Size" - "Allocated Size" #define SRM_BUFFER_SIZE 0x1AE0000 /* print it from srm_malloc_cbr */ //~ max volume supported for beeps #define ASIF_MAX_VOL 5 // temperature convertion from raw-temperature to celsius // http://www.magiclantern.fm/forum/index.php?topic=9673.0 #define EFIC_CELSIUS ((int)efic_temp * 120 / 100 - 160)