Hi David,
Excellent initiative. I like your overall design as a starting point, so go ahead and count on our collaboration with anything related to PI/PCL development!
Thanks!
I am planning on supporting ASCOM out of the box
I understand your reasons. However, I'd suggest you design your modules with total independence on ASCOM or anything similar. With a proper top-down design and isolation between functional blocks, you can support it without depending on it. ASCOM is Windows-centric, which is something to be avoided for the reasons noted before.
Let me clarify this statement about ASCOM - I am not going to integrate with ASCOM directly. I will implement something like:
- IPixInsightCamera.h
And I will probably use the ICamera interface from ASCOM as my inspiration.
When I say I will support ASCOM out of the box, I simply mean that I will distribute the PixInsightASCOMCamera.h/cpp etc...
A first step could be answering a simple question: Which camera manufacturers provide drivers for Windows, Linux, and Mac OS X, and what do these drivers have in common? This would give us an idea of what we can expect and where we should be moving on.
I am a QHY dealer. We don't have anything but Windows drivers officially. However, Dr. Q (of QHY) releases the drivers as open source. The only thing that is not open source is the HEX Firmware. However, this is also freely available and is platform independent. There are a group of grassroots developers working on Linux support for QHY...He has committed to me that he wants to support multiple platforms.
SBIG provides Mac and Linux drivers.
QSI provides SDKs and some Linux support as well.
I am not sure about the other companies.
ExposeImage
exposureCount
exposureDuration
(cameraConfiguration)
cameraTemperature
filterIndex
isPreviewExposure
binningModeX
binningModeY
fileSavePath
fileNamePrefix
That looks like a very good start. Instead of ExposeImageProcess I'd name it just ExposeImage (the word Process is redundant IMO).
Makes sense
Perhaps even better, AcquireImage (has a more general meaning).
I started with "ImageAcquisition" ... and then I started thinking about what acquisition means...I was thinking that acquisition includes things like guiding and dithering etc... I think I am striving to keep this modular...and then we can rename ImageSession to AcquireImages? Imaging the serialized data of an AcquireImages:
<sessionName>Wide Field of Orion</sessionName>
<sessionDate../>
<executeProcesses>
<Autoguide command="calibrate"/>
<Autoguide command="guide"/>
<ExposeImage>
<count.../>
<duration.../>
<.../>
<.../>
<Autoguide command="dither"/>
<ExposeImage>
<count.../>
<duration.../>
<.../>
<.../>
<Autoguide command="stop"/>
<Slew.../> <- slew to focus star
<Focus.../>
This is really rough, but I hope it communicates some of what I am thinking.
One thing I am completely unsure of - can a process like Autoguide be run in a separate thread of the AcquireImages process?
cameraConfiguration requires further elaboration; I don't think it should be part of ExposeImage, it probably should be a global configuration object within your module. I'd add a fileNamePostfix parameter because there are guys out there that prefer postfixing (I know a few ) Other than these, your design looks very correct to me. Now you need an icon
This makes sense. I will remove the camera config from the ImageExpose process. There will just be a chooser to choose a camera that is already configured with the ImageAcquisition global preferences. There would be a dialog that pops up telling the user to configure the camera if there are none to choose.
Thanks for the feedback! Keep it coming as you see fit!