It sounds like you are making pretty good progress.
As I understand it, the image is returned to the client as FITS when ExposureComplete(&PrimaryCCD) is used. The image buffer to write your image to is set with the uint8_t *image = PrimaryCCD.getFrameBuffer() line in the generic_ccd example. Then write your image data to the frame buffer ('image' in this case). If the parameters such as height and width are set correctly, a conversion to FITS is performed and the image is sent to the client.
Thanks, that's what I am doing . But the automatic conversion I did not quite get right.
Your comment made me realize now that in earlier tests i did get converted to fits, but it was almost random noise, im thinking its a problem with big- och little endian format. The INDI spec for CCD-buffer says uint8 but not really the endianess what I could find. ..
To clearify the README file a bit, the rows are in groups of three bytes. First line is repeated [Blue 8 low bits] [ Green1 8 low bits] [ Blue high 4 bits + Green1 high 4 bits << 4 ] ....
The even lines are [ G2 ] [ R ] [G2+R]
And the problem with getting a FITS-file in INDI is also working now. I just wrote the bytes in the image buffer to INDI i the wrong order.
The quality he was able to coax out of the rpicam back in 2016 blows my mind. Look at the image he got of Jupiter and compare that to the result he got with a ZWO. The new 12 MP camera should easily be on par then.
Atlas Pro AZ-EQ, ASI1600MM-Pro, ASI120MM-S, ES102ED, WO-Z61, Nikon D3300, ASI-EFW, ZWO LRGB,Ha,O3,S2 filter set