Quote "Or far more likely, it's not some exactly fixed time period, and all your careful tuning will become meaningless when some external factor changes."
The hope is ... once the solution is established for the instrumentation, all external factors will not be (intentionally) changed (if it ain't broke don't fix it or change it -- why I drive a 25-yo antique car and my phone is 8 yo). I would say the crux of my tuning attempt was to determine the rigidity and width of the delay value under the various files sizes my camera generates, and if the elegant generic solution never comes to pass, this solution could be a reasonable runner-up. It's not too bad I think. I'd say the delay is strongly fixed for a specific camera, and as you point out, SD card write time. In other words, finding that value (eg 925 ms S90 w Duarcell SD 4GB C4) is very reliable, so long as one don't touch the camera except for the shooting parameters.
Quote "I usually test with an ancient slow 1g SD card"
I understand you ... I test with a slow 10 yo USB 1.0 bench computer for like reasons.
Quote "no reason to put cycles on a good card"
While I did whine about SD wear somewhere near the beginning of my thread, modern SD cards use 32-bit ARMs and have very effective error correction & wear-leveling code. Get yourself a SanDisk, Kingston, or a 4GB Duracell (mine are made in Japan) -- about 10-15 bucks a shot. Some of these come with wear equations where you can predict the life of a card (in years) with a typical usage ... repetitive writes per day of a file size and number/day etc. For this kind of thing you're talking dozens of years easy, at one shot per minute all day, 10 MB, for a good quality high-capacity card.
Quote "this strikes me as a pointless exercise."
I strongly disagree. I think you still haven't quite understood what this was. I determined the window to be narrow and more, very stable, and that suggests to me that finalizing on my 925ms + 20% headroom (1.1s say) will be *extremely* reliable. It's really the determination a high confidence level at fastest transfer performance for lack of a generic rigorous solution // that's the gist.
Quote "Does shaving a few hundred ms off the cycle time actually make any real difference ? (while running on USB 1.1, no less!?)"
Absolutely yes. Apart for the sensitive electrooptics, one of the major reasons for choosing the USB 2.0 SX110 or S90 is for the transfer rate. The instrumentation existing S50 is USB 1.0. It prevents me from performing certain types of timed experiments. Furthermore, my bench is USB 1.0, but the instrumentation computer where this is all headed is USB 2.0. In fact, I went out today for a C10 SD and will be comparing its performance with the C4s I have now, just in the camera alone -- if I can get an extra few hundred ms in the camera on the 10MB file that would be very useful.
Quote "2) It needs more than just typing something in, some code has to be written and the concept verified."
I am indeed very mindful of that even when I come across as not.
Quote "That TODO has been in the code for at least 4 years and you're the first I've heard who cared about it."
Ahhh .. that's-so-sweet. But if you think about it ... it's your spectacular remote control performance that led me to care about it in the first place and encourage you for a complete clean solution.
4) Even if it's simple to implement and works, doing it across the ~200 camera/firmware variants will not be trivial.
I don't doubt it ... may I propose we start with D10, S90 & SX110 for the time being and see how it works? ... those generally cover most of the recent PowerShots that are out there I expect ... not to lose sight of course of this fantastic new performance level just achieved with CHDKPTP!
This is the loop I set to run overnight ...
function loop_myshoots(n)
for i=1,n do
myshoot(1/8,8,200,"C:\\CANON_S90\\")
sys.sleep(1000)
myshoot(8,8,200,"C:\\CANON_S90\\")
sys.sleep(1400)
myshoot(1/4,8,200,"C:\\CANON_S90\\")
sys.sleep(1600)
myshoot(1/4,8,200,"C:\\CANON_S90\\")
sys.sleep(1600)
myshoot(4,8,200,"C:\\CANON_S90\\")
sys.sleep(1200)
myshoot(1/2,3.5,1500,"C:\\CANON_S90\\")
sys.sleep(1100)
myshoot(2,5.6,200,"C:\\CANON_S90\\")
sys.sleep(1300)
myshoot(15,8,200,"C:\\CANON_S90\\")
sys.sleep(1300)
myshoot(1/4,3.5,200,"C:\\CANON_S90\\")
sys.sleep(1600)
myshoot(8,2.5,200,"C:\\CANON_S90\\")
sys.sleep(1400)
end
end
... it's been running for an hour at 925 ms delay .. let you know tomorrow how it pans out.