mirror of
https://github.com/ArduPilot/ardupilot.git
synced 2026-10-08 02:57:16 +08:00
The camera sensor is connected on i2c bus for config and on a parallel bus on the main SoC. Currently, the i2c driver remains userland, but this is intended to change in the future. The v4l2_subdev part is the way to go in the future and it is the mainline way of configuring i2c camera sensors on Linux. Currently only the max framerate is supported because it is the one that is to be used on the bebop optical flow.
55 lines
1.4 KiB
C++
55 lines
1.4 KiB
C++
/*
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
#include <AP_HAL/AP_HAL.h>
|
|
|
|
#if CONFIG_HAL_BOARD == HAL_BOARD_LINUX
|
|
#include "CameraSensor.h"
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <fcntl.h>
|
|
#include <unistd.h>
|
|
#include <stdlib.h>
|
|
#include <errno.h>
|
|
#include <sys/ioctl.h>
|
|
#include <linux/v4l2-subdev.h>
|
|
|
|
using namespace Linux;
|
|
|
|
bool CameraSensor::set_format(uint32_t width, uint32_t height, uint32_t format)
|
|
{
|
|
struct v4l2_subdev_format fmt;
|
|
int ret, fd;
|
|
|
|
fd = open(_device_path, O_RDWR);
|
|
if (fd < 0) {
|
|
return false;
|
|
}
|
|
|
|
memset(&fmt, 0, sizeof(fmt));
|
|
fmt.pad = 0;
|
|
fmt.which = V4L2_SUBDEV_FORMAT_ACTIVE;
|
|
fmt.format.width = width;
|
|
fmt.format.height = height;
|
|
fmt.format.code = format;
|
|
|
|
ret = ioctl(fd, VIDIOC_SUBDEV_S_FMT, &fmt);
|
|
if (ret < 0) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
#endif
|