chdk

Lua interface to native function calls

From changeset 864 on, CHDK includes the ability to call Canon Event Procedures and arbitrary machine code functions. Together these are referred to as "native" calls.

As of CHDK 1.2, native function calls may be enabled in the miscellaneous menu. Because there are event procedures and other functions which could permanently damage the camera (for example, by erasing the Canon firmware) this feature is disabled by default and cannot be enabled with set_config_value. If you use a third party script which requires this interface, it is your responsibility to verify that it is safe. If a script attempts to use native call functions when they are not enabled, a Lua error will be triggered. You can check whether native calls are enabled from script using get_config_value.

For applications where enabling native calls in the menu is not practical, you can build CHDK with OPT_FORCE_LUA_CALL_NATIVE=1 set in buildconf.inc

Prior to release 1.2, native calls were only available as a compile time option.

This feature is only available in Lua, not ubasic.

The test script tstcallf.lua can be used to test this functionality, and also serves as an example.

Interface description

For both event procedures and pointer calls, all arguments after the function pointer or name must be numbers or strings. These are passed to the function as either 32 bit words or pointers to const C strings. If the called function attempts to write to a lua provided string, the results are undefined.

NOTES

call_func_ptr(fptr,...)

fptr is the address of a valid ARM or Thumb function, which uses the normal ARM C calling convention. If the function is thumb, the address must have the least significant bit set.

Any additional arguments are passed as describe above.

returns the R0 value after the call returns

NOTES

call_event_proc(name,...)

name is the name of a valid, registered Event procedure.

Any additional arguments are passed as describe above.

returns the value returned by ExecuteEventProcedure. This is -1 if the event procedure is not found (or otherwise cannot be executed), or the event procedures own return value. The event procedure may itself return -1, so this cannot be used to determine if the event procedure is available.

NOTES