Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Why is exposure and other controls commented in the source code? #7

Open
pacoferre opened this issue Jul 27, 2021 · 6 comments
Open

Comments

@pacoferre
Copy link

Hello,

I'm trying to connect the camera to INDI Library for Astrophotography and it warns about lack of features (exposure).

So I dig in the source code and found code with #if 0 and return statements.

Is it possible to uncomment them and recompile again using a Raspberry PI 4b?... I'll give it a try.

@pacoferre
Copy link
Author

I was able to compile, but errors :(...

CC [M] drivers/media/i2c/veye327.o
drivers/media/i2c/veye327.c: In function ‘veye327_set_ctrl’:
drivers/media/i2c/veye327.c:301:36: error: ‘VEYE327_REG_ANALOG_GAIN’ undeclared (first use in this function); did you mean ‘V4L2_CID_ANALOGUE_GAIN’?
ret = veye327_write_reg(veye327, VEYE327_REG_ANALOG_GAIN,
^~~~~~~~~~~~~~~~~~~~~~~
V4L2_CID_ANALOGUE_GAIN
drivers/media/i2c/veye327.c:301:36: note: each undeclared identifier is reported only once for each function it appears in
drivers/media/i2c/veye327.c:302:12: error: ‘VEYE327_REG_VALUE_08BIT’ undeclared (first use in this function); did you mean ‘VEYE327_DEVICE_ID’?
VEYE327_REG_VALUE_08BIT, ctrl->val);
^~~~~~~~~~~~~~~~~~~~~~~
VEYE327_DEVICE_ID
drivers/media/i2c/veye327.c:301:9: error: too many arguments to function ‘veye327_write_reg’
ret = veye327_write_reg(veye327, VEYE327_REG_ANALOG_GAIN,
^~~~~~~~~~~~~~~~~
drivers/media/i2c/veye327.c:171:12: note: declared here
static int veye327_write_reg(struct veye327 *veye327, u16 reg, u8 val)
^~~~~~~~~~~~~~~~~
drivers/media/i2c/veye327.c:305:36: error: ‘VEYE327_REG_EXPOSURE’ undeclared (first use in this function); did you mean ‘V4L2_CID_EXPOSURE’?
ret = veye327_write_reg(veye327, VEYE327_REG_EXPOSURE,
^~~~~~~~~~~~~~~~~~~~
V4L2_CID_EXPOSURE
drivers/media/i2c/veye327.c:306:12: error: ‘VEYE327_REG_VALUE_16BIT’ undeclared (first use in this function); did you mean ‘VEYE327_DEVICE_ID’?
VEYE327_REG_VALUE_16BIT, ctrl->val);
^~~~~~~~~~~~~~~~~~~~~~~
VEYE327_DEVICE_ID
drivers/media/i2c/veye327.c:305:9: error: too many arguments to function ‘veye327_write_reg’
ret = veye327_write_reg(veye327, VEYE327_REG_EXPOSURE,
^~~~~~~~~~~~~~~~~
drivers/media/i2c/veye327.c:171:12: note: declared here
static int veye327_write_reg(struct veye327 *veye327, u16 reg, u8 val)
^~~~~~~~~~~~~~~~~
drivers/media/i2c/veye327.c:309:36: error: ‘VEYE327_REG_DIGITAL_GAIN’ undeclared (first use in this function); did you mean ‘V4L2_CID_DIGITAL_GAIN’?
ret = veye327_write_reg(veye327, VEYE327_REG_DIGITAL_GAIN,
^~~~~~~~~~~~~~~~~~~~~~~~
V4L2_CID_DIGITAL_GAIN
drivers/media/i2c/veye327.c:309:9: error: too many arguments to function ‘veye327_write_reg’
ret = veye327_write_reg(veye327, VEYE327_REG_DIGITAL_GAIN,
^~~~~~~~~~~~~~~~~
drivers/media/i2c/veye327.c:171:12: note: declared here
static int veye327_write_reg(struct veye327 *veye327, u16 reg, u8 val)
^~~~~~~~~~~~~~~~~
drivers/media/i2c/veye327.c:314:36: error: ‘VEYE327_REG_ORIENTATION’ undeclared (first use in this function); did you mean ‘ACPI_PLD_GET_ORIENTATION’?
ret = veye327_write_reg(veye327, VEYE327_REG_ORIENTATION, 1,
^~~~~~~~~~~~~~~~~~~~~~~
ACPI_PLD_GET_ORIENTATION
drivers/media/i2c/veye327.c:314:9: error: too many arguments to function ‘veye327_write_reg’
ret = veye327_write_reg(veye327, VEYE327_REG_ORIENTATION, 1,
^~~~~~~~~~~~~~~~~
drivers/media/i2c/veye327.c:171:12: note: declared here
static int veye327_write_reg(struct veye327 *veye327, u16 reg, u8 val)
^~~~~~~~~~~~~~~~~
drivers/media/i2c/veye327.c:319:36: error: ‘VEYE327_REG_VTS’ undeclared (first use in this function); did you mean ‘VEYE327_PIXEL_RATE’?
ret = veye327_write_reg(veye327, VEYE327_REG_VTS,
^~~~~~~~~~~~~~~
VEYE327_PIXEL_RATE
drivers/media/i2c/veye327.c:319:9: error: too many arguments to function ‘veye327_write_reg’
ret = veye327_write_reg(veye327, VEYE327_REG_VTS,
^~~~~~~~~~~~~~~~~
drivers/media/i2c/veye327.c:171:12: note: declared here
static int veye327_write_reg(struct veye327 *veye327, u16 reg, u8 val)
^~~~~~~~~~~~~~~~~
In file included from ./include/linux/device.h:15,
from ./include/linux/acpi.h:15,
from ./include/linux/i2c.h:13,
from drivers/media/i2c/veye327.c:20:
drivers/media/i2c/veye327.c:325:13: error: ‘client’ undeclared (first use in this function); did you mean ‘rlimit’?
dev_info(&client->dev,
^~~~~~
./include/linux/dev_printk.h:118:12: note: in definition of macro ‘dev_info’
_dev_info(dev, dev_fmt(fmt), ##VA_ARGS)
^~~
drivers/media/i2c/veye327.c: In function ‘veye327_init_controls’:
drivers/media/i2c/veye327.c:737:26: error: ‘VEYE327_VBLANK_MIN’ undeclared (first use in this function); did you mean ‘VEYE327_XCLK_FREQ’?
V4L2_CID_VBLANK, VEYE327_VBLANK_MIN,
^~~~~~~~~~~~~~~~~~
VEYE327_XCLK_FREQ
drivers/media/i2c/veye327.c:738:9: error: ‘VEYE327_VTS_MAX’ undeclared (first use in this function); did you mean ‘VEYE327_XCLK_FREQ’?
VEYE327_VTS_MAX - height, 1,
^~~~~~~~~~~~~~~
VEYE327_XCLK_FREQ
drivers/media/i2c/veye327.c:738:27: error: ‘height’ undeclared (first use in this function); did you mean ‘hweight8’?
VEYE327_VTS_MAX - height, 1,
^~~~~~
hweight8
drivers/media/i2c/veye327.c:739:22: error: ‘const struct veye327_mode’ has no member named ‘vts_def’
veye327->mode->vts_def - height);
^~
drivers/media/i2c/veye327.c:740:2: error: ‘hblank’ undeclared (first use in this function)
hblank = VEYE327_PPL_DEFAULT - veye327->mode->width;
^~~~~~
drivers/media/i2c/veye327.c:740:11: error: ‘VEYE327_PPL_DEFAULT’ undeclared (first use in this function); did you mean ‘NET_DCCP_DEFAULT’?
hblank = VEYE327_PPL_DEFAULT - veye327->mode->width;
^~~~~~~~~~~~~~~~~~~
NET_DCCP_DEFAULT
drivers/media/i2c/veye327.c:746:2: error: ‘exposure_max’ undeclared (first use in this function); did you mean ‘ioport_map’?
exposure_max = veye327->mode->vts_def - 4;
^~~~~~~~~~~~
ioport_map
drivers/media/i2c/veye327.c:746:30: error: ‘const struct veye327_mode’ has no member named ‘vts_def’
exposure_max = veye327->mode->vts_def - 4;
^~
drivers/media/i2c/veye327.c:747:2: error: ‘exposure_def’ undeclared (first use in this function)
exposure_def = (exposure_max < VEYE327_EXPOSURE_DEFAULT) ?
^~~~~~~~~~~~
drivers/media/i2c/veye327.c:747:33: error: ‘VEYE327_EXPOSURE_DEFAULT’ undeclared (first use in this function); did you mean ‘V4L2_EXPOSURE_AUTO’?
exposure_def = (exposure_max < VEYE327_EXPOSURE_DEFAULT) ?
^~~~~~~~~~~~~~~~~~~~~~~~
V4L2_EXPOSURE_AUTO
drivers/media/i2c/veye327.c:751:11: error: ‘VEYE327_EXPOSURE_MIN’ undeclared (first use in this function); did you mean ‘V4L2_EXPOSURE_MANUAL’?
VEYE327_EXPOSURE_MIN, exposure_max,
^~~~~~~~~~~~~~~~~~~~
V4L2_EXPOSURE_MANUAL
drivers/media/i2c/veye327.c:752:11: error: ‘VEYE327_EXPOSURE_STEP’ undeclared (first use in this function); did you mean ‘V4L2_EXPOSURE_AUTO’?
VEYE327_EXPOSURE_STEP,
^~~~~~~~~~~~~~~~~~~~~
V4L2_EXPOSURE_AUTO
drivers/media/i2c/veye327.c:756:6: error: ‘VEYE327_ANA_GAIN_MIN’ undeclared (first use in this function); did you mean ‘VEYE327_DEVICE_ID’?
VEYE327_ANA_GAIN_MIN, VEYE327_ANA_GAIN_MAX,
^~~~~~~~~~~~~~~~~~~~
VEYE327_DEVICE_ID
drivers/media/i2c/veye327.c:756:28: error: ‘VEYE327_ANA_GAIN_MAX’ undeclared (first use in this function)
VEYE327_ANA_GAIN_MIN, VEYE327_ANA_GAIN_MAX,
^~~~~~~~~~~~~~~~~~~~
drivers/media/i2c/veye327.c:757:6: error: ‘VEYE327_ANA_GAIN_STEP’ undeclared (first use in this function)
VEYE327_ANA_GAIN_STEP, VEYE327_ANA_GAIN_DEFAULT);
^~~~~~~~~~~~~~~~~~~~~
drivers/media/i2c/veye327.c:757:29: error: ‘VEYE327_ANA_GAIN_DEFAULT’ undeclared (first use in this function); did you mean ‘VEYE327_XCLR_MIN_DELAY_US’?
VEYE327_ANA_GAIN_STEP, VEYE327_ANA_GAIN_DEFAULT);
^~~~~~~~~~~~~~~~~~~~~~~~
VEYE327_XCLR_MIN_DELAY_US
drivers/media/i2c/veye327.c:760:6: error: ‘VEYE327_DGTL_GAIN_MIN’ undeclared (first use in this function); did you mean ‘VEYE327_DEVICE_ID’?
VEYE327_DGTL_GAIN_MIN, VEYE327_DGTL_GAIN_MAX,
^~~~~~~~~~~~~~~~~~~~~
VEYE327_DEVICE_ID
drivers/media/i2c/veye327.c:760:29: error: ‘VEYE327_DGTL_GAIN_MAX’ undeclared (first use in this function) VEYE327_DGTL_GAIN_MIN, VEYE327_DGTL_GAIN_MAX,
^~~~~~~~~~~~~~~~~~~~~
drivers/media/i2c/veye327.c:761:6: error: ‘VEYE327_DGTL_GAIN_STEP’ undeclared (first use in this function); did you mean ‘VEYE327_PIXEL_RATE’?
VEYE327_DGTL_GAIN_STEP, VEYE327_DGTL_GAIN_DEFAULT);
^~~~~~~~~~~~~~~~~~~~~~
VEYE327_PIXEL_RATE
drivers/media/i2c/veye327.c:761:30: error: ‘VEYE327_DGTL_GAIN_DEFAULT’ undeclared (first use in this function); did you mean ‘VEYE327_XCLR_MIN_DELAY_US’?
VEYE327_DGTL_GAIN_STEP, VEYE327_DGTL_GAIN_DEFAULT);
^~~~~~~~~~~~~~~~~~~~~~~~~
VEYE327_XCLR_MIN_DELAY_US
In file included from ./include/linux/clk.h:13,
from drivers/media/i2c/veye327.c:15:
drivers/media/i2c/veye327.c:775:21: error: ‘veye327_test_pattern_menu’ undeclared (first use in this function); did you mean ‘veye327_stop_streaming’?
ARRAY_SIZE(veye327_test_pattern_menu) - 1,
^~~~~~~~~~~~~~~~~~~~~~~~~
./include/linux/kernel.h:48:33: note: in definition of macro ‘ARRAY_SIZE’
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
^~~
In file included from ./include/linux/bits.h:22,
from ./include/linux/bitops.h:5,
from ./include/linux/kernel.h:12,
from ./include/linux/clk.h:13,
from drivers/media/i2c/veye327.c:15:
./include/linux/build_bug.h:16:51: error: bit-field ‘’ width not an integer constant
#define BUILD_BUG_ON_ZERO(e) ((int)(sizeof(struct { int:(-!!(e)); })))
^
./include/linux/compiler.h:238:28: note: in expansion of macro ‘BUILD_BUG_ON_ZERO’
#define __must_be_array(a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0]))
^~~~~~~~~~~~~~~~~
./include/linux/kernel.h:48:59: note: in expansion of macro ‘__must_be_array’
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
^~~~~~~~~~~~~~~
drivers/media/i2c/veye327.c:775:10: note: in expansion of macro ‘ARRAY_SIZE’
ARRAY_SIZE(veye327_test_pattern_menu) - 1,
^~~~~~~~~~
drivers/media/i2c/veye327.c:777:7: error: ‘i’ undeclared (first use in this function)
for (i = 0; i < 4; i++) {
^
drivers/media/i2c/veye327.c:786:7: error: ‘VEYE327_TESTP_COLOUR_MIN’ undeclared (first use in this function); did you mean ‘VEYE327_DEVICE_ID’?
VEYE327_TESTP_COLOUR_MIN,
^~~~~~~~~~~~~~~~~~~~~~~~
VEYE327_DEVICE_ID
drivers/media/i2c/veye327.c:787:7: error: ‘VEYE327_TESTP_COLOUR_MAX’ undeclared (first use in this function)
VEYE327_TESTP_COLOUR_MAX,
^~~~~~~~~~~~~~~~~~~~~~~~
drivers/media/i2c/veye327.c:788:7: error: ‘VEYE327_TESTP_COLOUR_STEP’ undeclared (first use in this function); did you mean ‘VEYE327_PIXEL_RATE’?
VEYE327_TESTP_COLOUR_STEP,
^~~~~~~~~~~~~~~~~~~~~~~~~
VEYE327_PIXEL_RATE
drivers/media/i2c/veye327.c:800:48: error: ‘props’ undeclared (first use in this function); did you mean
pr_ops’?
ret = v4l2_fwnode_device_parse(&client->dev, &props);
^~~~~
pr_ops
make[3]: *** [scripts/Makefile.build:279: drivers/media/i2c/veye327.o] Error 1

@mmxuxp
Copy link
Contributor

mmxuxp commented Apr 15, 2022

Sorry for the very late reply. You can ask questions in the future at forum.veye.cc.
The veye series mode is including isp function, no driver is needed to do ae operation.

@pacoferre
Copy link
Author

Sorry for the very late reply. You can ask questions in the future at forum.veye.cc. The veye series mode is including isp function, no driver is needed to do ae operation.

Thanks a lot. The problem occurs when trying to use the camera for astrophotography. The software needs to have control over the exposure and the driver does not allow it.

@uboatsalamander
Copy link

Sorry for the very late reply. You can ask questions in the future at forum.veye.cc. The veye series mode is including isp function, no driver is needed to do ae operation.

Thanks a lot. The problem occurs when trying to use the camera for astrophotography. The software needs to have control over the exposure and the driver does not allow it.

Greetings,

I have the same use case for the camera to use it under INDI. Maybe we can collaborate on this together?
I am not sure if the V4L2 is the right way however. Does it allow single frame exposure, or just video stream is possible?

salamander

@pacoferre
Copy link
Author

pacoferre commented Jun 9, 2022

Sorry for the very late reply. You can ask questions in the future at forum.veye.cc. The veye series mode is including isp function, no driver is needed to do ae operation.

Thanks a lot. The problem occurs when trying to use the camera for astrophotography. The software needs to have control over the exposure and the driver does not allow it.

Greetings,

I have the same use case for the camera to use it under INDI. Maybe we can collaborate on this together? I am not sure if the V4L2 is the right way however. Does it allow single frame exposure, or just video stream is possible?

salamander

Hello,

I tried to "fix" the code, also looking to other V4L2 drivers for IMX327, such as https://github.com/54shady/qop_kernel/blob/master/drivers/media/i2c/imx327.c, but finally I quit.

Regarding V4L2, I think it is perfectly valid (https://indilib.org/ccds/web-cameras.html), but, if the driver does not provide control for exposure... INDI cannot use that feature.

This summer perhaps I'll buy an USB camera, just to play with the kids and make some photos.

Best regards,

Paco

@uboatsalamander
Copy link

Hello Paco,

thank you, I will look it up.

As for the non-suitability, I thought that V4L2 maybe do not have control for the single exposure, but did test yesterday with cheap webcam and was able to make one second single frame captures with it in EKOS. So it is just missing from driver, same as most of the other controls, I will look up the source of the USB webcam driver and also the IMX327 driver you linked. I am pretty much noob as far as doing something under linux goes, but I am determined :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants