Ich habe versucht, das Bild in eine Datei zu speichern, aber weil der Aufnahme nicht zum Ende kommt, reicht der Speicherplatz nicht aus. Die Datei enthält also segmentation fault.
Das Porgramm berechnet die Anzahl der zu lesenden Bytes aus der Größe des Bildes, da man unendlich viele Bytes aus video0/1 lesen kann(es werden einfach immer neue Frames aufgenommen).. Lass Dir mal die Auflösung ausgeben, in dem Du printf("%dx%d: %d bytes\n", image->width,image->height, image->size); ans Ende der init_videodev() Funktion in capture.c schreibst.
Sorry kann Dir nichts zu I2C sagen, bei mir hats es sofort funktionert. Eventuell ist die Kamera falsch an den Bus angeschlossen.
Code:
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <linux/i2c.h>
#include <linux/i2c-dev.h>
#define RD_LEN 1
int main(int argc, char *argv[])
{
int fd, i;
struct i2c_rdwr_ioctl_data msgset;
struct i2c_msg msg[2];
unsigned char write = 0x9B; /* subaddress */
unsigned char read[RD_LEN];
long slave_addr = 0x0B;
msg[0].addr = slave_addr;
msg[0].flags = 0;
msg[0].len = 1;
msg[0].buf = &write;
msg[1].addr = slave_addr;
msg[1].flags = I2C_M_RD;
msg[1].len = RD_LEN;
msg[1].buf = read;
msgset.msgs = msg;
msgset.nmsgs = 2;
if((fd = open("/dev/i2c-0",O_RDWR)) < 0) {
perror("could not open device");
return fd;
} else {
printf("opened device i2c-0\n");
}
if(ioctl(fd,I2C_RDWR,&msgset) < 0) {
perror("ioctl");
return -1;
}
for (i = 0; i < RD_LEN; i++)
printf("0x%08x\n", read[i]);
return 0;
}
Wenn dieses Programm anstandslos funktioniert ist es höchswahrscheinlich ein Hardwareproblem.
MfG Mark
Lesezeichen