It's only fair that I should let you all know what I found so difficult.
Setting up the debugging environment. This page indilib.org/develop/developer-manual/163...ent-environment.html is the only one I found on the topic. There are two videos where the action runs at a pace I could barely keep up with. Some explanation of what each step does would have been useful as well. I've never used QTCreator before for example and the mouse flashing around the screen, presumably to point things out is just confusing. It took a while to understand when the mouse stopped and was clicked. Worse, it's not an up to date version of QTCreator and the new version has those buttons in very different places. Add in that on the latest versions of Ubuntu there is no KDESudo command as the page acknowledges, but it puts in a cryptic note that to install I have to run
sudo make -j8 install
. Do I have to do this every time I build the project to debug it or just when I'm actually deploying it ? So more detailed instruction on how to set up the environment would be very helpful, especially as it uses CMake which I for one had never used before. I asked a friend of mine who's a professional programmer (even wrote code for nuclear submarines !) and even he said he hardly ever uses CMake.
How a driver actually works and how to set properties etc. This was a minefield for me. I could not understand any of it for a week or more. The fact I had to call "define" completely passed me by. Fortunately a very kind guy, Rick, sent me a link to this page rickbassham.github.io/indi-dev-tutorials...0-project-setup.html . This was a revelation and things started to make sense. But why did it take me over a month of frustration to find this information. Even then it's not part of the development guide and so not available to all. This page should be made easily available to everyone from the project home page.
There is little or no advice on how client actually interact with drivers. I am still not clear on how this is done. I understand that properties are initially gathered from initProperties function which I guess is called as soon as the driver loads the driver (notice the words "I guess" !), then they are updated from the UpdateProperties function when the client tells the driver to physically connect. But then how do the values of the properties get updated after that ? If my dome moved and my dome gets that info from the hardware how is that published to the client. I assume the client asks for an update from time to time but I can find no explicit references as to how that mechanism works in the indi documentation.
There have been several responses to my questions that I should just look at already existing open source drivers to get answers to my questions. That's probably good advice to those who are very familiar with C++ . This is my first project in C++ . I'm an airline pilot by training though I have written a lot of code in the past, one of which gained me a lifetime achievement award for gliding, that has all been in Pascal (Lazarus) with a little VB. To then have to read someone else's poorly documented code in a language I'm trying to learn at the same time is not very productive of my time. Add to this that different developers have different styles and so scatter code around in different places and it was a real struggle. So this catch all phrase on the forum of "just read the open source drivers, it's all there" is disheartening and discouraging.
Folks should not need to go to the forum to get all this type of information. And I've seen several responses to others along the lines of "why don't you search the forum first before asking this common question again". To this I would make three comments 1) there are around 7000 topics on the forum. Put in a search term and you get swamped with topics that are not what you are after 2) if it is such a commonly asked question maybe it should be in the documentation, 3) I know for those in the know about Indi such repeated questions must be a pain and rather boring but that response is hardly going to endear the platform and community to a new user who is after all just trying to learn.
The website has a fair few broken links on it, or links that go nowhere. Currently when you click on Get INDI | Ubuntu you get a page that just says "Category Ubuntu" indilib.org/get-indi/download-ubuntu.html . This is not helpful and for anyone visiting the website who is maybe interested in trying Indi it gives the impression that the project is not active. I have found other links to the developers manual that give a 404 error. Again this just gives a bad impression.
I have taken quite some time to think about and write the post and I do it in the spirit of wanting Indi to succeed. I have spoke to more than one other person who has been put off by the lack of documentation and so rejected using Indi. One of those was another professional software developer. If I was to suggest anything which would make this project really become popular it would be documentation above development for now. Not documentation only a professional developer can read and understand but documentation someone like me can understand and feel confident with. I'm not a computer newby, I wrote a driver for my dome under ASCOM that took around a week to write and debug. I regularly do observing sessions of 5 or 6 hours and that driver has never failed me yet. So whilst I'm an amateur given the right information even I can write reasonable code.
I hope I haven't offended anyone with this post as I know how much work must have gone into Indi and I do appreciate it.