So, because it was an unusually sunny morning here and that I never had got round to examining this:
Just to follow up on this, get_focus_state() (= FOCUS_STATE propcase) should indicate if AF was successful. http://chdk.wikia.com/wiki/PropertyCase has some notes.
I decided to forget about cutting power supply cables in half or moving anything from it's previous position / orientation and, instead, just repeated the same cycle, in M mode, of:
- preshoot -> usb_sync_wait -> sync shoot (via, reasonably, simultaneous opening of 7 port hub 5v port switches) -> switch to play -> download -> switch to record
After 59 cycles of that cam3 stopped responding. Downloading the romlog showed date from an earlier crash.
I then changed the cameraside sync_wait function to look like this:
function cmds.usb_sync_wait()
--e.g. to run !return mc:cmdwait('usb_sync_wait')
if get_focus_state() > 0 then
usb_sync_wait(1)
press('shoot_full')
write_status(true)
sleep(9000)
release('shoot_full')
else
write_status(false)
release('shoot_half') -->> if get_shooting is true from preshoot this is required
end
end
I hadn't set shutter, aperture or iso to anything in particular, related to the conditions, on the cameras & after executing:
!return mc:cmdwait('preshoot')
noted the following from their lcd's:
Cam1: shake symbol on, green focus box, overexposed
Cam2: shake symbol on, yellow! focus box, overexposed
Cam3: shake symbol on, yellow! focus box, overexposed
Cam4: shake symbol on, green focus box, overexposed
Cam5: shake symbol off, green focus box, under exposed
Cam6: shake symbol on, green focus box, overexposed
Cam7: shake symbol on, green focus box, overexposed
In multicam.lua, I have status directed to file, as follows:
preshoot() status:
true, {
[1]={
done=true,
status={
cmd="preshoot",
status=true,
},
failed=false,
},
[2]={
done=true,
status={
cmd="preshoot",
status=true,
},
failed=false,
},
[3]={
done=true,
status={
cmd="preshoot",
status=true,
},
failed=false,
},
[4]={
done=true,
status={
cmd="preshoot",
status=true,
},
failed=false,
},
[5]={
done=true,
status={
cmd="preshoot",
status=true,
},
failed=false,
},
[6]={
done=true,
status={
cmd="preshoot",
status=true,
},
failed=false,
},
[7]={
done=true,
status={
cmd="preshoot",
status=true,
},
failed=false,
},
}
i.e. get_shooting() was
true for all cams.
After executing the new
usb_sync_wait function, it's status was as follows:
usb_sync_wait() status
true, {
[1]={
done=true,
status={
cmd="usb_sync_wait",
status=true,
},
failed=false,
},
[2]={
done=true,
status={
cmd="usb_sync_wait",
status=false,
},
failed=false,
},
[3]={
done=true,
status={
cmd="usb_sync_wait",
status=false,
},
failed=false,
},
[4]={
done=true,
status={
cmd="usb_sync_wait",
status=true,
},
failed=false,
},
[5]={
done=true,
status={
cmd="usb_sync_wait",
status=true,
},
failed=false,
},
[6]={
done=true,
status={
cmd="usb_sync_wait",
status=true,
},
failed=false,
},
[7]={
done=true,
status={
cmd="usb_sync_wait",
status=true,
},
failed=false,
},
}
Indicating that focus had not been achieved for Cams2&3.
The cli-trace shows that current PC hard disk images were, of course, not overwritten for cams2&3:
___> !mc=require('multicam')
___> !mc:connect({list='C:/CHDKPTP/listfile'})
+ 1:Canon PowerShot SX150 IS b=\\.\libusb0-0001--0x04a9-0x3234 d=bus-0 s=9A95243
8E0A647E9AC0179DDC30582D5
+ 2:Canon PowerShot SX150 IS b=\\.\libusb0-0002--0x04a9-0x3234 d=bus-0 s=689D500
5104943C09E988E4EA8301E22
+ 3:Canon PowerShot SX150 IS b=\\.\libusb0-0003--0x04a9-0x3234 d=bus-0 s=E21B7D7
37E5D4291B5DD048230963CF6
+ 4:Canon PowerShot SX150 IS b=\\.\libusb0-0004--0x04a9-0x3234 d=bus-0 s=449A58C
8297A4CCDAD05327C6BDD6FC2
+ 5:Canon PowerShot SX150 IS b=\\.\libusb0-0005--0x04a9-0x3234 d=bus-0 s=A42727D
40A154E39945D810173405135
+ 6:Canon PowerShot SX150 IS b=\\.\libusb0-0006--0x04a9-0x3234 d=bus-0 s=6C13E0E
B6FF04FEF9D0F50BFAB5B9420
+ 7:Canon PowerShot SX150 IS b=\\.\libusb0-0007--0x04a9-0x3234 d=bus-0 s=F5C3101
2304A49F4B4D84B8736A8714C
___> !mc:start()
___> !return mc:cmdwait('rec')
rec
___> !return mc:cmdwait('lock_ptp_comms')
lock_ptp_comms
___> !return mc:cmdwait('preshoot')
preshoot -->> get_shooting() result in status file "true" for all cams
___> !return mc:cmdwait('usb_sync_wait')
usb_sync_wait -->> get_focus_state() is not greater than zero for Cams 2&3
___> !return mc:cmdwait('preshoot')
preshoot
___> !return mc:cmdwait('usb_sync_wait')
usb_sync_wait
___> !return mc:cmdwait('rec')
rec
___> !return mc:cmdwait('play')
play
___> !mc:download_images({lastimg=1,fmatch='JPG$'})
skip existing: 02/139___08/IMG_3203.JPG -->>because Cam2 did not take a shot
skip existing: 03/139___08/IMG_2180.JPG -->>because cam3 did not take a shot
___>
Subsequently, running 100 cycles (with the new usb_sync_wait function) of:
- preshoot -> usb_sync_wait -> sync shoot (via, reasonably, simultaneous opening of 7 port hub 5v port switches) -> switch to play -> download -> switch to record
operated without failure (Cam2&3 being ignored by the function from the sync'd shot).
Might it be reasonable to imagine that previously reported failures (at the sync'd shot stage) without romlog could be due to focus failure?