Look Canon Basic/Reference for details about syntax.

Starting a draft page to document eventprocs this is an incomplete draft please update with your observations. Thread:,4417.0.html


An event procedure (or eventproc) is a function in the canon firmware associated with a text name. An API exists in the Canon firmware to register, execute and un-register them.

Event procedures are available from Canon Basic, and Canon Basic "Public" functions are event procedures.

The Canon firmware provides a mechanism to execute event procedures over PTP on many cameras.

Event Procedure API functions[]

  • int ExecuteEventProcedure(const char *name,...)

executes the named eventproc, with the supplied arguments. Returns -1 if the eventproc isn't registered. Otherwise, returns the eventprocs return value.

note on newer cameras (most dryos ?), there are two versions of this function. One returns -1 if the eventproc isn't registered, while the other triggers an assert. The assert version is called from most ROM code, while the other is used if ExecuteEventProcededure is called from script.

  • void ExportToEventProcedure(const char *name,void *pfunc)

registers eventproc pfunc with name. pfunc is expected to use the regular firmware calling convention. Registering an event procedure with a name that is already registered replaces the existing eventproc.

  • void *CreateProxyOfEventProcedure(const char *name)

creates a native wrapper for the specified eventproc, meaning the proxy uses the firmware's calling convention. This allows an event procedure to be passed to functions that expect a function pointer. Only a small number, proxies can be created, typically 20. (ref)

  • void DeleteProxyOfEventProcedure(const char *name)

deletes an existing proxy.

Lua interface[]

Event procedures may be called from lua using the Lua/Lua Reference/Native Function Calls interface.

Event Procedures as hooks[]

Some event procedures can be called automatically from camera code at various points, allowing them to be used as hooks. Thread,5690.0.html


Event procedures are directly useable in Event Shell which is available via UART serial connection with Camera.

Known event procedures[]

Below are some event procedures which have been found to be interesting or useful. Note that the existence, behavior and arguments expected are known to vary between camera models. When if something varies from the descriptions below for your camera, please note it.

A list of event procedures identified on A540 can be found at User:ReyalP/EventProcNotes

see also Canon_Basic/Reference

Basic Functions[]

These Functions are always available (DryOS)

  • Log functions
    • ShowCameraLog
    • ShowCameraLogInfo
    • StartCameraLog
      StartCameraLog CameraLogLevel CameraLogBufferSize
      Example: StartCameraLog 0x20 0x1000
    • StopCameraLog
    • PutsCameraLogEvent
  • StartRedirectUART, StopRedirectUART

Registration functions[]

Many event procedures are not registered by default. The following are known. Unless otherwise specified, they take no arguments and return 0 on completion.

Several of the registration functions have more than one possible name.

Early (most vxworks) cameras used the letters+underscores form. The Foo.Bar form was introduced on late vxworks or early dryos cameras, with the earlier form retained for compatibility. In newer cameras (dryos rel 43) the earlier form appears to have been dropped [1].

Note: Many of the *.Create functions only exist on newer cameras (dryos ?), while the alternate name appears to exist on both newer and older models.

SystemEventInit / System.Create[]

Basic System Functions Registers following Functions:

  • sprintf, Printf, CPrintf, CPutChar
  • Memory functions (memcpy, memset, memShow, AllocateMemory, FreeMemory)
  • Open, Close, Read, Write, Lseek
  • Fut functions (Fopen_Fut, Fclose_Fut, Fread_Fut, Fwrite_Fut, Fseek_Fut)
  • Task functions (CreateTask, SleepTask, ExitTask, ShowAllTaskInfo)
  • String functions (strlen, strcmp, atol)
  • GetLogToFile
  • GetBuildTime, GetBuildDate
  • GetFirmwareVersion
  • GetSystemTime, GetTimeOfSystem
  • MakeBootDisk, MakeScriptDisk
  • ExecuteEventProcedure
  • Peek8, Peek16, Peek32
  • Poke8, Poke16, Poke32
  • Dump, Dump32, SDump
  • Wait
  • StartWDT, StopWDT
  • exec
  • LoadScript, UnLoadScript, OpenForScrip
  • OpenConsole, CloseConsole
  • TakeSemaphore, DeleteSemaphore, GiveSemaphore, CreateCountingSemaphore
  • MonSelEvent, CreateProxyOfEventProcedure, ExportToEventProcedure
  • StartWDT
  • VerifyByte, CheckSumAll, EraseSignature, RomCheckSum
  • WriteToRom, EraseSectorOfRom
  • EraseLogSector
  • AdditionAgentRAM
  • MemoryChecker
  • TurnOffE1
  • sscanf
  • ...

UI_RegistDebugEventProc / UI.Create[]

Registers following Functions:

  • capture mode functions
    • ModeDialToMovie
      switch to Movie Record Mode
    • Still Image Record Mode
      • ModeDialToAuto
      • ModeDialToPortrait
      • ModeDialToKidsAndPets
      • ...
  • PTM_* functions
  • UIFS
    • UIFS_Capture
      start Capture in activ Record (Capture) Mode or switch to Record Mode from Playback
    • UIFS_SetDialStillRec
      switch to Still Image Record (Capture) Mode
    • UIFS_CaptureNoneStop
      switch to Still Image Record Mode in Continues Mode with Custom Timer
    • UIFS_SetDialPlay
      switch to Playback Mode (not under all conditions ?)
    • UIFS_SetDialMovieRec
    • UIFS_StartMovieRecord, UIFS_StopMovieRecord, UIFS_GetMovieRecoadableNumber
    • UIFS_PostModeDial
    • UIFS_SetCaptureModeToP
    • UIFS_ChangeShootState
    • UIFS_GetStillShotableNumber
    • UIFS_IsAvailableShots
    • UIFS_GetAvItem, UIFS_IsAvailableAvTvMode, UIFS_GetAvItemCount, UIFS_GetCurrentAvString
    • UIFS_GetTvItem, UIFS_GetCurrentTvString, UIFS_GetTvItemCount
    • UIFS_IsAvailableMovieRecOptZoom, UIFS_IsAvailableMovieRecDigZoom
    • UIFS_SetCradleSetting
    • UIFS_ShootSeqToUI
    • UIFS_MoveZoomTo
      set Optical Zoom Step as Number (depends on how much Zoom Steps Camera has)
      SD4000: 0-63 (Optical)
    • UIFS_OpenPopupStrobe, UIFS_ClosePopupStrobe, UIFS_IsAutoPopupDownStrobe, UIFS_MountExtFlash, UIFS_UnmountExtFlash
    • UIFS_WriteFirmInfoToFile
    • UIFS_StartClockMode, UIFS_EndClockMode
      show Fullscreen Clock
    • UIFS_ConnectVideo
    • UIFS_GetLastPath
    • UIFS_StopPostingUIEvent, UIFS_RestartPostingUIEvent
    • UIFS_IsAvailableServoAF
    • UIFS_DisconnectVideo
  • Button press functions
  • ...

RegisterProductTestEvent / SS.Create[]

registers PT_ functions, and enables the PT_* hooks

Note: present on vxworks + digic II (A540) missing on dryos + digic III / digic 4 (A470,SD990).


Registers following Functions:

  • EngDrvOut
  • EngDrvIn
  • EngDrvRead
  • EngDrvReadDump
  • EngDrvBits
  • Driver_EnableEventProc


"Mechnical" related Functions Registers following Functions:

  • IsLensOutside
  • DisableFocusLens
  • MoveFocusLensWithPosition
  • GetMechaShutterStatus
  • GetLensErrorStatus
  • MechaTerminate
  • GetIrisAv
  • TurnOnNdFilter
  • ...


Registers following Functions:

  • EF.*
  • ExecuteDefectRec
  • CrossDefDetect
  • CancelImager
  • ExecuteDefectRecAndSaveImage
  • SetDefectRecParam
  • QuietImager
  • ChangeGradeTable
  • ChangeImagerToDigiconMode
  • ChangeImagerToJetDraft
  • ...


Display related Functions

Registers following Functions:

  • DispDev_*
  • DispCon_*
  • LcdCon_*
  • ...


Registers following Functions:

  • OpLog.Start
  • OpLog.Stop
  • OpLog.Play
  • OpLog.Get
  • OpLog.ReadFromROM
  • OpLog.WriteToROM
  • OpLog.ReadFromSD
  • OpLog.WriteToSD


Registers following Functions:

  • ShowPhySwStatus
  • OnPrintPhySw
  • GetSwitchStatus
  • LEDDrive
  • GetSDDetect
  • SetSDPwrPort
  • i2c_write_event
  • ChangePowerState
  • ...


Registers following Functions:

  • EngApp.Delete
  • Scene.TestSunset
  • Scene.ForbidContiSceneDetect


Registers following Functions:

  • ExMem.View
  • ExMem.AllocCacheable
  • ExMem.FreeCacheable
  • ExMem.AllocUncacheable
  • ExMem.FreeUncacheable


FactoryMode / Debug / Log related Functions Registers following Functions:

  • GetCurrentMaximumLogSize
    GetCurrentMaximumLogSize returned 4096(0x1000)
  • GetLogData, GetLogDataOnlyAddMemory
  • EnableDebugLogMode, DisableDebugLogMode
  • PrintFirmVersion
  • IsLogOutType
  • IsNormalCameraMode
  • FADBGPrintf, FADBGSingal
  • InitializeAdjustmentSystem, ActivateAdjLog, PrintAdjTableMap, ShowDefaultAdjTableVersion, DumpAdjMirror, LoadParamDataFromAdjTableBin
  • AddTransparentMemory, RemoveTransparentMemory, DumpTransparentMemoryItem, AttachToTransparentMemory, ShowTransparentMemory, GetTransparentMemoryPosition
  • InitializeSoundRec, StartSoundPlay, FreeBufferForSoundRec, StartSoundRecord
  • ExecuteTestRec, ExecuteTestRecSw1
  • Factory Mode
    • SetFactoryMode
      Note: Set FactoryMode Flag in ROM. Camera will start in FactoryMode on Boot. In FactoryMode Camera does not show anything on Display and all Leds are off. To exit FactoryMode execute ClearFactoryMode and restart Camera.
    • ClearFactoryMode
      Clears FactoryMode Flag in ROM. Camera will start in Normal Mode on next Boot.
    • StartFactoryModeController
    • DisplayFactoryMode
    • UndisplayFactoryMode
  • SetDefaultRecParameter
  • InitializeDigicon, ExecuteDigicon, TerminateDigicon
  • DeviceUniqueIDCheckSum
  • RefreshDefectTableMirrorSetDurianMode
  • SetDurianMode, ClearDurianMode
  • GetdccdFilterValue
  • ...


Probably VxWorks only. Not available on SD4000.


Probably VxWorks only. Not available on SD4000.

See also: IDAPython/Tracing_calls/register_func.