The Focus control code for 550D/5Dmk2 doesn't work on 60D. Checking the disassembly of the firmware it seems that the complete AF/AE and Face detection parts were rewritten, and simply sending the data to PROP_LV_FOCUS is not enough.

There is a function called "AfCtrl_SetLensParameterRemote", which is probably the same that is called from EDSDK while zooming (for example you need to pass in the amount of focusing the same way: 1/2/3/0x8001/0x8002/0x8003). This function needs a quite large struct, that not only holds the amount you want to focus, but also some of the properties of the lens.

The function first writes the properties of the lens to memory address 0x549DC (quite "randomly"). From this address the most important is the first 4 bytes, as this describes the amount of rotation (it's a little-endian single-precision floating point number, the less the number the larger the rotation). The function of the other bytes are yet unknown.

The rewritten "lens_focus" function sends an appropriate struct to the "AfCtrl_SetLensParameterRemote" command, that will fill out the memory address 0x549DC mostly the way it should look. (I dumped this memory location after using the built-in auto focus, and tried to create an input that will make the end results the same). Take care that the new function holds some lens-specific data too, so it might not work with all of the lenses (I only tried with a Canon EF50/1.8).

To check what I've done here is the IDC file for 60D/1.0.9 can be downloaded from here: which contains some references to the new af control subroutines. Also check the new lens_focus function here:

Community content is available under CC-BY-SA unless otherwise noted.