CHDK Wiki
Advertisement

Starting a draft page to document eventprocs this is an incomplete draft please update with your observations. Thread http://chdk.setepontos.com/index.php/topic,4417.0.html

Overview

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

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. Registering an event procedure with a name that is already registered replaces the existing eventproc.

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 http://chdk.setepontos.com/index.php/topic,5690.0.html

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.

see also Canon_Basic/Reference

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
  • CPrintf
  • 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)
  • Log functions (PutsCameraLogEvent, GetLogToFile, PutsCameraLogEvent, ShowCameraLog)
  • String functions (strlen, strcmp, atol)
  • GetBuildTime
  • GetFirmwareVersion
  • GetTimeOfSystem
  • MakeBootDisk
  • ExecuteEventProcedure
  • Peek16, Peek32
  • Poke16, Poke32
  • Dump, Dump32
  • Wait
  • exec
  • ...

UI_RegistDebugEventProc / UI.Create

Registers following Functions:

  • capture mode functions
  • PTM_* functions
  • UIFS_*
  • 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).

EngineDriver.Create

Registers following Functions:

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

Mecha.Create

"Mechnical" related Functions Registers following Functions:

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

Capture.Create

Registers following Functions:

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

DispDev.Create

Display related Functions

Registers following Functions:

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

OpLog.Create

Registers following Functions:

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

Driver.Create

Registers following Functions:

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

EngApp.Create

Registers following Functions:

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

FA.Create

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
  • WRITEADJTABLETOFROM
  • ...

drysh

Start DryOS Shell

RegisterShootSeqEvent

Probably VxWorks only. Not available on SD4000.

RegisterNRTableEvent

Probably VxWorks only. Not available on SD4000.

See also: IDAPython/Tracing_calls/register_func.

Advertisement